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
[email protected]
2009. november 26.
2. Zárthelyi dolgozat 2009.11.26.
1. Feladat
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
2. Zárthelyi dolgozat 2009.11.26.
1. Feladat
1.feladat
faelem *fa; fa = NULL; beszur(&fa, beszur(&fa, beszur(&fa, beszur(&fa, beszur(&fa, beszur(&fa, beszur(&fa,
4); 2); 3); 7); 6); 1); 5);
Fodor A. (Pannon Egyetem)
Információs technológia
2009. november 26.
3 / 12
2. Zárthelyi dolgozat 2009.11.26.
2. Feladat
2. feladat
Preorder Először feldogozom az adatot, bejárom a bal faágat, bejárom a jobb oldali faágat 4223765
Inorder Bejárom a bal faágat, feldolgozom az adatot, bejárom a jobb oldali faágat 2234567
Postorder Bejárom a bal faágat, bejárom a jobb oldali faágat, feldolgozom az adatot 2325674 Fodor A. (Pannon Egyetem)
Információs technológia
2009. november 26.
4 / 12
2. Zárthelyi dolgozat 2009.11.26.
3. Feladat
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
- karakter típusú pointer - karakter típusú mutatóra mutató mutató
char *a[] char **a[] char (*a)[]
- karakter típusú pointerek tömbje - karakter típusú mutatóra mutató mutatók tömbje - karakter típusú tömbre mutató pointer
char *a()
- 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
2. Zárthelyi dolgozat 2009.11.26.
4. Feladat
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
2. Zárthelyi dolgozat 2009.11.26.
5. Feladat
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
2. Zárthelyi dolgozat 2009.11.26.
6. Feladat
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 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; Fodor A. (Pannon x=1;Egyetem)
Információs technológia
2009. november 26.
10 / 12
2. Zárthelyi dolgozat 2009.11.26.
7. Feladat
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[1] = VALAMI(3.1415, 2.153); v[2] = VALAMI(16 & 0x0F, i); v[3] = ADD(i, 5) * 10;
// // // // // // //
v[0] = 5>i?5:i; // v[0]=5 v[1] = 3.1415>2.153?3.1415:2.153; v[1]=3 v[2] = 16&0x0F > i ? 5&0x0F : i; v[2]=1 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[5] = ADD(i, 5) * 10;
// v[4] = (16&0x0F) > i ? (5&0x0F) : i; // v[4]=1 // v[5] = (a + b) * 10; v[5]=60
v[6] v[7] v[8] v[9]
//v[6]=1 //v[7]=7 //v[8]=6 //v[9]=20
= = = =
3&5; 3|5; 3^5; 5 << 2;
kiscsillag = &i; csillagom = &kiscsillag; i=10; v[i] = *kiscsillag; v[i+1] = *kiscsillag**kiscsillag; v[i+4] = *kiscsillag***csillagom; ip = v; ip += 13; *ip = 0xFF; *(ip-1) = 010; Fodor A. (Pannon Egyetem)
// v[10] = 10 // v[11] = 100 // v[14] = 100
// v[13] = 255; // v[12] = 8;
Információs technológia
2009. november 26.
12 / 12