20.) Elemezzük a szöveges változókra érvényes műveleteket, függvényeket és eljárásokat.

 

A következőkben olyan programokat szeretnénk írni, amelyek szöveges változókat is kezelnek. A szöveges változókkal végezhető műveleteket és eljárásokat mutatja be a Szoveg nevű program:

 

Program Szoveg;

Uses NewDelay, Crt, CrtPlus;

Var A,B,C,D: String;

    I,N: Byte;

Begin

  TextMode(CO80);

  ClrScr;

  A:= 'alma';

  B:= 'fa';

  C:= a+b;

  WriteLn(C);

  n:= Length(C);

  WriteLn(N);

  D:= Copy(C,2,3);

  WriteLn(D);

  For I:= 1 To N Do WriteLn(C[I]);

  WriteLn(Ord(C[0]));

  Insert('vad',C,1);

  WriteLn(C);

  WriteLn(Pos('dal',C));

  Delete(C,4,4);

  WriteLn(c);

  Tunj;

  Varj;

End.

 

Szöveges változók között csak egyetlen művelet létezik, az összeadás, mely a két szöveg egymás után helyezését jelenti. A Length függvény a szöveges változó hosszát adja vissza. A Copy függvény első paramétere egy szöveg, melyből a második paramétertől kezdődően, a harmadik paraméter hosszban másolatot készít. A String úgy tárolódik, hogy a nulladik karakterének kódja a String hosszát jelenti. Az Ord függvény a karakter sorszámát adja vissza (a Chr függvény fordítottja), azaz a String hosszát. Az Insert eljárás első paraméterét, a második paraméterként megadott szövegbe, a harmadik paraméterben megadott helytől kezdve beszúrja. A Pos függvény az első paraméterként megadott szöveg helyét keresi a második paraméterként megadott szövegben. Visszaadott értéke a keresett szöveg első karakterének helye, ha ez 0, akkor a keresett szöveget nem találta. A Delete eljárás, az első paraméterként megadott szövegből, a második paraméterben megadott helytől kezdődően, a harmadik paraméterben megadott számú karaktert töröl.

 

 

 

21.) Írjunk programot, amely bekér egy szöveget, és fordítva írja ki.

 

Program Fordito;

Uses NewDelay, Crt, CrtPlus;

Var Szov: String;

    I,N: Byte;

Begin

  TextMode(CO80);

  ClrScr;

  Write('Kérem a szöveget: ');

  ReadLn(Szov);

  N:= Length(szov);

  For I:= N DownTo 1 Do Write(Szov[I]);

  Tunj;

  Varj;

End.

 

 

A programban egyetlen igazi újdonság az, hogy a For ciklust csökkenő értékekkel használja. Elemzésétől eltekintünk.

 

22.) Írjunk programot, amely egy beolvasott szöveg karaktereit a következőképpen alakítja át: a Space és a kódban előtte lévő karaktereket Space-szé alakítja, a számokat nem változtatja meg, a nagybetűből kisbetűt, a kisbetűből nagybetűt készít, egyéb karaktereket ponttal helyettesít.

 

A program több újdoságot is tartalmaz. Az első a Function, azaz függvény deklaráció. A függvény formailag nagyon hasonlít az eljárásra, csak itt van visszaadott érték, amelynek típusát a függvény neve után kettősponttal elválasztva le kell megadni. A programbeli Valt függvényt Char típusú paraméterrel kell meghívni, és Char típusú a visszaadatott érték is, azaz karakterből másik karaktert készít. A visszaadott értéket a végrehajtó részében kell megadni úgy, hogy a függvény nevét egy értékadás bal oldalán szerepeltetjük. Jelen esetben a Valt értékét egy Case szerkezettel a legcélszerűbb megadni. A Ch változó értékétől függően, négyféleképpen kap értéket a függvény. A külön le nem írt karakterek esetére az Else ág adja az értékeket. A betűváltások is tartalmaznak újdonságokat. A szelektor értékeket tartományként is leírhatjuk. Az Ord függvényt már ismerjük, a kisbetű a nagybetűs párjánál 32-vel nagyobb kódú, így állítottuk elő. Az UpCase függvény a kisbetűből nagybetűt készít.

 

Program Valto;

Uses NewDelay, Crt, CrtPlus;

Var ISzov,OSzov: String;

    I,N: Byte;

Function Valt(Ch: Char): Char;

Begin

  Case Ch Of

     #0..#32: Valt:=' ';

    ’0’..’9’: Valt:= Ch;

    'A'..'Z': Valt:= Chr(Ord(Ch)+32);

    'a'..'z': Valt:= UpCase(Ch);

    Else

    Valt:= '.';

  End;

End;

Begin

  TextMode(CO80);

  ClrScr;

  Write('Kérem a szöveget: ');

  ReadLn(ISzov);

  N:= Length(ISzov);

  OSzov[0]:= Chr(N);

  For I:= 1 To N Do OSzov[I]:= Valt(ISzov[I]);

  WriteXY(19,3,OSzov);

  Tunj;

  Varj;

End.

 

Az OSzov (Out Szov) létrehozása is érdekes. A hossza megadásával kezdjük, ami az ISzov (In Szov) hosszával megegyezik. Majd a karaktereit a vált függvény segítségével egyenkét hozzuk létre. Rövidebben a hosszbeállítás (N nélkül) Így nézne ki: OSzov[0]:= ISzov[0];. Ha csak egyetlen szöveges változóval akarnánk megoldani, akkor a Do utáni értékadás: OSzov[0]:= Valt(Iszov[0]); lehetne. Természetesen, ekkor ISzov-et kellene kiíratni.

 

23.) Írjunk programot, amely bekér egy szöveget, majd feladványkét kiírja magánhangzók nélkül, és addig kérdezi a felhasználót, amíg el nem találja a helyes választ.

 

Program Szoki;

Uses NewDelay, Crt, CrtPlus;

Var FSzov,VSzov: String;

    I,N: Integer;

Begin

  TextMode(CO80);

  ClrScr;

  Write('Kérem a szöveget: ');

  ReadLn(FSzov);

  ClrScr;

  N:= Length(FSzov);

  For I:= 1 To N Do

  If FSzov[I] In ['a','á','e','é','i','í','o','ó','ö','ő','u','ú','ü','ű',

                  'A','Á','E','É','I','Í','O','Ó','Ö','Ő','U','Ú','Ü','Ű'] Then

  Write('.') Else Write(FSzov[i]);

  Window(1,3,80,25);

  Repeat

    Write('Mi a tipped: ');

    ReadLn(VSzov);

  Until FSzov=VSzov;

  WriteLn('Eltaláltad');

  Tunj;

  Varj;

End.

 

 

A lista két új dolgot tartalmaz. Az egyik a halmaz megadásának egyik módját, amikor a halmaz elemeit szögletes zárójelbe téve felsoroljuk, mivel most karakterekről van szó ezért a karaktereket zárójelbe kell tenni. A másik a halmazba való tartozás relációja, melyet az In lefoglalt szóval fogalmazhatunk meg. Mint minden relációnak ennek az értéke is csak igaz vagy hamis lehet, ezért állhat az If feltételében.

 

24.) Írjunk programot, amely bekér egy szöveget, majd szavanként fordított sorrendben írja ki.

 

Program Szavalo;     {Nyomkövetéssel futtatni}

Uses NewDelay, Crt, Crtplus;

Const Max=10;

var Szov: String;

    N,I,J: Byte;

    Sz: Array[1..Max] Of String;

Begin

  TextMode(CO80);

  ClrScr;

  Write('Kérem a szöveget: ');

  ReadLn(Szov);

  N:= Length(Szov);

  J:= 1;

  For I:= 1 To N Do

  If Szov[I]<>' ' Then

  Sz[J]:= Sz[J]+Szov[I]

  Else Inc(J);

  For I:= J DownTo 1 Do WriteLn(Sz[I]);

  Tunj;

  Varj;

End.

 

 

A program a szavak számát a J változóban tárolja, melynek maximális értéke Max lehet. A szöveg szavakra bontáskor az Sz String-tömbbe kerülnek. A szöveg beírásakor nem szabad a szavakat egynél több Space-szel elválasztani, mert akkor üres szavakat is létrehoz. A fordított For ciklus oldja meg a fordított sorrendű kiírást.