1. gyakorlat¶
Bíró¶
A félév során a Bírót használjuk a ZH -hoz, míg a Bíró2-n órai és gyakorló feladatok lesznek
Be kell regisztrálni a Bíróra és Bíró2-re is
Környezet¶
Windows¶
Az alábbiakban három megoldást fogunk ismertetni, amelyből bármelyik megoldás használható az otthoni felkészülés során.
WSL¶
A Windows Subsystem for Linux segítségével Linuxos programokat futtathatunk Windowsos gépünkön. Amennyiben Windows 10-es gépünk van és dual boot vagy virtuális gép telepítése nélkül szeretnénk Linux felületet használni, ez a legegyszerűbb módja annak, hogy a kabinethez hasonló környezetben a GCC fordítóval dolgozzunk.
A WSL használatáról bővebben. A WSL 2 a fent említett rendszer újabb verziója
MinGW¶
A MinGW (Minimalist GNU for Windows) segítségével GNU fordítóprogramokat telepíthetünk Windowsra. Telepítése elején kisebb nehézségekbe ütközhetünk, de ezek után egész félévben segítségünkre lehet.
A MinGW letöltéséhez látogassunk el ide, majd töltsük le a "MinGW Installation Manager (mingw-get)" telepítő alkalmazást. Ezt követően telepítsük fel. Mindent nyugodtan hagyhatunk az alapértelmezett beállításon.
Telepítés után indítsuk el a "MinGW Installation Manager"-t. Itt tudjuk kiválasztani, hogy milyen komponenseket szeretnénk telepíteni.
A kurzus teljesítéséhez szükségünk lesz a "mingw32-gcc-g++-bin" csomagra, ha esetleg hagyományos C fordítót is szeretnénk, akkor a "mingw32-base-bin" csomagot is feltelepíthetjük. A telepítéshez a csomag(ok) melletti checkboxo(ka)t kell kipipálni (Mark for Installation), majd ezt követően az "Installation" menüben lévő "Apply changes" menüpontra kell kattintani, így megkezdődik a kiválasztott csomagok telepítése. Miután ez elkészült, a felugró ablakot a "Close" gomb lenyomásával bezárhatjuk. Ezt követően a MinGW telepítő segédre sincs már szükségünk, azt is bezárhatjuk.
Ahhoz, hogy mindig kényelmesen tudjuk használni a g++
parancsot, célszerű beállítani a PATH környezeti változót.
PATH környezeti változó beállítása Windows 8-ig¶
- Ehhez először is Start menü, majd jobb klikk a Számítógépen (vagy Sajátgépen) és a lenyíló menüben válasszuk a Tulajdonságok menüpontot.
- A bal oldali menüben válasszuk ki a "Speciális rendszerbeállítások" menüpontot.
- A felugró ablakon kattintsunk a Speciális fülre, majd a Környezeti változók gombra.
- A rendszerváltozók közül válasszuk ki a PATH környezeti változót, majd kattintsunk a Szerkesztés gombra.
- Navigáljunk a sor elejére, majd ide írjuk be a MinGW /bin/ könyvtárának elérési útvonalát, és tegyünk a végére egy pontosvesszőt. (Tehát a PATH környezeti változó ehhez hasonlóan kezdődjön (A JDK útvonala adott esetben más lehet!):
C:\MinGW\bin;
- Okézzuk le az összes megnyitott ablakot.
PATH környezeti változó beállítása Windows 10-en¶
- A Windows vagy a kereső gombra kattintva keressünk rá "A rendszer környezeti változóinak módosítása" Vezérlőpult-elemre.
- A megjelenő ablakban kattintsunk a Környezeti változók... gombra.
- Az alsó táblázatban keressük ki a Path változót, jelöljük ki, majd Szerkesztés...
- Kattints az Új gombra, majd a megjelenő szerkeszthető táblázatsorba másold be a MinGW bin mappájának útvonalát.
- OK az összes párbeszédablakon.
Kész a telepítés, ellenőrizzük le, hogy működik-e. Ezt az alábbi módon tehetjük meg: Nyissuk meg a parancssort (Start menü, Futtatás, cmd
), majd írjuk be a g++
parancsot. A parancs hatására a g++ hiányzó input hibaüzenetét kell látnunk.
Microsoft Visual Studio command prompt¶
A Microsoft Visual Studio egy nagyon sokrétűen használható fejlesztői környezet C, C++, C#, stb. fejlesztők számára. Ez a fejlesztői környezeten kívül tartalmaz Windowsra szánt fordítóprogramot is, amit parancssorból is használhatunk. Mielőtt használni tudnánk, fel kell telepítenünk a Visual Studiot, amit itt tölthetünk le (bőven elegendő lesz a kurzushoz a Community edition is).
Az alkalmazás telepítése (ez elég sok ideig is eltarthat) után használhatjuk a parancssori fordítót is. Ezt legegyszerűbben a Start menüből érhetjük el, "Developer Command Prompt for VS 2019" néven. Ez egy olyan parancsablakot indít, amiben már benne vannak a Visual Studio fejlesztői eszközei, köztük a cl
nevű parancssori fordító is.
A kurzuson Linuxot fogunk használni, így célszerűbb a fenti két megoldás közül választani.
Linux¶
Néhány népszerűbb Linux változaton már előre telepítve van a gcc
és g++
fordítóprogram. Amennyiben mégsem lenne telepítve, a központi csomagtárolóból könnyedén telepíthetjük.
1 |
|
Clang¶
Egyre elterjedtebb fordító program a clang. Ez általában nem előre telepített program. Telepítésével kapcsolatban itt kapunk bővebb információt.
Online fordítás, futtatás¶
Léteznek olyan megoldások is, hogy a böngészőbe írjuk a programkódot és az egyből fordítja. Ne ez legyen az elsőszámú fordító környezet, de lehet használni (ZH alatt NEM), és olyan esetekben indokolt is, amikor olyan dolgot akarunk kipróbálni, amit az éppen használt fordítóprogramunk nem ismer.
Kabinet használata¶
Programozás alapjairól ismerős lehet a kabinetes rendszer. Mindenki a saját hxxxxxx-es azonosítójával fel tud csatlakozni egy Linux-os rendszerre és ott fájlokat tárolhat, kezelhet és természetesen fordíthat. A rendszer számunkra lényeges programjainak, leginkább a C++ fordítónak, azonos a verziója a Kabineten és a Biro rendszerben. Így ha valami nem fordul a Kabinetes rendszeren, azt a bíró sem fogadja el, hiába volt sikeres a lokális fordítás.
Bejelentkezés¶
ssh hxxxxxx@linux.inf.u-szeged.hu
Ezután meg kell adnunk a hxxxxxx-s azonosítóhoz tartozó jelszót.
Természetesen a bejelentkezést a képen látott WSL rendszerből is meg lehet tenni, használható hozzá a PuTTY program, a MobaXterm és egyéb lehetőségek is. Utóbbi használata során lehetőségünk van grafikus felületet is használni.
A kurzushoz fontos programok a gcc
és a g++
.
Adatok másolása¶
Az adatokat másolhatjuk pl. WinSCP segítségével Windows rendszer alatt vagy akár csak a scp
parancs segítségével.
IDE¶
A fejlesztéshez tetszőleges szövegszerkesztő használható, néhány javasolt fejlesztői környezet (melyek esetlegesen ismerősek lehetnek korábbról):
- CodeLite
- Anjuta
- DevC++
- Visual Studio
- CLion
- Visual Studio Code
- Code::Blocks
Aki korábban használta a Jetbrains termékeit, annak a CLion megfelelő választás lehet, hiszen ez nagyon hasonló fejlesztőkörnyezet a korábban ismertekhez (IntelliJ IDEA, WebStorm, PHPStorm, PyCharm).
Első program¶
Ahhoz, hogy tudjunk fordítani, szükségünk lesz egy fordítandó forráskódra is. Mivel még nem tudunk C++-ban programozni, nyugodtan írhatunk egy C nyelvű programot is, mentsük el elso.cpp
néven (a .cpp
kiterjesztés fontos).
1 2 3 4 5 6 |
|
Fordítás¶
Ha már eddig kész vagyunk, a Programozás alapjairól már ismert módon fordíthatjuk a programunkat, annyi különbséggel, hogy az eddigi gcc
parancs helyett g++
parancsot kell használnunk.
g++ -o elso -Wall elso.cpp
Ismétlés a kapcsolókról:
-o
kapcsolóval adhatjuk meg a kimeneti fájl nevét-Wall
kapcsolóval további fordítóprogram figyelmeztetést (warningot) kapcsolhatunk be- Ilyen például az, hogy egy
boolean
értéket egy nemboolean
-nek megfelelő egésszel hasonlítunk össze - vagy mondjuk a kiírt, de üresen hagyott
if
/else
blokkokról is kaphatunk warningot. elso.cpp
a fordítandó forrás fájl neve
A lefordított, linkelt alkalmazást ezután már futtathatjuk elso.exe
vagy ./elso
utasítással.
A fordító -o
paraméter nélkül a.exe
vagy a.out
nevű futtatható állományt készít.
Fordítás fázisai¶
Ugyanaz, mint C esetében (lásd Programozás Alapjai jegyzet).
Hello Világ C++-ban¶
A megszokott, jól ismert C programunkat átalakíthatjuk úgy, hogy a C++-ban használatos kiíratás szerepeljen benne.
1 2 3 4 5 6 |
|
Hogy ne kelljen mindenhova kiírni az std::
előtagot, a program elejére beírhatjuk a using namespace std;
sort. (Ennek a jelentéséről majd később beszélünk.)
1 2 3 4 5 6 7 8 |
|
A felkommentelt fájl letöltése
C++ input/output¶
A hagyományos C-ben megtanult beolvasás és kiíratás is működik C++-ban.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
C++-ban az input/output műveletek streamek (folyamok) segítségével vannak megvalósítva
- cout: az alapértelmezett kimenet
- cerr: az alapértelmezett hibakimenet
- cin: az alapértelmezett bemenet
A streamekbe (folyamokba) a <<
operátor segítségével írhatunk, és a >>
operátor segítségével olvashatunk belőlük.
Ezek használatához a C-ben megszokott stdio.h
header fájl helyett a C++-ban használatos iostream
header fájlt kell include-olni. Ezzel az új, stream-eken alapuló műveleteket adjuk hozzá programunkhoz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Sorvéget az endl
segítségével írhatunk.
Órai gyakorló feladatok¶
- Írjuk meg az első C++ programot, ami kiírja a képernyőre a "Hello Vilag!"
üdvözlést!
- Írjuk meg a C-s I/O művelettel, majd fordítsuk le és futtassuk!
- Írjuk meg a C++-os I/O művelettel, majd fordítsuk le és futtassuk!
- Nézzük meg mit van, ha elhagyjuk az "std::"-t. A "using namespace std;" segítségével javítsuk a hibát.
- Írjuk egy olyan programot, ami bekéri a felhasználó korát (egész), magasságát (valós) és nevét, majd ezt ki is írja a képernyőre.
- Írjuk ki hibaüzenetet az error stream-re (cerr), majd nézzük meg mi történik. Hogyan tudjuk "szétválasztani" a cout és cerr kimeneteket a Linux shellben?
- Nézzük meg, hogy mi történik, ha a felhasználó túl hosszú inputot ad meg névnek. Valósítsuk meg a 3. feladatot C++-os string segítségével.
- Nézzük meg, hogy a C++-os string-et hogyan lehet
- létrehozni
- beolvasni, kiírni
- összehasonlítani
- hosszát meghatározni
- összefűzni
- i-edik karakterét kiolvasni vagy megváltoztatni
- számot string-gé konvertálni
- string-et számmá konvertálni
- Írjunk egy olyan programot, ami a programunk argumentumait összeadja és kiírja az eredményt a képernyőre.
A feladatsor letölthető itt.
Megoldások az első feladatra: C, C++
Megoldások string kezelésre: C, C++
Otthoni gyakorló feladatok¶
-
Írjunk egy programot, ami kiírja a hét napjait
- külön sorokba
- vesszővel elválasztva!
Megoldás
- Kód: 1. feladat megoldás
- A megoldás menete: https://youtu.be/RNV_bIBTPsY
-
Írjunk egy programot, ami bekér két egész számot, majd kiírja az összegüket majd egy sorvége jelet a következő formában:
A {szám1} es {szam2} osszege: {összeg}
Megoldás
- Kód: 2. feladat megoldás
- A megoldás menete: https://youtu.be/K9MKk_AB4x8
-
Írjunk egy programot, ami bekéri a felhasználó nevét és kedvenc állatát és kiírja a következő formában:
1
"{kedvenc állat}\n{név}\n\n{kedvenc állat}"
Megoldás
- Kód: 3. feladat megoldás
- A megoldás menete: https://youtu.be/iWUNzsFav3c
-
Írjunk egy programot, mely egész számokat olvas be amíg nem a 42 értéket adjuk meg! A 42-s érték kivételével minden bevitt értéket írjon is ki a képernyőre!
Megoldás
- Kód: 4. feladat megoldás
-
Írjunk egy programot, mely egészeket kér be a -1 jelzőértékig (csak ezzel lép ki) s eldönti, hogy páros vagy páratlan-e a szám! Próbáljuk ki a programot negatív páros és páratlan számokkal is!
Megoldás
- Kód: 5. feladat megoldás
-
Írjunk egy programot, mely kiírja a beolvasott számoknak a kettővel vett maradékát a -1 végjelig!
Megoldás
- Kód: 6. feladat megoldás