HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

Egy informatikai tárgy vizsgáján

2011.06.06. 20:23 nb

Pár éve volt egy álmom, nevezetesen az, hogy eljön az idő, amikor az informatikus hallgatók gépeikkel felvértezve vizsgáznak... volt fejlődés eddig is, de ma megvolt az áttörés: szinte mindenki a gépével dolgozott, vállvetve gép és ember. (Persze azt nem értem, hogy a néhány Windows hogyan keveredett a vizsgára, de a hallgatók azzal kivágták magukat, hogy Nekik virtuálisan van ez az...)

A jegymegajánlóval ellentétben nem névre szóló tesztlapokat adtunk ki (hiszen ez esetben aggályos lehetne, hogy nem részrehajló-e adott hallgatóval az összeállító szoftver) hanem 8 csoportba rendezett feladatlapokat osztottunk ki előre, majd a hallgató választott helyet. (Nyugalom, a javítás sem telefonnal megy, hanem kézzel csinálom :)

Lássunk egy tesztet: pdf, odt.

Érkeznek a hallgatók:

Vállvetve gép és ember:

A jobb oldali hajóban 2 fő soronként:

A bal oldaliban 4:

 

Eredmények

El is készültem a javítással. Időközben a jegymegajánlón résztvevők jelezték, hogy ott kicsit barátságosabb volt a pontozás... és igazuk volt, hiszen az akkori egész határok alapján osztályoztam, de most adtam fél pontot is. Ezért néhány hallgató jegyét módosítottam (az elégtelent és az elégségeseket kapókat érinthette ez)

%   pontszám   korábban   új  ->  jegy

  • 50%   5.5      6    5.5   ->  2
  • 65%   7.15    8    7.5   ->  3
  • 80%   8.8      9    9     ->  4
  • 90%   9.9    10    10    ->  5

így az eredmények:

  • 51 elégtelen
  • 24 elégséges
  • 14 közepes
  • 6 jó
  • 3 jeles

a 2011.6.24 írásbeli (itt van maga a teszt) eredményei:

  • 11 elégtelen
  • 16 elégséges
  • 7 közepes
  • 0 jó
  • 1 jeles

Akinek sikerült és elégedett a jegyével, annak gratulálok, akit elszomorít az eredmény, annak fel a fejjel: a szóbeli vizsga témái jóval irányítottabbak.

Lássunk egy tesztet, hogy könnyebb legyen kommentelni róla:

Magasszintű programozási nyelvek I (prog1)

Programozó Páternoszter

DE IK mérnök informatikus szak béta vizsga
A „kocka teszt” változat: a “bátrak – a 2. hullám” kódjelű változat 4. mutációjának mutációja

 

A teszten a másokkal való verbális kommunikáción kívül tetszőleges segédeszköz (elektronikus vagy hagyományos könyv, jegyzet vagy akár laptop, mobil) használható! Sőt, erősen ajánlott!

 

Hallgató neve, Neptun kódja: …...................................................., …....................

 

[trófeák száma: ….................... vadász nick: …....................]
[előadás-látogatási 5%-ra jogosult1:

    igen

    nem

 

Előtte ülő szomszédja neve: …..........................................

jobbra: …..........................................

mögötte: …..........................................

balra: …..........................................

 

Minden kérdésnél az igazat, vagy a “legigazabbat” jelöld meg! (Ahol maximalizáltuk a karakterek vagy szavak számát, ott a limitet átlépő megoldásokat nem értékeljük.)

Tartalomjegyzék

Kérdések az informatikai kultúra témakörből 2

GPL 2

Kérdések a C/C++ programozás témakörből 2

Bevinfó 2

Hatáskör kérdés, mit ír ki? 3

Mit ír ki? 4

Függvénymutató, mit ír ki? 5

Tárkezelés 5

OO, mi történik? 6

Öröklődés 8

Kérdések a Linux kernel hacking témakörből 9

Kernelmodul 1 9

Kérdések a Linux rendszerprogramozás témakörből 10

Nem lokális ugrások 10

Kérdések a Java platform témakörből 10

API doksi 10

 

Dokumentum verzió: 0.0.4,

vizsga.odt

Debrecen, 2011. június 5.

E közlemény felhatalmazást ad önnek jelen dokumentum sokszorosítására, terjesztésére és/vagy módosítására a Szabad Szoftver Alapítvány által kiadott GNU Szabad Dokumentációs Licenc 1.2-es, vagy bármely azt követő verziójának feltételei alapján. Nem változtatható szakaszok: A szerzőről. Címlap szövegek: Programozó Páternoszter, Bátfai Norbert, Gép melletti fogyasztásra. Hátlap szövegek: Belépés a gépek mesés birodalmába.

Bátfai Norbert

nbatfai@inf.unideb.hu

http://www.inf.unideb.hu/~nbatfai

Debreceni Egyetem Informatikai Kar (DE IK),

Információ Technológia Tanszék

egyetemi tanársegéd

 

Kérdések az informatikai kultúra témakörből

GPL

Ez a kódcsipet az Oracle-től letöltött „Sun-os JDK” src.zip állományából kicsomagolt java/util/Random.java forrásából származik. Lehet-e teljesen ugyanez a csipet része (így változatlanul, betűről-betűre) az OpenJDK java.util.Random osztályának?

 


 

    Nem tudhatjuk, hiszen ez a java.util.Random osztály bájtkódban áll rendelkezésre, ami nem olvasható!

    Nem tudjuk megnézni, mert a „Sun-os JDK” csomaghoz az Oracle természetesen nem adja a forrásokat, csak a bájtkódot. Tehát ez a Random.java forrás nem is lehet elérhető!

    Nem tudhatjuk, mert csak az Open JDK adja a bájtkódokat forrásban is (a GNU GPL licenc miatt).

    Igen, ugyanez van mindkettőben.

    Igen, de a GNU GPL licenc miatt semmilyen ráépülő munkát nem lehet értékesíteni.

    Nem, mert ez a licenc (Oracle ) durva megsértése lenne.

    Nem, mert ez a licenc ( BSD GPL v2 ) durva megsértése lenne.

    Nem, mert ez a licenc ( BSD GPL v3) durva megsértése lenne.

    Nem, mert az Oracle-nek semmi köze az OpenJDK-hoz (szoftverlopás lenne az Open JDK részéről).

    Nem, mert hiába vette meg az Oracle a Sun-t, a Java maradt BSD licences.

    Igen, a BSD GPL v2 változat használata miatt (a BSD módosító azért kell, mert az Oracle kereskedelmit is kiad) ez ugyanaz, mint a Linux kernelét védő licenc.

Kérdések a C/C++ programozás témakörből

Bevinfó

Egészítsd ki úgy a következő kódcsipetet, hogy az „e” 2., 5. és 10. bitjét komplementálja (az eredményt nem kell beletenni „e”-be, csak kiíratni)! Azaz ezt adja a kimenetén:

1001010101010101

0000010000100100

1001000101110001



 

Konkrétan: mit kell a ???-helyére írni? Maximum 6 karakter!

..............................................................................................................................................................

Hatáskör kérdés, mit ír ki?


 

    Nem fordul le, hiszen hibás a zárójelezés!

    Nem fordul le, mert „a”-t több helyen is újradefiniálná...

    55

    -555

    5

    555

    -555 ,5, 55 (egymás alatt, vessző nélkül)

    55 ,5, 555 (egymás alatt, vessző nélkül)

    Nem fordul le, mert a függvényen kívül definiált második int (4. sor) után lemaradt a változó neve...

Mit ír ki?


 

    Nem fordul le, mert a külső stat-ot nem lehet felüldefiniálni.

    Nem fordul le, mert a külső stat-ot nem lehet az eredetitől (most -100) eltérő értékkel újradefiniálni sehol sem!

    Nem fordul le, mert a külső stat-ot nem lehet az eredetitől (most -100) eltérő értékkel újradefiniálni valamely függvényen belül!

    -97

    -103

    103

    3

    97

    -100, -99, -98 (egymás alatt, vessző nélkül)

    0, 1, 2 (egymás alatt, vessző nélkül)

    0, 1, 2, 3 (egymás alatt, vessző nélkül)

 

Függvénymutató, mit ír ki?

 


    Nem fordul le sem...

    0, a felüldefiniálás miatt

    0, a túlterhelés miatt

    az első és a második is igaz

    le sem fordul, mert függvényt nem adhatunk értékül, csak a címét (hiányzik az & operátor)

    42, 0 (vessző nélkül, külön sorokba)

    42

    Fordítási hiba, mert a double aktuális paraméteres hívás miatt az „int (*fgv)(double) = fgv1;” sor kellene

    Fordítási hiba, mert a double aktuális paraméteres hívás miatt az „int (*fgv)(double) = fgv2;” sor kellene

    0

    Nem fordul, mert hiányzik a typedef

    0-t, mert típusegyeztetés van

    0 42 (vessző nélkül, külön sorokba)

 

Tárkezelés


 

Egészítsd ki úgy a következő kódcsipetet, hogy az első printf mutatóaritmetikával pontosan azt a tömbelemet írja ki, mint a második! (Nyilván az “m” mutatót használnod kell és max. 11 karaktert írhatsz a ??? helyére, illetve nem használhatsz '[' és ']' betűket.)


 

Konkrétan tehát: mit kell a ???-helyére írni? Maximum 11 karakter!


 

..............................................................................................................................................................

OO, mi történik?

Az alábbi csipetek az SVN-ben is fent lévő saját Int osztályunkból vannak kivágva. Ha lefut a main, mi történik és milyen sorrendben? Mondjuk így fordítanám, futtatnám:

 

$ g++ main.cpp -o main

$ ./main

 

main.cpp:


int.h:

 


 

    le sem fordul, mert hiányzik a saját int.cpp...

    ctor, masoló ctor, ctor, másoló értékadás, dtor, dtor

    másoló ctor, ctor, másoló értékadás, dtor, dtor

    ctor, ctor, másoló értékadás, dtor, dtor

    ctor, ctor, dtor, másoló értékadás, dtor, dtor

    másoló ctor, ctor, dtor, másoló értékadás, dtor, dtor

    ctor, ctor, ctor, dtor, dtor, dtor

    ctor, ctor, ctor, dtor, dtor, dtor (hiszen nincsenek dinamikus tagok az osztályban, ezért a másoló értékadás helyett alapértelmezett ctor van)

    le sem fordul, mert az int eleve védett név...

    le sem fordul, mert az int kulcsszó, nem használható...

    a main nem használható, mert kulcsszó, így le sem fordul!

 


Öröklődés

 

    a Liskov elv miatt: ahol Szulo lehet, ott lehet leszármazottja is, azaz semmi gond az fgv függvénnyel , 10-et ír ki

    5-öt ír ki, mert a Gyermek setParam metódusa, előtt nem szerepel a virtual kulcsszó

    nem fordul le, csak ha típuskényszerítjük a paraméterként átadott Gyermek-et Szulo-re

    a Gyerek osztálybeli átadása ősét várónak nem probléma (Liskov elv), de a Szulo nem hívhatja a Gyermek setParam metódusát, mert az előtt nem szerepel a virtual, így 5-öt ír ki

    futási idejű hiba, mert sérül a Liskov elv a main függvényben

    futási idejű hiba, mert sérül a Liskov elv az fgv függvényben

    futási idejű hibával leáll, mert sérül a Liskov elv a fordításkor

    fordítási hiba, mert a Szulo-nek nincs ujParam tagfüggvénye

    fordítási hiba, mert az ujParam nem virtuális

    fordítási hiba, mert szp nem lehet polimorf mutató, hiszen a Gyermek setParam, ujParam metódusa előtt nem szerepel a virtual kulcsszó

Kérdések a Linux kernel hacking témakörből

Kernelmodul 1

Mit csinál a következő modul?



 

Egyetlen mondatban: (maximum 15 szó!)

..............................................................................................................................................................

..............................................................................................................................................................

Kérdések a Linux rendszerprogramozás témakörből

Nem lokális ugrások

Mi történik, ha elindítod az alábbi kis progit (csak a lényegi kódcsipet szerepel itt) és három Ctrl+C-t nyomsz?



 

    1 alma és leáll az első Ctrl+C-re

    2 alma és leáll a 2. Ctrl+C-re (mert a jelkezelést a kezelő nem állítja be újra)

    3 alma és leáll

    3 alma és nem áll le

    4 alma és leáll

    4 alma és nem áll le

    1 alma és 3 korte és leáll

    1 alma és 4 korte és leáll

    1 alma és 3 korte és nem áll le

    1 alma és 4 korte és nem áll le

Kérdések a Java platform témakörből

API doksi

Nevezz meg egy-egy osztályt (teljes csomagnévvel minősített formában) az alábbi Java kiadásokból!

Java SE: .........................................................................

Java ME: .........................................................................

Android: .........................................................................

leJOS: .........................................................................


 

1Formális ellenőrzése: az utolsó 5 előadás Neptunos listájáról kettő vagy kevesebb hiányzás.

A "KULCS"

Kommentekben már kifejtettem a hallgatói "megoldó kulcs" kérések kapcsán:

Jól kell érteni a témát, használni a gépet: EZ A KULCS, amivel bármilyen ilyen tesztet kinyittok majd sikerrel, ezért beszéljünk a feladatokról és arról, mi volt a helyes megoldás!

de mivel ilyen párbeszéd nem indult be a tesztek előtt, így utólag nem valószínű, hogy ez bekövetkezne, így jöjjön néhány gondolat, amit a személyes átnézéskor szoktam említeni:

  • 1.: kommenteltük a vizsga előtt, hogy a licenc milyen a "Sun-os JDK"-ban, az OpenJDK-ban, a korábbi teszt kérdése alapján. Itt az volt a királyi út, hogy a hallgató a felkészülése során feltette ezt a két JDK-t és egyszerűen megnézte (akár a helyszínen) a kérdezett csipetet. A kérdést a nehogy.fw.hu/wp-content/uploads/Prog1_9.pdf előadás 26. diája sugallta.
  • 2.: a maszkban a komplementálandó bitek helyén 1-van, ezért ezen helyeken az e-beli 0-ból 1 kell, 1-ből 0, azaz
    e-0 varázslat m-1 = 1
    e-1 varázslat m-1 = 0
    e-0 varázslat m-0 = 0
    e-1 varázslat m-0 = 1
    mi legyen a varázslat? Jól látszik: kizáró vagy, azaz e EXOR m, persze C-ben leírva. Maga a kód jóideje használatunkban van, így rögtön ki is lehetett próbálni. Azt is elfogadtam, ha valaki kicsit bőségesen zárójelezett, de ennyit vártam: a ??? helyére: e^m.
  • 3.: van egy külső a, másik 3 külön blokkban, elég szimpla: 55.
  • 4.: itt az csaphat be, hogy amikor végigjátszod, akkor a statikus belsőt a belépésekkor inicializálod... pedig csak az első esetében történik ez, neki ez a lényege :) az, hogy több számot is kiír, fel sem merülhet, vizsgázók adták ezt a tippet :) Ennek a mindenkori inicializálásnak a "feloldására"  hallottam már szóban azt is, hogy a program misztikusan, a kiíratáskor összeadogatja a belépések számát, ezért adja a kipróbáláskor a 3-at. De arra a kérdésre, hogy a forrásban mutassuk már meg az a "rejtett szummázást" nyilván nem kaptam választ...
  • 5.: itt is sok a dezinformáció, de láthatóan az fgv1 címét adjuk meg, így az fog lefutni: 42.
  • 6.: már lerágott csontnak kell lennie a laborkártyák miatt, sőt a tömbök és mutatók kapcsán számos fólián ezt le is rajzoltuk:
    m double *-okra mutat
    m+3 a 4.-re
    *(m+3) az ott lévő érték, ami ugye egy double *, ami ugyancsak mutat valahova, double-okra
    *(m+3)+2 a 3. double-ra
    *(*(m+3)+2) pedig ezt a double értéket állítja elő. Ennyi.
  • 7.: Ezt a példát még csak begépelni sem kellett, mert fent van az SVN-ben, ha futtatjuk, kiírta volna simán, de ránézésre is megy, mert direkt egy szimpla példát adtam: két ctor, aztán a másoló értékadás, blokk/progi végén a két dtor.
  • 8.: Ugyancsak régi ismerősünk a forrás, a kérdést a nehogy.fw.hu/wp-content/uploads/Prog1_7.pdf előadás 14. fóliája inspirálta. (S magam is csak későn láttam, hogy maga a KDevelop-ból készített képen látszik is, hogy az IDE auto compile-ja megjelöli a hibát... :)
  • 9: már ez a kérdés is lerágott, szakállas (külön poszt, korábbi hasonló teszt kérdés) csontnak nevezhető: annyit foragtuk, hogy az egyik legnagyobb következő állományleírójú processzt (név, pid, szám) írja ki.
  • 10.: egy az egyben szerepel a példa két előadásban is:
    az ismétlő nehogy.fw.hu/wp-content/uploads/Prog1_7.pdf 41-en, illetve a nehogy.fw.hu/wp-content/uploads/Prog1_3.pdf 78-on. Aki ki akarta próbálni, csak a 3 include kellett pluszban az elejért, man alapján, vagy az említett fóliákról... (Ja, és ha az a mondat igaz, hogy "Szókratész, Norbi, az előadó ember", akkor a "Norbi ember" is igaz, nem beszélve arról, a hamis részeket is tartalmazók közül biztos a "legigazabb" :)
  • 11.: ezt lehetett fejből, posztokban, előadás fóliákon mindig minősített neveket használtam, de itt azt vártam (előtte "szivárogtatva" is volt kommentben), hogy a hallgató tudja, hogy hol a platformok API doksija és egyszerűen beír egyet hastaütésre.


     

 

19 komment

Címkék: vizsga írásbeli

A bejegyzés trackback címe:

https://progpater.blog.hu/api/trackback/id/tr82962670

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

gaabi777 2011.06.07. 12:21:14

És hol találjuk a jegyeket?

mqmqO 2011.06.07. 13:01:01

Addig is nem lehetne közzé tenni egy listát ide, mint a jegymegajánló után a rövidített neptun kódokkal?:)

nb · http://fersml.blog.hu 2011.06.07. 13:41:15

@mqmqO: Neptunban már sokaknak látszódnia kell.

kovdog 2011.06.07. 13:42:00

pontok ki lesznek téve?

nb · http://fersml.blog.hu 2011.06.07. 13:45:35

@kovdog: nevet, neptun kódot problémás lehet kitenni, ezért a szobában tudjátok megnézni a vizsgalapon.

kovdog 2011.06.07. 13:48:29

az előző( jegymegajánló) mégis ki volt téve neptunból kialakított kóddal

palotaiambrus 2011.06.07. 13:50:00

És mikor lehet megnézni, mondjuk holnap (Szerdán)?

Kevin_Mitnick 2011.06.07. 19:41:40

Lehetne kérni egy megoldókulcsot a feladatsorhoz?

nb · http://fersml.blog.hu 2011.06.08. 09:04:23

@Kevin_Mitnick: azt nem, mert ez a kulcs csak ezt az egy tesztet nyitja (így is volt, aki emlékezetből xelgetett, de a feladat pici árnyalásával már más volt a helyes válasz...)

Jól kell érteni a témát, használni a gépet: EZ A KULCS, amivel bármilyen ilyen tesztet kinyittok majd sikerrel, ezért beszéljünk a feladatokról és arról, mi volt a helyes megoldás!

Kevin_Mitnick 2011.06.08. 12:54:45

Tanár Úr feltudná rakni mind a 8 feladat lapot?
jó lenne gyakorlásnak.

Odabasszak? 2011.06.08. 17:58:21

ne geci 7nek meglett még....rágjam meg a husod Norbikám :D

Kevin_Mitnick 2011.06.08. 22:05:39

@Kevin_Mitnick: mármint gyakorlásnak a szóbelire való felkészüléshez

krkkrm 2011.06.10. 02:14:06

Nekem egy olyan kérdésem lenne, hogy a következő, meg úgy általában a vizsgán milyen segédeszközöket lehet használni, példának okáért, egy olyan embert be lehet ültetni magam mellé, aki érti a programozást?

converter 2011.06.10. 08:45:12

@krkkrm:

nehogy.fw.hu/wp-content/uploads/Prog1_1.pdf
8. oldal e) pont :-)
Nyilván nem vihetsz magaddal egy prog zsenit, de azon kívül bármilyen segédeszköz használata megengedett. Én a helyedben vinnék magammal minden tételhez legalább 2-3 kipróbált forráskódot és akkor nem lesz lutri, hogy mi alapján kell prezentálnod a tételedet. Arra azért figyelj, hogy érteni kell a kódot, nem pedig felolvasni... A laborkártyás kódok elég egyszerűek és legtöbbjük ki van dolgozva ajánlom őket a figyelmedbe: proghelp.blog.hu/

converter 2011.06.10. 12:42:30

Pár egyszerű appletet szeretnék kipróbálni, de a mozilla plugin-ért sír...

<firefox>/plugins
mappában
ln -s <JRE>/lib/i386/libnpjp2.so

ez ha jól értettem egy szimbolikus linket csinálna és így működnie kellene... de mégsem...

Ha valaki tudna segíteni megköszönném.

converter 2011.06.10. 19:40:22

Egyéb...:
Ha valaki szintén az export PATH....-tal szórakozna:
<saját mappa>/.bashrc
szerkesszétek bele az export-ot és akkor nem kell vele többet kínlódni.

Aki nem tudná, hogy miről van szó:
nehogy.fw.hu/wp-content/uploads/Prog1_9.pdf
46. oldal
süti beállítások módosítása