14
Tömörítő program készítése
  • olivaoil
    #14
    Hello!
    Nekem is úgy adódott, hogy szükségem lenne egy saját tömörítő forráskódra.

    A lényeg az, hogy arra lenne szükségem, hogy a program KIVÉTEL nélkül csak számjegyekkel, azaz a 48-57 értékek közötti bájtokkal dolgozzon. Tehát hogy akármilyen sorrendben akármennyi számjegyet tudjak betömöríteni, és ezt KIZÁRÓLAG szintén csak számjegyekkel tudjam felírni (mármint a tömörítvényt).
    A hatásfoka nem kell hogy kifejezetten jó legyen, elég ha csak mondjuk sok egymás melletti ugyanolyan számot rövidebb formában tárol a tömörítvényben. (A legfontosabb, hogy a tömörítvényben is _csak számjegyek_ legyenek a legelejétől a legvégéig)

    Amit legfőgéppen nem tudok és a segítségeteket kérném ebben, hogy hogyan lehet úgy felépíttetni a tömörítvényt, hogy ugyanolyan karakterekből álljon, mint amilyenből a tömörített adat állhat.
    Tehát hogyan tudja a kitömörítő megkülönböztetni a tömörítvényben az adatrészt és az egyéb leíró részeket (nem tudom, hogy hívják).

    Előre is köszönöm.
  • zvaragabor
    #13
    Csak pusztán kíváncsiságból. Hogy állsz az archiváló programmal? :)
  • Panzermeyer
    #12
    Egy kicsit igen :)
  • hiftu
    #11
    A kettő : jel az a láthatóságot módosítja.

    Például OOP-nél:

    vonal::draw();
    A vonal osztály draw metódusát jelöli.

    De használatos még a namespace-eknél is.
    Kijelölhetsz összetartozó dolgokat namespace-szel. És azután
    NamespaceNeve::elérniKivántElemNeve

    Remélem segített.
  • Panzermeyer
    #10
    Sok helyen láttam már ilyet, valami1::valami2.
    Mit jelent ez?
    [lehet hülyének nézni]
  • nemcsakfeel
    #9
    file kezelésre:

    fstream fajl("fajlneve.txt",ios::out);
    fajl << " iras a fajlba ";
    fajl.close();

    amugy itt van leiras fstreamrol

    string kezeleshez
  • Panzermeyer
    #8
    Megköszönném :)
  • nemcsakfeel
    #7
    .header fájlokban csak a hozzá tartozó cpp beli függvények prototíppusát kell megadni, majd a főprogramba ezt a .h fájlt kell inkludálnod.

    a #6 ot nemértem..
    ha megvan az algoritmusod erre a kódra, akkor csak c++ fájlolvasás múveletet kell használnod..
    legegyszerűbb ha strings osztályt használsz, ebbe beolvasod a fájlből, majd a sztring elemeire egyesével hivatkozol..
    ha érdekel példát másolok ide string kezelésre, meg fájl olvasásra..
  • Panzermeyer
    #6
    Írok egy kicsit a fő problémámról.
    Pofon egyszerű, ez csak példa. Legyen a következő egy txt fájlban: DABBACDABBACD

    alapszótárunkban van: 1. - A ; 2. - B ; 3. - C ; 4. - D

    Ekkor ugye az történik, hogy nézi az algoritmus a D betűt, na ilyenünk van már, de vegyük hozzá az A karaktert, így kapunk DA -t. Ilyenünk még viszont nincs, ezért felvesszük a szótárba: 5. - DA
    majd D -t kódolom (4). Most megyek az A -hoz, van már ilyen, ezért hozzáveszem B -t, így lesz AB, ami viszont megint nincs, ezért felveszem AB -t a szótárba 6. sorszámmal, és kódolom A -t (1). És így tovább.

    Ugye a prolog képes adatbáziskezelésre. Legyen pl a köv adatbázisunk
    kod(a,1).
    kod(b,2).
    kod(c,3).
    kod(d,4).

    Ő képes átlátni az egész adatbázist, és összehasonlítani már egy bent lévővel, továbbá ha nem létezik akkor felveszi. De viszont, azt hogy mondom meg neki, hogy hát légyszives karakterenként vizsgáld már a beolvasott fájlt? C++ -ban viszont lehet karakterenként vizsgálni, viszont olyan adatbáziskezelési móddal nem lehet élni, mint amilyen a Prologban van.
    Ezért volnék kíváncsi vki megoldására (nem lopni... meríteni), vagy tanácsaira, aki már csinált ilyet.
    [erősen töpreng]
  • RelakS
    Szüli
    #5
    A .h fájlok tökéletesen ugyan úgy épülnek fel, mint a .c és .cpp fájlok, csak nem szoktak benne #include-ok lenni, és nincs bennük a void main() eljárás sem.
    A programban meg amit használsz, pl az #include <stdio.h>; után egyszerűen azt mondod, hogy #include "sajat.h";
    (rég c-ztem, sazl a szintaktika nem biztos, hogy helyes.)
  • Panzermeyer
    #4
    Szia!

    Értem, szal akkor azért kellenek header fájlok. Nos, mivel már viszonylag régen tanultam a c++ programozást, néhány dolog kiment a fejemből. Ezek a header fájlok rutingyüjtemények igaz?
    Header fájl készítésén azt értem, hogy pl tanulmányoztam már ilyen progikat, csak abban láttam, hogy elég sok saját készítésű .h kiterjesztésű fájl volt. Én ezek megúszásával akartam megcsinálni, mivelhogy ezt spec nem tanították hogyan kell. Akkor esetleg tudsz ajánlani egy viszonylag könnyen értelmezhető, jól elmagyarázós header fájl készítést megtanító oldalt? Thx.

    Azt gondoltam, hogy nagyon erős matek áll mögötte, de hát az LZW... azt már vki kitalálta helyettem, és nem is túl bonyolult. Bár, ha azt mondod Huffmannal könnyebb, és én is úgy látom, akkor azzal lesz írva.
  • Panzermeyer
    #3
    Ja, és RLE-t sztem tudok írni, de annak marha nagy a hatásfoka :)
  • hiftu
    #2
    Szia!

    Gondolom csak úgy saját szórakozásodra akarsz írni egy ilyet.
    (Azért gondolom ezt, mert elég sok matek van az igazi ütős
    megvalósítások mögött.)

    Mit értesz header fájl készítése nélkül?
    Azt, hogy 1 forrásfájlba belerakni az egészet?
    (Az nem éri meg, mert átláthatatlan lesz.)

  • Panzermeyer
    #1
    Üdvözlet!

    Arra gondoltam, hogy csinálnék egy ilyen programot, de mindíg valahol valami gubancba akadok. Három programozási nyelven "tudok" valamicskét: Prolog (SWI), C++, Assembly.
    Tömörítési eljárásnak az LZW eljárásra gondoltam. Készített már valaki ilyet? Meg lehet ezt oldani header fájl készítése nélkül? További kérdések is várhatóak, csak legyen aki ír ide.
    (A használj Winrar-t, Winzip-et, Winace-t, és hasonló okos megjegyzésektől mentes hozzászólásokat kéretik írni.)