420 likes | 671 Views
Adattípusok és deklarációk. Változók deklarációi, végrehajtható műveletek. Adattípusok Egyszerű Mutató Strukturált adattípusok adattípus adattípus String Valós Sorszámozott Array
E N D
Adattípusok és deklarációk Változók deklarációi, végrehajtható műveletek
Adattípusok Egyszerű Mutató Strukturált adattípusok adattípus adattípus String Valós Sorszámozott Array Boolean File Char Record Egész Set Felsorolt Object Résztartomány
1. Egyszerű adattípusok Egyszerre egyetlen adatot tárolnak • Numerikus adatok tárolása: Számokat tárolnak, aritmetikai műveleteket végezhetünk velük Egész típusok: mind egész számokat tárolnak, azonban értékkészletük és helyfoglalásuk különböző shortint -128…127 előjeles 8 bit (1 bájt) integer -32768…32767 előjeles 16 bit (2 bájt) longint -2147483648…2147483647 előjeles 32 bit (4 bájt) byte 0…255 előjel nélküli 8 bit word 0…65535 előjel nélküli 16 bit
Egész típusú változókkal a következő műveletek végezhetőek el, az eredmény minden esetben egész: • +, -, * • Egész osztás: div – az eredmény egész és a maradék elvész pl.: 123 div 4 = 30 • Maradékképzés: mod – az egész osztásból eredő maradékot adja pl.: 2 mod 6= 2
eljárások: dec(i,n) - az i értékét csökkenti n- el, egyenértékű a következő utasítással:i:=i-n; inc(i,n) - i értékét növeljük n- el, egyenértékű a következő utasítással: i:=i+n; pl. : i:=8; inc(i,2); i=i+2=8+2=10 dec(i); i=i-1=10-1=9 • függvények: pred(i) - a visszaadott egész érték egyel kisebb mint az átadott (megelőző) pl.: i:=65; i:=pred(i); i=64 succ(i) - a visszaadott érték egyel nagyobb, mint az átadott (követő) pl.: i:=succ(i); i=65 abs(i) – az i abszolút értékét adja vissza pl.: i:= - 88; i:=abs(i); i=88 sqr(i) – az i egész érték négyzetét adja vissza pl.: i:=9; i:=sqr(i); i=81
round(i) – az i- hez közelebbi egész értéket adja vissza, kerekít pl.: i:=23,567 i:=round(i); i=24 trunc(i) – az i egész részét adja vissza, elhagyva a törtrészt pl.: i:=23,79 i:=trunc(i); i=23 Precedencia szabály (műveletek elvégzésének sorrendje): Amennyiben szeretnénk változatni a műveletvégzés sorrendjén, akkor zárójeleket kell használjunk.
1.feladat: Legyen két egész szám. Számítsátok ki a számok összegét, különbségét, szorzatát. Alkalmazzátok a fent bemutatott eljárásokat és függvényeket. a:=a-2;
2. feladat: Adott két egész szám. Cseréljétek fel a két szám értékét! (Poharas módszer)
Feladatok: • Írjatok egy programot amely kiszámítja a háromszög kerületét. • Írjatok egy programot amely kiszámítja a háromszög kerületét, területét és magasságát. • Írassátok ki a képernyő közepére, színeket használva a neveteket és alája középre igazítva a lakcímeteket. • Kérjetek be 2 számot a felhasználótól, majd írassátok ki azok összegét, különbségét, szorzatát, hányadosukat, a két szám négyzetének összegét. • Írjatok egy programot amely kiszámítja a négyzet és a téglalap kerületét és területét. • Írjatok egy programot amely kiszámítja a rombusz és a trapéz kerületét és területét. • Írjatok egy programot amely kiszámítja egy egyenlő szárú trapéz területét.
Valós típusok: Nagyobb számok tárolására alkalmas mint az egész és még ráadásul tizedeseket is képes kezelni. A valós számok ábrázolása lebegőpontos (floating- point) formában történik, matematikai műveleteket végezhetünk velük: +,-,*,/ Ha az operandus valós akkor az eredmény is valós. real 2,9*10-39…1,7*10386 bájt single 1,5*10-45…3,4*10384 bájt double 5,0*10-324…1,7*103088 bájt extended 3,4*10-4932…1,1*10493210 bájt comp -2-63+1…263-1 8 bájt
Valós típusú változókra vonatkozó, leggyakrabban használt függvények és eljárások: int(i)–egész rész függvény, az i egész részét adja vissza, a visszaadott érték valós pl.: i:=4.6; i:=int(i); i=4.0 abs(i) – az i abszolút értékét adja vissza sqr(i) – az i valós szám, valós négyzetét adja vissza sqrt(i) – az i valós szám négyzetgyökét adja vissza pl.: i:=sqrt(16); i=4.0 pi – pi értékét adja vissza, 3.1415926536 random(határ) – véletlen számot generáló függvény pl.: írjunk egy [0,30] közötti véletlen számot Randomize; writeln(random(30+1));
Feladatok: 1. Írj egy programot amely kiszámolja a következő másodfokú egyenlet diszkriminánsát, valamint meghatározza gyökeit: 2x2 + 3x + 1= 0 Megoldáshoz képletek: D= b2 - 4a*c , ahol az egyenletből adódóan a=2, b= 3 és c=1 x1= (- b+ sqrtD)/2*a x2 = (- b - sqrtD)/2*a 2. Írj egy programot amely meghatározza három szám számtani és mértani közepét. 3. Kérjük be Gergő órabérét. Ezután kérjük be a dolgozott időt, órában és percben. Számoljuk ki Gergő bérét kerekítve! 4. Használva Heron képletét számoljátok ki az általános háromszög kerületét és területét, tudván hogy oldalai a, b, c. Megoldáshoz képletek: K=a+b+c p=k/2 T= sqrt (p*(p - a)*(p - b)*(p - c))
5. Írjatok egy programot amely bemutatja az egyenlőszárú és a szabályos háromszögek kerületének és területének kiszámítását. Majd adjatok példát is hozzá. Írjátok meg a programot, úgy hogy futtatásakor a következő követelményeknek tegyen eleget: - képernyőnként jelenjenek meg a feladat kérések: 1.képernyő: Írjátok ki az üzenetet a felhasználó számára: Háromszögek kerület és terület számítása 2.képernyő: rajzoljatok egy egyenlő szárú háromszöget csillagokból kirakva, a két egyenlő szár legyen egyszínű az alap más színű. Alatta legyen látható a kerület, magasság és terület kiszámításához szükséges képletek. 3.képernyő: adj egy példát 4.képernyő: rajzoljatok egy szabályos háromszöget színes csillagokból kirakva. Alatta legyen látható a kerület, magasság és terület kiszámításához szükséges képletek. 5.képernyő: adj egy példát Megoldáshoz képletek: K=a+b+c m=sqrt (sqr(a)- sqr(b/2)) T= (b*m)/2 a m b
b) Logikai információk tárolása: - logikai értékek és logikai műveletek tárolására használjuk; - csak kétféle értéket vehet fel true (igaz=1) és false (hamis=0) - tárolása egy bájton történik boolean és a Turbo Pascal 7.0- ban megjelentek: bytebool wordbool longbool
Logikai típusú változókra alkalmazható műveletek:Not (nem), And (és), Or (vagy), Xor (kizáró)
Feltételként kell értelmezni, vagyis a kifejezés lehet igaz vagy hamis. Bármilyen típusú változóval végezhet műveleteket, ezek lesznek a kifejezések. Ha a feltétel a kifejezésben igaz akkor felveszi a True értéket, ellenkező esetben a False értéket. A logikai értékeket nem lehet beolvasni de kiíratni igen. Pl. figyeljük meg a következő programot
c) Szöveges információk tárolása: char: -egyetlen karakter tárolására alkalmasak -sorszámozott típus, mivel minden karakterhez tartozik egy sorszám (0..255), amely kijelöli a karakter helyét az ASCII kódtáblában string: -karaktersorozatok tárolására használjuk -a karakterek száma változhat, de ez max. 255 lehet -amennyiben nincs szükségünk 255 karakteres sztringekre, a deklarációban szögletes zárójelben megadhatjuk a sztring maximális hosszát (1 és 255 között) pl. var keresztnév: string[10];
Karakter típusú változókra vonatkozó, leggyakrabban használt függvények és eljárások: +: összefűzést jelent, nem lehet hosszabb 255- nél pl.: a:=abc b:=efg a+b=abc+ efg=abcefg Ord(i) – a karakter ASCII kódját adja vissza Chr(i) – azt a karaktert adja vissza, amelynek ASCII kódja i UpCase(i) – a karakter nagybetűs változóját adja vissza, ennek akkor van hatása, ha az i „a” és „z” közé esik Lenght(i) – a karakterlánc hosszát adja meg, ahol i:string típusú változó Ugyanakkor alkalmazhatók a következő eljárások is, ugyanaz a jelentésük mint az előzőekben bemutatottaknál, csak karakterekre vonatkozóan: Pred, Succ, Dec, Inc
Feladatok: 1. Olvassunk be egy karaktert, majd írassuk ki a sorszámát az ASCII kódtáblából, valamint az előtte és az utána álló karaktert és nagybetűs formáját. Ezután kérjen be a felhasználótól egy karakterláncot, szót és határozza meg annak hosszát 2. Írd meg azt a programot amelyet egy pénzváltónál tudunk alkalmazni, ha forintot szeretnénk vásárolni. 3. Írj egy olyan programot amely bekéri a felhasználótól a vezetéknevét és keresztnevét külön- külön, majd összefűzi őket egyetlen változóba és kiíratja a képernyő közepére piros színnel és meghatározza ennek hosszát.
d) Sorszámozott típusok: integer, shortint, longint, byte, word, boolean, char, felsorolt típus, résztartomány típus Felsorolt típus: -kerek zárójelben, vesszővel elválasztva felsoroljuk az egyedi azonosítókat, ezek alkotják a típus értékkészletét. pl. var nyelvek: (angol, német, spanyol, olasz); -az értékkészletet definiáló szimbólumoknak egyedieknek kell lenniük, ugyanaz a név nem szerepelhet két különböző típus elemeként -a Pascal- ban lehetőségünk van arra, hogy mi magunk hozzunk létre sorszámozott típust, a felsorolt típus segítségével Résztartomány típus: -mint intervallumot, az alsó és felső határral adjuk meg, a határokat (..) választjuk el agymástól pl. var i: 1..100; b: ’a’..’z’;
2. Mutató típusok A számítógép memóriája a programok egyik legértékesebb erőforrása. A memória jobb kihasználása érdekében a Turbo Pascal lehetőséget biztosít a dinamikus tárkezelésre. Ennek során nem a fordítóprogram, hanem a program készítője gondoskodik a helyről, a (dinamikus) változók számára. A dinamikus memóriakezelés a mutatók (pointerek) használatára épül. A mutató, a Pascalban 4 bájt a helyfoglalása, memóriacímet tartalmaz. A cím első két bájtja az ofszetet, míg a következő két bájt a szegmenscímet tartalmazza. Deklarálása: vagy a pointer típusnévvel, vagy ^típus – sal pl. var pm, hely: pointer; {csak címet tartalmaz} ipr: ^integer; {címen kívül egy típus is tartozik}
3. Strukturált típusok / Összetett típusok Más típusokból épülnek fel. Összetett típusok: tömb, rekord, halmaz, fájl, objektum • Tömbtípusok: - adott számú, azonos típusú elemeket tartalmaz - a deklarációban az array foglalt szó vezeti be pl. Var t: array[1..15] of char; z: array[‘A’..’Z’] of byte; x: array[-5..5, 1..5] of integer; v: array[boolean, char] of integer; Valamely tömb lehet egy-, két, vagy többdimenziós. A szögletes zárójelek között annyi indextípust kell vesszővel elválasztva megadni, ahány dimenziós tömböt akarunk létrehozni. egydimenziós tömb= vektor kétdimenziós tömb= mátrix
A tömb meghatározott számú, azonos típusú elemekből álló összetett típus. Deklarálása: var azonosító : array [kezdőindex..végindex] oftípus; tömb mérete tömb elemeinek típusa Pl.: var x: array[1..10] of integer; {10elemből álló integer típusú tömb} x[1], x[2],… x[10] -tömb elemeire való hivatkozás x[1]:=3,67; -tömb egy elemének való értékadása Azt a tömböt, ahol csak egy dimenzióban deklaráljuk a tömb elemeit, akkor vektornak nevezzük.
Pl. 1.) var y: array[1..10] of integer; -10 db. egész típusú elemet tartalmaz -egyes elemeire való hivatkozás: y[1], y[2],… 2.) var x: array[1..2, 1..3] of real; -valós számokat tartalmazó 2*3 mátrix, amelynek 2 sora és 3 oszlopa van x11 x12 x13 x21 x22 x23 - hivatkozás egyik elemére: x[1, 1] x11 oszlopindex sorindex
array[Indextípus] of Elemtípus; Szabályok: • A tömbnek rögzített számú eleme van • Az elemek típusai megegyeznek • Indextípus csak sorszámozott típus lehet • Indextípus minden értékére létezik egy jól meghatározott tömbelem • Az elemek számát a tömbben Indextípus számossága határozza meg • Index egy Indextípusú kifejezés • Az elemek bármelyike közvetlenül elérhető az indexre való hivatkozással
b) Rekord típus: - legrugalmasabb Pascal adatszerkezet, mivel tetszőleges számú, különböző tulajdonságú rész szerepelhet benne - a rekord típusdeklarációja a record és az end foglalt szavak között helyezkedik el. Pl. Var datum: record ev: 1000..2000; honap: 1..12; nap: 1..31; megjegyzes: string; end;
c)Halmaztípusok: - bizonyos tulajdonságú elemek összessége - deklarálása: var halmazváltozó: set ofalaptípus; pl.: var abc: setof ‘a’..’z’; ascii: setof char; d)Állománytípusok: - azonos típusú komponensekből álló adatszerkezetek, mely nagy mennyiségű adat tárolását teszi lehetővé a háttértárolón -komponensei lehetnek egyszerű és strukturált típusú adatok, de leggyakrabban a record típust használjuk -deklarálása: var fájlváltozó: file ofkomponenstípus; pl.: var adat: file of integer;
e)Objektumtípusok: - alapja az újszerű programkészítési módszernek ami az objektum- orientált programozás (OOP) néven vált ismerté - különböző komponensekből épül fel
Olyan azonosítóval (névvel) ellátott értékek, amelyek nem váltóznak meg a program futása során, emiatt a konstansnevek nem szerepelhetnek az értékadó utasítás bal oldalán. A konstansdefiníciókat a deklarációs részben a const foglalt szó után adjuk meg. A definícióban az egyenlőségjel bal oldalán szerepel a konstans neve, a jobb oldalán pedig a hozzárendelni kívánt érték (konstans kifejezés). Készíthetünk egész, valós, numerikus, szöveges, logikai és halmaz konstansokat.
pl.: const ev=1996; afs=10,71; cím=‘feladat’; betű=‘p’; ures=‘’; hexa=[‘0’..’9’,’A’..’Z’,’a’..’f’]; maxn=100; also=‘A’; felso=‘E’; type tomb=array[1..maxn] of real; halmaz=set of also..felso;
Konstansnevek használatával programunk olvashatóbbá válik és bizonyos változtatások is könnyebben elvégezhetők. Konstansnevek alkalmazását elsősorban az alábbi esetekben ajánljuk: 1) Ha ugyanaz a konstansérték gyakran előfordul a programban pl.: const evszam=2.718282; szokoz=‘’; 2) A konstansértékek a későbbiekben egy másik értékre kívánjuk változtatni (ugyanis ha a konstans a programban több helyen is előfordul, akkor a módosítás lényegesen egyszerűbb és biztonságosabb konstansdefiníció használatával). pl.: const max= 10;
Feladat: • Ismervén Pi értékét számoljátok ki a kör kerületété és területét. Készítsetek rajzot is róla. • A billentyűzetről beolvasunk egy alfa szög mértékét radiánban. Írassátok ki az alfa szög mértékét fokban, percben és másodpercben. Megoldáshoz segítség: 1fok=60perc 1perc=60másodperc - alfa szög radiánból fokba: pi radiánnak 180 fok alfa radiánnak f fok - 1fok=60 perc, ezért perc=fok*60 - 1perc=60 másodperc, ezért másodperc=perc*60 f= (alfa*180)/ pi
A Turbo Pascal a típus definicíós részben a type foglalt szó után saját típusnevek létrehozását is támogatja. type új típusnév= létező_típus; Először meg kell adjuk a létrehozandó új típus azonosítóját (nevét), majd az egyenlőségjel után egy érvényes típusleírást helyezünk el, amely lehet tetszőleges létező típus. pl.: type egesz=integer; valos=real; st10=string[10]; var i, j: egesz; a, b: valos; nev: st10;
a) A type használata felsorolt típus esetén pl.: type tantargy: (magyar, fizika, matematika); nyelvek: (angol, német, spanyol, olasz); színek: (piros, kék, zöld, sárga, fekete); var ora: tantargy; nyelv: nyelvek; ruha: színek;
b) A type használata résztartománytípus esetén A résztartománytípust valamely létező sorszámozott típus értékeinek részintervallumából állítjuk elő pl.: type kisbetu=‘a’..’z’; szam= ‘0’..’9’; szinek= (piros, kék, zöld, sárga, fekete); szinresz= kek..fekete; index= 1..1000; var i, j: index; alap: szinresz;
c) A type használata tömbök esetén pl.: type szinek=(piros, kék, zöld, sárga, fekete); nev= string[20]; vektor=array[1..100] of real; matrix=array[1..10, 1..10] of integer; adat=array[1..50] of real; osztaly=array[1..32] of nev; szintabla=array[1..8, 1..8] of szinek; var va, vb: vektor; mx, my: matrix; ct: színtábla; mz: matrix;