Vill c++ kisHF

Órai dolgok

Kérem mindenki nézze meg, értse meg.
    1. Egy C projectben írjunk egy saját e x számoló függvényt (myexp). Ha már teszteltük, és jól működik, a tesztelő main()-t töröljük (vagy tegyük /*megjegyzésbe*/), és fordítsuk le. Legyen az eredmény pl. exp.obj.
    2. Ezután egy új C projectben csak egy main() függvény legyen, és próbáljuk hívni a myexp függvényt. Compiler warning: deklarálni kell! A file elejére tegyük be a deklarációt: double myexp(int, double);. Most már linker error, nem találja a kódot. A project beállítási paneljén meg kell mondani, hogy a fenti exp.obj is legyen benne a "link libraries"-ben. (Codeblocks-ban egyszerű: Project / Build options / Linker settings / Link libraries: Add. Itt adjuk meg a myexp-et tartalmazó tárgykód file-t: ......\myexp\obj\Debug\main.o) Most már fordul és fut a program.
  1. Ezt egy C projectbe copy-paste-elve kérem egymás után kipróbálni (végül a harmadikat egy C++ projectben is...)

    A referencia típus kizárólag C++ jellemző, C programban compiler errort okoz. Megvalósítja a cím szerinti paraméterátadást. (Amit a C-ben nekünk kell úgy programozni...) Az alábbi példákban a buta ill. okos függvény megpróbálja megváltoztatni a main változójának az értékét.
    hibás C megoldásjó C megoldás pointerrelhibás C-ben, de jó C++ megoldás referenciával. Emberi szemmel is barátságos.
    #include<stdio.h>
    void buta(int i)
    {
      i=i+2;
    }
    int main(void)
    {
      int i=0;
      buta(i);
      printf("%d\n",i);
    }
    /* A kimenet 0 */
    
    #include<stdio.h>
    void okos(int *p)
    {
      *p=*p+2;
    }
    int main(void)
    {
      int i=0;
      okos(&i); /*ez nem ref.!*/
      printf("%d\n",i);
    }
    /* A kimenet 2 */
    
    #include<stdio.h>
    void okos_cpp(int &i)
    {
      i=i+2;
    }
    int main(void)
    {
      int i=0;
      okos_cpp(i);
      printf("%d\n",i);
    }
    /* A kimenet 2 */
    
    Kövessük az eseményeket debuggerrel lépésenként végrehajtva a programunkat.

1. Házi feladat (az összes példa beadandó házi feladat, ez most még csak ismétlés).

  1. Írj C programot, amely a szabványos kimenetre írja a parancssori argumentumként megadott tetszőleges számú pozitív egész szám
    1. legkisebb közös többszörösét,
    2. legnagyobb közös osztóját,
    3. és valamennyi szám prímtényezős felbontását egy-egy sorba. (Tárolni nem kell, csak kiírni!)
    Példa a használatára (egy cmd ablakban):
    prog 12 21 30
    lkkt: 420
    lnko: 3
    12: 2 2 3
    21: 3 7
    30: 2 3 5
    
    Az lnko (lkkt) kereséséhez használjuk ki, hogy lnko(a1,a2,...an)=lnko(a1 , lnko(a2 , lnko(a3 , ...lnko(an-1,an)...))). Semmiképp ne próbáljuk a prímtényezőkből előállítani, mert elég nehézkes tárolni őket (pl. láncolt lista). A parancssori paramétereket pl. a Code::Blocks esetén a "Project"→"Set programs' arguments" menüpontban lehet beállítani. Kis segítség argc argv ügyben.
  2. Írj C programot, amely előbb egy egész, majd ennyi darab double értékeket olvas be a szabványos bemenetről. A program keresse meg az átlaghoz legközelebbi adatot, valamint számolja meg, hány adat található az átlag ±5%-os környezetén kívül. Az eredményeket írja a szabványos kimenetre. (A lefoglalt dinamikus memórát kötelező felszabadítani!)
  3. Írj C programot, amely bekér egy n egész számot, és kiszámolja az alábbi kifejezés értékét. Törekedj hatékony megoldásra (azaz, 5n értékét mindig 5n-1-ből számold!), csak egészekkel dolgozz.