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

Képes egypercesek

2011.03.26. 11:45 nb

A Qt-s Mandelbrot nagyító (az svn-ben: bevezetes/elsoQt/masodikQt/Frak) példába nem nehéz beépíteni, hogy az S billentyű lenyomására elmentse fájlba a nagyított képet, hiszen a képet egy QImage objektumra rajzoltuk, ami el tudja magát menteni.

 

A szóban forgó Qt GUI-s példában figyelnünk kellett arra, hogy a számolás időigényes lehet, ezért blokkolhatja a felület megjelenítését, így eleve párhuzamosan külön (QThread) szálban valósítottuk azt meg. Parancssorban egyszerűbb lehet az életünk, itt akár szekvenciálisan is beleszőhetjük a számítást a programunkban. A következő kis példákban használunk néhány könyvtárat, például a png++ vagy a pngwriter könyvtárakat. Az első példában "kockásítjuk" a

 

képet, azaz kis (kocka_meret) blokkokban kiszámoljuk az pixelek RGB kódjainak átlagát és az így kapott átlagos RGB értékkel színezzük (az alább specifikált kocka függvénnyel) az egész blokkot:

void kocka(png::image<png::rgb_pixel>& kep, int r_atlag, int g_atlag, int b_atlag, int x, int y, int blokk_szelesseg, int blokk_magassag);fordítva, futtatva

[norbi@sgu mandel]$ g++ kockapng.c++ `libpng-config --ldflags` -o kockapng
[norbi@sgu mandel]$ ./kockapng obivan3.png obivan3.kocka.png
Kockasitas.................................................................................................................obivan3.kocka.png mentve
 ezt kapjuk:

 a kockapng.c++ forrást majd a poszt végi tovább link kattintása után találod.

mandelpng.c++ forrás a png++ könyvtárra építve, a mandelpngw.cpp pedig a pngwriter-el rajzolja a Mandelbrot halmazt egy png fájlba, utóbbi "érdekessége", hogy a képre szöveget is rajzol:

1 komment

Címkék: filter szűrő mandelbrot png qt libpng png pngwriter

"Hey, Mikey, he likes it! Ready for more?" (3) *

2011.03.23. 18:41 nb

Íme a harmadik hullám, de élvezd az elsőt és a másodikat is, ahol még számos fraktálos, genomos, fehérjés és mindenféle 1-7, 1-9 trófeás vad les itt is, a korábbi első, illetve a második hullámban Rád! (Ha mást nem mondunk, akkor a szokásos "hegylakó szabály" van: csak egy maradhat, azaz az első vadászé a trófea.)

Ha mást nem mondunk, akkor a jelen hullám feladatainak megoldását C, C++, Qt C++-ban várjuk. De már fodrozódnak itt más nyelveket preferáló feladatok is, ezeknél a nyelveket a feladatnevekben is feltüntetjük (ugyanazon feladat más nyelvű megvalósítása nem számít hasonló feladatnak, így elszámolhatósága esélyes :)

Itt a tavasz, itt az új szerelem

Ha belelkesedsz egy billentyűzet láttán, akkor ismerd fel, az új szerelem: a programozás. Ha nem érzed, miről beszélek, akkor subliminal messages. De tréfa nélkül: emlékezz az első előadás mottóira, például

"Aminek van értelme: (a) kódot olvasni és (b) kódot írni.”

Eric Steven Raymond: How To Become A Hacker
Hogyan lesz az emberből Hacker: http://esr.fsf.hu/hacker-howto.html

Ennek megfelelően még mindig nem késő, hogy elkezdj programozni! Itt a tavaszi szünet, használd fel ezt a kis szusszanásnyi időt élvezettel: csatlakozz a vadászokhoz! (Persze a harmadik hullám feladatai nem könnyűek; vagy apró (1-2 trófeás) vadakkal kezd, vagy lapozd fel a korábbi hullámokat.)

20 kisbajnokságos feladatok

  • (ÉLES) Sorsjáték: készíts saját sorsjáték ütemezőt a MINIX kernelhez. (help a szobában futó 3.1.3 Minix, ahol megy a kernelben a random szám generálás :)

19 kisbajnokságos feladatok

  • (ÉLES) Foci 5: írj progit "igazi" (pl. YouTube-os) videón egy játékos követésére!

16 kisbajnokságos feladatok

  • (ÉLES) Foci 4: írj progit "FerSML videón" egy játékos követésére!

13 kisbajnokságos feladatok

  • (KÉSZ) Foci 3: írj progit "igazi" (pl. YouTube-os) videón a labda követésére!

12 kisbajnokságos feladatok

  • (ÉLES) TCP 7: írj egy TCP-s webszerver statisztika számolót: parancssor argumentumban kap egy gépnevet vagy IP-t, megnézi milyen szervert futtat, illetve a HTTP válaszbeli további gépeken folytatja a kutatást, miközben számolgatja a statisztikát, amit végül (elfogynak a gépek, vagy elér számuk egy limitet) kiír. (help: 9. ea.)

11 kisbajnokságos feladatok

  • (ÉLES) TCP 8: írj egy TCP-s webpókot: parancssor argumentumban kap egy URL-t, letölti és előre megadott szavak előfordulását figyeli, ha talál feljegyzi, a lap linkjein lépked tovább (help: 9. ea.)
  • (ÉLES) Foci 1: írj progit a "FerSML videón" a labda követésére!
  • (KÉSZ) Foci 2: írj progit a "házi videón" a labda követésére (pl. itt és itt)!

10 kisbajnokságos feladatok

  • (ÉLES) Obi-Wan Kenobi: készíts egy olyan programot, ami az előadás videóira képes az előadó kezébe a mester kék fénykardját rajzolni:
  • (ÉLES)

9 kisbajnokságos feladatok

  • (ÉLES) Szorgos hódok remix: készíts rekombináló programot: http://arxiv.org/abs/0908.4013! (BB-s gépek utasításait véletlenszerűen rakosgatod össze, így lottózol :)

8 kisbajnokságos feladatok

  • (KÉSZ) Proxy 1: írj egy proxy szervert!
  • (ÉLES) Kém 1: folyamatosan figyel egy URL-t, hogy változik-e, ha igen, dob egy mailt.
  • (ÉLES) Kém 3: 1x1 pixeles transzparens png-t küldő TCP szerver, ami logolja a kliens adatait (honnan, mikor töltötték le, lapokba img src="gép:port" formában hívódik a szerver), mailt dob, ha valaki megnézi azt a lapot, ami (a képen keresztül) hivatkozza a szervert.
  • (KÉSZ) Kép CPP 1: saját "képfeldolgozásos" osztályodban terheld túl a + operátort, hogy képeket lehessen "összeadni"!

7 kisbajnokságos feladatok

  • (ÉLES
  • (ÉLES) Hangyás 1: írj egy hangya szimulációs Qt progit, valahogy így mutasson (itt az "elmélet")!
  •  (ÉLES, Python) Könyves Kálmán: készíts csevegő robotot, aki a beszélgetések közben építi az LZW fát a szavakat véve egy "betűnek". Így fessen pl. (help: 11. ea. és www.inf.unideb.hu/~nbatfai/kk/)

6 kisbajnokságos feladatok

  • (ÉLES) Hangyás 2: írj egy hangya szimulációs Qt progit, valahogy így mutasson!
  • (KÉSZ) Qtrajzoló 1: írj egy Qt rajzolóprogit, az egérrel lehessen rajzolni, a képet S billenytűvel lehessen menteni!
  • (KÉSZ) Ikersárkány: írj egy olyan Qt progit, ami ábrázolja az i-1 alapú számrendszer nulla egészrészű halmazát (help: papíron)
  • (ÉLES) TCP 1: írj egy olyan TCP/IP-s programot, ami parancssor argumentumként kapott URL-t letölt, lement, illetve ha html lapról van szó, akkor a (href) hivatkozott URL-eket is letölti!
  • (KÉSZ, Python) PyLZW fa: írd át az LZW-s z.c-nket olyanra, hogy nem 0, 1 betűre, s nem is a T, C, A, G betűkre, hanem tetszőleges szavakra menjen a fa építése.
  • (ÉLES, C, Qt C++(KÉSZ), Java(KÉSZ)) Kocka 1: parancssor argumentumként kapott képet pixelesít.
  • (ÉLES C, Qt C++, Java) Mandel szerver: böngésző címsorából hivatkozva küldjön egy Mandelbrot halmazt!
  • (ÉLES) Kém 2: 1x1 pixeles transzparens png-t küldő TCP szerver, ami logolja a kliens adatait (honnan, mikor töltötték le, lapokba img src="gép:port" formában hívódik a szerver).
  • (KÉSZ) P-szálak ismétlő: írj olyan C programot (a 4. ea. mintájára, illetve PP 67) amiben 100 szál cserélgeti 2 globális változó értékét. Mutasd meg, hogy mutex nélkül elromlik, mutexxel nem.
  • (ÉLES) Counter 1: saját számláló osztályban terheld túl a -- operátor pre- és postfix változatát! (help: 24 könyv 247. o. (***))

5 kisbajnokságos feladatok

  • (KÉSZ) Qtrajzoló 1: írj egy Qt rajtzolóprogit, az egérrel lehessen rajzolni!
  • (ÉLES) TCP 2: írj egy olyan TCP/IP-s programot, ami parancssor argumentumként kapott URL-t letölt és lement!
  • (KÉSZ) IPC 1: írj (természetesen jól működő) szimulációs progit az ebédelő filoszok problámára! (help: 4. ea. kódjai)
  • (KÉSZ) IPC 2: írj (természetesen jól működő) szimulációs progit az írók-olvasók problémára! (help: 4. ea. kódjai)
  • (KÉSZ) IPC 3: írj (természetesen jól működő) szimulációs progit az alvó borbély problémára! (help: 4. ea. kódjai)
  • (ÉLES, Python) PyTCAG: írd át az LZW-s z.c-nket olyanra, hogy nem 0, 1 betűre, hanem a T, C, A, G betűkre megy és megoldja ezt a feladatot.
  • (ÉLES, Java) JTCAG: írd át az LZW-s z.c-nket olyanra, hogy nem 0, 1 betűre, hanem a T, C, A, G betűkre megy és megoldja ezt a feladatot.
  • (KÉSZ) LZWCPP 5: a naiv első átiratban a gyökértől meg lehessen kérdezni a fa mélységét, ághosszainak átlagát, szórását!
  • (KÉSZ) LZWCPP 6: a második átiratban a fától meg lehessen kérdezni a fa mélységét, ághosszainak átlagát, szórását!

4 kisbajnokságos feladatok

  • (KÉSZ) PPplayer: írj egy videó lejátszó programot! (gstreamer, help: 8. ea.)
  • (ÉLES) TCP 3: írj egy olyan TCP/IP-s programot, ami parancssor argumentumként kapott URL-t letölt!
  • (KÉSZ) TCP 4: írj egy olyan TCP/IP-s programot, ami parancssor argumentumként kapott, képre mutató URL-t letölt és elment fájlba!
  • (ÉLES) LZWCPP 1: a naiv első átiratban legyen külön headerben az osztálydefiníció!
  • (KÉSZ) LZWCPP 2: a naiv első átiratban a gyökértől meg lehessen kérdezni a fa méylségét!
  • (KÉSZ) LZWCPP 3: a naiv első átiratban a gyökértől meg lehessen kérdezni a fa ághosszainak átlagát!
  • (ÉLES) LZWCPP 4: a naiv első átiratban a gyökértől meg lehessen kérdezni a fa ághosszainak szórását!
  • (ÉLES) LZWCPP 7: a második átiratban a fától meg lehessen kérdezni a fa mélységét!
  • (KÉSZ) LZWCPP 8: a második átiratban a fától meg lehessen kérdezni a fat, ághosszainak átlagát!
  • (ÉLES) LZWCPP 9: a második átiratban a fától meg lehessen kérdezni a fa ághosszainak szórását!

3 kisbajnokságos feladatok

  • (KÉSZ) Világszépe fraktál nagyító szépségverseny 1: saját Mandelbrot nagyító progiddal készíts nagyítási sorozatokat, tedd fel valahová, ahol lehet lájkolni, akiét legtöbben lájkolják április 1 de. 10-og, azé a trófea.
  • (ÉLES) Nyers socketek: írj saját pinget! (PP 158)
  • (ÉLES, C, Qt C++-kész, Java-kész) Kocka 2: parancssor argumentumként kapott képre ráírja az ugyancsak így kapott szöveget.

2 kisbajnokságos feladatok

  • (KÉSZ) Világszépe fraktál nagyító szépségverseny 2: saját Mandelbrot nagyító progiddal készíts képeket, tedd fel valahová, ahol lehet lájkolni, akiét legtöbben lájkolják április 1 de. 10-og, azé a trófea.
  • (KÉSZ) B&L(**) feladat: a 326. oldali feladat (Participiant osztályos).
  • (KÉSZ) Idő 1: meddig tart 1000 processzt, illetve 1000 P-szálat létrehozni? Hasonlítsd össze! (help: PP 65)
  • (KÉSZ) Idő 2: valamely programodban mérj valamit, hogy meddig tart (használd a tms struktúrát)! (help: PP 66)
  • (KÉSZ) Mutex: demonstráld, hogy védelem nélküli globálist elrontanak a P-szálak (védelem hiányában)! (help: PP 67)

1 kisbajnokságos feladatok

  • (ÉLES) Pi fstream: a pi-napi elosztott számítás eredménye részszámításonként egy-egy állomány a szerveren, írj olyan programot (C fgets/fputc, read/write már kilőve a 2. hullámban, így C++ std::fstream jöhet), ami ezeket a megfelelő sorrendben (ami a fájlnévből derül ki) összefésüli egyetlen állománnyá!
  • (KÉSZ) TCP 5: írj egy TCP-s daytime szervert (a PP-ben csak ilyen van :)
  • (KÉSZ) TCP 6: írj egy TCP-s echo szervert!
  • (ÉLES) STD 1: írj olyan programot, amivel demonstrálni tudod, hogy mély vagy sekély másolás történik-e, ha érték szerint adod át a dinamikus tömböt (std::vector, help: 6, 7. ea.)
  • (ÉLES) STD 2: írj olyan programot, amivel demonstrálni tudod, hogy mély vagy sekély másolás történik-e, ha érték szerint adod át a vermet (std::stack, help: 6. ea.)
  • (ÉLES) STD 3: írj olyan programot, amivel demonstrálni tudod, hogy mély vagy sekély másolás történik-e, ha érték szerint adod át a láncolt listát (std::list, help: 6, 7. ea.)
  • (ÉLES) STD 4: írj olyan programot, amivel demonstrálni tudod, hogy mély vagy sekély másolás történik-e, ha érték szerint adod át az asszociatív tömböt (std::map, help: 6, 7. ea.)
  • (ÉLES) STD 3: írj olyan programot, amivel demonstrálni tudod, hogy mély vagy sekély másolás történik-e, ha érték szerint adod át a halmazt (std::set, help: 6, 7. ea.)
  • (KÉSZ) PP példa alapján produkáld az ebédelő filoszos holtpontot!
  • (KÉSZ) Készíts saját int verem osztályt, mélymásolással másolódjon! (help: 6. ea.)
  • (ÉLES) Készíts saját int dinamikus tömb osztályt, mélymásolással másolódjon! (help: 6. ea.)
  • (KÉSZ, Java) A polár generátort írd át és nézz pár sebességtesztet a C++ változattal hasonlítva! (help: 6. ea. és (kb. a lap közepén a PolárGenerátor osztály))
  • (ÉLES) Világszépe fraktál nagyító szépségverseny 3: S billentyűre mentse a fraktál nagyítást mindig új néven, pl. sorszámozza! (help: itt)
  • (KÉSZ) RGB 1: írj olyan programot, ami a paraméterben kapott kép pixeleinek elveszi az R részeit (help:
    for (int i = 0; i < kep.get_height (); ++i) {
            for (int j = 0; j < kep.get_width (); ++j) {
    
                png::rgb_pixel eredetirgb = kep.get_pixel(j, i);
                png::rgb_pixel ujrgb ( 0, eredetirgb.green, 
    				  eredetirgb.blue);
    
                kep.set_pixel (j, i, ujrgb);
    
            }
            std::cout << "." << std::flush;
        }
    
    részletek itt)
  • (KÉSZ)  RGB 2: milyen képet produkál, ha az előző csipetben ilyen a színezés:
    png::rgb_pixel eredetirgb = kep.get_pixel(j, i);
                png::rgb_pixel ujrgb ((eredetirgb.red+eredetirgb.green)%255, (eredetirgb.green+eredetirgb.red)%255, eredetirgb.blu
  • (KÉSZ)  RGB 3: milyen képet produkál, ha az előző csipetben ilyen a színezés:
    png::rgb_pixel eredetirgb = kep.get_pixel(j, i);
                png::rgb_pixel ujrgb (2*eredetirgb.blue-eredetirgb.red, 2*eredetirgb.blue-eredetirgb.red, 0);

                kep.set_pixel (j, i, ujrgb);
  • (ÉLES) RGB 4: módosítsd a színezést, hogy ezt produkálja:
  • (KÉSZ) Mennyi "sizeof('0') * 8" C-ben és mennyi C++-ban?
  • (ÉLES) LZWCPP 10: a második átiratban mutasd meg (kiíratás a konstruktorokban), hogy a tagok konstruktorainak lefutása megelőzi a tartalmazó konstruktorának lefutását, pl.:
           Csomopont (char b = '/'):betu (b), balNulla (0), jobbEgy (0) {
               std::cout << "Csomopont" << this->betu << std::endl << std::flush;
           }
  • (ÉLES) LZWCPP 11: a naiv első átiratotl módosítsd úgy, hogy ne a példányokhoz, hanem az osztályhoz tartozzon a mélység!
  • (ÉLES) LZWCPP 12: a második átiratban módosítsd úgy a lekérdező módszereket (pl. Csomopont *balra();) hogy jelezzék, nem változtatják az osztályt!
     

Figyelem: élő közösségként, a vadászattal együtt élve tudjátok, hogy melyik feladat ÉLES, melyik kész, mert nem mindig tudom időben frissíteni!

Ha megtetszik egy feladat, de nem tudsz belekezdeni, vagy elakadtál, bátran kommenteld!

*: www.imsdb.com/scripts/Matrix,-The.html

**: Benedek Zoltán, Levendovszky Tihamér: Szoftverfejlesztés C++ nyelven, Budapest, 2007, Szak K.

***:Jesse Liberty, Horvath, David B. Büki András: Tanuljuk meg a C++ programozási nyelvet 24 óra alatt.

218 komment

Címkék: vadászat

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