| 1. hét: make és C ismétlés | 2. hét: pontosság és pontatlanság | 3. hét: azonos nevű függvények, referencia |
| 4. hét: egyszerű osztályok | 5. hét: konstruktor és operator overloading | 6. hét: osztály dinamikus adattaggal |
| 9. hét: >> és << használata I/O-ra, statikus tagok | 10. hét / 1: STL vector | 10. hét / 2: STL string, algorithm |
| 11. hét: generikus algoritmusok és osztályok | 12. hét: öröklés | 13. hét: heterogén kollekció |
| 14. hét: C++11 kitekintő | 15. hét: Nagyházi bemutatás |
A ZH, jelenlét, nagy házi adminisztrációs portálja a https://ttkprog.eet.bme.hu/admin címen elérhető.
A tárgy honlapja: http://www.eet.bme.hu/vieea026/
1. *nix alatt triviális, m$win alatt kicsit nyögvenyelős a make használata. Utóbbi esetben egyrészt mingw32-make a parancs, másrészt nekünk kell biztosítani, hogy a Code::Blocks installáció alatti MinGW/bin folder benne legyen a futtathatók keresési útjában (PATH). [Otthoni gépen legjobb permanensen hozzáadni: ControlPanel, System, Advanced SS, Environment variables. Vagy a PATH nevű system variable-t módosítsd, vagy hozz létre egy PATH elnevezésű user variable-t amibe csak ezt teszed bele.] Töltsük le, próbálgassuk, és értsük meg a viselkedését az órán látott 1234-es példa Makefile-nak http://www.eet.bme.hu/vieea026/hh/1/1/Makefile
A mingw32-make helyesen működött a HSzK-ban, az útvonalak rendben be voltak állítva. A Developer Command Prompt nem mindenkinél működött megfelelően.
A make futtatása windowsos környezetben sokszor problémás, mert az útvonalak nincsenek megfelelően beállítva. Aki Linuxot használ, annak valószínűleg probléma nélkül futnak a parancsok. Ha Windowst használsz, és van a gépen Visual Studio, akkor a "Developer Command Prompt" nevű konzolt érdemes elindítani. Ebben be kell lépni a megfelelő mappába "cd útvonal" paranccsal, és itt tuttatni az nmake-et. (Ha másik meghajtón van a Makefile, akkor előbb át kell lépni arra a meghajtóra. Pl. ha a prompt a C: meghajtón indul, és a Makefile a D: meghajtón van, akkor be kell írni, hogy D: és enter. Utána jöhet a CD mappaváltás. Egy rövid videó mutatja be ezt: videó
Ha ez nem működik, akkor lehet próbálkozni az alábbi ötletekkel is.
A HSZK-ban valószínűleg úgy vannak telepítve a fejlesztőkörnyezetek, hogy a make elérése és használata problémás, ezért lehet, hogy az alábbi feladatokat saját gépen könnyebb kipróbálni. A HSZK-ban az 1. feladatot ki lehet próbálni: másoljuk a Visual Studio bin mappájából az nmake.exe programot a makefile mappájába, és futtassuk. A 2. feladatot nem tudjuk megoldani a HSZK-ban a make-kel, ebből a feladatból viszont csináljuk meg a programot Visual Studio vagy CodeBlocks fejlesztőkörnyezetben, és próbáljuk ki!
Próbáljuk ki az előadáson látott one-two-three-four példát Windowsos ill. Unixos verzióban!
CodeBlocks esetén mingw32-make.exe a make program neve, Visual C++ esetén nmake.exe. A letöltött one-two-three-four fájlt át kell nevezni "Makefile"-ra. (Indítsd el a parancssort (Command Prompt), menj át a mappába, ahol a makefile van a cd paranccsal, majd a rename paranccsal nevezd át a fájlt.)
Futtatás: indítsd el a parancssort (cmd.exe) abból a mappából, ahol a Makefile található. Ha nem innen indítottad, cd parancsokkal tudsz átmenni ebbe a mappába, Írd be a program nevét és ENTER.
Ha nem fut, akkor be kell állítanod a path-t arra a mappára, ahol a make program van. Nálam ez így néz ki (a következő sort a parancssorba kell beírni):
path="c:\Program Files (x86)\CodeBlocks\MinGW\bin\"
ill.
path="c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.21.27702\bin\Hostx64\x64\"
Itt értelemszerűen a saját gépeden érvényes útvonalat kell megadni.
a) Készíts fv.c nevű fájlt. A fájlban hozz létre egy függvényt, amely egy double elemekből álló tömböt vesz át paraméterként, és paraméterként visszaadja a tömb elemeinek átlagát.
b) Készíts fv.h nevű fájlt, amelyben a fv.c-ben definiált függvény prototípusát helyezed el.
c) Készíts main.c nevű fájlt, amelybe include.-olod az fv.h-t, és megírod benne a main függvényt. A main függvény hozzon létre egy, a felhasználó által megadott méretű, double típusú dinamikus tömböt, amelyet véletlen értékekkel töltsön fel, majd az a)-ban megírt függvénnyel számítsa ki a tömb elemeinek átlagát, és ezt írja ki. Ne feledd a tömböt felszabadítani.
A hozzá tartozó make fájl: Windows + Visual Studio-ra, Windows + gcc-re (pl. code::Blocks) ill. Unixra
Ha ezt a make fájlt akarod használni, akkor a CodeBlocks-os path-t kell beállítanod.
Ha Visual C++-szal szeretnéd lefordítanod, a következő make fájlt használhatod (a Visual C++ megoldás a Developer Command Prompt nem megfelelő beállítása miatt a HSzK-ban nem megy):
main.exe : main.obj fv.obj @link main.obj fv.obj main.obj : main.c fv.h @cl -c main.c fv.obj : fv.c fv.h @cl -c fv.c |
Ehhez viszont nem a "sima" parancssort kell futtatnod, hanem keresd meg a Start menüben a Visual Studiót, azon belül a Visual Studio Tools mappát, és indítsd el a benne lévő Developer Command Prompt-ot. Ebben menj át abba a mappába, ahol a C program és a makefile található, és futtasd az nmake-et.
ural2-n a user 2 betu 3 szam kombinacio. ezt az accadmin.hszk.bme.hu oldalon lehet megnezni. a password pedig az eredetileg beallitott jelszo. aki erre nem emlekszik, sajnos "Az itt végrehajtott regisztrációk, jelszóváltoztatások érvényre jutásának ideje kb. 1-2 óra.", az nem tud belepni.
1. ural2 belepes (pl. putty) 2. wget http://eet.bme.hu/vieea026/m/Makefile1 3. mv Makefile1 Makefile 4. make, make one, stb. 5. win alatt IDE-ben az atlagszamolos ketmodulos programot elkesziteni. 6. a belepni kepesek winscp-vel ural2-re fv.h fv.c main.c file-okat. 7. ural2 terminalban: rm Makefile 8. wget http://eet.bme.hu/vieea026/m/Makefile2 9. mv Makefile2 Makefile 10 make (2 forditas, 1 linkeles) 11 make (semmi) 12 touch main.c (valtoztattunk benne...) 13 make (1 forditas, 1 linkeles) 14 make (semmi) 15 touch main.o 16 make (csak 1 linkeles)
Egészítsd ki a 2. feladatot egy újabb .c-.h fájlpárral. Helyezz el bennük egy függvényt, amely egy double típusú tömböt vesz át, és a benne található elemek közül az átlagnál nagyobbakat egy éppen megfelelő méretű új dinamikus tömbbe másolja. A függvény adja vissza az új tömb címét, paraméterként pedig az új tömb méretét. A main függvényből hívd meg a függvényt, írd ki az átlagnál nagyobb elemeket, majd szabadítsd fel a dinamikus tömböt.
| fv.h |
#ifndef ATLAG_H #define ATLAG_H void atlag(double *t, int n, double *atl); #endif |
| fv.c |
#include "fv.h"
void atlag(double *t, int n, double *atl){
double sum = 0;
int i;
for (i = 0; i < n; i++)
sum += t[i];
*atl = sum / n;
}
|
| main.c |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "fv.h"
int main(){
double *tomb, atl;
int n, i;
scanf("%d", &n);
tomb = (double*)malloc(n*sizeof(double));
for (i = 0; i < n; i++)
tomb[i] = rand();
atlag(tomb, n, &atl);
printf("%g\n", atl);
free(tomb);
return 0;
}
|