C-C++ Bodor László, Bérci Norbert, Baranyai László -

  • View
    121

  • Download
    20

Embed Size (px)

DESCRIPTION

C/C++ in hungarian

Text of C-C++ Bodor László, Bérci Norbert, Baranyai László -

  • GNU C/C++ pldaprogramok 1

    Mrnki szmtsok C/C++ nyelven16 feladat a GNU C hasznlinak

    Tartalom

    1. (a+b)^n egytthatinak kiszmtsa a Pascal hromszg segtsgvel 32. Jtk pszeudovletlen szmokkal 53. Optiml eljrs az elz jtk automatikus megoldsra 64. Szlsrtk keresse az aranymetszs mdszervel 75. Aknamezn biztonsgos tvonalat keres eljrs 106. Pszeudovletlen szmokat tartalmaz adatllomny ksztse 167. Rendezsi eljrsok sebessgnek sszehasonltsa 178. Adatsorok egyszer statisztiki, valamint korrelcija 229. Egysze fggvnyek illesztse 2810. Illesztsek rtkelse: variancia analzis, reziduumok elemzse 3211. Tetszleges fggvny illesztse optiml eljrs segtsgvel 3912. Egy kivlasztott kr pontjainak koordinti 4313. Kr illesztse a legkisebb ngyzetek mdszervel 4414. Kr illesztse a sugr irny ngyzetes eltrsek minimlsval 4915. Klaszter analzis a dinamikus Kkzp mdszervel 5416. Osztlyozs tanulminta adatai alapjn 58Ajnlott irodalon 61

    CDROM mellklet:

    \TELEPITO Telept kszletekWIN MSDOS / WindowsLINUX Linux

    \FELADATOK Feladatok kidolgozsa01 1. feladat llomnyai EXE MSDOS / Windows binris ELF Linux binris02 2. feladat llomnyai EXE MSDOS / Windows binris ELF Linux binris...

    16 16. feladat llomnyai EXE MSDOS / Windows binris ELF Linux binris

  • GNU C/C++ pldaprogramok 2

    Elsz

    Olyan feladatgyjtemnyt tart kezben a kedves olvas, amely elssorban a mszaki kpzsbenrsztvev egyetemi s fiskolai hallgatk szmra kszlt. A knyv azonban nem csupn nekikajnlhat, hanem mindazoknak, akik mrsi eredmnyeik kirtkelse rdekben nem riadnakvissza a szmtgp programozstl.

    A feladatgyjtemny clja a mrnki munka, kutats sorn alkalmazhat matematikai mdszerekbemutatsa. Ennek rdekben a kzlt C s C++ forrskdok egyszerek, sok megjegyzsselkiegsztve. A megrtst a vltozk, eljrsok beszdes nevei s a fenntartott szavak kiemelsetovbb segti. A feladatok megrtst nagymrtkben segti Pascal vagy C, C++ programozsiismeret, optimlsban, opercikutatsban szerzett gyakorlat.

    A CDROM mellkleten tallhat telept kszletek segtsgvel a szmtgpen ltrehozhat aszksges fejleszti krnyezet. Ez a krnyezet magba foglalja a fordt programot (gcc) sWindows, valamint MSDOS alatt az RHIDE keretrendszert s az Emacs nev szerkesztt.Telepts Windows / MSDOS alatt:

    1., msolja t [CDROM]\TELEPITO\WIN\ tartalmt egy ideiglenes knyvtrba2., indtsa el az INSTALL.EXE nkicsomagol programot3., indtsa el a LBINSTDJ.EXE programot

    Linux rendszerekben a GNU C fordt beptett elem. Ha frissteni szeretn, a csomagot megtalljaa [CDROM]\TELEPITO\LINUX\ knyvtrban. A teleptshez szksges tennivalkat tartalmazzaa csomag README llomnya. Linux rendszerekben a C fordt csak rsze a GNU CommonCompilers csomagnak, ezrt a mellkleten megtallhat a Java, Object C, Fortran 77 fordt is. HaLinux krnyezetben hibazenetet kap a matematikai fggvnyek hinyra hivatkozva, hasznlja akvetkez parancsot:

    gcc forras.c lm

    ahol az "lm" kapcsol a matematikai knyvtr hozzfzst jelenti.Amennyiben tovbbi informcikra van szksge a GNU C fejleszti krnyezetrl (lersok,frisstsek), a kvetkez kt internet cmet javasolhatom:

    http://www.delorie.com/djgpphttp://gcc.gnu.org

    2001. janurJ munkt kvnok:

    a szerz

  • GNU C/C++ pldaprogramok 3

    [1a] Ksztsnk programot, amely a kpernyre rja a Pascalhromszg els N sort. Ha a programot ksbb bvteni szeretnnk, az rtkeket clszer egy mtrixba helyezni.

    #include /* hagyomnyos ki s bemeneti fggvnyek: printf, scanf */

    int main(void){ int **H; /* H tartalmazza a hromszget */ int i,j,n; /* segdvltozk */ printf("A kovetkezo nevezetes szorzat egyutthatoit szamolja ki \n"); printf("ez a program: (a+b)^n \n");

    /* beolvas egy 3 s 14 kztti szmot */ do{ printf("n (3..14) = "); scanf("%d",&n); }while (n14); /* megnveljk "n" rtkt, mert a legels sor az n=0 kitev adatait tartalmazza */ n++;

    /* memria foglals; a hromszg minden sora csak a szksges terletet kti le. */ H = new int*[n]; for (i=0;i

  • GNU C/C++ pldaprogramok 4

    [1b] Az elz feladat egyszerstett megoldsa, ha nem szksges az adatok trolsa esetleges ksbbi felhasznlsukhoz.

    #include /* hagyomnyos ki s bemeneti fggvnyek: printf, scanf */

    int main(void){ int *V; /* V vektorban trolja az rtkeket */ int i,j,n; /* segdvltozk */ printf("A kovetkezo nevezetes szorzat egyutthatoit szamolja ki \n"); printf("ez a program: (a+b)^n \n");

    do{ printf("n (3..14) = "); scanf("%d",&n); }while (n14); /* memria foglals */ V = new int[n+1];

    for (i=0;i0;j) V[j]+=V[j1]; printf("%3d.: ",i); for (j=0;j

  • GNU C/C++ pldaprogramok 5

    [2] Ksztsnk jtkprogramot, amely kitall egy egsz szmot 1tl 100ig. A felhasznl 10 alkalommal krdezhet r. A program csak annyit vlaszolhat, hogy a bert rtk kisebb, vagy nagyobb, mint az ltala vlasztott, esetleg egyenlek.

    #include /* hagyomnyos ki s bemeneti fggvnyek: printf, scanf */#include /* pszeudovletlenszm ellltshoz: gettime */

    int Hasonlit(int mit,int mivel) /* kt szmot hasonlt ssze, visszatrsi rtkei: 1, 0, 1 */{ if (mit>mivel) return(1); if (mivel>mit) return(1); return(0);}

    int Beallit(int maximum) /* pszeudovletlen szm ellltsa az aktulis id adataibl */{ struct time T; int r;

    gettime(&T); r = (T.ti_hund + T.ti_sec*T.ti_min)%maximum +1;

    /* "r" rtke az 1..maximum tartomnyban van */ return(r);}

    int main(void) /* fprogram */{ int Gep,Ember,N;

    Gep=Beallit(100); printf("\n Kitalaltam egy szamot 1tol 100ig....");

    N=0; /* szmll nullzsa */ do{ printf("\n[%d] Mit tippel? ",N+1); scanf("%d",&Ember); switch(Hasonlit(Ember,Gep)) { case 1: printf("Tul sok. "); break; case 1: printf("Tul keves. "); break; case 0: printf("ELTALALTA!"); break; } N++; }while(Ember!=Gep && N

  • GNU C/C++ pldaprogramok 6

    [3] Az elz feladatban ismertetett jtk szerepeit cserljk fel! A szmtgp legfeljebb 10 lpsben tallja ki az ltalunk vlasztott 1 s 100 kztti egsz szmot.

    #include /* hagyomnyos ki s bemeneti fggvnyek: printf, scanf */

    int Hasonlit(int mit,int mivel) /* kt szmot hasonlt ssze, visszatrsi rtkei: 1, 0, 1 */{ if (mit>mivel) return(1); if (mivel>mit) return(1); return(0);}

    /* a felezses eljrst alkalmazva biztosan ki lehet tallni minden szmot legfeljebb 8 lpsbl */int main(void){ int Gep,Ember,N,Also,Felso;

    /* beolvas egy egsz szmot 1tl 100ig */ do{ printf("\n Kitalalt egy szamot 1tol 100ig? "); scanf("%d",&Ember); }while(Ember100); N=0; Also=0; Felso=101; /* segdvltozk belltsa */

    do{ /* a szmtgp az als s a fels hatr tlagt tippeli */ Gep = (Also+Felso)/2;

    printf("%d. tippem: %d\n",N+1,Gep); switch(Hasonlit(Gep,Ember)) { case 1: printf("Tul sok.\n"); Felso=Gep; break; case 1: printf("Tul keves.\n"); Also=Gep; break; case 0: printf("ELTALALTAM!\n"); break; }

    N++; }while(Ember!=Gep && N

  • GNU C/C++ pldaprogramok 7

    [4] Hatrozzuk meg az Y=A*x^2 + B*x + C msodfok egyenlet szls rtkt a [50;50] intervallumon gy, hogy az egyenlet egytthatit a felhasznl adhassa meg.

    #include /* hagyomnyos ki s bemeneti fggvnyek: printf, scanf */#include /* matematikai rutinok: sqrt */

    double A,B,C; /* az egyenlet egytthati */

    double fuggveny(double x) /* a parabola Y rtkeit adja meg */{ double d;

    d = C + x*(B + A*x); /* d = A*x^2 + B*x + C */

    return(d);}

    /* a kvetkez eljrs megvizsglja, hogy valban msodfoke az egyenlet s vane tengelymetszete, ami alapjn meghatrozhat a szlsrtk helye s a hozz tartoz fggvny rtk. Az itt kiszmtott s kirt rtkek segtenek az optimls rtkelsben */void vizsgalat(void){ double d; double x1,x2;

    d = B*B 4*A*C; /* diszkriminns */

    if (A==0) { printf("Ez nem masodfoku egyenlet! \n"); return; }

    if (d

  • GNU C/C++ pldaprogramok 8

    if (d>0) { printf("A fuggveny metszi az X tengelyt: \n");

    /* a msodfok egyenlet megold kpletvel */ x1 = (B+sqrt(d))/(2*A); printf("zerushely: X(1) = %lg\n",x1); x2 = (Bsqrt(d))/(2*A); printf("zerushely: X(2) = %lg\n",x2); x1=(x1+x2)/2; printf("szelsoertek helye: X = %lg\n erteke: Y = %lg\n",x1,fuggveny(x1));

    /* ebben az utols felttelben elhagyhat a return utasts */ return; }

    } /* vizsglat vge */

    /* optiml eljrs az aranymetszs mdszervel: ekkor egy specilis arnyszmot alkalmazunk, amely rtke: a 3

    52

    (kb. 0,3819) . Ngy Y rtket kell kiszmtani, majd a kzps kett kzl a kisebbik (maximum keressekor) vagy nagyobbik (minimum keressekor) helye lesz az j als, vagy fels hatr. Az arnyszm olyan klnleges tulajdonsg, hogy ekkor elegend csupn egy j pontot kiszmtani, a msik hrom adott. A keresett x rtk a kt kzps x koordinta tlaga. */void optimalas(void){ double arany; /* arnyszm */ double X[4]; /* a szksges 4 x rtk */ double Y[4]; /* a szksges 4 f(x) rtk */ int i,j,lepes; /* segdvltozk */ /* konvex, vagy konkv a parabola? */ if (A>0) printf("Minimumhely kereses...\n"); if (A

  • GNU C/C++ pldaprogramok