Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adattípusok és deklarációk

Hasonló előadás


Az előadások a következő témára: "Adattípusok és deklarációk"— Előadás másolata:

1 Adattípusok és deklarációk
Változók deklarációi, végrehajtható műveletek

2 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

3 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 … előjeles 8 bit (1 bájt) integer … előjeles 16 bit (2 bájt) longint … előjeles 32 bit (4 bájt) byte … előjel nélküli 8 bit word … előjel nélküli 16 bit

4 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

5 succ(i) - a visszaadott érték egyel nagyobb, mint az átadott (követő)
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

6 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): Sorrend Művelet I. előjelváltás II. * Div, mod III. +, - Amennyiben szeretnénk változatni a műveletvégzés sorrendjén, akkor zárójeleket kell használjunk.

7 1. feladat: Legyen két egész szám. Számítsátok ki a számok összegét,
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;

8 2. feladat: Adott két egész szám. Cseréljétek fel a két szám értékét
2. feladat: Adott két egész szám. Cseréljétek fel a két szám értékét! (Poharas módszer)

9 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.

10 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 ,9*10-39…1,7* bájt single ,5*10-45…3,4* bájt double ,0*10-324…1,7* bájt extended ,4* …1,1* bájt comp … bájt

11 abs(i) – az i abszolút értékét adja vissza
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, 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));

12 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))

13 - képernyőnként jelenjenek meg a feladat kérések:
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

14 1.feladat:

15

16 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

17 Logikai típusú változókra alkalmazható műveletek: Not (nem), And (és), Or (vagy), Xor (kizáró)
B A Or B Hamis Igaz A Not A Hamis Igaz igaz hamis A B A And B Hamis Igaz A B A Xor B Hamis Igaz

18 Feltételként kell értelmezni, vagyis a kifejezés lehet igaz vagy hamis
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

19 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];

20 +: összefűzést jelent, nem lehet hosszabb 255- nél
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

21 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.

22 1.feladat

23 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: ; b: ’a’..’z’;

24 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}

25 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

26 var azonosító : array [kezdőindex..végindex] of típus;
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] of tí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.

27 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] x oszlopindex sorindex

28 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

29 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: ; honap: 1..12; nap: 1..31; megjegyzes: string; end;

30 c) Halmaztípusok: - bizonyos tulajdonságú elemek összessége - deklarálása: var halmazváltozó: set of alaptípus; pl.: var abc: set of ‘a’..’z’; ascii: set of 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 of komponenstípus; pl.: var adat: file of integer;

31 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

32 Konstansnevek létrehozása

33 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.

34 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;

35 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= ; 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;

36 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

37 Típusnevek létrehozása

38 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;

39 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;

40 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= ; var i, j: index; alap: szinresz;

41 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;


Letölteni ppt "Adattípusok és deklarációk"

Hasonló előadás


Google Hirdetések