Programozási alapismeretek 2009/2010

Hasonló dokumentumok
Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Géptermi zh-írás forgatókönyve

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

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

Maximum kiválasztás tömbben

Programozási tételek és C++

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

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

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Programozási alapismeretek 3. előadás

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

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

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

1. Alapok. Programozás II

117. AA Megoldó Alfréd AA 117.

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

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

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

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

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

Informatika terméktervezőknek

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

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

INFORMATIKA tétel 2018

Bevezetés a programozásba I.

1. Egyszerű (primitív) típusok. 2. Referencia típusok

500. AA Megoldó Alfréd AA 500.

Bevezetés a programozásba I.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Bevezetés a C++ programozásba

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

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 1. előadás

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

INFORMATIKA tétel 2017

Szerző. Természetesen aktualizálandó adatok.

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

INFORMATIKA tétel 2019

Pénzügyi algoritmusok

Programozás C++ -ban 2007/1

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

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

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

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

A C# programozási nyelv alapjai

Bevezetés a C++ programozási nyelvbe

Algoritmizálás és adatmodellezés tanítása 1. előadás

Programozás Minta programterv a 1. házi feladathoz 1.

Programozási alapismeretek. 1. előadás. A problémamegoldás lépései. A programkészítés folyamata. Az algoritmus fogalma. Nyelvi szintek.

Programozás C és C++ -ban

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Az első fájlos program

Pénzügyi algoritmusok

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Programozás II gyakorlat. 4. Öröklődés

Bevezetés a programozásba 2

Programozás C++ -ban

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

500. CC Megoldó Alfréd CC 500.

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozás alapjai 9.Gy: Struktúra 2.

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

10. gyakorlat Tömb, mint függvény argumentum

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

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Gregorics Tibor Egyszerű programok C++ nyelvi elemei 1

Alprogramok, paraméterátadás

Bevezetés a programozásba I 7. gyakorlat. C++: szövegkezelés, szekvenciális fájlkezelés. Szövegkezelés Karakterkezelés

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

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

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

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

Bevezetés a programozásba I.

Bevezetés a programozásba I.

Elemi alkalmazások fejlesztése I. Olvassunk be egy fájlból egész számokat egy tömbbe. Keressük meg a tömb valamely

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

Sejtautomaták. Szőke Kálmán Benjamin - SZKRADT.ELTE május 17.

4. Öröklődés. Programozás II

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

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

Szövegek C++ -ban, a string osztály

5. Gyakorlat. struct diak {

INFORMATIKA javítókulcs 2016

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Alkalmazott modul: Programozás 2. fejezet. C++ alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Felhasználó által definiált adattípus

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

128. AA Megoldó Alfréd AA 128.

Alkalmazott modul: Programozás. C++ alapismeretek. C++ alapismeretek Történet

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

INFORMATIKAI ALAPISMERETEK

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

Objektum elvű alkalmazások fejlesztése 3. beadandó

Gregorics Tibor Egyszerű programok C++ nyelvi elemei 1

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

Átírás:

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 1

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 2

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 3

Ennek a játék a betűkkel -szerű absztrakciónak az az értelme, h. észleljük: még formálisan is igazítani tudtuk a konkrét feladat specifikációját az absztrakthoz. Ára: egy megfelelőképpen definiált szumma, ill. 2-változós operátor. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 4

és folytatható a játék a betűkkel -szerű alakítgatás, csak éppen most az algoritmizálásnál. Ára már csak egy 2-változós operátor algoritmikus definiálhatósága. Ennek nincs akadálya a függvények definiálhatóságának ismeretében, de ennek leírása helyett lássuk a C++ kódját! Szlávi-Zsakó: Programozási alapismeretek 7. előadás 5

//név: Szlávi Péter //ETR-azonosító: SZPKAFT.ELTE //drótposta-cím: szlavip@elte.hu //Feladat: // Adott N bevétel és kiadás. Mennyi az össz jövedelem? //Kódolási újdonság: // operátor bevezetése a kód jobb olvashatóságához //Egyszerűsítés: // konstans bemenet -- nincs beolvasás #include <iostream> #include <windows.h> using namespace std; //TNyer típus definiálása: struct TNyer{int bev, kia;};//reprezentáció int operator +(int _s, TNyer _x);//tnyer típusú hozzáadás operátor fejsora //a lényegi számítás függvénye: int sum(int _n, const TNyer _t[]);//_n TNyer 'összege' függvény fejsora //Billentyűre várás: void billrevar(); Szlávi-Zsakó: Programozási alapismeretek 7. előadás 6

int main() { //bemenet -csak most: konstansok, így nem kell beolvasni!-: const TNyer Jov[]={{10,5},{5,10},{100,50}};//jövedelem tömb értékei int N=sizeof Jov / sizeof(tnyer);//aktuális elemszám //kimenet -mindjárt számítással-: int S=sum(N,Jov); //eredménymegjelenítés: cout << "Ossz jovedelem:" << S << endl; } billrevar(); return 0; //TNyer típusú hozzáadás operátor definíciója: int operator +(int _s, TNyer _x) { return _s + _x.bev - _x.kia; } //_n TNyer 'összege' függvény definíciója: int sum(int _n, const TNyer _t[]) { int sum=0; for (int i=0; i<_n; i++) { sum=sum+_t[i]; } return sum; } void billrevar() { cout << endl; system("pause"); } Szlávi-Zsakó: Programozási alapismeretek 7. előadás 6

Ad : a hóval és nappal szembeni természetes elvárások. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 7

C++ próbához: A dátum típus definíciója és az operátor prototípusa: struct datum{int ho; int nap;}; bool operator <=(datum d1, datum d2);//érdekes: ha itt '<=' helyett csak '<', nem jelez hibát?!? és az operátor definiálása: bool operator <=(datum d1, datum d2) { return d1.ho<d2.ho (d1.ho==d2.ho && d1.nap<=d2.nap); } Szlávi-Zsakó: Programozási alapismeretek 7. előadás 8

Ez a rendezési operátor is megalkotható C++-ban az előző minta alapján. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 9

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 10

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 11

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 12

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 13

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 14

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 15

//egy (_min,_max) közötti értékű, int elemekből álló, //(maxn, maxm) méretekkel deklarált _mat mátrix beolvasása billentyűzetről: void int_tomb_be(string _kerd, int _min, int _max, int _mat[maxn][maxm], int &_n, int &_m, int maxn, int maxm) { cout << _kerd << endl; //tényleges méretek beolvasása: be_int("sorok száma",_n,0,maxn,"hibás a sorok száma!"); be_int("oszlopok száma",_m,0,maxm,"hibás az oszlopok száma!"); //a mátrix beolvasása: cout << "Kérem az elemeket!" << endl; for (int i=0;i<_n;++i) { for (int j=0;j<_m;++j) { cout << "(" << i+1 << "," << j+1 << ") :"; be_int("",_mat[i][j],_min,_max,"hibás az elem!"); } } } Szlávi-Zsakó: Programozási alapismeretek 7. előadás 16

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 17

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 18

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 19

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 20

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 21

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 22

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 23

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 24

A Belső és a Fehér két logikai függvény, nevük alapján kitalálható szemantikával. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 25

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 26

A specifikációbeli alapgondolat, az (i,j) belső pont-e, helyett az algoritmusban az (i,j) pont egyes szomszédjai belső pontok-e szerepel. Ez magyarázza a formális különbséget. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 27

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 28

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 29

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 30

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 31

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 32

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 33

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 34

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 35

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 36

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 37

#include <iostream> #include <fstream> using namespace std; int fajlbol_string_tombbe(string fn, int &n, string t[], int maxn); int main() { const int maxn=10; int n; string adatok[maxn]; string fn; bool ujra; char k; int hk;//hibakód do{ cout << "A próbafájl neve:"; cin >> fn; hk=fajlbol_string_tombbe(fn,n,adatok,maxn); cout << "Hibakód:" << hk << endl; switch (hk) { case 0: ujra=false; break; case 1: cout << "Nem létezik a fájl. Újra? (I/.)"; cin >> k; ujra=toupper(k)=='i'; break; case 2: cout << "Túl nagy elemszám. Újra? (I/.)"; cin >> k; ujra=toupper(k)=='i'; break; Szlávi-Zsakó: Programozási alapismeretek 7. előadás 38

case 3: cout << "Inkonzisztens adatfájl. Újra? (I/.)"; cin >> k; ujra=toupper(k)=='i'; }; }while (ujra); } if (hk!=1) { cout << "n:" << n << endl; cout << "A teljes tömbtartalom:" << endl; for (int i=0; i<maxn; i++) { cout << i+1 << ".sora:'" << adatok[i] << "'" << endl; } } return 0; int fajlbol_string_tombbe(string fn, int &n, string t[], int maxn) /* fn fájlból feltölti a t[n] tömböt stringekkel; elvárások: LÉTEZŐFÁJL(fN) ÉS 0<=n<=maxN ÉS FÁJL_SORAI_SZÁMA(fN)=n+1 Uf: NEM LÉTEZŐFÁJL(fN) => eredmény=1 ÉS NEM 0<=n<=maxN => eredmény=2 ÉS FÁJL_SORAI_SZÁMA(fN)<>n+1 => eredmény=3 hibátlanfájl(fn) => eredmény=0 ÉS */ { int hibakod=0;//nincs hiba ifstream if(fn.c_str()); if (!if.is_open()) { hibakod=1;//nem létező fájl } else { if >> n; string tmp; getline(if,tmp);//az 1. sor maradékát eldobjuk if (n>maxn) { hibakod=2;//túl sok adat } else { int i=0; while (!if.eof() && i<=maxn) { getline(if,t[i++],'\n'); } if (i!=n) { hibakod=3;//inkonzisztens fájl } } }; if.close(); Szlávi-Zsakó: Programozási alapismeretek 7. előadás 38

} return hibakod; /* második megoldás: #include <iostream> #include <fstream> //a text fájl kezeléséhez using namespace std; int fajlbol_string_tombbe(string fn, int &n, string t[], int maxn); int main() { string fn;//fájlnév int n;//elemszám const int maxn=10;//tömb maximális elemszáma string t[maxn];//elemek //segédváltozók: int siker;//fájlnyitáshoz char tmp; } cout << "Szövegtömb beolvasása szövegfájlból" << endl; do{ cout << "Fájlnév:"; cin >> fn; siker=fajlbol_string_tombbe(fn,n,t,maxn); switch (siker) { case 1: cout << "Nem létezik a fájl. Újra? (I/.)"; cin >> tmp; siker=toupper(tmp)=='i'; break; case 2: cout << "Túl nagy elemszám. Újra? (I/.)"; cin >> tmp; siker=toupper(tmp)=='i'; break; case 3: cout << "Inkonzisztens adatfájl. Újra? (I/.)"; cin >> tmp; siker=toupper(tmp)=='i'; }; }while (siker!=0); return 0; int fajlbol_string_tombbe(string fn, int &n, string t[], int maxn) // // fajlbol_string_tombbe: // 0, ha OK; // 1, ha nem létező fájl; // 2, ha túl nagy az n; // 3, ha inkonzisztens a fájl. // { ifstream szovegfajl (fn.c_str());//megnyitás olvasásra //a megnyithatóság ellenőrzése, és esetleges abortálás if (!szovegfajl.is_open()) { return 1; }; //a fájl nyitva, elemszámolvasás: szovegfajl >> n;//elemszám beolvasása... Szlávi-Zsakó: Programozási alapismeretek 7. előadás 38

cout << "Elemszám:" << n << endl;//... és ellenőrzés célú kiírása string tmp;//a maradék sor lenyeléséhez getline(szovegfajl,tmp,'\n');//a maradék sor lenyelése if (n>maxn) { return 2; }; //a fájlméret OK, adatok olvasása: int i=0;//a beolvasott adatok száma while (!szovegfajl.eof()) { ++i; if (i>n) { return 3;//n-nél több elem }; getline(szovegfajl,t[i]);//a szöveg olvasása... cout << i << ".:" << t[i] << endl;//... és ellenőrzés célú kiírása }; szovegfajl.close();//lezárás if (i<n) { return 3;//n-nél kevesebb elem }; return 0;//a beolvasás: OK } */ Szlávi-Zsakó: Programozási alapismeretek 7. előadás 38

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 39

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 40

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 41

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 42

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 43

N=0 és N=1 esetén a kimenet üres! Szlávi-Zsakó: Programozási alapismeretek 7. előadás 44

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 45

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 46

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 47

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 48

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 49

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 50

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 51

Ad : természetes elvárások a telefonszámmal és az e-levéllel szemben. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 52

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 53

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 54

Szlávi-Zsakó: Programozási alapismeretek 7. előadás 55