[zk] 7.6.

js
Site Admin
Příspěvky: 144
Registrován: 22. 9. 2004 06:06
Typ studia: Fyzika Ph.D.
Bydliště: Praha

[zk] 7.6.

Příspěvek od js »

Takze dneska se mel naprogramovat muud (aneb multiple uu decoder).
Vo co gou:
Prijde vam mail, ve kterem je priloha. Puvodne binarni soubor je prekodovanej do textoveho souboru, textovy soubor je o 1/3 vetsi nez puvodni binarni soubor. (Tohle ale neni vubec dulezite.)
Textova priloha obsahuje blok ve tvaru

Kód: Vybrat vše

begin mod jmeno
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
end
jmeno==jmeno zakodovaneho souboru
mod==prava k souboru (napr 664, tj. muze to byt 3- az 4-ciferne cislo)
Muze se stat, ze textovy soubor v priloze je moooooc velky, a tak se to u odesilatele rozdeli na vice casti. Pokud se tak stane, tak textova priloha obsahuje blok ve tvaru (napr.)

Kód: Vybrat vše

begin mod jmeno 2/7
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
------ nejaky radek neobsahujici slovo end na zacatku radku
end
2/7== druha cast souboru jmeno ze sedmi
Vasim ukolem je napsat program
    • ktery v poste najde vsechny zakodovane soubory (tj. ty bloky...)
    • nabidne uzivateli dekodovani souboru. Uzivatel odpovi:
      a ... ano na 1 soubor
      A ... ano na vsechny nasledujici
      n ... ne na 1 soubor
      n ... ne na vsechny nasledujici
    • pokud uzivatel odpovi ano, vasim ukolem je zkontrolovat kompletnost (tj. jestli dorazily vsechny casti rozdeleneho zakodovaneho souboru) a zkontrolovat existenci (a zeptat se, jestli muzu pripadne prepsat jiz existujici soubor...)
Na co si dat pozor:
    • casti nejsou usporadany (tj. cas 5 muze prijit driv nez cast 2)
    • casti nemusi byt unikatni (tj. cast 2 mohla prijit vickrat, ale vsechny stejne casti od jednoho souboru bereme jako ekvivalentni, tj. kdyz prijde nekolikrat 3. cast souboru xy, tak predpokladame, ze jsou identicke)
    • (ten zakodovany) soubor se nevejde do pameti, ani jeho casti se nevejdou do pameti --> pracujeme se soubory na disku...
    • co nejmenekrat cist MAILBOX.
Nakonec na bloky zakodovanych souboru zavolame program uudecode, na jehoz standardni vstup nasmerujeme dany zakodovany blok. (tj. )uudecode < { blok s begin mod......... koncici radkou end } No a program uudecode ze zakodovanych textovych souboru vytvori binarni soubory, ktere ulozi do aktualniho adresare...
GOOD LUCK!!!!!
JS
js
Site Admin
Příspěvky: 144
Registrován: 22. 9. 2004 06:06
Typ studia: Fyzika Ph.D.
Bydliště: Praha

neco k reseni...

Příspěvek od js »

Ted neco k reseni...
Ja to delala tak, ze jsem na jeden pruchod precetla MAILBOX a vsechny bloky zakodovanych souboru vypsala do ruznych souboru. Nazvy souboru jsem cucala z radku s begin-em pro dany blok. Pro rozdelene soubory jsem do nazvu souboru umistila i informaci o tom, kolikata cast z kolika to je.
Vsechny takoveto soubory jsem ukladala do nejakeho tmp-adresare.
Vzhledem ke zpusobu zapisu bloku do souboru se mi nemohlo stat, ze bych mela neunikatni soubor (protoze jsem si pokazde prepsala ten predchozi...).
Pak jsem si vytvorila seznam tech souboru k dekodovani. Seznam jsem unikatne setridila (to unikatni uz stejne nebylo treba, soubor jednoho jmena tam byl vzdy prave jednou...).
Seznam souboru jsem zacala prochazet po polozkach. Pokud jsem zjistila, ze je soubor n-tou casti z m casti jednoho souboru, tak jsem si zalozila adresar, kam jsem vsechny tyto casti jednoho souboru nakopirovala. Pokud byl zakodovany soubor na vic casti a nektere chybely, vypsala jsem, ktere chybi, a uz jsem ho dal nespojovala. Pokud byly vsechny casti rozdeleneho souboru, tak jsem je spojila do jednoho stylem

Kód: Vybrat vše

begin mod jmeno
....... tady je vnitrni blok prvni casti
.......
....... tady je vnitrni blok (n-1). casti
....... tady je vnitrni blok n-te casti
end
Takto jsem ziskala vsechny soubory k dekodovani, zadny soubor nebyl na vic casti.
Pak jsem se zacala ptat uzivatele, jestli chce dekodovat soubory, a cekala odpovedi a/A/n/N. Podle toho jsem posilala bloky na uudecode.
No a samozrejme jsem nezapomnela na uklid vsech temporary souboru a adresaru.


Nevim, kolik to melo radku, ale popsala jsem tim asi 5 stranek A4, ale pokud by se vynechaly vsechny skrtance, tak by toho mohly byt tak 3 A4 smysluplneho kodu. Trvalo mi to cca ty dve hodiny, s tim, ze jsem asi 15-20 minut lovila v manualovych strankach a snazila si odzkouset si sed-ove prikazy, ktery jsem nedavala z hlavy...
Co se jmenneho prostoru prikazu tyce, tak jsem pouzila prikazy jako {mkdir, rmdir, rm, grep, sed, cp, mv, test, echo, presmerovani na standardni vstup <, zapis do souboru >, zapis na konec souboru >>, cut, pipy |, sort, expr}. Nevim, jestli to je uplny seznam, nejspis ne, ale nebylo to nic extra slozityho...

Statistika: zkousku skladalo 9 lidi, vysledky 5 lidi dalo za jedna, 4 lidi neprospeli. Pri vyhlasovani vysledku o trech pisemka rekl, ze nechape, jak nekdo muze za dve hodiny popsat jenom jednu A4, ze to, co tam napsali, by mel za 10 minut a pak by dalsich 110 minut psal zbytek...
Jinak ti 4, co to nedali, by meli zacit makat na svych dovednostech skriptovani v Unixu, protoze Forst rikal neco v tom smyslu, ze ti by nedali zadnou pisemku.

Jinak na zacatku nas nechal vybirat mezi zadanimi c. 5,8,35,37,50. Vybrali jsme si zadani c.8 ctyrmi hlasy, potom Forst prohlasil, ze nam dal ten pocit demokracie rozhodnout, co bude za zadani, a ze ted to zadani musi vybrat :lol:
GOOD LUCK, pokud unix jeste nemate :)
JS
Odpovědět

Zpět na „2004“