6. PAscal Kifejezések A kifejezések operátorok és operandusok sorozatából áll. Az operátoroknak nevezzük a különféle műveleti jeleket, amelyek összekapcsolják a kifejezésben szereplő változókat, konstansokat és függvényhívásokat, tehát az ún. operandusokat. 6.1. Operátorok Pascal-ban kétfajta operátor használható. 1. Az operátort, amely két operandus között szerepel (ún. binary operator), két operandusú operátornak nevezzük: operadus1 operátor operandus2 Például: a + b két változó összege x * 2 változó és egy konstans szorzata 2. Az operátort, amely egy operandus előtt szerepel (ún. unary operator), egy operandusú operátornak nevezzük: operátor operandus Például: -a előjelváltás Azért, hogy a bonyolultabb kifejezések kiértékelése is egyértelmű legyen, meg kell ismerkednünk az elsőbbségi (precedencia) szabállyal, amely pontosan meghatározza a kifejezésekben a műveletek kiértékelési sorrendjét. A operátorok végrehajtási sorrendjét a 6.1 táblázat foglalja össze, ahol négy szintű elsőbbséget különböztetünk meg. Ebben a táblázatban az összes operátort felsoroltuk. Operátorok Precedencia szintje Operátor típusa @, not első unary *,/,div,mod,and,shl,shr második multiplikatív +,-,or,xor harmadik additiv 6.1. táblázat 6.2. Elsőbbségi szabály A kifejezések kiértékelésénél három elsőbbségi (precedencia) szabályt kell figyelembe venni. Nézzük meg általánosan ezt a három elsőbbségi szabályt: 1. Ha két különböző precedenciájú operátor között van az operandus, akkor a magasabb precedenciájú operátorhoz tartozik, tehát először az a művelet kerül végrehajtásra. 2. Ha két azonos precedenciájú operátor között van az operandus, akkor a tőle balra álló operátorhoz tartozik és az a művelet kerül végrehajtásra. 3. Ha a művelet zárójelezve van, akkor a zárójelben lévő műveletek kiér- tékelésének van elsőbbsége. 6.3. Operátorok csoportosítása Az operátorokat különböző típusú műveletek szerint csoportosíthatjuk: - aritmetikai operátorok, - bitenkénti logikai operátorok, - boolean operátorok, - relációk, - @ (pointer) operátor. - sztring összekapcsolás operátora, - halmaz műveleti operátorok 6.3.1. Aritmetikai operátorok Az aritmetikai operátorokat aritmetikai kifejezésben használjuk. Az operan-dusok lehetnek egész és valós típusúak. Vizsgáljuk meg a különböző típusú operandusokkal végzett műveletek eredményének a típusát is. A kétoperandusú aritmetikai operátorokat példákkal bemutatva az alábbi táblázatban foglaltuk össze: Operátor Művelet Egészekre Valósakra + összeadás 8 + 3 = 11 8.0 + 3 = 11.0 - kivonás 8 - 3 = 5 8 - 3.0 = 5.0 * szorzás 8 * 3 = 24 8.0 * 3 = 24.0 / osztás nincs értelmezve 8.0 / 3 = 2.66 div egész osztás 8 div 3 = 2 nincs értelmezve mod maradék képzés 8 mod 3 = 2 nincs értelmezve Csoportosítsuk az aritmetikai operátorokat az elsőbbségi szabály szerint: Elsődleges: *, / ,div, mod multiplikatív (szorzás, osztás) Másodlagos: + - additív (összeadás, kivonás) Vizsgáljuk meg az egészekre és a valósakra a különböző műveletek eredmé-nyének a típusát. Legyen általánosan a két operandus a és b. Az a+b, a-b, a*c műveleteknél, ha az a és a b egész típusú, akkor az eredmény is egész típusú lesz. 3+4 eredmény 7 Ha az a és a b közül valamelyik valós, akkor az eredmény mindig valós lesz. 3.0+4 eredmény 7.0 3+4.0 eredmény 7.0 Az a/b műveletnél az eredmény mindig valós, még akkor is ha a két operandus egész típusú. 6.0 / 3 eredmény 2.0 6 / 3 eredmény 2.0 A div az egészek osztása. A i div j műveletben az i és a j csak egész típusú lehet és az eredmény is egész típusú lesz. Hiba történik, ha a j tartalma zérus. 5 div 2 eredmény 2 A i mod j maradék képzés csak egész típusokra van értelmezve. Hiba történik, ha a j tartalma zérus. A mod segítségével könnyen vizsgálható az oszthatóság. Ha az i mod j eredménye 0, akkor ez azt jelenti, hogy a j maradék nélkül megvan az i-ben, tehát osztható j- vel. 10 mod 3 eredmény 1 12 mod 2 eredmény 0 12 mod 5 eredmény 2 A div és a mod valós operandusokra nincs értelmezve. Egyoperandusú aritmetikai operátorok: Operátor Művelet + pozitív előjel - előjelváltás Az pozitív előjel és előjelváltás eredménye egész típusú változó esetén egész típusú lesz, valós típus esetében pedig valós. A +a esetében az a tartalma változatlanul, -a esetében az tartalma ellenkező előjellel kerül felhasználásra. Ha az a tartalma -3 volt, akkor -a esetén +3 értékkel számolunk. a:=3; b:=2 + a; b tartalma 2 + (+3) = 2 + 3 = 5 lesz c:=2 - a; c tartalma 2 - (+3) = 2 - 3 = -1 lesz Vizsgáljuk meg a precedencia szabályt aritmetikai kifejezéseken keresztül 1. Két különböző precedenciájú operátor között lévő operandus a magasabb precedenciájú operátorhoz tartozik: a+b*c a b jobb oldalán *, bal oldalán + műveleti jel van, egyértelmű, hogy a b a szorzáshoz tartozik, mert a szorzásnak magasabb a precedenciája. A műveletek végrehajtási sorrendje 1. b*c 2. az eredményhez az a hozzáadódik. 2. Két azonos precedenciájú operator között lévő operandus a tőle balra álló operátorhoz tartozik. b+c/d*e a d jobb oldalán a * (szorzás), a bal oldalán / (osztás) műveleti jel van, tehát azonos precedenciájú operátorok vannak, ezért a d a tőle balra álló / operátorhoz tartozik. A műveletek végrehajtási sorrendje: 1. c/d, először az osztás történik meg, majd 2. az eredménynek az e-vel való szorzása következik, mert a szorzás magasabb precedenciájú, mint az összeadás, tehát az e felkerült a számlálóba 3. majd az eredményhez hozzáadódik a b. Képletté visszaírva a Pascal kifejezést: {EMBED Equation |} 3. Ha a művelet zárójelezve van, akkor a zárójelben lévő műveletek kiér- tékelésének van elsőbbsége. Tehát, ha el akarunk térni a precedenciától, akkor zárójeleznünk kell. Œrjuk át Pascal kifejezéssé az alábbi képletet: {EMBED Equation |} a képlet szerint a c változót d*e szorzattal kell osztani. Ezt kétfélekép- pen írhatjuk át 1. b+c/(d*e) A zárójel miatt először a d*e szorzat kerül először kiérté- kelésre, majd ezután következik a c-nek az eredménnyel való osztása, végül a b-nek a hozzáadása. 2. Ugyanazt az eredményt kapjuk, ha egyenként osztunk: b+c/d/e Az azonos precedencia miatt először a c-nek d-vel való osztása után az eredmény e-vel való osztása következik, végül az eredményhez hozzáadódik a b. Œrjuk át a Pascal kifejezéssé az alábbi képletet: {EMBED Equation |} Ha a számlálóban megadott összeget akarunk egy különbséggel osztani, akkor mindenképp zárójeleket kell használni: b+(c+d)/(e-g) Œrjuk át Pascal kifejezéssé az alábbi képletet: {EMBED Equation |} Ennél a képlet átírásnál is kell zárójelet alkalmazni. Az átírás két lehetséges formája: b+(c+d)/(e*g) b+(c+d)/e/g Gyakorlat: 1. Irjuk át az alábbi képletet Pascal kifejezéssé: a. {EMBED Equation |} x:=(y-2)/(a*y)+4*a/y; b. {EMBED Equation |} w:=(x/y + y/x)/(z-5*p); c. {EMBED Equation |} d:= (a + b)/(b + c)*sqrt(sqr(sin(x)) + 2*cos(x*x*x)); d. {EMBED Equation |} x:= -b + sqrt(b*b + 4*a*c); e. {EMBED Equation |} w:=3*a + exp((x+1)*ln(4)); f. {EMBED Equation |} z:= x + ln(y)/ln(2); 2. A Pascal kifejezést írjuk vissza képletté e:= a*b/c*d; {EMBED Equation |} e:= a*b*c/d; {EMBED Equation |} e:=a/d*b*c; {EMBED Equation |} e:= a*b/c/d; {EMBED Equation |} e:=a*b/(c*d); {EMBED Equation |} e:= a/b/c*d; {EMBED Equation |} e:= a/d*b/c; {EMBED Equation |} 3. Adjuk meg az alábbi kifejezések típusát Kifejezés típus eredmény 7 - 4 egész 3 3.0*9 valós 27.0 17 mod 7 egész 3 9/3 valós 3.0 29 div 5 egész 5 12.4/2 valós 6.2 5.2 div 5 hibás csak egész operandusokra értelmezett 6 mod 3.0 hibás csak egész operandusokra értelmezett 6.3.2. Bitenkénti logikai operátorok A bitenkénti logikai műveletek egész típusú operandusokra értelmezettek és az eredmény szintén egész típusú. Operátor Művelet not bitek szerinti negáció (tagadás) and aritmetikai és or aritmetikai vagy xor aritmetikai kizáró vagy shl eltolás balra (shift left) shr eltolás jobbra (shift right) Példa a műveletekre: not művelet: a bitek szerinti negáció az operandus minden bitjét negáltja, ami azt jelenti, hogy ahol 1 volt ott 0 lesz. not 54 = 201 Gépi ábrázolásban: 54 = 0011 0110 not 54 = 1100 1001 eredménye 128+64+8+1 = 201 (-55) and művelet: az aritmetikai és kapcsolat a két operandust összehasonlítja, ahol mindkét helyen 1 volt, ott 1 lesz, különben 0 lesz az eredményben. 54 and 20 = 20 Gépi ábrázolásban: 54 = 0011 0110 20 = 0001 0100 54 and 20 = 0001 0100 = 16+4 = 20 or művelet: az aritmetikai vagy kapcsolat eredményeként ott lesz 1-es, ahol valamelyik operandusban 1 volt, csak ott lesz 0, ahol mind a kettőben 0 volt. 38 or 104 = 110 Gépi ábrázolásban: 38 = 0010 0110 104 = 0110 1000 38 or 104 = 0110 1110 = 64+32+8+4+2 = 110 xor művelet: aritmetikai kizáró vagy esetében ott kapunk 1-et, ahol a két operandusban 0 1 vagy 1 0 volt és 0-át kapunk 0 0 vagy 1 1 esetében. Ez azt jelenti, hogy az eltérések helyén 1, azonos értékeknél pedig 0 lesz az eredmény. 38 xor 104 = 78 Gépi ábrázolásban: 38 = 0010 0110 104 = 0110 1000 38 xor 104= 0100 1110 = 64+8+4+2 = 78 shl művelet: a megadott számú bittel az operandus bitjeit eltolja balra. 34 shl 2= 136 Gépi ábrázolásban: 34 = 0010 0010 34 shl 2 = 1000 1000 = 128+8 = 136 shr művelet: megadott számú bittel az operandus bitjeit eltolja jobbra. 36 shr 2 = 9 Gépi ábrázolásban: 36 = 0010 0100 36 shr 2 = 0000 1001 = 8+1 = 9 Futtassuk le a BIT.PAS programot a példaként megadott számokkal. program bit; var a,b,c:integer; begin writeln('Bitenkenti logikai muveletek'); writeln(' not a'); write(' a = '); readln(a); writeln(' not ',a:4,' = ',not a); writeln(' a and b '); write(' a = '); readln(a); write(' b = '); readln(b); writeln(a:4,' and ',b:4,' = ',a and b); writeln(' a or b '); write(' a = '); readln(a); write(' b = '); readln(b); writeln(a:4,' or ',b:4,' = ',a or b); writeln(' a xor b'); write(' a = '); readln(a); write(' b = '); readln(b); writeln(a:4,' xor ',b:4,' = ',a xor b); writeln(' a shl b'); write(' a = '); readln(a); write(' b = '); readln(b); writeln(a:4,' shl ',b:4,' = ',a shl b); write(' a shr b '); write(' a = '); readln(a); write(' b = '); readln(b); writeln(a:4,' shr ',b:4,' = ',a shr b); end. 6.3.3. Boolean operátorok A boolean típusú változók a boolean operátorokkal boolean eredményt hoznak létre. A boolean operátorokat az alábbi táblázat foglalja össze: Operátorok Műveletek not logikai negálás and logikai és ( logikai szorzás = multiplikativ művelet) or logikai vagy (logikai összeadás = additív művelet) xor logikai kizáró vagy (additív művelet) not A A negálás azt jelenti, hogy a not operátor mögött megadott boolean változó tartalma az ellenkezőjére változik, ha igaz volt, hamis, ha hamis volt igaz lesz. A not A TRUE FALSE FALSE TRUE A and B Az and csak akkor ad igaz eredményt, ha a két boolean változó az A és a B tartalma igaz volt. Hamis lesz az eredmény, ha a két változó közül legalább az egyik hamis. A B A and B TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE A or B Az or (logikai vagy) akkor ad igaz eredményt, ha a két boolean változó közül legalább az egyik tartalma igaz, csak akkor lesz hamis, ha mindkét boolean változó tartalma hamis. A B A or B TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE A xor B Az xor (logikai kizáró vagy) akkor ad igaz eredményt, ha a két boolean operandus tartalma különböző és akkor ad hamis eredményt, ha a két operandus tartalma megegyezik, tehát mindkettő igaz, vagy mindkettő hamis. A B A xor B TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE A precedencia szabály a logikai kifejezésekre is vonatkozik. Értékeljük ki az alábbi logikai kifejezéseket, ha a logikai változók az alábbi értéket tartalmazzák: A :=false; B :=true; C :=true; D :=false; 1. A and B or C a kifejezés kiértékelésének a sorrendjét a kapcsos zárójel mutatja: {EMBED Equation |} 2. A or B and C or D {EMBED Equation |} 3. (A or not B) and (C or B) {EMBED Equation |} 4. (A or B ) and (C or D) Határozzuk meg a kiértékelés sorrendjét, számítsuk ki a kifejezés értékét és hasonlítsuk össze a bool.pas program futási eredményével. Futtassuk le a BOOL.PAS programot a példában megadottakkal, valamint más adatokkal is és értékeljük ki az eredményt. A BOOL.PAS program bemutatja, hogyan lehet boolean értéket beolvasni. program bool; var A,B,C,D : boolean; s : string; R1,R2,R3,R4 : boolean; begin writeln('Boolean muveletek'); writeln('Adat: true vagy false lehet'); write('A = '); readln(s); if s='true' then A:=true else A:=false; write('B = '); readln(s); if s='true' then B:=true else B:=false; write('C = '); readln(s); if s='true' then C:=true else B:=false; write('D = '); readln(s); if s='true' then D:=true else D:=false; R1:=A and B or C; R2:=A or B and C or D; R3:=(A or not B) and (C or B); R4:=(A or B) and (C or D); writeln('A and B or C = ',R1); writeln('A or B and C or D = ',R2); writeln('(A or not B) and (C or B) = ',R3); writeln('(A or B) and (C or D) = ',R4); end. 6.3.4. Relációs (összehasonlító) operátorok A reláció operátorok különféle egymással kompatibilis típusú kifejezések (aritmetikai, sztring stb.) összehasonítására szolgálnak. Az összehasonlító eredmény igaz, ha a reláció teljesül, különben hamis. A relációs operátorok: = egyenlő <> nem egyenlő < kisebb > nagyobb <= kisebb vagy egyenlő >= nagyobb vagy egyenlő Példák relációkra: A változók pillanatnyi tartalma a:=1.2; i:=2; j:=3; k:=4; x:=5.3; y:=-1.2; eps:=0.005; (i+j) = 5 értéke true, mivel 5 = 5 (a+1)*k > x értéke true , mivel 8.8 > 5.3 abs(x-y) < 1.0e-6 értéke false, mivel 6.5 > 1.0E-6 (x-eps) <= a értéke false, mivel 5.295 > 1.2 i <> j értéke true, mivel 2 <> 3 Futtassuk le a REALACIO.PAS programot a példában megadottakkal, valamint más értékekkel is és értékeljük ki az eredményt. program relacio; var i,j,k : integer; a,x,y,eps: real; begin write('i = '); readln(i); write('j = '); readln(j); write('k = '); readln(k); write('a = '); readln(a); write('x = '); readln(x); write('y = '); readln(y); write('eps = '); readln(eps); write(' (i+j)=5 '); if (i+j)=5 then writeln(' true ') else writeln(' false '); write(' (a+1)*k > x '); if (a+1)*k > x then writeln(' true ') else writeln(' false '); write(' abs(x-y) <1.0e-6 '); if abs(x-y) <1.0e-6 then writeln(' true ') else writeln(' false '); write(' (x-eps) <= a '); if (x-eps) <= a then writeln(' true ') else writeln(' false '); write(' i<>j '); if i<>j then writeln(' true ') else writeln(' false '); end. 6.3.5. Pointer operátorok A pointer operátor a @ és a ^. Ezek egyoperandusú operátorok, amelyek elsődleges prioritással rendelkeznek: @a p^ A @ operátor bármilyen típusú operandus címét jelenti. A példában a @ az a változó címét jelenti. A ^ jelet pointer változó esetén lehet használni. A példában a p^ jelenti a pointer által mutatott objektumot. 6.3.6. Sztring összekapcsolás operátora A sztringeknél csak a + műveletet alkalmazhatjuk. Ezen sztring operátor neve: az összefűzés. Az összefűzött sztring hossza sem haladhatja meg a 255 karaktert. 'Feladat' + ' megoldasa' --> 'Feladat megoldasa' Természetesen sztring típusú változókat is összefűzhetünk, ezt mutatja be a FUZ.PAS program: program fuz; var s1,s2,s3: string; begin s1:='Ma'; s2:='hideg'; s3:=s1+' '+s2+' van.'; writeln(s3); end. Az s3 tartalma: Ma hideg van. 6.3.7. Halmaz műveleti operátorok A halmazokkal is végezhetünk műveleteket. A kifejezésben az operandu- soknak halmazoknak kell lenni, az eredmény is halmaz típusú lesz. A halmazokra az alábbi kétoperandusú operátorok használhatók: + halmazok egyesítése (uniója) * halmazok metszete - halmazok különbsége A halmazműveletek precedenciája: elsődleges: * másodlagos: +, - A halmazok metszete: X*Y Az X és Y halmaz metszetének (közös része) eredménye olyan halmaz, melynek elemei az X-nek és a Y halmaznak is elemei. Például: X halmaz elemei: a,b,c,d Y halmaz elemei: a,c,e,f akkor az X*Y eredménye [a,c] halmaz, mert ezek az elemek mind a két halmazban megtalálhatók, ez az ún. közös része a két halmaznak A halmazok egyesítése: X+Y Az X és Y halmaz egyesítésének eredménye a két halmaz elemeit tatalmazza. A közös elemek csak egyszer szerepelnek. X+Y eredménye az [a,b,c,d,e,f] halmaz. A halmazok különbsége: X-Y Az X és Y halmaz különbsége olyan halmaz, amelynek minden eleme az első halmaznak és nem eleme a második halmaznak. X-Y eredménye [b,d] halmaz. Értékeljük ki az alábbi halmazkifejezést, ha: AH halmaz elemei: a,b,c,d BH halmaz elemei: a,c,e,f CH halmaz elemi : a,g,h DH halmaz elemei: b,f AH+BH*CH-DH A kiértékelés sorrendje a precedencia szabály figyelembevételével a. BH*CH, eredmény halmaz [a] b. az eredmény halmazhoz hozzáadva AH, az eredmény [a,b,c,d] c. az eredmény halmazból levonva DH, az eredmény halmaz [a,c,d] Futtassuk le a HALMAZ1.PAS progamot, amely az előző gyakorlatban kiértékelt halmazkifejezés tartalmát kiírja a képernyőre. program halmaz1; type abc=(a,b,c,d,e,f,g,h); hh= set of abc; var AH,BH,CH,DH,RH: hh; i:abc; begin AH:=[a,b,c,d]; BH:=[a,c,e,f]; CH:=[a,g,h]; DH:=[b,f]; RH:=AH+BH*CH-DH; write('Az eredmeny halmaz elemei: '); for i:=a to h do begin if i in RH then begin case i of a: write('a'); b: write('b'); c: write('c'); d: write('d'); e: write('e'); f: write('f'); g: write('g'); h: write('h'); end; end; end; writeln; end. A futtatás eredménye: Az eredmeny halmaz elemei: acd 6.3.7.1. Halmazokra vonatkozó vizsgálatok Két halmazról megállapíthatjuk, hogy egyenlőek, ill. nem egyenlőek, vagy részhalmaza egyik a másiknak. A halmazokra az alábbi relációk használhatók: = egyenlő, <> nem egyenlő, <= részhalmaz { a jel bal oldalán álló halmaz a jobb oldalon álló halmaz részhalmaza. } >= részhalmaz { a jobb oldalon álló halmaz a bal oldalon álló halmaz részhalmaza. } A halmazra vonatkozó 'eleme?' vizsgálat: ha (halmazelem in halmaz) igaz, akkor { benne van a halmazban } különben { nincs benne a halmazban} in az eredmény boolean típusú, akkor igaz, ha az in kulcsszó bal oldalán álló halmazelem a jobb oldalon álló halmaznak eleme. Érdemes megjegyezni, hogy a halmazműveletek általában gyorsak, és a forráskódot is tömörebbé teszik. A HALMAZ2.PAS programban tanulmányozzuk a halmaztípus használatát, a halmazokon végzett műveleteket és értékeljük ki az eredményt. program halmaz2; type napok=(hetfo,kedd,szerda,csutortok, pentek,szombat,vasarnap); het = set of napok; var munkanap,piheno_napok, teljes_het: het; rendel, nem_rendel,szabad_vagyok :het; begin teljes_het:=[hetfo..vasarnap]; szabad_vagyok:=[szerda]; piheno_napok:=[szombat,vasarnap]; if teljes_het >= piheno_napok then writeln('A teljes_het tartalmazza a piheno napokat'); munkanap:=teljes_het-piheno_napok; if munkanap <= teljes_het then writeln('A munkanap reszhalmaza a teljes_hetnek'); rendel:=[hetfo,szerda,pentek]; nem_rendel:=munkanap-rendel; if csutortok in nem_rendel then writeln('Szabad nap'); if szerda in rendel then writeln('Rendeles van'); if rendel*szabad_vagyok <>[] then writeln('Rendelesre mehetek'); end. A program futási eredménye: A teljes_het tartalmazza a piheno napokat A munkanap reszhalmaza a teljes_hetnek Szabad nap Rendeles van Rendelesre mehetek 6.4. Standard (szabványos) függvények használata Az aritmetikai kifejezésekben függvényhívások is szerepelhetnek. Ismerked-jünk a Turbo Pascal könyvtárával, a SYSTEM unit-tal, amely minden programból elérhető anélkül, hogy erről külön intézkednénk. Tekintsük át a modul szabványos eljárásait és függvényeit funkció szerinti csoportosításban. Az F1. függelék a függvények használatának teljes leírását adja. Matematikai függvények Abs(x) megadja az argumetum abszolút értékét ArcTan(x) megadja az argumentum arkusztangensének főértékét, Cos(x) megadja a radiánban megadott argumentum koszinuszát, Exp(x) megadja az argumentum exponenciálisát, Frac(x) valós típusú kifejezés törtrészét adja vissza, Int(x) valós típusú kifejezés egész részét adja vissza valós típusként, Ln(x) megadja az argumentum természetes alapú logaritmusát, Odd(x) ha az egész típusú kifejezés páratlan true, ha páros false értéket ad, Pi Pi értékét adja meg, Random véletlenszámot ad vissza, ha nem adunk határt, akkor 0<= x <1 valós értéket, Random(n) ha adunk határt (n). akkor 0<= x 2) and (4.2 < 1.5) c. i:=5; j:=-1; m:=4; n:=2; ((i+1) <= 7) or (j <> m*n) 5. Adja meg a bitenkénti műveletek értékét a. not 32 b. 42 and 18 c. 29 or 33 d. 29 xor 33 e. 45 shl 2 f. 45 shr 3 5. Értékelje ki az alábbi logikai feltételeket A:=true; B:=false: C:=true; D:=false; a. A and B or C and D b. A and (B or C) and D c. A or B and C or D d. (A or B) and (C or D) 6. Mit látunk a képernyőn? program mi_lesz_a_kepernyon; var a1,a2,a3: string; begin a1:= 'lesz'; a2:= 'eredemeny'; a3:= 'Jo '+a1+' az '+a2+' ?'; writeln(a3); end. Az eredményünket ellenőrízhetjük a MI_LESZ.PAS program futtatásával. 7. Mi lesz a tartalma a HALMAZ3.PAS programban a teljes_halmaz, ketto_harom_oszt és a ketto_negy_oszt halmaz változóknak? program halmaz3; type szamok = 1..10; sz10 = set of szamok; var paratlan,paros,ketto_oszthato,harom_oszthato, negy_oszthato,ketto_harom_oszt, ketto_negy_oszt, teljes_halmaz: sz10; begin paratlan:=[1,3,5,7,9]; paros :=[2,4,6,8,10]; ketto_oszthato:= [2,4,6,8,10]; harom_oszthato:= [3,6,9]; negy_oszathato:= [4,8]; teljes_halmaz:= paratlan+paros; ketto_harom_oszt:= ketto_oszthato*harom_oszthato; ketto_negy_oszt := negy_oszthato*ketto_oszthato; end. Ha kiértékeltük a halmaz3 programot, akkor ellenőrzésképpen futtassuk le a HALMAZ3I.PAS programot, amely kiírja a kérdéses halmazváltozók tartalmát. 8. Értékeljük ki a HALMAZ4.PAS programot, mit látunk a képernyőn? program halmaz4; type teljes_abc = (a,b,c,d,e,f,g,h,i,j,k,l,m, n,o,p,q,r,s,t,u,v,w,x,y,z); abc_halmaz = set of teljes_abc; var abc : abc_halmaz; mgh : abc_halmaz; msh : abc_halmaz; begin abc:=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]; mgh:= [a,e,i,o,u]; msh:= abc - mgh; if u in msh then writeln('u benne van a halmazban') else writeln('u nincs benne a halmazban'); if d in msh then writeln('d benne van a halmazban') else writeln('d nincs benne a halmazban'); end. Mit tartalmaz az msh halmaz?