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

DE IK Prog Labor Labdarúgó Bajnokság és Kupa

2012.02.25. 10:44 nb

2012 tavasz, MI, GI, PTI (első és második évfolyam BSc)

Elkezdődött a verseny kíírása (jelen pillanatban a "versenyszabályzatot" finomítjuk), figyeld a fejleményeket a verseny http://robocup.inf.unideb.hu/ szájtján!

Ha kérdésed van, nyomj egy kommentet!

Lássuk a labor anyagát! Aktualizáljuk a korábbi Felvételt hirdet a CIA c. posztunkat

"...ez a módszer az egyik legrégibb és legismertebb. Hacsak a kulcs nem nagyon hosszú, a CIA vagy az NSA várhatóan egy napon belül megfejti file-unkat."

(Kernighan Brian W. és Plauger P. J. A programozás magasiskolája. Műszaki. 1982., a példa Java implementációja itt van: www.tankonyvtar.hu/informatika/javat-tanitok-1-1-1-080904-1)

A második labor "izometrikus-szöszmötölős" példája a Page Rank algoritmus megvalósítása volt, íme a harmadiké: törjünk fel saját C progival egy exoros titkos szöveget!

Aki nem ismeri, a fenti könyvben a részletes leírás, vagy itt a Java változathoz egy kis Móricka rajzot is készítettem anno: http://www.tankonyvtar.hu/informatika/javat-tanitok-1-1-1-080904-1 kb. a lap közepén a "1.12. példa - Titkosítás kizáró vaggyal" pont alatt.

S íme a C implementáció:

 

Ahogyan használd:

nbatfai@hallg:~/c$ more tiszta.szoveg
Nem tudok kimerítő leírást adni arról, hogy hogyan tudsz megtanulni
programozni -- nagyon összetett tudásról van szó. Egyet azonban
elárulhatok: a könyvek és tanfolyamok nem érnek túl sokat (sok,
valószínűleg a legtöbb hacker autodidakta). Aminek van értelme:
(a) kódot olvasni és kódot írni.

Hogyan lesz az emberből Hacker
http://esr.fsf.hu/hacker-howto.html

Kódolásnbatfai@hallg:~/c$ gcc e.c -o e -std=c99
nbatfai@hallg:~/c$ ./e kercerece <tiszta.szoveg >titkos.szoveg
nbatfai@hallg:~/c$ more titkos.szoveg
KRIKSZKRAKSZ bináris szemét
Dekódolás:

nbatfai@hallg:~/c$ ./e kercerece <titkos.szoveg
Nem tudok kimerítő leírást adni arról, hogy hogyan tudsz megtanulni
programozni -- nagyon összetett tudásról van szó. Egyet azonban
elárulhatok: a könyvek és tanfolyamok nem érnek túl sokat (sok,
valószínűleg a legtöbb hacker autodidakta). Aminek van értelme:
(a) kódot olvasni és kódot írni.

Hogyan lesz az emberből Hacker
http://esr.fsf.hu/hacker-howto.html

3 kisbajnokság

Ennyit kap, aki egy nap alatt (természetesen a saját maga írta C progijával) feltöri a következő titkos szöveget: www.inf.unideb.hu/~nbatfai/titkos.szoveg Határidő: feb. 29. 08 óra 00, perc, egy kommentben kérem a titkos kulcsot és a tiszta szöveget. Sokat segítek: 8 betű a titkos kulcs és minden betű számjegy (kvázi dupla PIN kód :)

Tekerj a tovább linkre a labormunkához:

23 komment

Címkék: plb plk deik prog labor labdarúgó bajnokság és kupa

Retreat, Hell

2012.02.15. 07:27 nb

szinkron: "Vissza? Soha!"
http://www.imdb.com/title/tt1217613/
Battle Los Angeles

Választott címünk arra utal, hogy ha már felvettük a "válogatott képzést", akkor ne adjuk le, sőt teljesítsük sikerrel! Ez az első labor posztja, ahol

  • beszedjük az első hallgatói laborkártyát
  • megnézzük a gcc használata parancssorból
  • a forráskód indentálását
  • a manuál lapok használatát
  • egy forrást kipróbálunk a PP 25-31. oldal példái közül (letöltés, kipróbálás, megbeszélés)

a második laboron:

 

[norbert@matrica ~]$ svn co svn://hallg.inf.unideb.hu:2005 elso
A    elso/bevezetes
A    elso/bevezetes/elsoOpenMP
A    elso/bevezetes/elsoOpenMP/pmandel
A    elso/bevezetes/elsoOpenMP/pmandel/mandelpngt.c++
A    elso/bevezetes/elsoOpenMP/pmandel/pmandelpngt.c++
A    elso/bevezetes/elsoOpenMP/pmandel/ompmandelpngt.c++
A    elso/bevezetes/C
[norbert@matrica ~]$ cd elso/bevezetes/elsoC
[norbert@matrica elsoC]$ ls -l
total 12
-rw-rw-r--. 1 norbert norbert 194 Feb 15 11:31 atlag.c
-rw-rw-r--. 1 norbert norbert 223 Feb 15 11:31 rszamok.c
-rw-rw-r--. 1 norbert norbert 214 Feb 15 11:31 szohossz.c
[norbert@matrica elsoC]$ gcc szohossz.c -o szohossz
[norbert@matrica elsoC]$ ./szohossz
Ki celebrálja a szóhossz.c-t?
 

Trófeák

Az előadáson megjelentektől fogadom csak el az alábbiakat:

  • tetsz./1 trófea: Levénez-féle idővonal (lásd. a megfelelő "robbanó" fóliát)
  • 3/1 trófea: lex-es szó, szám, sor, betű számláló (ugyancsak lásd. a megfelelő "robbanó" fóliát)

Labortrófeák

  • laboron 3/1 Írj C-ben két végtelen ciklust: az egyik alig használja a procit, a másik pörgesse, ahogy belefér (1. alkalom, feb. 13-i hét)
  • laboron 3/1 A lenti "Karakterhegyezés" pont két ellenőrző kérdése (2. alkalom, feb. 20-i hét)

Egyéb trófeák

  • 3/1 trófea: egy Qt-s példa felélesztése, kipróbálása a Qt SDK-ból
  • 3/1 trófea: egy Qt-s példa felélesztése, kipróbálása parancssorból
  • tetsz./1 trófea: a kommentben szereplő videó otthoni saját elkészítése, jó hanggal :) (ezt lehet halmozni, azaz amennyit elkészítesz, annyiszor 1 trófea, YouTube-ra kérem)
  • 2/5 trófea: nehéz feladat, hogy kicsit nyújtsuk a mezőnyt :) De ne ess pánikba: megoldása jóval megelőzi a kurzus normál haladási sebességét, a main stream-ben, azaz a "tömegnek" majd a 6. előadásban jön: a szálakat is használó Qt-s példák valamelyikében az osztályok kommunikációját írd át a "callback" helyett a Qt slot-signal mechanizmusára. Ez a feladat teljesen önálló OO tervezést feltételez! Ha kezdő vagy Qt-ben: itt a slot-signal (157. o.) pl. vagy megtalálod a könyvtárban.
  • 10/2.5 trófea: legyen egy kisebb ugrás is: a 3. előadás 03-15glibc-s "printf meghekkelése", ez remek móka és tanulságos, ezért 10-et fogadok el, s +1 pont, ha van YouTube-os bemutató videó

A megoldásokat a blogon kommentként kérem megmutatni, screenshot+forrás formában tipikusan. Ha külön nem mondjuk, mindig az első hármat fogadjuk el. A saját trófeák nyilvántartását minden kapcsolódó hallgató önmaga végzi. Ha saját (mikor, mire, mennyit) kimutatása nem egyezik a blogon lévő (csakis összpontszámával), akkor két hetes ablakon belül a saját kimutatása elküldésével jelzi ezt nekem.

Blogoljunk!

Szórakoztatásodra a tavalyi posztokból összevágok egy kis montázst. Íme, élvezzük:

Az első kisbajnokság

Futtassuk a PP 27. oldalának for(;;); végtelen ciklusát "vegtelen" néven és ennek

for(;;)
  sleep(1);
módosítását "vegtelen2" néven. Majd egy ps axu|grep vegt parancs 3. (CPU) oszlopát hasonlítsuk össze és világítsuk meg a helyzetet a man 3 sleep alapján!

A laborkártya kipróbálása, például a karakterhegyezés

 

Forrás celebrálása

Ellenőrző kérdések

  • Mi történik, ha a saját függvényt a valódi könyvtári #include <string.h> / strncpy-al helyettesíted? A válaszod ellenőrzéséhez a forrás elejére illeszd be a #include <string.h> sort, illetve a string_masolo_man_pl_alapjan függvény két hívásánál ezt a nevet egyszerűen írd át strncpy-ra, az aktuális paraméterlistához nem is nyúlva.
  • Mi történik, ha a string_masolo_man_pl_alapjan saját függvényed implementációjában az első ciklusban felcseréled a dest[i] = src[i]; sort a src[i] = dest[i]; új sorral? Tehát, ha ez van a forrásodban:
      for (i = 0; i < n && src[i] != '\0'; i++)
        //dest[i] = src[i];
        src[i] = dest[i
    A konklúzió: mivel a string_masolo_man_pl_alapjan függvényünk első ciklusából mindkét hívásunk alkalmával az i < n feltétel meghiúsulása miatt lépünk ki, így a \0 karakter sztring után írása (azaz a karekterlánc lezárása) egyik esetben sem következik be. Ez tudjuk jól elkapni a 2. hívásnál, mert amikor a printf írja ki az eredményt, akkor ő egy \0 karakterig ír és az előző hívásból ott "maradt" a betűt is kiírja.

Módosítgassuk az első előadásban felvillantott, az strncpy könyvtári függvény manuáljabeli példa alapján megírt implementációnkat, hogy a forrásban kezdjen úgy kinézni néhány sor, mint amilyenek a C programok szoktak lenni!

Például az Androidos telefonok Linux kernelében előfordul ilyesmi: *src++? Lássuk, hozzuk le a forrást:

[norbi@sgu Android]$ git clone git://android.git.kernel.org/kernel/common.gits keressük benne az említett mintát:

[norbi@sgu Android]$ find . -name '*'|xargs grep "*src++"|wc
174     804   10699
nem vitás, a profik is írnak ilyeneket, esetleg pillantsunk is bele a common/include/linux/fb.h forrásába, 1026. sor.

 

Második kisbajnokság

Nyeri, aki a fenti string_masolo_man_pl_alapjan függvényt rövidebben megírja egy kommentben, február 26-ig. A hossz a függvény testének nyitózárójelétől a bezáróig, őket nem beleértve a felhasznált nem szóköz betűk száma. Így az enyém most 75:

  int i;
  char *p = d;

  for (i = 0; i < n && (*d++ = *s++); i++)
    ;

  for (; i < n; i++)
    p[i] = '\0';  

  return p

A szappanoperák nyelve

 

A szappanoperák nyelve nem a C. Mert bár Javában már lehet olyan programokat írni/olvasni a kislámpánál, amik felérnek egy korlátozott szókincsű regény olvasgatásával, ez azért C-ben nem megy. Ám egy-két sort megpróbálhatunk szépen olvasni. Erre mutat egy példát az a laborkártya, ami az alábbi két utasítás összehasonlítását írja elő.

Forráskódok celebrálása

I.)
if(signal(SIGINT, utolso_tennivalo) == SIG_IGN)
  signal(SIGINT, SIG_IGN
II.)
if(signal(SIGINT, SIG_IGN) != SIG_IGN)
  signal(SIGINT, utolso_tennivalo);

Ez a laborkártya nem könnyű annak, aki most ismerkedik a programozással. Leginkább őket segíti a jelen poszt, mely alábbi „webcast”-ja a PP egy olyan példájának a kipróbálását mutatja, amiben szerepel az egyik kérdéses kódcsipet. (Ne hagyjuk magunkat azzal megrémiszteni, hogy a signal() egy rendszerhívás, a mi szintünkön rendszerhívás vagy könyvtári függvény, akár saját programbeli hello() függvény: egyelőre egyre megy. De a haladóknak sincs okuk az aggodalomra, a 4. előadásban írunk saját rendszerhívást és saját glibc könyvári függvényt is.)
 

 A videó feldolgozása után annyi a hallgató feladata, hogy értelmezi a II. kódcsipetet.

Harmadik kisbajnokság

Itt az első három kommentben érkezett helyes választ adó viszi el a kisbajnokságot.

A következő kis progi (hátterét lásd majd a 2. előadásban) kapcsán kell helyesen megválaszolni ezt a két kérdést:

  • ki a szülő folyamat szülője
  • mi lesz a gyermek folyamat

ha futtatod ezt a programot?

 

 Lásd PP 36! Ez a téma már elővetíti a 2. előadást, amelybe szerintem bele tudunk majd kezdeni szerdán.

 

90 komment

Címkék: első labor

süti beállítások módosítása