Adatt pusok s deklar ci k
This presentation is the property of its rightful owner.
Sponsored Links
1 / 41

Adattípusok és deklarációk PowerPoint PPT Presentation


  • 98 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

Adattípusok és deklarációk

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


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


1.feladat:


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.


1.feladat


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

x11x12x13

x21x22x23

- 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


Konstansnevek létrehozása


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


Típusnevek létrehozása


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;


  • Login