Feladat: ---------- 2. A felsorolás és a rekord adattípusok segítségével oldd meg az alábbi feladatot! Ismerjük N emberről a következő adatokat: Név, fizetés, besorolás, ahol a besorolás lehet: 1. Gyakornok 2. Tanársegéd 3. Adjunktus 4. Docens 5. Egy. tanár Határozd meg minden besorolásban a dolgozók átlagfizetését! Add meg az adatok ábrázolását leíró deklarációs részt és a megoldó algoritmust! Megoldás: ----------- Típus Tbeoszt=(Gyakornok, Tanársegéd, Adjunktus, Docens, Egy.Tanár) Adat=Rekord Nev: szoveg Fizetes:valós Besorolas: Tbeoszt {nem tudom pontosan, így kell-e megadni, hogy ha egy felsorolás 1 elemére kívánik hivatkozni?!} Konstans Beoszt:tömb(Gyakornok..Egy.Tanár):szöveg= (’Gyakornok’,’Tanársegéd’,’Adjunktus’,’Docens’,’Egy.Tanár’) {Erre nem tudom, szükség van-e?} Változó Tanár:tömb (1..N):adat Be:Tbeoszt Átlagfizetés:(beoszt:valós) {felsorolás lehet Index a tömbben, és hogyan kell jelölni? Vagy Átlagfizetés (Gyakornok..Egy.Tanár:valós) – esetleg ide egy rekordot írjak? Végülis a feladat szerint felsorolással és rekorddal kell megoldani. Bár szerintem ez szebb megoldás.} Eljárás Átlagfizetéselj Vált i,db:egész szov:szoveg; fiz:valós; átlagfiz:valós Ciklus be:=Gyakornok-tól Egy.Tanár-ig {vagy: Min(Tbeoszt)-tól Max (Tbeoszt)-ig} Fiz, db:=0 Ciklus i:=1-től N-ig Ha Tanar(i).besorolas=be akkor fiz:=fiz+tanar(i).fizetes db:=db+1 Elág. vége C.v Átlagfiz:=fiz/db Átlagfizetés(be):=Átlagfiz C.v Elj. v. Feladat: ---------- 3. A felsorolás és a halmaz elemi adattípusok felhasználásával oldd meg az alábbi feladatot!  Adatelemek: kettes, hármas, négyes, ötös, hatos, hetes, nyolcas, kilences, tízes, bubi, dáma, király, ász. Ezekből számlapok a kettes...tízes, figurások a bubi...ász.  Műveletek: kioszt: 13 lap --> 8 lap érték: 8 lap --> egész, ami megszámolja 8 lap értékét (a számlapok egységesen 3, a figurások pedig 5 pontot érnek.) Add meg az adatok ábrázolását, majd a műveleteket megvalósító algoritmust! Megoldás: ------------- Típus Adatelemek=(kettes, hármas, négyes, ötös, hatos, hetes, nyolcas, kilences, tízes, bubi, dáma, király, ász) Tlap=Halmaz(Adatelemek) Számlap=(kettes,hármas,négyes,ötös,hatos, hetes, nyolcas, kilences, tízes) {lehet-e ezt, így? Nem zavarom meg így a programot pl. a kovetkező(tízes) kiadásával? Lehetne ez tömb is? Indexelve az adatelemek megfelelő elemeivel? Ha igen hogy?} Figurások=( bubi, dáma, király, ász) Változó Lap:Tlap Eljárás Kioszt (változó Lap:Tlap) Vált i:egész, Elem:Adatelemek i.=1 Ciklus Elem:=vél(adatelemek): {véletlenszám. Vagy: vél ():adatlemek Nem tudom így megadható-e? Ha nem talán egy tömbbel megoldható? De sajnos nem tudom, hogy?} Ha nem eleme_e(lap,elem) akkor Halmazba(lap,elem) I:=i+1; Ciklus amíg i>8 Elj. vége Függvény Lapérték(lap):egész Változó i:egész, elem:adatelemek, ért:egész Ért:=0 Clikus elem:=Min(Számlap)-tól Max(Számlap)-ig {Ha ezt a feljebb említett probléma miatt nem lehet használani: Ciklus amíg elem<=tízes … innentől a ciklusmag végén kiegészül egy sorral: következő(adatlemek)} Ha eleme_e(lap,elem) akkor ért:=ért+3 C.v. Ciklus elem:=Min(Figurások)-tól Max(Figurások)-ig {vagy : Ciklus amíg elem<=Max(Figurások)} Ha eleme_e(lap,elem) akkor ért:=ért+5 {következő(adatelemek)} C.v. Lapérték:=ért Fv. vége Lenne még egy kérdésem: listánál kell tipusdeklarációt írni, hogyan, mi szerepeljen benne? Pl.: 6. feladatnál: Típus Karcsop=Rekord IsmétlésiTényező:egész Kar:karakter vége Tlista=Objektum Érték:Karcsop Köv:Tlista^Mutató vége Ezt azért írtam így, mert az érték ’mező’ 2 részből áll. Ekkor a változóknál ugyanúgy kell egy listát dekralálni, vagy ez a listánál nem kell?} 9. Valósítsd meg a Síkidom típust! Definiáld a szerkezetét (a síkidom szakaszokból áll, amelyeket végpontjaikkal adunk meg)! A típust láncoltan ábrázold, és írd meg hozzá a síkidombeolvasó, valamint a kirajzoló eljárást! A kirajzolás-hoz a Szakasz(X1,Y1,X2,Y2) eljárást használhatod! Megoldás -------- Típus szak=rekord KezdőpontX:egész KezdőpontY:egész VégpontX:egész VégpontY:egész Tlista=Objektum {ez a síkidom} Érték:szak Köv:Tlista^mutató Eljárás Beolvasás (Vált:síkidom:Tlista) vált kezdX,kezdY,VégX,VégY:egész, elem, előzőelem:szak Síkidom.üres Ciklus Be(elem) KezdX:=elem.KezdőpontX KezdY:=elem.KezdőpontY VégX:=elem.végpontX VégY:=elem.végpontY Amíg (kezdX<>végX) és (kezdY<>végY) Ciklus vége Előzőelem:=elem Ciklus amíg (nem síkidom.végén_e) vagy ((kezdX<>VégX) és (KezdY<>VégY)) Elem.KezdőpontX:=Előzőelem.KezdőpontX Elem.KezdőpontY:=Előzőelem.KezdőpontY Ciklus Be:VégX, VégY Ciklus amíg ((elem.kezdX<>VégX) és (elem.kezdY<>VégY)) Elem.VégpontX:=VégX Elem.VégpontY:=VégY Síkidom.Beszúrmögé(elem) Előzőelem:=elem Ciklus vége Ha Síkidom.végen_e akkor Elem.KezdőpontX:=Előzőelem.KezdőpontX Elem.KezdőpontY:=Előzőelem.KezdőpontY Elem.KezdőpontX:=KezdX Elem.KezdőpontY:=KezdY Elág. v. Elj. v. Eljárás kirajzoló(Konstans Síkidom:Tlista) Ha nem Síkidom.üres_e akkor Síkidom.elsőre Ciklus amíg (nem Síkidom.végén_e) Szakasz(Síkidom.elemérték.KezdőpontX, Síkidom.elemérték.KezdőpontY, Síkidom.elemérték.VégpontX, Síkidom.elemérték.VégpontY) Síkidom.Következőre Ciklus vége Szakasz(Síkidom.elemérték.KezdőpontX, Síkidom.elemérték.KezdőpontY, Síkidom.elemérték.VégpontX, Síkidom.elemérték.VégpontY) Elág. v. Elj. v. 10. A Pascal nyelvben beépített String-típust tekinthetjük úgy, mint egy folytono-san ábrázolt lista egy további művelettel: az elem (karakter) közvetlen elérésének függvényével, amely a tömbindexeléshez hasonlatosan írható (pl. a 'szöveg(i)' jelentése: a 'szöveg' i-edik karakter, i=1..Hossz(szöveg)). Konstans MaxHossz: Egész(255) Típus Darab = 0..MaxHossz Index = 1..MaxHossz Jelek = Tömb(Index: Karakter) String = Rekord(db: Darab, jel: Jelek). A típushoz az alábbi függvények tartoznak Függvény Hossz(Konstans s: String): Darab Vége(Konstans s: String, mettől: Darab): String Szoroz(Konstans mit: String, hányszor: Egész): String (a 'mit'-beli szöveget 'hányszor' megismétli egymás után) Reláció(Konstans s1,s2: String): Logikai (karakterenkénti <= relációra építendő) A fenti reprezentációhoz készítse el a felsorolt műveletek implementációját! Megoldás: --------- Fv. Hossz(Konst s:String):Darab Vált i:egész Ha nem s.ürese akkor s.elsőre {i:=1} Ciklus amíg (nem utolsó_e) i:=i+1 Ciklus vége Hossz:=i Fv. vége Fv. Vége(Konst s:String, mettől:Darab):String Vált sv:String, i,j,k:egész Ha (nem s.üres_e) és (mettől<=Hossz(s)) akkor s.elsőre {i:=1} Ciklus amíg (i<>mettől) s.következőre {i:=i+1} C.v. sv.üres, j:=1 Ciklus amíg i<=Hossz(s) sv[j]:=s[i] i:=i+1 j:=j+1 c.v. Vége:=sv {azaz: vége.üres, i:=1 Ciklus k:=1-től Hossz[sv]-ig vége[i]:=sv[k] i:=i+1, k:=k+1} Különben nem def {ezt nem tudom} Fv. vége Fv. szoroz(Konst mit:String, hanyszor:egész):String Vált sv:string, i,j,k:egész mit.elsőre sv.üres k:=1 Ciklus i:=1-től Hányszor-ig Ciklus j:=1-től Hossz(mit)-ig sv[k].jel:=mit[j].jel sv[k].db:=k k:=k+1 C.v. C.v. Fv. Reláció(Konst s1,s2:String):logikai Vált i:egész s1.elsőre, i:=1 s2.elsőre, Ha hossz[s1]<>hossz[s2] akkor reláció:=hamis különben Ciklus amíg (nem s2.végén_e) és (s1[i]<=s2[i]) i:=i+1 s1.következőre, s2:következőre C.v. Ha (s2.végén_e) és (s1.elemérték<=s2.elemérték) {s1[i]<=s2[i]} akkor reláció:=igaz 12. Egy áruházban a forgalmazott árukról nyilvántartást vezetnek. Ismerjük az N áruról az alábbi adatokat: · azonosító · ár · beszerzési hely. Minden beszerzési helyről tudjuk a nevét, címét és azoknak az áruknak az azonosítóját, amelyeket ott gyártanak. Mivel több árut is rendelnek ugyanarról a helyről, minden beszerzési hely adatait csak egyszer tárolják, az árunál csak utalnak a helyre. Az X azonosítójú árut eddig olyan helyről rendelték, ahol már mást nem is gyártanak, csődbe ment a cég, ezért megszüntetik. Töröld a nyilvántartásból ezt a beszerzési helyet, és az X árut irányítsd át egy másik beszerzési helyre (máshol is gyártják ezt az árut)! Add meg az adatokat leíró deklarációs részt is! Megoldás: {itt csak a deklarációs részt írom le, mert azzal vannak problémáim!} --------- Típus Áru=Rekord azon:szöveg ár:valós beszerzésih:szöveg {név, mint később a besz- rekordban ugyanarra utal! Nem lehetne itt egy felsorolást megadni, amiből válogatjuk ki mindkettőt?} Besz=Rekord Név:szöveg Cím:szöveg vége Tlista=Objektum érték:áru köv:Tlista^mutató Változó Beszerzésihely: Tömb(Index:besz)