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
1
Adattípusok és deklarációk
Változók deklarációi, végrehajtható
műveletek
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
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
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
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, 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;
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)
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.
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
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));
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))
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
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ó)
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
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
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
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
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: 1..100;
b: ’a’..’z’;
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}
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
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.
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
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
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;
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=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;
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
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= 1..1000;
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;