A C++ PROGRAMOZÁS ALAPJAI 2. óra IDE, Változók, vezérlési szerkezetek A Visual Studio 2013 Community Edition használata 1. Új projekt létrehozása 1. File New Project 2. Válasszuk ki bal oldalt az Other languages, Visual C++, Win32 kategóriában a Win32 Console Application sablont. Adjuk meg a projekt nevét, majd kattintsunk az OK gombra. 1
A megjelenő Varázsló ablakban kattintsunk a Next gombra. 4. A Varázsló második oldalán jelöljük be az Empty Project opciót, majd kattintsunk a Finish gombra. 2
2. A felhasználói felület felépítése A felhasználó felület három legfontosabb területe a Solution Explorer (1.), a kódszerkesztő (2.) és a hibalista (). A Solution Explorer tartalmazza a projektjeinket, illetve a hozzájuk tartozó fájlokat mappákba rendezve. A működése nagyon hasonlít a Windows Explorer működéséhez. Az egyes mappákon és fájlokon jobb kattintással számos opció érhető el. A kódszerkesztő egy okos szövegszerkesztő, ami egyrészt kiszínezi a felismert kódszavakat (pl. kékkel a nyelv kulcsszavait), másrészt gépelés közben javaslatokat tesz az adott ponton felhasználható típusokról, utasításokról, és még sok másról (kódkiegészítés). A megjelenő listán a nyílbillentyűkkel tudunk navigálni, a megfelelő kiválasztása után pedig az Enter leütésével szúrhatjuk be őket. A hibalista a kódban aktuálisan meglévő hibákról ad tájékoztatást. A legtöbb hibát az IntelliSense nevű technológia (ami a kódkiegészítést is végzi) már a kód írása közben jelenti, de legkésőbb a program lefordításakor minden hiba megjelenik a listában. Gyakran előfordul, hogy egyetlen hiba más hibák egész sorozatát idézi elő ilyenkor az hiba elsődleges forrását kell megkeresni és kijavítani. 2. 1. 3
Forrásfájlok létrehozása A program kódját egy vagy több forrásfájlban tárolhatjuk. Ezeket a projetk különböző mappáiban tárolhatjuk, de egyelőre mi csak a Source Files mappát használjuk. 1. Kattintsunk jobb gombbal a Source Files mappára a Solution Explorerben, majd válasszuk az Add menü New Item lehetőségét. 2. Válasszuk ki a C++ File elemet, adjuk meg a fájl nevét (a legelső fájl rendszerint a main.cpp nevet kapja), majd kattintsunk az Add gombra. Megjegyzés: Elég a main nevet megadni, a.cpp kiterjesztést a Visual Studio automatikusan utána fogja illeszteni. 4
4. A program fordítása és futtatása Ahhoz, hogy a programkódból futtatható fájlt készítsünk, le kell fordítanunk (Compile és Link, egyben gyakran Build). 1. A program lefordítását az F6 -os billentyű lenyomásával, vagy a Build Build Solution menüvel indíthatjuk. 2. Ha a program nem tartalmaz hibát, az ablak bal alsó részén a Build started üzenet után megjelenik a Build succeeded. felirat. Ha a program hibás volt, a hibalistában megjelennek a hibák, alul pedig a Build failed. üzenet lesz. A program futtatásához az F5 vagy Ctrl+F5 billentyűparancsok, illetve az ezeknek megfelelő Debug Start Debugging vagy Debug Start Without Debugging menüpontok használhatók. Debugging esetén a Visual Studio hozzákapcsolódik a programhoz, lehetővé téve többek között a programfutás szabályozását vagy a változók értékeinek vizsgálatát. A program futtatásakor a Visual Studio alapértelmezés szerint megkérdezi, hogy le kívánjuk-e fordítani a program aktuális verzióját (ha még nem tettük). Többnyire ez a kívánt viselkedés, így célszerű a beállításokban átállítani az alapértelmezett műveletet. Ehhez a Tools Options menüvel nyissuk meg a beállításokat, majd navigáljuk a Projects and Solutions, Build and Run kategóriához. Itt a bekeretezett beállítást állítsuk Always build -re. 5
C++ alapok 1. Hello World! 6. cout << "Hello world!" << endl; 7. return 0; 8. } Kiíratás a szöveges kimenetre (6. sor) main függvény (4. sor) main függvény vége 0 visszatérési értékkel (7. sor) 2. Kifejezések 6. int money, start = 100000; 7. const float rate = 0.02; 8. 9. /* How much money will I have? 10. Calculate for one year. */ 11. money = start * (1 + rate); 12. cout << "After first year: " << money << endl; 1 14. // After the second year? 15. money *= 1 + rate; 16. cout << "After second year: " << money << endl; 17. return 0; 18. } Egész típusú változók létrehozása, inicializálása (6. sor) Lebegőpontos konstans létrehozása (7. sor) Többsoros komment (9-10. sor) Műveletvégzés és értékadás (11. sor) Egysoros komment (14. sor) Beíró művelet, nem kell zárójel (15. sor) 6
Pre- és posztfix inkrementálás 6. int a = 1, b = 2; 7. cout << "a = " << a << "; b = " << b << endl 8. << endl << "a = b++;" << endl; 9. a = b++; 10. cout << "a = " << a << "; b = " << b << endl 11. << endl << "a = ++b;" << endl; 12. a = ++b; 1 cout << "a = " << a << "; b = " << b << endl; 14. } Posztfix inkrementálás operátor (10. sor) Prefix inkrementálás operátor (14. sor) Sortörés az utasításban (7. és 10. sor) 4. Beolvasás és elágazás 6. int age; 7. cout << "Tell me your age!" << endl; 8. cin >> age; 9. 10. bool even = age % 2 == 0; 11. if (even && age % 3 == 1) 12. cout << "You will be rich!" << endl; 1 else if (!even && age < 24) 14. cout << "You will be happy!" << endl; 15. else 16. { 17. int timeleft = 100 - (age % 10) - age; 18. cout << "You will live for " << timeleft << " more years!" << endl; 19. } 20. return 0; 21. } Beolvasás a szöveges bemenetről (8. sor) Logikai változó létrehozása és inicializálása relációs kifejezéssel, maradékképzés (10. sor) Feltételes elágazás, logikai kifejezés (11. sor) Feltételes elágazás továbbfűzése, negálás operátor (1 sor) Feltételes elágazás egyéb ága (15. sor) Az egyéb ághoz tartozó utasításblokk (16-19. sor) 7
5. A while ciklus 6. float current, rate, target; 7. cout << "Current:\t"; cin >> current; 8. cout << "Rate:\t\t"; cin >> rate; 9. cout << "Target:\t\t"; cin >> target; 10. 11. int years = 0; 12. while (current < target) 1 { 14. current *= 1 + rate; 15. years++; 16. } 17. cout << "Years to reach target: " << years << endl; 18. return 0; 19. } Speciális karakter a szövegben ( \t a tabulátor jelölése), több utasítás egy sorban, sortörés hiánya a kiírás végén (7-9. sor) Elöltesztelő while ciklus (12. sor) A ciklushoz tartozó utasításblokk (13-16. sor) 6. A for ciklus 6. float current, rate, years; 7. cout << "Current:\t"; cin >> current; 8. cout << "Rate:\t\t"; cin >> rate; 9. cout << "Years:\t\t"; cin >> years; 10. 11. for (int i = 0; i < years; ++i) 12. { 1 current *= 1 + rate; 14. } 15. cout << "Money after " << years 16. << (years == 1? " year: " : " years: ") 17. << current << endl; 18. return 0; 19. } for ciklus és a hozzátartozó blokk (11-14. sor) A ternális logikai operátor (16. sor) 8
7. A do while ciklus 2. #include <cstdlib> #include <ctime> 4. using namespace std; 5. 6. int main() 7. { 8. //srand(time(null)); 9. int secret = (float)rand() / RAND_MAX * 10 + 1; 10. int guess; 11. 12. cout << "Guess my secret number (1 to 10)" << endl; 1 do 14. { 15. cin >> guess; 16. if (guess < secret) 17. cout << "It is a bit higher..." << endl; 18. if (guess > secret) 19. cout << "It is a bit lower..." << endl; 20. } while (guess!= secret); 21. cout << "Congratulations!" << endl; 22. return 0; 2 } A C++ sztenderd programkönyvtár beemelése a véletlenszám-generátor használatához (2. sor) A C++ időkezelő programkönyvtár beemelése az aktuális idő lekérdezéséhez ( sor) A véletlenszám-generátor inicializálása az aktuális rendszeridővel, NULL paraméterrel (8. sor) Véletlen szám generálása, egész szám lebegőpontossá alakítása (9. sor) Hátultesztelő do while ciklus és a hozzátartozó blokk (13-20. sor) Házi feladatok 1. Írj egy programot, ami a felhasználó által megadott kezdőtőkével, kamattal, és éves betéttel számolva megadja, hogy a megadott célösszeg hány év alatt érhető el, és mennyi lesz az utolsó év végén az aktuális tőke. (Gyakorló feladat) 2. Írj egy programot, ami egy másodfokú polinom három együtthatóját beolvasva kiírja a polinom valós gyökeit, vagy üzenetben tájékoztatja a felhasználót, ha nincs valós gyök. A gyökvonáshoz be kell emelni a cmath nevű programkönyvtárat. Maga a gyökvonás az sqrt( ) függvény segítségével végezhető el. (1 pont) Írj egy programot, ami beolvas egy számot a felhasználótól, majd kiszámolja és kiírja a Fibonacci sorozat első annyi elemét. (2 pont) 4. Írj egy programot, ami a felhasználó által megadott kezdőtőkével és éves betéttel számolva megadja, hogy a megadott célösszeg átlagosan hány év alatt érhető el, hogyha az éves hozam minden évben véletlenszerűen alakul 0% és 10% között. A becsléshez használt szimulációk számát a felhasználó adja meg! (5 pont) 9
Adattípusok Operátorok Character types Integer types (signed) Integer types (unsigned) char Exactly one byte in size. At least 8 bits. char16_t Not smaller than char. At least 16 bits. char32_t Not smaller than char16_t. At least 32 bits. wchar_t Can represent the largest supported character set. signed char Same size as char. At least 8 bits. signed short int Not smaller than char. At least 16 bits. signed int Not smaller than short. At least 16 bits. signed long int Not smaller than int. At least 32 bits. signed long long int Not smaller than long. At least 64 bits. unsigned char unsigned short int unsigned int (same size as their signed counterparts) unsigned long int unsigned long long int float Floating-point types double Precision not less than float. long double Precision not less than double. Boolean type bool Void type void no storage Level Precedence group Operator Description Grouping 1 Scope :: scope qualifier Left-to-right ++ -- postfix increment / decrement 2 Postfix (unary) () functional forms [] subscript Left-to-right. -> member access ++ -- prefix increment / decrement ~! bitwise NOT / logical NOT + - unary prefix 3 Prefix (unary) & * reference / dereference Right-to-left new delete allocation / deallocation sizeof parameter pack (type) C-style type-casting 4 Pointer-to-member.* ->* access pointer Left-to-right 5 Arithmetic: scaling * / % multiply, divide, modulo Left-to-right 6 Arithmetic: addition + - addition, subtraction Left-to-right 7 Bitwise shift << >> shift left, shift right Left-to-right 8 Relational < > <= >= comparison operators Left-to-right 9 Equality ==!= equality / inequality Left-to-right 10 And & bitwise AND Left-to-right 11 Exclusive or ^ bitwise XOR Left-to-right 12 Inclusive or bitwise OR Left-to-right 13 Conjunction && logical AND Left-to-right 14 Disjunction logical OR Left-to-right = *= /= %= += -= 15 Assignment-level expressions >>= <<= &= ^= = assignment / compound assignment Right-to-left?: conditional operator 16 Sequencing, comma separator Left-to-right 10