Információs Technológia ZH feladatok megoldása (2009.11.26.) Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2009. november 26.
1.feladat 2. Zárthelyi dolgozat 2009.11.26. 1. Feladat struct faelem int adat; struct faelem *bal, *jobb; ; void beszur(faelem **ppfa, int ertek) if(!*ppfa ) *ppfa = (faelem*) malloc(sizeof(faelem)); (*ppfa)->adat = ertek; (*ppfa)->bal = (*ppfa)->jobb = NULL; else if ( (*ppfa)->adat!= ertek ) if ((*ppfa)->adat > ertek) beszur( &(*ppfa)->bal, ertek); else beszur( &(*ppfa)->jobb, ertek); void main(void) faelem *fa; fa = NULL; beszur(&fa, 4); beszur(&fa, 2); beszur(&fa, 3); beszur(&fa, 7); beszur(&fa, 6); beszur(&fa, 1); beszur(&fa, 5); Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 2 / 12
1.feladat 2. Zárthelyi dolgozat 2009.11.26. 1. Feladat faelem *fa; fa = NULL; beszur(&fa, 4); beszur(&fa, 2); beszur(&fa, 3); beszur(&fa, 7); beszur(&fa, 6); beszur(&fa, 1); beszur(&fa, 5); Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 3 / 12
2. feladat 2. Zárthelyi dolgozat 2009.11.26. 2. Feladat Preorder Először feldogozom az adatot, bejárom a bal faágat, bejárom a jobb oldali faágat 4 2 2 3 7 6 5 Inorder Bejárom a bal faágat, feldolgozom az adatot, bejárom a jobb oldali faágat 2 2 3 4 5 6 7 Postorder Bejárom a bal faágat, bejárom a jobb oldali faágat, feldolgozom az adatot 2 3 2 5 6 7 4 Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 4 / 12
3. feladat 2. Zárthelyi dolgozat 2009.11.26. 3. Feladat Deklaráljon 5 különböző pointer típust, amit char típussal hozható létre. Egy mondatban ismertesse azokat, hogy mire mutathatnak. (A típusok ne csak nevükben különbözzenek!) char *a char **a char *a[] char **a[] char (*a)[] char *a() - karakter típusú pointer - karakter típusú mutatóra mutató mutató - karakter típusú pointerek tömbje - karakter típusú mutatóra mutató mutatók tömbje - karakter típusú tömbre mutató pointer - karakter típusú pointerrel visszatérő függvény char (*a)() - karakter típusú függvényre mutató pointer char (*a[])() - karakter típusú függvényre mutató pointereket tartalmazó töm Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 5 / 12
4. feladat 2. Zárthelyi dolgozat 2009.11.26. 4. Feladat Mit csinál az alábbi függvény? n! kiszámítása long mitcsinal(int n) if (n > 1) return n* mitcsinal(n-1); return 1; Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 6 / 12
5. feladat 2. Zárthelyi dolgozat 2009.11.26. 5. Feladat Röviden ismertesse vagy ábrával szemléltesse a következő fogalmakat/függvényeket: Láncolt lista Rekurzió fopen malloc Bináris fa Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 7 / 12
6. feladat 2. Zárthelyi dolgozat 2009.11.26. 6. Feladat Készítse el azt a függvényt, amely kiszámolja a következő sorozat tetszőleges tagjának értékét! A sorozat a következőképpen épül fel: 1-2 2-3 3-2 + 3 = 5 4-3 + 5 n - (n-2). tag értéke + (n-1). tag értéke Megoldás: Fibonacci sorozat 1-el eltolva Fibonacci sorozat megadása: 0, ha n=0 1, ha n=1 fib(n-1)+fib(n-2), ha n>1 Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 8 / 12
2. Zárthelyi dolgozat 2009.11.26. 6. Feladat Fibonacci sorozatot kiszámoló rekurzív függvény Fibonacci sorozatot megvalósító függvény kódja: long fib(int n) if (n < 0) return -1; if (n <= 1) return n; else return fib(n-1) + fib(n-2); ZH feladat megoldása: long zh_sorozat(int n) if (n <= 0) return -1; if (n <= 2) return n+1; else return zh_sorozat(n-1) + zh_sorozat(n-2); Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 9 / 12
2. Zárthelyi dolgozat 2009.11.26. 6. Feladat Fibonacci sorozatot kiszámoló nem rekurzív függvény Fodor A. (Pannon x=1; Egyetem) Információs technológia 2009. november 26. 10 / 12 Fibonacci sorozatot megvalósító függvény kódja: long fib_cikl(long n) long x,y,z,i; x=0; y=1; z=n; for(i=1; i < n; i++) z=x+y; x=y; y=z; return z; ZH feladat megoldása: long zh_sorozat_for(long n) long x,y,z,i;
7. feladat 2. Zárthelyi dolgozat 2009.11.26. 7. Feladat #define N 15 int j=2, v[n], i=1; int *ip, *kiscsillag, **csillagom; // valtozok #define VALAMI(a, b) a>b?a:b #define ADD(a, b) a + b v[0] = VALAMI(5, i); // v[0] = 5>i?5:i; // v[0]=5 v[1] = VALAMI(3.1415, 2.153); // v[1] = 3.1415>2.153?3.1415:2.153; // v[1]=3 v[2] = VALAMI(16 & 0x0F, i); // v[2] = 16&0x0F > i? 5&0x0F : i; // v[2]=1 v[3] = ADD(i, 5) * 10; // v[3] = i + 5 * 10; // v[3]=51 #undef VALAMI #undef ADD Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 11 / 12
2. Zárthelyi dolgozat 2009.11.26. 7. Feladat 7. feladat (folytatás) #define VALAMI(a, b) (a)>(b)?a:b #define ADD(a, b) (a + b) v[4] = VALAMI(16 & 0x0F, i); // v[4] = (16&0x0F) > i? (5&0x0F) : i; // v[4]=1 v[5] = ADD(i, 5) * 10; // v[5] = (a + b) * 10; v[5]=60 v[6] = 3&5; v[7] = 3 5; v[8] = 3^5; v[9] = 5 << 2; //v[6]=1 //v[7]=7 //v[8]=6 //v[9]=20 kiscsillag = &i; csillagom = &kiscsillag; i=10; v[i] = *kiscsillag; // v[10] = 10 v[i+1] = *kiscsillag**kiscsillag; // v[11] = 100 v[i+4] = *kiscsillag***csillagom; // v[14] = 100 ip = v; ip += 13; *ip = 0xFF; // v[13] = 255; *(ip-1) = 010; // v[12] = 8; Fodor A. (Pannon Egyetem) Információs technológia 2009. november 26. 12 / 12