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,
mám napsat program, který vypisuje řadu a na základě rozdílu předposledního a posledního člena v absolutní hodnotě ji ukončí. Řada je na obrazovku vypisována buď jako zlomky nebo jako reálná čísla.
Řada vypadá následovně: 
a podmínka pro ukončení:
je poslední člen řady a
člen jemu předcházející.
Epsilon bude na začátku zadán z klávesnce.
program rada;
var epsilon:real;
begin
writeln('Zadej epsilon');
readln(epsilon);Tady jsem skončila :(
Díky předem za pomoc.
Offline

Treba takhle nejak:
program rada;
var epsilon,cislo:real;
var n: integer;
begin
writeln('Zadej epsilon');
readln(epsilon);
write (0.5);
n:=2;
cislo:=1/n/(n+1);
while cislo >= epsilon do begin
write ('+',cislo);
inc(n);
cislo:=1/n/(n+1);
end
end.Ale s temi realnymi cisly to vypada trochu osklive, muzes tam nastavit formatovani treba takhle: write ('+',cislo:1:5);
nebo si to upravit na ty zlomky.
(omlouvam se, ze jsem sem dal ten prispevek po tom Tomovem, jeste jsem ho nevidel kdyz jsem to sem psal)
Offline
↑ Lumikodlak: Ne, že bych chtěl shazovat Tvé řešení, pokud se mýlím, tak se alespoň poučím. Neukončí se ten tvůj program právě tehdy když
?
Vzhledem k:
while cislo >= epsilon do begin
A nemělo by tam být něco jako
while abs(a(n-1)-a(n))>=epsilon do begin
a(x) by byla funkce, která vrací 1/(x*(x+1))
Offline

↑ TomDlask:
Ano, mas pravdu, uz jsem si vsimnul a zrovna jsem to prepisoval :-)
Jeste jednou se omlouvam, to co jsem psal predtim je spatne, melo by to vypadat spis priblizne takhle (za predpokladu ze se maji vypisovat cleny te rady, a ne jen ten soucet) :
program rada;
var epsilon,clen,minulyclen:real;
var n: integer;
begin
writeln('Zadej epsilon');
readln(epsilon);
n:=1;
clen:=1/n/(n+1);
write (clen);
inc(n);
minulyclen:=clen;
clen:=1/n/(n+1);
while minulyclen - clen >= epsilon do begin
write ('+',clen);
inc(n);
minulyclen:=clen;
clen:=1/n/(n+1);
end
end.Offline
↑ janca361: Obecně to zvýší n o jednu hodnotu výš, v tomto případě to je to samé jako
n:=n+1;
Offline

↑ TomDlask:
Díky moc, myslela jsem si to ;)
Další dotaz:
clen:=1/n/(n+1)
Nemělo by to být takto?
clen:=1/n*(n+1)
Offline
↑ janca361:
Oboje je správně, stačí si uvědomit toto:
Offline

↑ TomDlask:
Tak to se Lumikodlakovi omlouvám.
Vycházela jsem z toho, že řada je:
takže člen bude obecně takto:
Offline
↑ janca361: Ano, to je hodnota n-tého zlomku.
Offline

↑ janca361:
Jsem zvykly vyuzivat toho, ze prekladac vyhodnocuje nasobeni a deleni (a nektere jine operace) zleva doprava, tak jsem to napsal takhle neprehledne a nepremyslel jsem nad tim.
toto:
clen:=1/n/(n+1)
se prelozi stejne jako:
clen:=(1/n)/(n+1)
(to druhe je prehlednejsi, a je z toho lepe poznat ten vyraz, co psal Tom)
anebo muzes napsat (coz se prelozi jinak, ale to je jedno, tim se ted nezatezuj :-) )
clen:=1/(n*(n+1))
a to vypada vic jako tohle:
kdyz napises
clen:=1/n*(n+1)
tak prekladac to prelozi stejne jako: (protoze nasobeni a deleni maji stejnou prednost, tak se provede proste nejdriv to nalevo)
clen:=(1/n)*(n+1)
coz by ale bylo tohle a to uz je matematicky jiny vyraz:
Kdyz si nejsi jista, jaky vyraz z toho prekladac udela, tak tam muzes dat zavorky.
(mozna vysvetluju neco co uz vis)
Offline

↑ Lumikodlak:
Jak je to s předností (pořadím) provádění operací vím ;) Nevěděla jsem vztah, který napsal TomDash ↑ tady:, tak jsem se zeptala :) Od toho přece forum je, ne?
Offline