Kezdőoldal » Számítástechnika » Programozás » Pascal programozás, miért nem...

Pascal programozás, miért nem működik jól a 3.sor után a programom?

Figyelt kérdés

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.



2020. jún. 30. 11:13
 1/10 anonim ***** válasza:
100%

Itt a hiba:


N:=P;

2020. jún. 30. 11:35
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:
Köszönöm, rá is jöttem közben N:=N+P; -kell oda :D
2020. jún. 30. 11:45
 3/10 anonim ***** válasza:
100%

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


[link]

2020. jún. 30. 11:58
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:
Köszi!
2020. júl. 1. 18:22
 5/10 anonim ***** válasza:
100%
Jó lenne, ha már most hozzászoknál a beszédes változónevekhez. A ciklusváltozó lehet i, de az N legyen osszeg, az M darab vagy darabszam, a P meg mittomén bejovoadat, beolvasottszam, ilyesmi. Vagy ha tudsz angolul, akkor még jobb lenne angol változónevekhez hozzászokni.
2020. júl. 1. 19:55
Hasznos számodra ez a válasz?
 6/10 A kérdező kommentje:

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..

2020. júl. 2. 14:57
 7/10 anonim ***** válasza:
100%

tedd ki azt, amire eddig jutottál.

Ne ide, hanem vmi kódmegosztóra (pastebin, hastebin, stb).

2020. júl. 2. 15:20
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

Ha jól gondolom a for cikluson belül nem jó valami.. de nem tudok rá jönni :/


[link]

2020. júl. 2. 15:53
 9/10 anonim ***** válasza:

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?

2020. júl. 2. 16:28
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

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;

2020. júl. 2. 19:54
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!