A Név: l 2017.04.06 Neptun kód: Gyakorlat vezet : HG BP l 1. Az A vektor tartalmát az alábbi KUPACOL eljárással rendezzük át maximum kupaccá. A={28, 87, 96, 65, 55, 32, 51, 69} Mi lesz az értéke az A vektor elemeinek, amikor az eljárás befejezi mûködését?. (2 pont) A={96, 87, 51, 69, 55, 32, 28, 65} (helyes_pozícióban_lévõ_értékek_száma/4 pont). procedure KUPACOL(K) procedure SÜLLYESZT_REK(K, honnan, vége) 1. i [méret(k)/2] 2. while i > 0 do 3. SÜLLYESZT(K, i, méret(k)) 4. i i 1 5. end while 1. gyermek honnan + honnan 2. if gyermek < vége és K[gyermek + 1] > K[gyermek] then 3. gyermek gyermek + 1 5. if gyermek vége és K[gyermek] > K[honnan] then 6. K[gyermek] és K[honnan] felcserélése 7. SÜLLYESZT_REK(K, gyermek, vége) 2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont) function MIEZ(A) 1. if méret(a) > 0 then 2. i j A[1] 3. else 4. return 0 5. end if 6. for k 2 to méret(a) do 7. if k > 0 then 8. j A[k] 9. else if k < 0 then 10. i A[k] 11. end if 12. end for 13. return j i Az A vektor utolsó és elsõ elemének különbségét. (1.5 pont) Ha üres a vektor, akkor 0-t. (0.5 pont) 3. Írjon eljárást, amely megnöveli 1-gyel a paraméterként kapott fejmutató által címzett cirkuláris lista minden negatív értékû elemét!. (4 pont) procedure NÖVEL(listafej) 1. if listafej 6= NIL then 2. x listafej 3. repeat 4. if x! adat < 0 then 5. x! adat 1 + x! adat 6. end if 7. x x! következõ 8. until x = listafej 9. end if
B Név: l 1. Az M mátrixot a V vektorban ábrázoltuk: V={ 70, 1 88, 2 20, 3 16, 4 74, 5 71, 6 6, 7 57, 8 12, 9 13, 10 17, 11 91, 12 91, 13 65, 14 94, 15 75, 16 21, 17 97, 18 80, 19 97, 20 51, 21 47, 22 38, 23 34, 24 88, 25 56, 26 9, 27 91 28 } 1. Mennyi x=m[3,4]+m[3,2] értéke, ha M egy helytakarékosan ábrázolt szimmetrikus mátrix? x=v[9]+v[5]=86.. (1 pont) 2. Mennyi y=m[2,5]m[2,2] értéke, ha M egy sorfolytonosan ábrázolt 4x7-es (4 sora és 7 oszlopa van) mátrix? y=v[12]v[9]=79.. (1 pont) 3. 2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont) function MIEZ(A) 1. i 0 2. if méret(a) > 0 then 3. i A[1] - MIEZ ( A[2.. méret(a)] ) 5. return i Az A vektor páros és páratlan indexû elemei összegéneknek különbségét. (1.5 pont) Ha üres a vektor, akkor 0-t. (0.5 pont) 4. Írjon függvényt, amely meghatározza a paraméterként kapott fejmutató által címzett egyirányban láncolt lista elsõ és utolsó pozitív elemének összegét! (Pozitív értékû elem hiányában legyen 0 a függvényérték!).. (4 pont) function ÖSSZEG(listafej) 1. x listafej 2. elsõ NIL 3. while x 6= NIL do 4. if x! adat > 0 then 5. if elsõ = NIL then 6. elsõ x 7. end if 8. utolsó x 9. end if 10. x x! következõ 11. end while 12. if elsõ = NIL then 13. return 0 14. else 15. return elsõ! adat + utolsó! adat 16. end if
C Név: l 1. Az A vektor tartalmát az alábbi KUPACOL eljárással rendezzük át maximum kupaccá. A={32, 44, 72, 30, 93, 38, 16, 6} Mi lesz az értéke az A vektor elemeinek, amikor az eljárás befejezi mûködését?. (2 pont) A={93, 44, 72, 30, 32, 38, 16, 6} (helyes_pozícióban_lévõ_értékek_száma/4 pont). procedure KUPACOL(K) procedure SÜLLYESZT_REK(K, honnan, vége) 1. i [méret(k)/2] 2. while i > 0 do 3. SÜLLYESZT(K, i, méret(k)) 4. i i 1 5. end while 1. gyermek honnan + honnan 2. if gyermek < vége és K[gyermek + 1] > K[gyermek] then 3. gyermek gyermek + 1 5. if gyermek vége és K[gyermek] > K[honnan] then 6. K[gyermek] és K[honnan] felcserélése 7. SÜLLYESZT_REK(K, gyermek, vége) 2. return 0 3. else if listafej! következõ = NIL then 4. return listafej! adat + MIEZ(listafej! következõ) 5. else 6. return listafej! adat + MIEZ(listafej! következõ) listafej! következõ! adat 7. end if A lista elsõ elemének értékét. (1.5 pont) Ha a lista üres, akkor 0-t. (0.5 pont) 3. Írjon függvényt, amely meghatározza a paraméterként kapott vektor elsõ és utolsó pozitív elemének összegét! (Pozitív értékû elem hiányában a függvényérték legyen 0!). (4 pont) function ÖSSZEG(A) 1. elsõ 0 2. for i 1 to méret(a) do 3. if A[i] > 0 then 4. if elsõ = 0 then 5. elsõ i 6. end if 7. utolsó i 9. end for 10. if elsõ = 0 then 11. return 0 12. else 13. return A[elsõ] + A[utolsó] 1
D Név: l 1. Az M mátrixot a V vektorban ábrázoltuk: V={ 70, 1 88, 2 20, 3 16, 4 74, 5 71, 6 6, 7 57, 8 12, 9 13, 10 17, 11 91, 12 91, 13 65, 14 94, 15 75, 16 21, 17 97, 18 80, 19 97, 20 51, 21 47, 22 38, 23 34, 24 88, 25 56, 26 9, 27 91 28 } 1. Mennyi x=m[3,4]+m[3,2] értéke, ha M egy helytakarékosan ábrázolt szimmetrikus mátrix? x=v[9]+v[5]=86.. (1 pont) 2. Mennyi y=m[7,2]m[5,2] értéke, ha M egy sorfolytonosan ábrázolt 7x4-es (7 sora és 4 oszlopa van) mátrix? y=v[26]v[18]=41.. (1 pont) 2. return 0 4. x listafej! adat 5. y listafej! következõ 6. z MIEZ(y) 7. if y = NIL then 8. return x 9. else 10. return z 11. end if A lista utolsó elemének értékét. (1.5 pont) Ha a lista üres, akkor 0-t. (0.5 pont) 3. Írjon függvényt, amely megnöveli 1-gyel a paraméterként kapott vektor minden negatív értékû elemét, és függvényértékként visszaadja a végrehajtott módosítások számát!. (4 pont) function NÖVEL(A) 1. v 0 2. for i 1 to méret(a) do 3. if A[i] < 0 then 4. A[i] A[i] + 1 5. v v +1 6. end if 7. end for 8. return v
E Név: l 1. Az A vektor tartalmát az alábbi KUPACOL eljárással rendezzük át maximum kupaccá. A={68, 52, 38, 24, 90, 75, 11, 27} Mi lesz az értéke az A vektor elemeinek, amikor az eljárás befejezi mûködését?. (2 pont) A={90, 68, 75, 27, 52, 38, 11, 24} (helyes_pozícióban_lévõ_értékek_száma/4 pont). procedure KUPACOL(K) procedure SÜLLYESZT_REK(K, honnan, vége) 1. i [méret(k)/2] 2. while i > 0 do 3. SÜLLYESZT(K, i, méret(k)) 4. i i 1 5. end while 1. gyermek honnan + honnan 2. if gyermek < vége és K[gyermek + 1] > K[gyermek] then 3. gyermek gyermek + 1 5. if gyermek vége és K[gyermek] > K[honnan] then 6. K[gyermek] és K[honnan] felcserélése 7. SÜLLYESZT_REK(K, gyermek, vége) function MIEZ(listafej, e) 2. return 1 3. else if listafej! adat = e then 4. return 2 * MIEZ(listafej! következõ, e) 5. else 6. return MIEZ(listafej! következõ, e) 7. end if 2-nek az annyiadik hatványát, ahány e értékû eleme van a listának. (1.5 pont) Ha a lista üres, ill. nincs ilyen eleme, akkor 1-t. (0.5 pont) 3. Írjon eljárást, amely a beszúrásos rendezés algoritmusával csökkenõ sorrendbe rakja a paraméterül kapott vektor elemeit!. (4 pont) procedure BESZÚRÁSOS_RENDEZ(A) 1. for i 2 to méret(a) do 2. kulcs A[i] 3. j i 1 4. while j 1 és A[j] < kulcs do 5. A[j + 1] A[j] 6. j j 1 7. end while 8. A[j + 1] kulcs 9. end for
F Név: l 1. Az M mátrixot a V vektorban ábrázoltuk: V={ 70, 1 88, 2 20, 3 16, 4 74, 5 71, 6 6, 7 57, 8 12, 9 13, 10 17, 11 91, 12 91, 13 65, 14 94, 15 75, 16 21, 17 97, 18 80, 19 97, 20 51, 21 47, 22 38, 23 34, 24 88, 25 56, 26 9, 27 91 28 } 1. Mennyi x=m[1,6]+m[4,1] értéke, ha M egy helytakarékosan ábrázolt szimmetrikus mátrix? x=v[16]+v[7]=81.. (1 pont) 2. Mennyi y=m[3,1]m[4,2] értéke, ha M egy oszlopfolytonosan ábrázolt 7x4-es (7 sora és 4 oszlopa van) mátrix? y=v[3]v[11]=3.. (1 pont) 2. return NIL 4. a MIEZ(listafej! következõ) 5. if a = NIL vagy a! adat <= listafej! adat then 6. return listafej 7. else 8. return a 9. end if A lista legnagyobb értékû elemének címét. (1.4 pont) Ha több ilyen érték is van, akkor az elsõt. (0.3 pont) Ha a lista üres, akkor NIL-t. (0.3 pont) 3. Írjon függvényt, amely megnöveli 1-gyel a paraméterként kapott vektor legkisebb értékû elemét! Ha az adott érték többször is elõfordul, akkor minden elõfordulást növeljen meg! Függvényértékként adja vissza a végrehajtott módosítások számát!. (4 pont) function NÖVEL(A) 1. if méret(a) = 0 then 2. return 0 4. min A[1] 5. for i 2 to méret(a) do 6. if A[i] < min then 7. min A[i] 9. end for 1. v! 0 11. for i 1 to méret(a) do 12. if A[i] = min then 13. A[i] A[i] +1 14. v v +1 15. end if 16. end for 17. return v
G Név: l 1. Az A vektor tartalmát az alábbi KUPACOL eljárással rendezzük át maximum kupaccá. A={43, 12, 63, 1, 87, 23, 69, 90} Mi lesz az értéke az A vektor elemeinek, amikor az eljárás befejezi mûködését?. (2 pont) A={90, 87, 69, 12, 43, 23, 63, 1} (helyes_pozícióban_lévõ_értékek_száma/4 pont). procedure KUPACOL(K) procedure SÜLLYESZT_REK(K, honnan, vége) 1. i [méret(k)/2] 2. while i > 0 do 3. SÜLLYESZT(K, i, méret(k)) 4. i i 1 5. end while 1. gyermek honnan + honnan 2. if gyermek < vége és K[gyermek + 1] > K[gyermek] then 3. gyermek gyermek + 1 5. if gyermek vége és K[gyermek] > K[honnan] then 6. K[gyermek] és K[honnan] felcserélése 7. SÜLLYESZT_REK(K, gyermek, vége) 2. return NIL 4. z MIEZ(listafej! következõ) 5. if z = NIL vagy z! adat > listafej! adat then 6. return listafej 7. else 8. return z 9. end if A lista legkisebb értékû elemének címét. (1.4 pont) Ha több ilyen érték is van, akkor az utolsót. (0.3 pont) Ha a lista üres, akkor NIL-t. (0.3 pont) 3. Írjon eljárást, amely a beszúrásos rendezés algoritmusával csökkenõ sorrendbe rakja a paraméterül kapott vektor elemeit!. (4 pont) procedure BESZÚRÁSOS_RENDEZ(A) 1. for i 2 to méret(a) do 2. kulcs A[i] 3. j i 1 4. while j 1 és A[j] < kulcs do 5. A[j + 1] A[j] 6. j j 1 7. end while 8. A[j + 1] kulcs 9. end for
H Név: l 1. Az M mátrixot a V vektorban ábrázoltuk: V={ 70, 1 88, 2 20, 3 16, 4 74, 5 71, 6 6, 7 57, 8 12, 9 13, 10 17, 11 91, 12 91, 13 65, 14 94, 15 75, 16 21, 17 97, 18 80, 19 97, 20 51, 21 47, 22 38, 23 34, 24 88, 25 56, 26 9, 27 91 28 } 1. Mennyi x=m[7,2]+m[5,3] értéke, ha M egy helytakarékosan ábrázolt szimmetrikus mátrix? x=v[23]+v[13]=129.. (1 pont) 2. Mennyi y=m[6,3]m[3,1] értéke, ha M egy oszlopfolytonosan ábrázolt 7x4-es (7 sora és 4 oszlopa van) mátrix? y=v[20]v[3]=77.. (1 pont) 2. return 0 3. else if listafej! adat > 0 then 4. return listafej! adat + MIEZ(listafej! következõ) 5. else 6. return MIEZ(listafej! következõ) listafej! adat 7. end if A lista elemek abszolút értékeinek az összegét. (1.5 pont) Ha a lista üres, akkor 0-t. (0.5 pont) 3. Írjon függvényt, amely a bináris keresésre alapozva megkeresi a paraméterként megadott értéket a szintén paraméterként megadott vektorban!. (4 pont) function BINÁRIS_KERES(A, érték) 1. return BINÁRIS_KERES3(A, érték, 1, méret(a)) function BINÁRIS_KERES3(A, érték, alsó, felsõ) - - bináris keresés rekurzívan, részvektorok nélkül 1. if alsó > felsõ then 2. KIVÉTEL "nincs ilyen értékû elem" 4. középsõ [(alsó + felsõ) / 2] 5. if A[középsõ] = érték then 6. return középsõ 7. else if A[középsõ] > érték then 8. return BINÁRIS_KERES3(A, érték, alsó, középsõ 1) 9. else 10. return BINÁRIS_KERES3(A, érték, középsõ + 1, felsõ) 11. end if