Pascal programozás, miért nem működik jól a 3.sor után a programom?
Sziasztok!
Néhány napja kezdtem el porgramozni, de most egy kis akadályba ütköztem..
Az alábbi feladatot próbálom megvalósítani:
Készítsünk programot, amely beolvas egy N természetes számot, majd billentyűzetről bekér N drb. természetes számot és ezeket a számokat összeadja, majd kiírja az eredményt. (Vegyünk egy változót, amit a program elején kinullázunk. Ehhez a cikluson belül mindig adjuk hozzá az éppen beolvasott számot. A szám beolvasása a ciklusban lehet N-szer ugyanabba a változóba, hiszen miután hozzáadtuk az összeghez, már nincs rá szükségünk, tehát használhatjuk a következő szám beolvasására.)
A gond az, hogy a 2. szám bekéréséig jól megy a program, de utána már hibás eredményt ad pl: 3+3=6 de helyette 5-öt ír ki(képen mellékelve).
Kép: [link]
A programkód:
program osszeadas;
var N,M,O,P:integer;
begin
N:=0;
write('Adja meg mennyi szamot szeretne megadni! ');
readln(M);
for O:=1 to M do
begin
write('Add meg a szamot! ');
readln(P);
writeln(N+P);
N:=P;
end;
end.
Előre is köszönöm bárki kommentjét, aki tudna segíteni.
Így van.
A ciklusváltozó azért kezdődjön inkább I-vel.
A tegezést és a magázást meg jó ha nem keverjük egy programon belül:
Esetleg ebben tudnál még segíteni?
Készítsünk programot, amely kiszámolja az első N drb. páratlan szám összegét. (A ciklus 1-től N div 2-ig menjen, majd a ciklusmagban vegyük a számok kétszeresét eggyel csökkentve.)
Már több mint egy órája próbálkozom, de sehogy nem jön össze..
tedd ki azt, amire eddig jutottál.
Ne ide, hanem vmi kódmegosztóra (pastebin, hastebin, stb).
Igen, a cikluson belül van az, hogy be sem kérsz semmit.
A ciklus előtt bekéred a darabszámot és ennyi.
Mivel dolgozzon a program?
Ok, az előző válaszomat ne vedd figyelembe.
A feladat az, hogy a 0 és N közötti természetes egész számokat kell összegezni, amennyiben azok páratlanok, tehát, azokat kettővel osztva maradék is képződik.
Tekintve, hogy a 0 és N közötti páratlanok számossága megegyezik N felével, így a ciklusváltozó (I) maximuma N div 2 lesz. Ennyi összegző (összeadó) művelet elég a végeredményhez.
Ha tehát N = 9, akkor 1,3,5,7 és 9 összegét kell kapjuk eredményül. Ehhez azt az összefüggést kell felhasználnunk, hogy a páratlan egész (integer) számok számok a mellettük levő páros számoktól eggyel többek (vagy kevesebbek), valamint azt, hogy a ciklusszámláló maximuma a kivánt számnak (N) éppen a fele.
Az egyenlet egyik oldalát emelem, ugyanannyival a másikat csökkentem. Ha a ciklusok száma feleződik, akkor a ciklusban az érték duplázódik. A dolog értelme a rövidebb futásidő.
A programod majdnem jó, csak sajnos ugyanazt a hibát követed el, amit korábban, hogy nem viszed tovább a korábbi összegzés(ek) eredményét. Plusz, hogy a Max változót belekevered a buliba, totál fölöslegesen.
Tehát,
Eredmeny:=(I+Max)*2-1;
helyett a megfelelő sor ez:
Eredmeny:= Eredmeny+(I)*2-1;
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!