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