Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
v pascalu na vstupu dostanu nějaké číslo n a program vypíše prvních n členů následující posloupnosti:
1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,......
Je to určitě triviální ale pokaždé když na vstupu napíšu například číslo 4, tak se mi nevypíše pouze 1,1,2,1, ale vypíše se 1,1,2,1,2,3,1,2,3,4,
Zkusil jsem už několik variant ale většinou jsem skončil u nekonečného cyklu nebo prázdného výstupu. Nemusíte psát rovnou řešení, za každou radu budu vděčný..
Offline
ahoj ↑ Pritt:,
zkus použít vzorec pro součet k členů aritmetické posloupnosti - a_1=1;d=1.
Offline
výpis kódu:
var i,cislo,x,y: integer;
.....
while x<cislo do
begin
for i:=1 to cislo do //cislo je promenna ze vstupu
begin
for y:=1 to i do
begin
write(y,',');
x:=x+1;
end;
end;
end;
.....
Při téhle podobě kódu mi program vypíše prázdný řádek
Offline
↑ Pritt:
No a čemu je rovno x v podmínce
while x<cislo do ?
Offline
↑ Pritt:
1.Před cyklem while pro jistotu přiřaď x := 0;
a hlavně přiřaď i := 1;
2.Vyhoď cyklus for i :=1 to cislo do ...
3.Aby se ti nevypsali i celé dílčí posloupnosti - mám na mysli 1,..1,2,..1,2,3,..1,2,3,4,.., tak je potřeba z cyklu
for y:=1 to i do
begin
write(y,',');
x:=x+1;
end;
vyskočit když už počet vypsaných čísel bude roven hodnotě cislo.
To zařídíš podmínkou
if x<cislo then
write(y,',')
else
Break;
4.Před koncovým end cyklu while zvyš čítač i. Tedy dopiš i := i+1;
Poznámka:
Úloha se dá naprogramovat i tak, že si nejdříve spočítaš kolik celých dílčích posloupností (oznacme jejich pocet třeba x) (viz.výše) musíš vypsat aby počet členů byl menší nebo roven zadané hodnotě cislo. (např. pro cislo=10 bude x=4, pro cislo=30 bude x=7)
výpočet hodnoty x vychází se součtu aritmetické řady 1,2,3,4,...
a je x := Trunc((sqrt(1+8*cislo)-1)/2);
Ve dvou vnořených cyklech pak vypisuješ tyto dílčí posloupnosti
(zkus sám)
Nyní už zbývá pouze dopsat z další dílčí posloupnosti tolik prvních čísel aby celkový počet byl roven hodnotě cislo.
ten se spočítá jednoduše takto:
x := cislo-x*(1+x) div 2;
A pak uz jen v cyklu for i := 1 to x do dopíšeš ty zbývající.
Výhoda tohoto postupu je v tom, že tělo programu se dá napsat na pouhých 7-mi řádcích.
Offline
Zdravím,
sice toto téma je vyřešené, ale výpočet n-tého členu uvedené posloupnosti se dá vypočítat přímo a to bez smyčky a bez podmínek (v jednom řádku):
Fg(n):=(2*n+round(sqrt(2*n))-round(sqrt(2*n))^2)/2
Pro vypsání části sekvence se dá zavolat funkce Fg(n) opakovaně s parameterem n od 1 až do zvolené hodnoty.
Offline