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

Adattípusok és deklarációk

  • Upload
    garren

  • View
    34

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Adattípusok és deklarációk

1

Adattípusok és deklarációk

Változók deklarációi, végrehajtható

műveletek

Page 2: Adattípusok és deklarációk

2

Adattípusok

Egyszerű Mutató

Strukturáltadattípusok adattípus

adattípus

String Valós Sorszámozott Array Boolean File

Char Record Egész Set Felsorolt Object Résztartomány

Page 3: Adattípusok és deklarációk

3

1. Egyszerű adattípusok

Egyszerre egyetlen adatot tárolnak

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

Page 4: Adattípusok és deklarációk

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

Page 5: Adattípusok és deklarációk

5

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

Page 6: Adattípusok és deklarációk

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.

Page 7: Adattípusok és deklarációk

7

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;a:=a-2;

Page 8: Adattípusok és deklarációk

8

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

Page 9: Adattípusok és deklarációk

9

Feladatok:

1. Írjatok egy programot amely kiszámítja a háromszög kerületét.2. Írjatok egy programot amely kiszámítja a háromszög kerületét,

területét és magasságát.3. Í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.4. 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.

5. Írjatok egy programot amely kiszámítja a négyzet és a téglalap kerületét és területét.

6. Írjatok egy programot amely kiszámítja a rombusz és a trapéz kerületét és területét.

7. Írjatok egy programot amely kiszámítja egy egyenlő szárú trapéz területét.

Page 10: Adattípusok és deklarációk

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 2,9*10-39…1,7*1038 6 bájtsingle 1,5*10-45…3,4*1038 4 bájtdouble 5,0*10-324…1,7*10308 8 bájtextended 3,4*10-4932…1,1*104932 10 bájtcomp -2-63+1…263-1 8 bájt

Page 11: Adattípusok és deklarációk

11

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

Page 12: Adattípusok és deklarációk

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= 0Megoldá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))

Page 13: Adattípusok és deklarációk

13

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

b

m

Page 14: Adattípusok és deklarációk

14

1.feladat:

Page 15: Adattípusok és deklarációk

15

Page 16: Adattípusok és deklarációk

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

Page 17: Adattípusok és deklarációk

17

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

A B A Xor B

Hamis Hamis Hamis

Hamis Igaz Igaz

Igaz Hamis Igaz

Igaz Igaz Igaz

A Not A

Hamis Igaz

igaz hamis

A B A And B

Hamis Hamis Hamis

Hamis Igaz Hamis

Igaz Hamis Hamis

Igaz Igaz Igaz

A B A Or B

Hamis Hamis Hamis

Hamis Igaz Igaz

Igaz Hamis Igaz

Igaz Igaz Igaz

Page 18: Adattípusok és deklarációk

18

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

Page 19: Adattípusok és deklarációk

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

Page 20: Adattípusok és deklarációk

20

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élpl.: a:=abc

b:=efga+b=abc+ efg=abcefg

Ord(i) – a karakter ASCII kódját adja visszaChr(i) – azt a karaktert adja vissza, amelynek ASCII kódja iUpCase(i) – a karakter nagybetűs változóját adja vissza, ennek akkor van

hatása, ha az i „a” és „z” közé esikLenght(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

Page 21: Adattípusok és deklarációk

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.

Page 22: Adattípusok és deklarációk

22

1.feladat

Page 23: Adattípusok és deklarációk

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: 1..100;

b: ’a’..’z’;

Page 24: Adattípusok és deklarációk

24

2. Mutató típusokA 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}

Page 25: Adattípusok és deklarációk

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

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

Page 26: Adattípusok és deklarációk

26

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ásx[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.

Page 27: Adattípusok és deklaráció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]

x11 oszlopindex

sorindex

Page 28: Adattípusok és deklarációk

28

array [Indextípus] of Elemtípus;

Szabályok:

1. A tömbnek rögzített számú eleme van

2. Az elemek típusai megegyeznek

3. Indextípus csak sorszámozott típus lehet

4. Indextípus minden értékére létezik egy jól meghatározott tömbelem

5. Az elemek számát a tömbben Indextípus számossága határozza meg

6. Index egy Indextípusú kifejezés

7. Az elemek bármelyike közvetlenül elérhető az indexre való hivatkozással

Page 29: Adattípusok és deklarációk

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: 1000..2000;

honap: 1..12;

nap: 1..31;

megjegyzes: string;

end;

Page 30: Adattípusok és deklarációk

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;

Page 31: Adattípusok és deklarációk

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

Page 32: Adattípusok és deklarációk

32

Konstansnevek létrehozása

Page 33: Adattípusok és deklarációk

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.

Page 34: Adattípusok és deklarációk

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;

Page 35: Adattípusok és deklarációk

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

Page 36: Adattípusok és deklarációk

36

Feladat:

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

2. 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=60perc1perc=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

Page 37: Adattípusok és deklarációk

37

Típusnevek létrehozása

Page 38: Adattípusok és deklarációk

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;

Page 39: Adattípusok és deklarációk

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;

Page 40: Adattípusok és deklarációk

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= 1..1000;

var i, j: index;

alap: szinresz;

Page 41: Adattípusok és deklarációk

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;