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



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

Bevezetés a programozásba I.

Bevezetés a programozásba I.

Bevezetés a C++ programozásba

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

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

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

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

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

Pénzügyi algoritmusok

Programozás C++ -ban 2007/1

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

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

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!

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

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

1. Alapok. Programozás II

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

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

Programozási alapismeretek 1. előadás

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

A C# programozási nyelv alapjai

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

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

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

BASH script programozás II. Vezérlési szerkezetek

Informatika terméktervezőknek

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

Bevezetés a programozásba I.

Programozás I. gyakorlat

Maximum kiválasztás tömbben

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

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

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

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

C programozási nyelv

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

Occam 1. Készítette: Szabó Éva

1. Alapok. #!/bin/bash

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.

Operációs rendszerek gyak.

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

Bevezetés a programozásba I.

Programozás C és C++ -ban

INFORMATIKA tétel 2019

A C programozási nyelv II. Utasítások. A függvény.

AWK programozás, minták, vezérlési szerkezetek

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

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

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

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

Pénzügyi algoritmusok

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

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Bevezetés a programozásba I.

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

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

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Bevezetés a programozásba

A C# PROGRAMOZÁSI NYELV

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

PPKE-ITK Bevezetés a programozásba 1.

INFORMATIKA tétel 2018

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

AWK programozás, minták, vezérlési szerkezetek

Python tanfolyam Python bevezető I. rész

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

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Programozási alapismeretek 3. előadás

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

Programozási alapismeretek 2009/2010

Delphi programozás I.

Szkriptnyelvek. 1. UNIX shell

Bevezetés a programozásba I.

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

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

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Szoftvertervezés és -fejlesztés I.

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

Programzás I gyakorlat

Programozási nyelvek (ADA)

Objektumorientált Programozás III.

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

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

Szelekció. Döntéshozatal

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

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

Flex tutorial. Dévai Gergely

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

Programozási nyelvek Python

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

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

INFORMATIKA tétel 2017

Programozási nyelvek JAVA EA+GY 1. gyakolat

C++ programok fordítása

Átírás:

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

ISMÉTLÉS PLanG features Utasítások Értékadás, KI:, BE: Programkonstrukciók Elágazás Ciklus Típusok Egész, valós, logikai, szöveg, karakter, fájl Típuskonstrukciók Tömb

Programozási nyelvek A PLanG interpretált nyelv A programszöveget a keretrendszer értelmezi Ennek eredménye a keretrendszer belső állapotának változása, a futtatáshoz szükséges adatok előkészítése, pl. mely sorokat kell megismételni a ciklus futtatásakor A program futását a keretrendszer intézi Az elkészített programból nem keletkezik.exe vagy más, önállóan futtatható állomány

Programozási nyelvek Interpretált nyelvek (interpret) PLanG Excel, Matlab, Lisp, JavaScript, Smalltalk Lefordított nyelvek (compile) C/C++ Pascal, Ada, Eiffel Hibridek (fordítás interpretálandó kódra) Java, Python, PHP A GPU programozás tovább bonyolítja a képet

C++ A C++ egy általános célú programozási nyelv Mindent meg lehet csinálni C++-ban* Fordítást igényel Hibaellenőrzés szintaktikai: lemaradt zárójelek, befejezetlen sorok szemantikai: megfelelő típusok a műveletek körül linkelési: megvannak-e a szükséges könyvtárak Kódgenerálás Elkészül a.exe vagy egyéb futtatható fájl * Néhány kivételért keressétek Tihanyi Attilát, de PC-n tényleg mindenre jó a C++

C++ PROGRAM példa KI: KI: "Hello" PROGRAM_VÉGE #include <iostream> using namespace std; int main() { cout << << "Hello"; }

Ökölszabály PLanG program C++-osításához PROGRAM [bármi] KI: KI: "Hello" PROGRAM_VÉGE #include <iostream> using namespace std; int main() { cout << << "Hello"; } Megnézzük ennél részletesebben is hamarosan, mi mit jelent

Fejlécek C++-ban használhatunk dolgokat, amit mások már megcsináltak #include <fejlécnév> A félév során szükséges fejlécek <iostream> : kimenet, bemenet (cout, cin) <fstream> : fájl (ifstream, ofstream) <string> : szöveg típus (string) <cmath> : matematikai függvények ( sin(x) ) <cstdlib> : véletlen szám, egyebek ( rand(), abs(x) ) Ezek sokszor egymásra épülnek

Névterek namespace arra való, hogy ugyanazt a nevet használhassuk más-más kontextusban más-más értelemben Az std névteret fogjuk használni a cout teljes neve std::cout, aminek az olvasata a cout azonosító, amelyik az std névtérben van a using namespace std azt jelenti, hogy ezeket az std:: előtagokat nem kell kiírni

Vagyis PROGRAM [bármi] KI: KI: "Hello" PROGRAM_VÉGE #include <iostream> using namespace std; int main() { cout << << "Hello"; } A cout azonosító az iostream könyvtárban van, az std névtérben

Típusok VÁLTOZÓK: i: i: EGÉSZ, v: v: VALÓS, c: c: KARAKTER, s: s: SZÖVEG, bf: bf: BEFÁJL, kf: kf: KIFÁJL, tomb: Típus[méret] int int i=0; double v=0; char c=' c=' '; '; string s; s; ifstream bf; bf; ofstream kf; kf; Típus tomb[méret];

Elágazás HA HA FeltKif AKKOR Utasítások HA_VÉGE HA HA FeltKif AKKOR Utasítások KÜLÖNBEN Utasítások-Különben HA_VÉGE if if (FeltKif) { Utasítások } if if (FeltKif) { Utasítások } else { Utasítások-Különben }

Ciklus CIKLUS AMÍG FeltKif Utasítások CIKLUS_VÉGE while (FeltKif) { Utasítások } CIKLUS Utasítások AMÍG FeltKif do do { Utasítások } while (FeltKif);

Ciklus: a for ciklus i := := 0 CIKLUS AMÍG i<10 ciklusmag i:=i+1 CIKLUS_VÉGE for (i=0;i<10;i++) { ciklusmag } Az változó++ jelentése: a változó értéke nőjön egy értéknyit. Innen kapta a nevét a C++, miszerint a C nyelv után következő nyelvről van szó

Blokkok Észrevehető, hogy a PLanG-féle XY_VÉGE jelek C++ nyelvben egyformák: ' } ' A blokkos szerkezet alapvető, blokkot bármikor nyithatunk, ez jelenti azt, hogy egy utasításként gondolunk egy programrészletre ugyanaz a while (felt) ut; mint while (felt) { ut }; NEM ugyanaz a while (felt) ut1;ut2; mint while (felt) { ut1; ut2 }; blokk nélkül az ut1 a ciklusmag, és ut2 már nem az

Értékadás, I/O a := := kif kif BE: BE: Val1, Val2 BE BE bf: bf: Val1, Val2 BE: BE: SzovValt BE BE bf: bf: SzovValt KI: KI: Kif1, Kif2 KI: KI: SV SV KI KI kf: kf: Kif1, Kif2 a = kif kif cin cin >> >> Val1 >> >> Val2; bf bf >> >> Val1 >> >> Val2; getline(cin, SzovValt); getline(bf, SzovValt); cout << << Kif1 << << Kif2; cout << << endl; kf kf << << Kif1 << << Kif2; Tanulság: a cin és a cout a sima bemenet és kimenet nevei. Maga az író és az olvasó művelet a << és a >>.

Értékadás, I/O Az értékadás jele a =! Az egyenlőség vizsgálat jele más lesz. ( == ) Könnyű összekeverni Össze is fogod keverni A cin bemenet a konzol, ahová gépelni lehet A PLanG-gal ellentétben a cin >> x beolvasás C++ -ban blokkol, tehát vár, amíg begépelünk valamit, a program addig nem fut tovább Interakció!

Értékadás, I/O a Forrás >> változó típusos olvasás, tehát a változó típusától függően működik, pontosan mint a PLanG BE: változó a getline(forrás, szövegesváltozó) típus nélküli olvasás, kizárólag szöveges változóba lehet így olvasni a Forrás >> szövegesváltozó egy szót olvas be. Szónak számít az, ami szóközzel, tab-bal, vagy sorvégével van elválasztva.

Példa: összegzés C++-ban, végjeles sorozatra #include <iostream> using using namespace std; std; int int main() { int int a; a; int int sum=0; cin cin >> >> a; a; while while (a>=0) { sum sum = sum sum + a; a; cin cin >> >> a; a; } cout cout << << "Összeg: " << << sum sum << << endl; endl; }

Logikai eredményű műveletek PLanG a = b a /= b a < b a >= b A ÉS B A VAGY B NEM A C++ a == b a!= b a < b a >= b A && B A B! A

Egész eredményű műveletek PLanG -a a a + b a - b a * b a DIV b a MOD b VÉL a C++ -a abs(a) a + b a - b a * b a / b a % b rand()%a

Az osztásról Van két osztás művelet egész / egész (PLanG DIV ) valós / valós (PLanG / ) Ezek egyformán néznek ki, de másképp működnek 1/2 == 0! double(1)/double(2) == 0.5 1.0/2.0 == 0.5

Szöveg eredményű műveletek PLanG "a" s s[i] s[k : v] s1 @ s2 s @ kar s1+s2 C++ "a" s.length() s[i] s.substr(k, v-k) s1.find(s2) s.find(kar) s1+s2

A karakterekről char a; A char típus egyszerre jelent számot (8 bites, előjeles, -128.. 127) és karaktert ASCII táblázat ('A':65, '1':49, 'a':97,...) a cout << a egy karaktert fog kiírni a cout << int(a) pedig az ASCII kódját, mert az átalakítással számként kezelést kértünk

Függvények Láthattunk több olyan C++ elemet, ami azonosító + zárójelpár, amin belül paraméterek vannak Ezek függvényhívások Önálló programrészleteket tartalmaznak, amiknek a bemenete a paraméterlista kimenete pedig a kifejezés eredménye Pl. v1 = sin(v2) jelentése: indítsd el a sin nevű függvényt v2 bemenettel, és az eredményt írd a v1-be

Függvények PLanG programban is használtunk függvényhívásokat, pl VÉL X C++-ban könnyen felismerhető a függvény: mindig kell mögé zárójelet tenni, akkor is, ha nem kell neki paraméter (pl. rand() ) Néhány függvényhívás olyan, hogy egy kiemelt paramétert nem a zárójelbe kell írni, hanem elé, és ponttal kell elválasztani, pl. a string műveletei közül több is, s.length() Ezt egyelőre így fogadjátok el, ez az objektumorientált szintaxis, lesz még róla szó

Markáns különbségek C++-ban ott deklarálsz új változót, ahol jólesik, nem kell kigyűjteni a program elejére Ha egy blokkon belül van egy deklaráció, akkor az a változó csak arra a (legszűkebb) blokkra érvényes, annak végével megszűnik újrafelhasználhatóak a nevek, pl. minden ciklusnak lehet saját i változója (amíg nem egymásba ágyazottak) mégsem keverhetőek össze véletlenül

Markáns különbségek A PLanG véges abban az értelemben, hogy nem bővíthetőek a műveletek C++-ban lehetőség van új függvények létrehozására, ezek megosztására A legtöbb gyakorlati probléma megoldható úgy, hogy az ember megkeresi a megfelelő könyvtárat, #include <fejléc neve>, és a dokumentáció szerint használja grafika, fájlformátumok, adatbázis, hálózat, stb Második félévben...

Markáns különbségek C++-ban nincs nem kapott kezdeti értéket hibaüzenet Memóriaszemét: kapunk valahol egy kis memóriát, ki tudja mi maradt ott az előző programok után Hibaüzenet helyett fura működés Esetleg kaphatunk figyelmeztetést (warning) Érdemes bekapcsolni általában is Ha nem értesz egy figyelmeztetést, az intő jel.

Markáns különbségek C++-ban akkor sincs nem kapott kezdeti értéket hibaüzenet, ha fájl vége után olvasunk tovább Figyelmeztetés sincs Általában végtelen sokáig ugyanazt az értéket ismétli, de bármi más viselkedés előfordulhat

C++ fejlesztői környezetek GCC (windowson MINGW) ingyenes, szabványos fapados CodeBlocks, Dev-C++, GCC-hez feltupírozott szövegszerkesztők Visual Studio, CodeGear (Borland) C++ Builder Színes-szagos Nem szabványos Platformfüggő