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

A nyolcadik előadás, fizikailag

2011.04.06. 15:08 nb

2011. április 6-án megtartottuk a nyolcadik előadást, írtunk katalógust, mert kevesebben voltunk, mint szoktunk lenni, 100 fő alá csökkent a létszám, csupán 97-en voltunk...

 

A végleges előadások itt elérhetőek: nehogy.fw.hu/

Szólj hozzá!

Címkék: előadás kompozíció uml aggregáció

Elmondtam milliomezerszer 2

2011.04.03. 13:22 nb

Korábbi posztunkban foglalkoztunk már a szavak számlálásával: előre hivatkozva, a Google MapReduce kapcsán. Most a K&R könyv C struktúrás szószámoló progiját írjuk meg C++-ban a korábbi osztályunk kódjának egyszerűsítésével. Mélyen nyomjuk majd a backspace-t, mert valódi karcsúsítás lesz, hiszen a jelen feladatban nem az LZW algoritmus logikájával, hanem csak a'la nature kell a bináris fát felépíteni.

Megtehetnénk, hogy a túlterhelt << operátor implementációjából hívunk egy ugyanolyan rekurzív függvényt, mint a K&R hasonló funkciójú

struct tnode* tree (struct tnode*, char *)függvénye, de legyünk már egy kicsit kreatívabbak! (Esetünkben persze Csomopont* lenne a struct tnode* helyett.)

 void operator<<(std::string s)
    {
        int e;

        if (csomopont == NULL) {

            csomopont = new Csomopont (s);
            gyoker = csomopont;

        } else if ((e = csomopont->tartalma().compare(s)) == 0) {

            csomopont->novel();

        } else if (e > 0) {

            if (csomopont->balra() == NULL) {
                csomopont->balra(new Csomopont (s));
            } else {
                csomopont = csomopont->balra();
                *this << s;
            }

        } else if (e < 0) {

            if (csomopont->jobbra() == NULL) {
                csomopont->jobbra(new Csomopont (s));
            } else {
                csomopont = csomopont->jobbra();
                *this << s;
            }

        }

        csomopont = gyoker;

    }

 A "csomopont" mindig a gyökértől indul és oda mutat, ahová éppen megpróbáljuk beszúrni a kapott új szót. Kezdetben nincs fa (szemben az LZW-s példánkban a gyökér nem a szabad tárban, hanem a vermen ott volt alapban) ezért az első szóval az if ág felveszi a szót. Aztán a második szó, ha az elsővel egyezik tartalomra, akkor az első else if ág szerint csak növeljük az aktuális csomópont számlálóját, ha kisebb volt a szó, akkor a jobboldali, ha nagyobb akkor a bal oldali részfába (vagy pont fordítva :) kérjük újra a beszúrását.

Kattints a tovább linkre a teljes forrásért, illetve néhány alternatív "szó-számoló" megoldásért.

Szólj hozzá!

Címkék: bináris fa asszociatív tároló

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