Számítógép és programozás 2

Hasonló dokumentumok
Bevezetés a programozásba. 5. Előadás: Tömbök

Bevezetés a programozásba. 9. Előadás: Rekordok

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Bevezetés a programozásba I.

Bevezetés a programozásba. 6. Előadás: C++ bevezető

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Bevezetés a programozásba I.

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

OAF Gregorics Tibor : Memória használat C++ szemmel (munkafüzet) 1

7. fejezet: Mutatók és tömbök

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Programozás II. 4. Dr. Iványi Péter

A C++ Standard Template Library rövid összefoglalás

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Struktúra nélküli adatszerkezetek

1. Jelölje meg az összes igaz állítást a következők közül!

Maximum kiválasztás tömbben

Bevezetés a programozásba I.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Bevezetés a programozásba I.

Algoritmizálás + kódolás C++ nyelven és Pascalban

1. Alapok. Programozás II

Bevezetés a programozásba 2

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Készítette: Nagy Tibor István

Programozás II. 2. Dr. Iványi Péter

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

Pénzügyi algoritmusok

Adatszerkezetek 1. Dr. Iványi Péter

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Bevezetés a programozásba I.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

C programozási nyelv Pointerek, tömbök, pointer aritmetika

INFORMATIKA tétel 2019

Vektorok. Octave: alapok. A fizika numerikus módszerei I. mf1n1a06- mf1n2a06 Csabai István

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Körkörös listák. fej. utolsó. utolsó. fej

5. Fejezet : Lebegőpontos számok

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

INFORMATIKA tétel 2017

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Programtervezési stratégiák. Top-down tervezés. Top-down tervezés. Bottom-up tervezés. 4.

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

A C programozási nyelv III. Pointerek és tömbök.

Felvételi tematika INFORMATIKA

Programozás C++ -ban 2007/1

A C programozási nyelv III. Pointerek és tömbök.

Algoritmizálás + kódolás C++ nyelven és Pascalban

Gregorics Tibor Egyszerű programok C++ nyelvi elemei 1

Egyszerű programozási tételek

5. Gyakorlat. struct diak {

Harmadik gyakorlat. Számrendszerek

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Programozás C++ -ban

Programozas 1. Strukturak, mutatok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

C++ programozási nyelv Konstruktorok-destruktorok

Programozási alapismeretek 1. előadás

Programozás C és C++ -ban

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

Mintavételes szabályozás mikrovezérlő segítségével

Fejlett programozási nyelvek C++ Iterátorok

Bevezetés a programozásba

5. Fejezet : Lebegőpontos számok. Lebegőpontos számok

Bevezetés a programozásba Előadás: A const

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

8. gyakorlat Pointerek, dinamikus memóriakezelés

Kifejezések. Kozsik Tamás. December 11, 2016

Lineáris algebra gyakorlat

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Programozási tételek általánosítása 2. Szlávi Péter 2015

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

8. Előadás. Megyesi László: Lineáris algebra, , oldal. 8. előadás Mátrix rangja, Homogén lineáris egyenletrendszer

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozás I. zárthelyi dolgozat

C++ Standard Template Library (STL)

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Bevezetés az informatikába

Bevezetés a C++ programozásba

Assembly programozás: 2. gyakorlat

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

5. gyakorlat. Konstansok Tömbök Stringek

117. AA Megoldó Alfréd AA 117.

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Adatszerkezetek I. 1. előadás

Programozás II. 6.Öröklés Dr. Iványi Péter

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Átírás:

Számítógép és programozás 2 3. Előadás Típuskonstrukciók http://digitus.itk.ppke.hu/~flugi/

ISMÉTLÉS Programkonstrukciók Elágazás kell, ha más kódra van szükség egyes esetekben Ciklus kell, ha ismételni kell lépéseket Okos megbízható matematikusok eredménye: Minden algoritmikusan megoldható probléma megoldható szekvencia, elágazás és ciklus segítségével.

Mi a közös az eddigiek tételekben? Tetszőlegesen hosszú sorozat feldolgozása Kevés (max 5-6) változóval Kizárólag elemenként feldolgozható feladatok Minden elemet pontosan egyszer kezelünk A sorrend kötött: csak abban a sorrendben tudunk olvasni, ahogy a sorozatban egymást követik Ezeknek a fő oka, hogy a feldolgoznivaló adatsor sokszor nem fér a memóriába, tehát spórolni kell a memóriaigénnyel

A tömb A tömb egy típuskonstrukció: egy egyszerű típust megsokszorozunk, adott hosszú sorozatát, mint típust kezeljük A tömb típusú változót közvetlenül ritkán, inkább a hordozott sorozat egy-egy tagját kezeljük VÁLTOZÓK: a: EGÉSZ[10] a[2]:=3 a 2 =3 Lényegében (nullától) indexelt, egyforma típusú változók egységes kezeléséről van szó

Példa tömbre PROGRAM tömb VÁLTOZÓK: a: a: EGÉSZ[10], i: i: EGÉSZ i := := 0 CIKLUS AMÍG i < 10 10 a[i] := := RND 5 + 1 i := := i + 1 CIKLUS_VÉGE PROGRAM_VÉGE

Tömbök A tömb szabadon címezhető, tetszőleges sorrendben bejárható, átírható, kezdeti értéket nem tartalmazó változósorozat, ellentétben a bemeneten kapott sorozatokkal Viszont előre, fordítási időben tudni kell a méretét. Hallgatók rendszeresen abba a hibába esnek, hogy mindent tömbökkel akarnak megoldani. Ennek tipikus jele, hogy sorozatot akarnak beolvasni egy 1000 méretű tömbbe..

Tömbök A tételek tömbökön is alkalmazhatóak, mivel ismert hosszú sorozatokról van szó, ahol az adott elem a sorszámával hivatkozható... sum := := 0 i := := 0 CIKLUS AMÍG i < 10 10 sum := := sum + a[i] i := := i + 1 CIKLUS_VÉGE...

Többdimenziós tömb A tömb szintaxisa szerint T[méret] a tömb, ahol T tetszőleges típus A tömb is típus Tehát a T[méret1][méret2] is helyes, és tömbök tömbjét jelenti Ez kétdimenziós tömb, két független indexet lehet használni, mint koordinátákat Természetesen tetszőlegesen fokozható a dimenziószám elméletben. Gyakorlatban kifogyunk a memóriából.

Tömb: vektor, mátrix Az egydimenziós tömböt szokás vektornak, kétdimenziósat mátrixnak nevezni VÁLTOZÓK: a: a: EGÉSZ[10][10], i, i, j: j: EGÉSZ EGÉSZ i := := 0 CIKLUS CIKLUS AMÍG AMÍG i < 10 10 j := := 0 CIKLUS CIKLUS AMÍG AMÍG j < 10 10 a[i][j] a[i][j] := := RND RND 5 + 1 j := := j + 1 CIKLUS_VÉGE i := := i + 1 CIKLUS_VÉGE

Tömbök jelentősége Olyan feladatoknál, ahol több adatra van szükség annál, mintsem külön változókban kényelmes lenne kezelni, fix számú, és még beleférünk a memóriába többször kell kiértékelni ugyanazt az értéket tetszőleges sorrendben kell hozzáférni az elemekhez az adatokat módosítani is kell, nem csak olvasni.. rákényszerülünk a tömb használatára

Néhány példa Képkezelő szoftverek a képet mátrixként tárolják konkrétan a FF szürkeárnyalatos képeket általában egész számok mátrixával ábrázolják Hagyományos mátrixműveletek, Gauss elimináció, bázistranszformáció Táblázatos adatok A szöveg típus néhány művelettől eltekintve felfogható karakter-vektornak

Tömbök és a PLanG A tömb típusú változók kiírathatóak, de nem beolvashatóak A változók értékeit mutató táblázatban az egész tömb követhető A tömbelemek kezdeti érték nélkül jönnek létre, erről gondoskodni kell

C és C++ C tömb: típus változónév[méret] primitív tömb C++ inkább: vector<típus> változónév(méret, kezdetiérték) A primitív tömb mérete fordítási időben ismert kell legyen fordítóprogramok néha elfogadják a változót is, de az nem szabványos Vector átadható paraméterként, többdimenziósan is

Típuskonstrukció és a vector #include <vector> using using namespace std; std; int int main() { vector<int> vektor(10,0); vector<vector<int> > matrix(10,vector<int>(10,0)); } vector<vector<vector<int> > > tenzor(10, vector<vector<int> > (10, (10, vector<int>(10,0)));

Összefoglaló Tömbök: fix hosszú homogén változósorozat Szintaxis: Típus[méret] Akkor és csak akkor használandó, ha ismert hosszú, többszöri írást vagy olvasást, vagy tetszőleges sorrendben feldolgozást igényel a feladat Lehet több dimenziós

Típuskonstrukció Meglevő típusokból új típus létrehozása Eddigi példák: T v[10] : 10 darab T típusú változó alkot egy primitív vektort T m[10][10] : 10x10 méretű (primitív) mátrix vector<t> v(10,t) : 10 darab T típusú változó alkot egy STL vektort t kezdeti értékekkel vector<vector<t> > m(10, vector<t>(10, t)) : 10x10 méretű mátrix t kezdeti értékekkel

Típuskonstrukció A struct: vegyes típusokból álló új típus rekord Az elv: az összetartozó adatok összetartozása jelenjen meg, mint nyelvi elem PLanGban ilyen nincs Példa: kétdimenziós koordinátákat eddig két tömbben tároltunk: double x[100] és double y[100] Mostantól írhatjuk majd C++-ban, hogy koord k[100]

struct #include <iostream> using using namespace std; std; struct koord koord { double x,y; x,y; }; }; int int main() { koord koord k; k; k.x=1.0; k.y=1.0; cout cout << << "[" "[" << << k.x k.x << << "," "," << << k.y k.y << << "]" "]" << << endl; endl; return 0; 0; }

struct A struct kulcsszó jelentése: most egy új típust fogok leírni struct név { T1 mező1, mező2..; T2 mezőx,..;... }; A típus neve bármi lehet, ami nem foglalt még T1, T2,.. típusoknak már ismert típusúak legyenek A mezőnevek különbözőek legyenek

A mezők A struct mezőkből áll ( tag, angolul member ) Minden mező egy már ismert típusba sorolható, és változóként használható: kaphat értéket, olvasható, referálható, stb. A mezők használatakor a struct típusú változók után '.' karakterrel elválasztva a mezőnevet kell írni Tehát az előző példában a 'k.x' jelentése: a k változó koord típusú, annak az x mezője, tehát egy double típusú érték

Mező vs változó Változónak szokás nevezni mindent, amit külön deklaráltunk Mezőt a többi mező nélkül nem lehet deklarálni Egy struct egy mezőjét külön nem deklaráltuk, de mégis úgy használjuk, mint egy változót: adunk neki értéket, kiolvassuk, stb A szóhasználat tehát nem a képességeket, hanem a szerepet fedi: önállóan használandó, vagy egy nagyobb adatcsoport része?

Mi legyen mező, és mi ne? A mezők összessége mindig a struct szerepét teljesen töltse ki, és ne legyen benne felesleg Reprezentáció : egy absztrakt fogalom ábrázolása meglevő típusokkal pl. 2D koordináta két valós számmal, racionális szám két egész számmal, mint számláló és nevező A ciklusváltozó például nincs a mezők között: nem tartozik a fontos adatokhoz Az viszont nem nagy baj, ha a teljes értékkészletek nincsenek kihasználva, pl. tanuló jegye int mező. Ez csak kis baj.

struct és a típusok Az adott struct leírása után a megadott név már egy kész típus, használható deklarációkban, paraméterlistákban Akár egy következő struct mezőjénél is, vektorban, primitív tömbben, stb.. A struct mezője is lehet vektor, vagy primitív tömb Fontos, hogy a forráskód fentről lefelé olvasva ezt a sorrendet betartsa

struct összefoglalás A struct akkor jó, ha A neve és a szerepe jól illeszkedik egymáshoz A szerepe és a mezői között fennáll a kölcsönös szükségesség Csak a fontos adatok vannak a mezők között (nem kerül bele irreleváns (pl. ciklusváltozó) vagy mindenhol egyforma adat) Minden fontos adat benne van A mezők által meghatározott szerep és a felhasználás harmonikus Minden mezőt felhasznál a feladat megoldása

Rövid kitérő a számábrázoláshoz Az EGÉSZ illetve VALÓS típusok nevei azt a látszatot keltik, hogy a típusértékhalmaz a teljes egész illetve valós számokat fedi Ez természetesen lehetetlen, véges hosszú memóriaszeletek állnak rendelkezésre a számok ábrázolásához A fenti típusok tehát nem mindenben viselkednek a várakozásoknak megfelelően

Rövid kitérő a számábrázoláshoz Például az EGÉSZ 32 bites szám, tehát legfeljebb 2 32 féle értéket vehet fel. Ezt praktikusan a -2 31.. +2 31-1 tartományra tolták: -2147483648.. 2147483647 kettes komplemens kódolás Ennek az a következménye, hogy 2147483647 + 1 = -2147483648 vagy 16 biten (short): 32767+1=-32768 Ezt a jelenséget túlcsordulásnak nevezik

Rövid kitérő a számábrázoláshoz A valós számok véges ábrázolása miatt pontatlan Számológépről ismerős lehet: 3 gyökének a négyzete 2.99999999 Ebből kifolyólag soha nem vizsgáljuk programban egy valós típusba tartozó változó egyenlőségét semmivel

Rövid kitérő a számábrázoláshoz A valós számokat X * 2 Y alakban tárolják, visszavezetve az egész számokra Pl 32 bites esetben 23 bit X-re, 8 bit Y-ra, plusz előjel Ennek következménye, hogy nem mindenhol egyformán sűrű az ábrázolás, ha 23 kettedesjegynél nagyobb a nagyságrendi különbség, akkor előfordulhat, hogy A 0, de A+B=B

forrás: xkcd