Pascal kezdőknek IV.
Mindenek elôtt lássuk a múltkor adott feladat egyik lehetséges
megoldását:
Uses
Crt;
Var
a, b,
c:integer;
Begin
Clrscr;
Write('Kérem az első számot:
');
Readln(a);
Write('Kérem a második számot:
');
Readln(b);
Write('Kérem a harmadik számot: ');
Readln(c);
If((a*a)+(b*b)=(c*c))or((a*a)+(c*c)=(b*b))or((b*b)+(c*c)=(a*a))
then
Begin
Writeln('A
háromszög
derékszögű');
End
Else
begin
Writeln('A háromszög nem
derékszögű');
End;
Readkey;
End.
Ugye mindenkinek így
mûködik a program?
Az if
utasítás legfeljebb kétirányú
elágazást enged meg, de legtöbbször a kifejezés
értékétől függően kell az elágazást
meghatározni. A Pascal erre is ad megoldást a
CASE utasítás formájában.
Szintaxisa:
case kifejezés of
érték1:utasítás1;
érték2:utasítás2;
........
értékn:utasításn;
else
utasítás
end;
Az else ág
ugyanúgy használható, mint az if
parancsnál. Egy példán keresztül
könnyebb lesz az utasítás használatának
megértése. Nézzünk rá egy kicsit komolyabb
feladatot: Írjunk egy programot, amely egy pont
koordinátáit olvassa be, és kiírja, hogy a
koordinátarendszer melyik negyedébe esik a pont, ha a pont
éppen valamelyik tengelyre esik, azt is jelzi. Az x és y
változók tartalmazák a pont koordinátéit.
Lássuk magát a
programot:
Uses Crt;
Var x,y : real;
signx, signy :
integer;
Begin
ClrScr;
Write('x=');
ReadLn(x);
Write('y=');
ReadLn(y);
if x=0 then
signx:=0
else signx:=round(abs(x)/x);
if y=0 then signy:=0
else signy:=round(abs(y)/y);
case
(signx+1)*10+(signy+1)
of
22 :
WriteLn('Első
síknegyed');
20 :
WriteLn('Második
síknegyed');
0
: WriteLn('Harmadik
síknegyed');
2
: WriteLn('Negyedik síknegyed');
else WriteLn('A pont éppen tengelyre
esik');
end;
Readkey;
End.
A programhoz tartozik még egy kis magyarázat. Az abs(változó) függvény a változó abszulút értéket adja vissza. A round(változó) függvény a változó kerekített értékét adja vissza. Ha a tízedes rész 0.5-nél nagyobb, akkor felfelé fog kerekíteni.
Most lássunk még egy
példát: Írjunk egy programot amely bekéri az
osztályzatot és kiírja a minősítést.
Lássunk a feladat megoldását:
Uses Crt;
Var jegy :
integer;
Begin
ClrScr;
Write('Kérem az érdemjegyet:
');
ReadLn(jegy);
case
jegy of
1:
WriteLn('elégtelen');
2:
WriteLn('elégséges');
3: WriteLn('közepes');
4: WriteLn('jó');
5:
WriteLn('jeles');
else WriteLn('Hibás
érdemjegy');
end;
Readkey;
End.
Ehez a programhoz semmi
hozzáfüznivalom nincs, hiszen magáért beszél.
Most nézzünk egy olyan programot amelyben a
case-nek nem számot, hanem karaktert adunk meg. A
feladat: Írjunk egy programot amely bekéri az árú
minősítésének első betűjét, az árú
nevét és kiírja az árú nevét a
minősítéssel. Lassuk a programot:
Uses Crt;
Var kod :
char;
aru : string;
Begin
ClrScr;
WriteLn('Az árú
minősítése kitűnő(k), jo(j),
megfelelő(m)');
Write('Az árú
megnevezése: '); ReadLn(aru);
Write('A
minősítés kódja : ');
ReadLn(kod);
WriteLn;
Write(aru,'minősítése: ');
case kod
of
'K','k':
WriteLn('kitűnő');
'J','j':
WriteLn('jó');
'M','m': WriteLn('megfelelt');
else
WriteLn('Hibás adat');
end;
Readkey;
End.
Az utolsó feladatban
tartományokat adunk meg. A feladat: 0 és 100 bekérjük
a dolgozat pontszámát és megmondjuk az érdemjegyet.
A megoldás:
Uses Crt;
Var
pont :
0..100;
Begin
ClrScr;
WriteLn('0-100 közötti pontok
osztályzata');
Write('Az elért
pontszám: '); ReadLn(pont);
Write('A dolgozat
osztályzata : ');
case pont
of
90..100:
WriteLn('jeles');
70..89:
WriteLn('jó');
60..69:
WriteLn('közepes');
50..59:
WriteLn('elégséges');
0..49: WriteLn('elégtelen');
else
WriteLn('Hibás adat !');
end;
Readkey;
End.
Mára nem maradt más
hátra, mint a házifeladat. A feladat szerintem nagyon könyű.
A feladat: Olvassunk be egy számot és állapítsuk
meg, hogy 1..10, 11..100, 101..1000 tartományok közül melyikbe
esik vagy esetleg a tartományokon kívül van a
szám.
Ha valami gondotok van, akkor nyugodtan
írjatok és találunk rá megoldást! A
cím ahová
írhattok: magician@freemail.c3.hu
Jó feladatmegoldást kíván:
Magician