Kezdőoldal » Számítástechnika » Programozás » Pascal: Miért ugorja át a...

Pascal: Miért ugorja át a read parancsot?

Figyelt kérdés

Sziasztok.

Kell írnom egy komplikáltabb programot de abba a problémába ütköztem hogy mikor másodjára akarom egy tömb elemeit beolvastatni for ciklussal akkor a read parancson átmegy, persze akkor ha a tömb kitevője string, ha integer akkor működik. A program eleje felé is van egy ugyan ilyen ciklus ami hibátlanul megy és ezt másoltam át a program vége fel, persze a változók változtatásával. Miért lehet ez? miért megy integerrel és stringgel nem?

Turbo pascalt használok, free pascalba működne?


2016. dec. 12. 19:57
 1/8 anonim ***** válasza:
Nem tudjuk.
2016. dec. 12. 20:11
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
100%
Sokat segítene a kérdés megválaszolásában, ha a forráskódot bemásolnád egy kódfeltöltő oldalra (pastebin[pont]com, pastie.org,...) és a kapott linket megosztanád itt a fórum keretein belül.
2016. dec. 12. 20:20
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
#2 írtam privátba
2016. dec. 12. 21:08
 4/8 anonim ***** válasza:
Sikerült már?
2016. dec. 12. 22:42
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

Kedves kérdező: ez egy fórum, szóval ne privát üzenetbe küldd a forráskódot, mert azzal másokat is segíthetsz.


Idézném a leveledet (a teljes "forráskódra" (azért jelzem idézőjelek között, mert az indentálás inkonzisztenciája miatt kissé olvashatatlan volt) mutató linket - a kedvedért - kicsillagoztam - ennek oka majd a levélből talán érthető):

"Szia! Nem szeretném a programot nyilvánossá tenni, ez egy házi lenne és nem szeretném ha a többiek is rábukkannának, remélem nem gond. Feltöltöttem, itt a link:

********

Hogyha lejár a határidő akkor kirakom a fórumra is, csak addig nem szeretném míg nem jár le a határidő.

A program bekér 2 kívánságlistát, az elsőt amit a gyerek mond azt be tudja olvasni de amit később a szülő adna meg hogy mit venne a gyereknek nem akarja, átugrik a read parancson és sorba kiírja hogy 1...x elem.

Free pascalban már az elején megakad a program.

remélem tudsz egy kicsit segíteni.

Elsőre is köszi a segítséget!"


No tehát:

1. Free Pascal 3.0.0+dfsg-2 [2016/01/28] (64 bites xUbuntu 16.04-ból használva) alatt lefut a program (és igen, a második cikluson átfut).

2. A program elején az alábbi ciklus található:

[link]

a végén meg ez:

[link]

szóval nem nagyon hasonlítanak.


Hogy a második ciklus is ugyanúgy működjön, így kell kinéznie:

[link]


Bár kicsit szebben nézne ki így:

[link]

2016. dec. 13. 01:46
Hasznos számodra ez a válasz?
 6/8 tabaki ***** válasza:

Még egy kicsivel szebben: if j > 0


Egyébként meg -- igaz, nem láthatok bele a program rejtelmeibe, de -- nem értem ennek az ifnek a jelentőségét, ami miatt a javított változatban a beolvasás után a képernyőn azonnal felülíródik a nulladik kérdés. Így kívülről inkább az tűnik logikusnak, hogy a ciklus egyszerűen 1-ről induljon, és a kérdések sorban egymás alá kerüljenek, valahogy így:


x := 5;

y := 9;

GotoXY(x,y);

for j := 1 to szulo do

      begin

            Inc(y);

            Write(j,'. elem: ');

            ReadLn(b[j]);

            GotoXY(x,y);

      end;


Persze lehet, hogy ez a bizonyos nulladik elem más természetű, és ezért különleges esetként kezelendő, de ez a kódrészletből nem derül ki. Ebben az esetben viszont illendő lett volna néhány szóközzel törölni a beolvasott szöveget, hogy ne zavarja az ugyanott bekért következőt.

2016. dec. 13. 03:07
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:

Köszönöm a válaszokat.

Letöltöttem a free pascal 3.0.0-ás verzióját de sajnos mikor abba bemásolom a forráskódot egy exitcode 201-es hibaüzenettel kilép az utolsó cilkus előtt amit a turbo pascal-ban nem produkált. Kicseréltem az utolsó ciklust arra amit ajánlottatok de turbo pascalban sem akar rendesen működni.

A ciklusok elején az if-re azért volt szükségem (lehet ez az én turbo pascalom hibája) mert folyton átment az első cikluson és a másodikkal kezdte, így ezzel elértem azt hogy 1-ről induljon.

Viszot a free pascalban ugyan ezt produkálja, nem veszi az első ciklus read parancsát.

Én Win 7 Pro-n free pascal 3.0.0 és turbo pascal 7-tel próbálkoztam.

2016. dec. 13. 18:40
 8/8 tabaki ***** válasza:

Legelőször is olvasd fel magadnak hangosan a saját kérdésedet, legalább háromszor, hogy örökre bevésődjenek a tanulságai.

Megvan? Akkor engedelmeddel: Azt állítottad, hogy gyakorlatilag semmit sem módosítottál a cikluson, pedig alapvetően megváltoztattad a szerkezetét. Megállapítottad, hogy az egyetlen különbség a változók típusában van, holott ennek láthatólag semmi szerepe. Az ezerszer bonyolultabb feladatokra is alkalmas fordítóprogram cseréjétől vártál valami transzcendens megoldást, pedig ennek csak akkor lenne értelme, ha ismernéd a korlátait, és rá tudnál mutatni, hogy a programod hol ütközhet beléjük.

Hát EZÉRT kell mindig kódot is mellékelned, amikor tanácsot kérsz. Te már belelovaltad magad a problémába, ezért nem tudod elfogulatlanul megítélni sem, ismertetni sem: Nem magát a gondot-bajt közlöd, hanem az ezzel kapcsolatos saját feltételezéseidet.

Most megint itt tartunk. Fogalmam sincs, hogy mi az, ami a túlcsordulást okozza, de így nem is fog kiderülni -- lám, most meg a Free Pascal a hunyó. Azt meg el kell hinnünk becsszóra, hogy a kódrészleteket hibátlanul, a működésüket tökéletesen megértve igazítottad a helyükre, és merő bitpocsékolás lenne ezt ellenőrizhető formában bemutatni, hiszen a tökélyt gáncs nem érheti. Az iffel kapcsolatos magyarázatodból meg egy kukkot sem értek, csak azt, hogy nyilván megint az a nyavalyás TP a ludas...

Nyeld le azt a békát, hogy igenis, te is képes vagy hibázni, és ha a munkád eredménye nem úgy sül el, mint vártad, akkor a programodat kell megvizsgálni, nem pedig a hozzá fűzött kétes értékű kommentárjaidat. Elismerem, a Turbo Pascal már egy kissé divatjamúlt, ezért csak javasolható a Free Pascalra váltás, de legyen világos: A te szinteden még semmiféle lényegi különbséget nem volna szabad tapasztalnod a kettő között. Akárhogyan is, de a programodban van a hiba.

2016. dec. 14. 01:19
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!