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

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

2011.04.16. 11:10 nb

Íme a negyedik hullám, de élvezd az elsőt, a másodikat és a harmadikat is! (Ha mást nem mondunk, akkor a szokásos "hegylakó szabály" van: csak egy maradhat, azaz az első vadászé a trófea.) Továbbá, ha mást nem mondunk, akkor a jelen hullám feladatainak megoldását is C, C++, Qt C++-ban várjuk. (ugyanazon feladat más nyelvű megvalósítása nem számít hasonló feladatnak, így elszámolhatósága esélyes :).

Tavaszi szél vizet áraszt

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! I

20 kisbajnokságos feladatok

  • (ÉLES, Qt C++, Java ME) Mobil RoboTanár: készíts olyan mobiltelefonos programot, ami lefotózza a ZH-t és kijavítja! (help: lásd a sima RoboTanár feladatot!)

13 kisbajnokságos feladatok

  • (ÉLES, C++, Qt C++, Java SE) RoboTanár: készíts olyan PC-s programot, ami lefotózott vagy beszkennelt ZH-t kijavít! (help: forrást nem adom, mert akkor beindul az össznépi másolás, de a szobában fogadóórán meg lehet nézni!)

Tesztképeket itt találsz, ezekre működjön helyesen a progid! (Elegánsan jársz el, ha nem bedrótozod a helyes megoldást, azaz a MINTA-t, hanem egy kitüntetett, pl. első vagy parancssor argumentumban jelzett bemenő teszt "tanítja meg" a programodat a helyes kitöltésre.)

 

12 kisbajnokságos feladatok

  • (ÉLES C++ és Python) Készítsd el mindkettőben az LZW fa építőt, de ne bináris 0,1-re vagy T, C, A, G betűkre működjön, hanem tetszőleges szavakra (help: korábbi hullám Könyves Kálmános feladata a Python részhez.) Végezz sebességtesztet is a két változattal!

9 kisbajnokságos feladatok

  • (KÉSZ) B&L(**) 7/Person feladat:142. oldal (másik két "7/"-el egymást kizáró.)
  • (ÉLES Android Java) GPS pásztor: csilingeljen (vagy valahogy jelezze) ha a készülék kimegy egy előre "megrajzolt" (megadott) téglalapból. - DDN tagoknak rendelkezésre áll eszköz a teszteléshez.
  • (ÉLES Android Java) GPS reklám: csilingeljen (vagy valahogy jelezze) ha a készülék kimegy egy előre megadott bolt mellett van és "dobja fel" a bolt reklámját! - DDN tagoknak rendelkezésre áll eszköz a teszteléshez.

8 kisbajnokságos feladatok

  • (ÉLES) Sebesta könyv (****) 558. o. Saját (dinamikus, láncolt listából származtatott) verem, sablonosztállyal megvalósítva.

7 kisbajnokságos feladatok

  • (KÉSZ) B&L(**) 6.3 példa: 96. oldal 1, 2, 3, 4 művelet csoportok (másik két "6.3"-al egymást kizáró.)
  • (KÉSZ) B&L(**) 6.3 példa: 96. oldal 1, 2, 3, 5 művelet csoportok (másik két "6.3"-al egymást kizáró.)
  • (KÉSZ) B&L(**) 7/Sorter feladat:142. oldal (másik két "7/"-el egymást kizáró.)
  • (KÉSZ) B&L(**) 7/Serializer feladat:142. oldal (másik két "7/"-el egymást kizáró.)
  • (ÉLES) Sebesta könyv (****) 558. o. Saját (dinamikus, láncolt listából származtatott) verem.

6 kisbajnokságos feladatok

  • (KÉSZ) B&L(**) 6.3 példa: 96. oldal 1, 2, 3 művelet csoportok (másik két "6.3"-al egymást kizáró.)

5 kisbajnokságos feladatok

  • (KÉSZ) S(******) könyv "6.1 Egy asztali számológép", 142. o.
  • (ÉLES) 11/12 labor utolsó feladata.

3 kisbajnokságos feladatok

  • (ÉLES) B&L(**) 7/Negyzet feladat:126. oldal (2 ha 7/Mat már volt).
  • (KÉSZ) B&L(**) 12.3.6 feladat:339. oldal.
  • (ÉLES) B&L(**) locale-pénz feladat:399. oldal.
  • (ÉLESCORBA telefonkönyv.

2 kisbajnokságos feladatok

  • (KÉSZ) B&L(**) Prior. sor feladat:350. oldal.
  • (KÉSZ) CORBA 1: az omniORB omniNames szolgáltatója fusson, a névszolg. gyökerének címét másold át a következő ORBit-os kliensbe és szerezd meg a névszol. gobjektum referenciáját, majd kérd meg az ORB-t, hogy alakítsa sztringgé és a kapottat írasd ki:
    norbi@sgu ~]$ omniNames -start 2011  -logdir .

    Thu Apr 21 09:22:23 2011:

    Starting omniNames for the first time.
    Wrote initial log file.
    Read log file successfully.
    Root context is IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000070000000010102000e0000003139332e362e3133352e31353400db070b0000004e616d6553657276696365000300000000000000080000000100000000545441010000001c0000000100000001000100010000000100010509010100010000000901010003545441080000002fdbaf4d010035e6
    Checkpointing Phase 1: Prepare.
    Checkpointing Phase 2: Commit.
    Checkpointing completed
    /* PP 164
    gcc -I/usr/include/orbit-2.0 -I/usr/include/orbit-2.0/orbit/util -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -o nevszolg_ior nevszolg_ior.c -lORBit-2
    */
    
    #include <stdio.h>
    #include <orbit/orbit.h>
    #include <ORBitservices/CosNaming.h>
    
    int
    main (int argc, char **argv)
    {
        CORBA_ORB orb;
        CORBA_Environment env;
        CORBA_exception_init (&env);
        CosNaming_NamingContext nevszolgaltato_gyokere;
        char *gyokerIOR =
            "IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000070000000010102000e0000003139332e362e3133352e31353400db070b0000004e616d6553657276696365000300000000000000080000000100000000545441010000001c0000000100000001000100010000000100010509010100010000000901010003545441080000002fdbaf4d010035e6";
        orb = CORBA_ORB_init (&argc, argv, "orbit-local-mt-orb", &env);
        // ezt tennenk szokasosan, de futtassuk az orbit-name-server-t
        // (most az omniORB omniNames fut, így a fenti sor most tárgytalan)
        // nevszolgaltato_gyokere =
        // CORBA_ORB_resolve_initial_service(orb,
        // "NameService", &env);
        // es az igy megszerzett IOR-el ferjunk hozza a
        // nevszolgaltatohoz:
        nevszolgaltato_gyokere = CORBA_ORB_string_to_object (orb, gyokerIOR, &env);
        printf ("A nevszolgaltato gyokere: %s\n",
                CORBA_ORB_object_to_string (orb, nevszolgaltato_gyokere, &env));
        return 0;
    }
    
    gcc -I/usr/include/orbit-2.0 -I/usr/include/orbit-2.0/orbit/util -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -o nevszolg_ior nevszolg_ior.c -lORBit-2
    ./nevszolg_ior
    A nevszolgaltato gyokere: IOR:010000002b00000049444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f6e746578744578743a312e300000010000000000000070000000010102000e0000003139332e362e3133352e31353400db070b0000004e616d6553657276696365000300000000000000080000000100000000545441010000001c0000000100000001000100010000000100010509010100010000000901010003545441080000002fdbaf4d010035e6 
  • (ÉLES) CORBA 2: CORBA 1 omniORB C++ klienssel (CORBA ? nem kizáró).
  • (ÉLES) CORBA 3: CORBA 1 omniORB Python klienssel (CORBA ? nem kizáró).
  • (ÉLES) CORBA 4: CORBA 1 Java IDL klienssel (CORBA ? nem kizáró).
  • (ÉLES) Nehogy már megint 1: készíts saját horgászhelyes Java ME horgászjátékot! (help: szobában ******* és Jávácska ONE)

1 kisbajnokságos feladatok

  • (KÉSZ) B&L(**) Öt-bit példa: 357. oldal.
  • (KÉSZ) B&L(**) 7.1 példa: 112. oldal.
  • (KÉSZ) B&L(**) 7/Mat feladat: 120. oldal.
  • (ÉLES) Ha az eddig elejtett vadjaidnak volt OO szerkezete, akkor készíts UML osztálydiagramot! (max. két esetben számolható el vadászonként, Java: ArgoUML, C++: uml.sourceforge.net/)
  • (ÉLES) Kurzustérkép.
  • (ÉLES) Qt Konvenciók 1, írd át a bevezető Qt-s példák/Mandelbrot nagyítót, hogy kövesse a forrás a konvenciókat (help.: OSS(*****) könyv 90. oldal., Qt Konvenciók ?-al kizáró.)
  • (ÉLES) Qt Konvenciók 2, írd át a bevezető Qt-s példák/TCAG szőnyeget, hogy kövesse a forrás a konvenciókat (help.: OSS(*****) könyv 90. oldal., Qt Konvenciók ?-al kizáró.)
  • (ÉLES) Qt Konvenciók 3, írd át a bevezető Qt-s példák/Sejtautomata szimuláló, hogy kövesse a forrás a konvenciókat (help.: OSS(*****) könyv 90. oldal., Qt Konvenciók ?-al kizáró.)
  • (KÉSZ) RobotFoci 1, a csapat az Aranycsapat felállásából induljon (help: 7. ea., agent2d.../src/before-kick-off.conf)
  • (KÉSZ) RobotFoci 2, végezzük el a néhány "placebo-átalakítást" (a POSIX jelkezelés és a select környékén) (help: fersml blog)
  • (ÉLES) CORBA 5: CORBA 1 két külön gépen tesztelve (CORBA ? nem kizáró)
  • (ÉLES) CORBA 6: CORBA 2 két külön gépen tesztelve (CORBA ? nem kizáró)
  • (ÉLES) CORBA 7: CORBA 3 két külön gépen tesztelve (CORBA ? nem kizáró)
  • (ÉLES) CORBA 8: CORBA 4 két külön gépen tesztelve (CORBA ? nem kizáró)
  • (ÉLES) Nehogy már megint 2: készíts Java Android-os frame alapú animációt! (help: szobában ******* és ********)
  • (KÉSZ) Nehogy már 1: saját (felélesztés és valami apró módosítás) Java ME / NehogyMar1 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már 2: saját (felélesztés és valami apró módosítás) Java ME / NehogyMar2 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már 3: saját (felélesztés és valami apró módosítás) Java ME / NehogyMar3 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már 4: saját (felélesztés és valami apró módosítás) Java ME / NehogyMar4 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már 5: saját (felélesztés és valami apró módosítás) Java ME / NehogyMar5 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már 6: saját (felélesztés és valami apró módosítás) Java ME / NehogyMar6 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már 7: saját (felélesztés és valami apró módosítás) Java ME / NehogyMar7 (help: ******** és NehogyMar példák) - "Nehogy már ?" kizáróak
  • (KÉSZ) Nehogy már a1: saját (felélesztés és valami apró módosítás) Android / NehogyMar1 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már a2: saját (felélesztés és valami apró módosítás) Android / NehogyMar2 (help: ******** és NehogyMar példák)
  • (KÉSZ) Nehogy már a3: saját (felélesztés és valami apró módosítás) Android / NehogyMar3 (help: ******** és NehogyMar példák) - "Nehogy már a?" kizáróak
  • (ÉLES) TCAG 1, help: ********* 201. oldal 1. feladat (TCAG ? kizáró)
  • (ÉLES) TCAG 2, help: ********* 201. oldal 2. feladat (TCAG ? kizáró)
  •  

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! (A türelmetlen vadászokra gondolva menet közben publikálom a posztot, hogy elkezdhessék feldolgozni a hétvégén mihamarabb, de a feladatok kiírása folyamatos lesz, amíg meg nem jelenik a link ide a Vadászat dobozban.)

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.

****: Robert W. Sebesta: Concepts of programming languages, 9. ed. Upper Saddle River, NJ : Pearson, 2010.

*****: Alan Ezust, Paul Ezust: An Introduction to Design Patterns in C++ with Qt 4, Prentice Hall (Open Source Series) 2006

******: Stroustrup, Bjarne: A C++ programozási nyelv, Kiskapu, 2001.

*******: Bátfai Norbert (2011): Mobil programozás - Nehogy már megint a mobilod nyomkodjon Téged!, Kempelen Farkas Felsőoktatási Digitális Tankönyvtár (2011).

********:Bátfai Norbert (2008): Nehogy már a mobilod nyomkodjon Téged! A programozás egy szellemi sport: ismerd meg Te is az alaplépéseket! Debrecen, DEENK 2008.

*********: Peter Revesz: Introduction to Databases: From Biological to Spatio-Temporal, Texts in Computer Science, 1st Edition, 2010.

 

65 komment

Címkék: vadászat képfeldolgozás robotanár qt kódolási konvenciók

Együtt támadjuk meg (*)

2011.04.14. 17:00 nb

Itt a labor-teljesítés védésének szezonja. Célom, hogy a feladat során minél több hallgatónak valódi sikerélménye lehessen, ezért a C++ megoldást most magam is beütöttem. Iniciális megoldás, lehet akár javítani, cifrázni is, de talán működik. Hogy ne járjunk úgy, mint "John Conor a T100-as Arnolddal", így a kifejlesztett kódot teszteljük. A C változatban valamelyest megbízunk, hiszen azt otthoni labormérésként papíron is kiszámolt fára teszteltük. Ezért azt fogjuk tenni, hogy lerántjuk a humán genom 2. kromoszómájának kódját, majd kitömör:

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/H_sapiens/CHR_02/hs_alt_Hs_Celera_chr2.fa.gz
gunzip hs_alt_Hs_Celera_chr2.fa.gz 

ebből kivágunk 10 megát az elejéből (most nem genetikai mérnökök vagyunk, számunkra tehát ez most nem a genetikai kód, így sem a kommentet nem szedjük ki az elejéből, sem a 0xA újsor bájtokat...)

Szóval csak vesszük az első 10 megás részét ezzel a d.c mutánssal:

#include <stdio.h>
#include <unistd.h>
int
main (void)
{
  int i, egy_e, c = 10 * 1024 * 1024, ci = 0;
  unsigned char b;

  while (read (0, (void *) &b, sizeof (unsigned char)))
    {
      for (i = 0; i < 8; ++i)
        {
          egy_e = b & 0x80;
          if ((egy_e >> 7) == 1)
            printf ("1");
          else
            printf ("0");
          b <<= 1;
        }
      if (++ci == c)
        break;
    }
}
ugye ez 10 megából pontosan 80 megás állományt ír ki, mert bitenként nyom egy 0 vagy 1 betűt, ez volt a karakteres dump progink. Fordítjuk, futtatjuk:

[norbi@sgu tcag]$ gcc d2.c -o d2
[norbi@sgu tcag]$ ./d2 <hs_alt_Hs_Celera_chr2.fa >hs_alt_Hs_Celera_chr2.fa.01dump
a létrehozott hs_alt_Hs_Celera_chr2.fa.01dump állomány tehát 0,1-ek tengere, a humán genom 2. kromója állományának első 10 megájának megfelelően. Ez azért kellett, mert a korábbi LZW fa építő, mélység, átlag és szórást számoló (z.c) C progink ilyen karakteres 0,1 inputot vár. Lássuk, mit ad rá! (Tehát ebben bízunk, hogy helyes eredményt számol, azért ez a móka, mert az új verziót és a hallgató a sajátját majd ezzel a kimenettel veti össze.)

[norbi@sgu tcag]$ gcc korabbiz.c -o z -std=c99 -lm
[norbi@sgu tcag]$ ./z <hs_alt_Hs_Celera_chr2.fa.01dump > kimenet.korabbic
[norbi@sgu tcag]$ tail kimenet.korabbic
------------------------------------------------------------------------------------0(27)
------------------------------------------------------------------------------0(25)
------------------------------------------------------------0(19)
------------------------------------------------------0(17)
------------------------------------0(11)
---------------------------0(8)
---------------------0(6)
melyseg=408
altag=57.124677
szoras=9.450720
OK., most a d.c egy másik mutánsával kinyomunk 10 megát:

#include <stdio.h>
#include <unistd.h>
int
main (void)
{
  int i, egy_e, c = 10 * 1024 * 1024, ci = 0;
  unsigned char b;

  while (read (0, (void *) &b, sizeof (unsigned char)))
    {
      write (1, (void *) &b, sizeof (unsigned char));
      if (++ci == c)
        break;
    }
}
Fordít, futtat:

[norbi@sgu tcag]$ gcc d3.c -o d3
[norbi@sgu tcag]$ ./d3 <hs_alt_Hs_Celera_chr2.fa >hs_alt_Hs_Celera_chr2.fa.10mega
A hs_alt_Hs_Celera_chr2.fa.10mega állomány tehát ugyanazokból a bitekből áll, mint amit a karakteres dump hs_alt_Hs_Celera_chr2.fa.01dump mutat. De ez bináris, egyszerűen az eredeti hs_alt_Hs_Celera_chr2.fa fájl 10 megás eleje. Erre engedjük rá az új fejlesztésünket:

[norbi@sgu tcag]$ g++ z3a2.cpp -o z3a2
[norbi@sgu tcag]$ ./z3a2 hs_alt_Hs_Celera_chr2.fa.10mega -o kimenet.uj
[norbi@sgu tcag]$ tail kimenet.uj
------------------------------------------------------------------------------------0(27)
------------------------------------------------------------------------------0(25)
------------------------------------------------------------0(19)
------------------------------------------------------0(17)
------------------------------------0(11)
---------------------------0(8)
---------------------0(6)
depth = 408
mean = 57.1247
var = 9.45072
Ta-dám, tökéletes. (A lényeg, hogy saját fejlesztéseddel, esetleges módosításoddal ez adódjon.)

Tekintettel a védésre a következő (z3a2.cpp) forrást elkezdtem kommentezni, ha a poszt kommentjében jelzitek, hogy hol erősítsem ezeket a magyarázatokat, nagyon szívesen megteszem.

Jó alkalom a védésre készülés arra is, hogy aki nem a (későbbiekben tömegesen) használt útnak elvárt) felkészülési algoritmussal tanult hétről-hétre, az a programot nagyon alaposan feldolgozva magáévá tegye azt!

Használjuk tehát bátran, egészséggel! Akár saját védésünk alapjául is (akinek már C-ben kész, annak is érdekes, innovatív lehetőség 2 alternatívát bemutatni, elég meggyőző lenne :)

z3a2.cpp

(ha kijelölöd a forrást és bemásolod, látszik majd a sorok vége persze, katt a "Tovább" linkre)

*:A Klónok Háborúja

18 komment

Címkék: labor teljesítés

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