Matematické Fórum

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

#1 05. 09. 2015 16:50

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

výpis v pascalu

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

  • (téma jako vyřešené označil(a) Pritt)

#2 05. 09. 2015 17:33

Jj
Příspěvky: 8756
Škola: VŠB, absolv. r. 1970
Pozice: Důchodce
Reputace:   599 
 

Re: výpis v pascalu

↑ Pritt:

Dobrý den.

Bez výpisu kódu programu těžko radit.


Pokud se tedy nemýlím.

Offline

 

#3 06. 09. 2015 11:22

Eratosthenes
Příspěvky: 2592
Reputace:   132 
 

Re: výpis v pascalu

ahoj ↑ Pritt:,

zkus použít vzorec pro součet k členů aritmetické posloupnosti - a_1=1;d=1.


Budoucnost patří aluminiu.

Offline

 

#4 07. 09. 2015 17:48 — Editoval Pritt (07. 09. 2015 19:24)

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

Re: výpis v pascalu

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

 

#5 07. 09. 2015 22:28

Eratosthenes
Příspěvky: 2592
Reputace:   132 
 

Re: výpis v pascalu

↑ Pritt:

No a čemu je rovno x v podmínce

while x<cislo do ?


Budoucnost patří aluminiu.

Offline

 

#6 08. 09. 2015 09:06

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

Re: výpis v pascalu

↑ Eratosthenes:

Tohle bylo celé špatně, už to mam. Díky za odezvu :)

Offline

 

#7 08. 09. 2015 09:37

Honzc
Příspěvky: 4551
Reputace:   241 
 

Re: výpis v pascalu

↑ 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

 

#8 08. 09. 2015 10:43

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 869
Reputace:   62 
 

Re: výpis v pascalu

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):

Code:

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.


LibreOffice Verze: 7.6.6.3, Maxima 5.47.0 (SBCL)

Offline

 

#9 08. 09. 2015 11:42

Pritt
Příspěvky: 394
Pozice: student
Reputace:   19 
 

Re: výpis v pascalu

Napsal jsem to variantou jak napsal Honzc:
for i:=1 to cislo do
begin
for y:=1 to i do
begin
x:=x+1;
if x <=cislo then write(y,',');
end;
end;


Každopádně dekuju za další nápady a vyzkouším.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson