Útmutató az 1. laborhoz

Laborfeladatok:

A laborfoglalkozás végén töltse fel az elkészített fuggvenyeim.cpp és fuggvenyeim.h fájlokat a Jporta rendszerbe (polinom, 1. önellenőrző feladat), hogy megkapja a labor levégzéséért járó pontot! A laborgyakorlatokon elvégzett feladatok feltöltésére a laborgyakorlatot követő szombat 06:00-ig van lehetősége.

  1. Jelentkezzen be a Jporta rendszerbe az egyetemi eduID azonosítójával, és oldja meg az első kötelező feladatot (Neptun kód)! Az első héten ez az apró feladat megoldása helyettesíti a laborgyakorlatra felkészítő ellenőrző feladatot. A továbbiakban a laborgyakorlatokra felkészítő feladatokat mindig a laborgyakorlat hetén kedd reggel 6 óráig kell megoldani.
  2. A Git verziókezelő rendszerről egy rövid összefoglaló itt található.
  3. Programoknak, dokumentumoknak rendszerint több változatát tároljuk. A változatok közötti eligazodást, a változatok kezelését ún. verziókövető (verziókezelő) rendszerek segítik. Ezek lényege, hogy tárolóban (repository) együtt tárolnak több változatot melyek közül kiválaszthatjuk, hogy melyikkel szeretnénk dolgozni. Ehhez a tárgyhoz kapcsolódó anyagokat, forrásprogramokat is egy ilyen verziókezelő rendszerben kezeljük, melynek a neve Git. Ebben a rendszerben az összetartozó fájlokat, könyvtárakat ún. projektekbe kell szervezni. A tárolt dokumentumok, forráskódok egy egyszerű böngészővel is elérhetők, de speciális klienssel könnyebb az anyagok elérése. A HSZK-ban telepített TortoiseGit kliens beépül a Windows fájlkezelőjébe. Segítségével könnyű egy teljes projekteket letölteni a tárolóból. Ebben a félévben a laborok nagy részénél előkészített fájlokon kell dolgozni, melyek a tantárgy Git tárolójából tölthetők le. Minden laboranyagot külön projektbe, a projekteket pedig a labor_peldak nevű csoportba szerveztük.
    Kérje le az első laborhoz előkészített fájlokat a tantárgy Git tárolójából, melynek elérési útvonala:
    https://git.ik.bme.hu/Prog2/labor_peldak/lab_01!
    1. Másolja ki vágólapra a feladat URL-jét! Ezt legegyszerűbben a Gitlab webes felületén tudja elvégezni.
    2. A Hozzon létre a munkához egy üres katalógust!
    3. A létrehozott (pl. labor) katalóguson jobb egérgombbal kattintva a feljövő menüből válassza ki a Git Klónozás...(Git Clone...) menüpontot, majd a feljövő panelen a tároló (Repository) elérési útjaként (URL) állítsa be a vágólapra másolt URL-t, majd indítsa el a letöltést (OK gomb)!
      Az URL-t a TortoiseGit kliens a vágólapról automatikusan bemásolja, így azt csak el kell fogadnia.
      A kliens nyelvi beállítását a TortoiseGit menupont Beállítások (Settings) almenüjében lehet változtatni.

    4. A fájlkezelővel nézze meg, hogy mi töltődött le a kijelölt katalógusba. Sikeres letöltés esetén egy szövegfájlt (README.TXT) és egy alkatalógust (nagyobb) kell látnia.
  4. Ha más fejlesztőkörnyezetet preferál, akkor abban hozzon létre egy új C++ console projektet, és adja hozza a nagyobb katalógusban levő *.cpp és *.h fájlokat!
  5. Lépjen be a nagyobb alkatalógusba! Ebben az előadáson bemutatott egyszerű program fájljait találja, valamint a programokhoz tartozó CodeBlocks projektfájlt, illetve a szorgalmi feladathoz tartozó Makefile-t. Ha projektfájlra kattintva nem indul a CodeBlocks, indítsa azt el, majd húzza rá a megnyíló ablak fejlécére a projektfájlt!
  6. Röviden tekintse át a kódot, fordítson és futtasson!
  7. Tervezzen egy olyan függvényt (először csak a deklarációját/prototípusát kell megadnia), ami kiszámolja egy n-ed fokú valós polinom helyettesítési értékét. A függvény paraméterként kapja egy valós tömbben a polinom együtthatóit (0. fokú a 0. indexű helyen). Szintén paraméterként kapja a polinom fokszámát és a független változót.
  8. Laborvezetőjével beszélje meg a függvény paramétereit és azok típusát (pointer? konstans? referencia?) és írja be a függvény prototípusát (deklarációját) a fuggvenyeim.h fájlba.
  9. Tegye alkalmassá a főprogramot (nagyobb_main) a függvény kipróbálásához! pl:
    ...
        double an[] = { 3, 2, 1 }; // együtthatók: a0=3, a1=2, a2=1      
        cout << polinom(1.0, an, 2) << endl;
    ...
    
  10. a3*x^3 + a2*x^2 + a1*x + a0 = ((a3*x+a2)*x+a1)*x+a0
  11. Készítse el (definiálja) a függvényt a fuggvenyeim.cpp fájlban! Az n. hatvány kiszámolása helyett alakítsa a polinomot szorzattá! (Horner elrendezés)
  12. Próbálja ki a függvényt: fordítson, futtasson, majd alakítsa át a főprogramot az alábbi kezdetleges tesztprogrammá:
        double an[] = { 3, 2, 1 }; // együtthatók: a0=3, a1=2, a3=1      
        double res[] = { 3, 6, 11, 18, 27, 38, 51 };
        int hibak = 0;
        for (int i = 0; i < 7; i++) {
            double fx = polinom(i, an, 2);
            if (res[i] != fx) {
               cout << "Hibas: " << res[i] << "!=" << fx << endl;
               hibak++;
            }
        }
        if (hibak == 0)
            cout << "Nem volt elteres" << endl;
    

    Ha hibátlanul fut a fenti teszt, akkor biztosak lehetünk a függvényük helyességében? Beszélje ezt meg a laborvezetőjével!

  13. Ne felejtse el eltölteni elkészített fuggvenyeim.cpp és fuggvenyeim.h fájlokat a Jporta rendszerbe (polinom, 1. önellenőrző feladat)! A feltöltött fájlokat a Jporta csak lefordítja. A megoldás helyességét a laborvezető ellenőrzi.

Fakultatív feladatok:

  1. Indítson egy virtuális gépet a kari felhőben linux operációs renszerrel!
    Lépjen be a gépre, majd hajtsa végre a következő parancsokat:
    svn co http://svn.iit.bme.hu/proga2/labor_peldak/lab_01  # a lab_01 katalógusba másolódik az első labor anyaga
    cd lab_01                        # belépünk a lab_01 könyvtárba
    ls -l                            # kilistázzuk annak tartalmát
    
  2. Fordítsa le az előadás példáját a g++ nagyobb_main.cpp fuggvenyeim.cpp -o nagyobb paranccsal!, majd
    Futtassa a programot a ./nagyobb paranccsal! Az input végén nem CTRL-Z, hanem CTRL-D kell!
  3. Próbálja ki a make parancsot is:
    make                             # Ha ez előző fordítás sikeres volt, nem csinál semmit 
    make clean                       # a clean szabályt hajtja végre, ami törli a eredményfájlokat 
    ls -l 
    make                             # most újból előállítja az a programot
    ls -l
    
  4. Próbálja ki a gdb debuggert! Ez egy parancssoros egyszerű program, ami alfanumerikus környezetben is működik: gdb -tui nagyobb A parancs elindítja a debuggert. A megnyíló kvázi grafikus ablakban láthatóvá válik a forráskód. Alatta pedig a gdb parancsra vár. A teljesség igénye nélkül az alábbiakban áttekintünk néhány gdb parancsot, melyeket bátran próbáljon ki!
    • b 9 - a 9. sorba tesz egy töréspontot
    • r - elindítja a programot, ami meg fog állni a 9. sornál
    • s - végrehajtja az aktuális C utasítást
    • s - ismét végrehajt, de mivel input utasítás következik, várni fog a két egész számra, amit echon nélkül, vakon kell begépelnie (pl: 4 5 ENTER).
    • p i - kiírja az i változó értékét
    • q - kilép a programból
  5. Önálló munkához a következő feladatokat ajánlom: www.iit.bme.hu/~szebi/unixlab/feladat1.html
  6. A védelmi rendszer áttekintéséhez szomszédjával összefogva lépésenként hajtsák végre a Gyakorló feladat a védelmi rendszer bemutatásához oldalon található utasításokat.
  7. Jó munkát!

Utolsó frissítés: 2021-02-11 18.40