Kezdőoldal » Számítástechnika » Programozás » Mért nem működik megfelelően...

Mért nem működik megfelelően a program pascalban?

Figyelt kérdés

program asd;

uses crt;

var a,b,d,e:integer;

c:char;

begin

clrscr;

writeln('Add emg az első számot');

readln(a);


writeln('Add meg a második számot');

readln(b);


writeln('Összeadni vagy kivonni akarod ' , a, '-t', ' és ' , b, '-t'?');

readln(c);


if c= '+'then writeln(a, ' ‚s ' , b, 'összege: ');

readln(d);

if d=a+b then writeln('helyes válasz');

if d<>a+b then writeln('A válasz helytelen');


if c= '-' then writeln(a, ' ‚s ', b, 'különbsége: ');

readln(e);

if e=a-b then writeln('A válasz helyes');

if e<>a-b then writeln('A válasz helytelen');



end.


2014. jún. 29. 19:42
1 2
 1/13 A kérdező kommentje:
Úgy értem, hogy ha a --t írom akkor nem csinál semmit elsőre, majd mikor beírok akármilyen számot kiírja hogy nem jó és utána kéri be a két szám különbségét és utána megint kiírja h helyes vagy sem
2014. jún. 29. 19:47
 2/13 anonim ***** válasza:
A két "if"-es blokkot begin-end közé kéne zárni, mert így a feltétel csak az első parancsra érvényes.
2014. jún. 29. 20:02
Hasznos számodra ez a válasz?
 3/13 A kérdező kommentje:
Sajnos úgy se jó :/
2014. jún. 29. 20:34
 4/13 SimkoL ***** válasza:
Ezt [link] nézd át !
2014. jún. 29. 20:35
Hasznos számodra ez a válasz?
 5/13 A kérdező kommentje:
Köszi :) Sokat segítettél vele :D
2014. jún. 29. 20:54
 6/13 SimkoL ***** válasza:
Szívesen :) Itt [link] még találsz egy pár egyszerű dolgot.
2014. jún. 29. 21:04
Hasznos számodra ez a válasz?
 7/13 tabaki ***** válasza:

Eltekintve SimkoL igazától, te még egy kissé hátrébb tartasz, ezért elsőként szánj egy kis időt az IF megértésére. Ha két lehetőséged van, akkor az első lehetőség bekövetkezése után minek vizsgálni, hogy a másik igaz-e? Itt van például ez a két sorod:

if d=a+b then writeln('helyes válasz');

if d<>a+b then writeln('A válasz helytelen');

Megvizsgálod, hogy egyenlő-e, azután -- akkor is, ha igen -- ellenőrzöd, hogy különbözik-e. Minek, amikor már tudod? Egy ilyen egyszerű esetben ez nem okoz fennakadást, de később rengeteg problémát okozhatnak az átgondolatlanul odaszórt feltételvizsgálatok. Ebben az esetben ennyi elég:

if d=a+b then writeln('helyes válasz') else writeln('A válasz helytelen');

A programod egyébként ettől (és a kiíratás pongyolaságaitól) függetlenül is számtalan sebből vérzik. Azt, hogy nem fordítható, egy fölösleges aposztróf okozza, de ennek a helyesbítése után is tökéletes értelmetlenségbe fullad az egész, megint csak az IF meg nem értésének köszönhetően. Láthatólag nem tudsz mit kezdeni azzal, hogy az IF után a pascal nem annyi utasítást hajt végre, amennyit szeretnél, hanem csak _egyet_. Ennek függvényében próbáld magyarra fordítani, hogy mit kérsz a programtól, és látni fogod, mi a baj.

A megoldás az, hogy ez a bizonyos "egy" utasítás lehet egy BEGIN és END közé fogott utasításcsoportból álló _összetett utasítás_ is, tehát mindazt, amit egy feltételhez rendelve akarsz megvalósítani, BEGIN és END közé kell írnod.

Mindjárt megpróbálom neked így megírni a programodat -- nem lesz olyan elegáns, mint SimkoL-é, de valahogy összehozom csupa IF-ből.

2014. jún. 30. 16:42
Hasznos számodra ez a válasz?
 8/13 A kérdező kommentje:
Igen ismerem az else-t csak azért próbáltam meg 2 feltétellel , mert először else-vel nem akart működni, de aztán rájöttem, hogy máshol volt a hiba és úgy már működött, de egyébként a programom már tovább bővítettem , habár még mindig nem tökéletes , mert egy következő utasításra lépéshez (úgy értem h bekéri a műveleti jel meg az eredmény kérdezés között vagy az eredmény kérdezés és a jó vagy nem jó válasz kiírása között többször meg kell nyomni az entert
2014. jún. 30. 17:16
 9/13 A kérdező kommentje:
itt a programom is ha kell: [link]
2014. jún. 30. 17:17
 10/13 tabaki ***** válasza:

Na jó. Első változat. Szerintem azt tudja, amit te szerettél volna, a következő feltételek mellett:

1. Linuxon futtatod (stimmelnek az ékezetes betűk).

2. Terminálban (látod az eredményt a lefutás után).

3. Jó szándékú a felhasználó (tényleg egész számokat és a lehetséges két egy karakteres műveleti jelet írja be.

(Az alulvonások természetesen nem kellenek, csak a behúzásokat helyettesítik. A tördelés ilyetén módja sem kötelező, csak az áttekinthetőséget szolgálja.)


program asd;

uses crt;

var a,b,d:integer;

c:char;

begin

clrscr;

write('Add meg az első számot: '); readln(a);

write('Add meg a második számot: '); readln(b);

write('Összeadni vagy kivonni akarod ' , a, '-t', ' és ' , b, '-t? '); readln(c);

if c='+' then

__begin

____writeln(a, ' és ' , b, ' összege: '); readln(d);

____if d=a+b then writeln('Helyes válasz.') else writeln('A válasz helytelen.');

__end

else

__begin

____writeln(a, ' és ' , b, ' különbsége: '); readln(d);

____if d=a-b then writeln('Helyes válasz.') else writeln('A válasz helytelen.');

__end;

end.


Második változat, jelentéktelen lépés az értelem és a bolondbiztosabb program felé. Értelmes változóneveket használ betűk helyett, és észreveszi, ha nem jó műveleti jelet kapott, billentyűütésig képernyőn tartja az eredményt. Mivel a helytelen számértékek továbbra is hibára futtatják, valóban használható programhoz mindent STRINGként kéne beolvasnod, átalakítanod, kiértékelned, és aszerint kezelned.


program asd;

uses crt;

var egyik,masik,tipp:integer;

muvelet:char;

begin

clrscr;

write('Add meg az első számot: '); readln(egyik);

write('Add meg a második számot: '); readln(masik);

write('Összeadni vagy kivonni akarod ' , egyik, '-t', ' és ' , masik, '-t? '); readln(muvelet);

if muvelet='+' then

__begin

____writeln(egyik, ' és ' , masik, ' összege: '); readln(tipp);

____if tipp=egyik+masik then writeln('Helyes válasz') else writeln('A válasz helytelen');

__end

else

__if muvelet='-' then

____begin

______writeln(egyik, ' és ' , masik, ' különbsége: '); readln(tipp);

______if tipp=egyik-masik then writeln('Helyes válasz') else writeln('A válasz helytelen');

____end

__else

____writeln('Nem értem!');

readkey;

end.

2014. jún. 30. 17:43
Hasznos számodra ez a válasz?
1 2

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!