Předtermín 27. 5. 2011

Seznámení se základními principy operačního systému UNIX, převážně z uživatelského hlediska. Absolvent kurzu by měl být schopen napsat netriviální program v shellu.
TheCarlos

Předtermín 27. 5. 2011

Příspěvek od TheCarlos »

Nová úloha - matlab

naprogramujte maticovou kalkulačku s následujícími funkcemi
load var file
--načte matici z file do var - oddělovač ve file je \t (sloupečky) a
(řádky), reprezentace var je součástí úlohy

save var file
--uloží matici z proměnné do souboru

show var
--vypište matici na stdout

a = b [+-*] c
uloží do proměnné a matici, kt. vznikne danou operací

dále b nebo c může být nahrazenou 0 (= nulová matice) nebo 1 (=jednotková matice), obě vhodného tvaru, u násobení může být násobení konstantou.

dále na konci programu (^D) vypište obsah všech proměnných.

(názvy proměnných jsou alfanum, alespoň jedno nečíslo)

Nástin řešení:
reprezentace proměnných: nejlépe asi soubory ve stejném formátu jako specifikováno pro file
proměnné držet v exta adresáři
load musel kontrolovat, že matice je fakt obdélník (nejlépe asi awk), load, show a save po kontrolách vstupu (proměnná/file existuje, název nové proměnné je alfanum apod.) už pak běhalo jen pomocí cp a cat...
sčítání a další operace - po naparsování vstupu awk, buď dva soubory a pohyb mezi nima, nebo je slepit do jednoho (s prázdnou řádkou) a dělat najednou, asociativní pole je pak odpověď asi na vše.
nulová matice je jen opruz, u násobení vrátit správně velkou nulovou, u sčítání tu druhou než 0, u 0 - var vrátit -var... jednotková se dala i nagenerovat (a pak použít obyč operace), nebo extra awk script, kterej sahá na diagonálu...obdobně asi i násobení konstantou, taky extra awk...

Každopádně mu stačilo, když jsme napsali slušně to load, save show a alespoň sčítání, ty co vymazlili jen load/save a vnitřní strukturu (byť geniálně) a nedostali se k operacím vyhodil. Mě stačilo na 2 to sčítání + load, save, show (asi v tom bylo dost chyb, možná že perfektně napsané by tohle bylo i na 1)

Skóre:
3x1
1x2
2xpohovor (nevim jak skončil)
3xznovu.
tobik
Matfyz(ák|ačka) level I
Příspěvky: 10
Registrován: 27. 5. 2011 18:10
Typ studia: Informatika Bc.

Re: Předtermín 27. 5. 2011

Příspěvek od tobik »

Jen bych doplnil, že mně se osvědčilo místo psaní samostatných funkcí na sčítání/násobení s jednotkovou/nulovou maticí či konstantou napsat funkci, která mi vytvořila diagonální matici odpovídajících rozměrů s daným číslem na diagonále, čímž se automaticky vyřešily všechny případy, které mohly nastat. Vytvořit diagonální matici jde pomocí dvou for cyklů i bez awk a že to funguje si stačí ověřit jednoduchým obrázkem :) Jen je potřeba dát pozor na rozměry, ale řekl bych, že to by Forst zrovna moc neřešil :D Celý příklad se pak zcvrkl do dvou funkcí vynasob a secti, které stačilo nakrmit potřebnými maticemi. Co se týče odčítání, tak samozřejmě asi nejjednodušší bylo předat funkci soucet nějakým parametrem, aby přepnula operaci, a nebo prostě obrátit znaménka u druhé matice, což je pomocí awk opět triviální operace...

Drobné ztížení bylo, že nebylo povoleno používat jakákoliv rozšíření, takže např. v awk byla zakázaná funkce getline. Tedy číst paralelně ze dvou souborů najednou nebylo dost dobře možné.
PetrK
Matfyz(ák|ačka) level I
Příspěvky: 22
Registrován: 7. 2. 2011 22:41
Typ studia: Informatika Bc.

Re: Předtermín 27. 5. 2011

Příspěvek od PetrK »

tobik píše: ...
Drobné ztížení bylo, že nebylo povoleno používat jakákoliv rozšíření, takže např. v awk byla zakázaná funkce getline. Tedy číst paralelně ze dvou souborů najednou nebylo dost dobře možné.
To preci neni zadna prekazka, vsecko, co je potreba se vejde do pameti (o tom nemuze byt sporu), tak vsecko pekne nasypat do awk a uz se to chrousta, stejna situace byla v pondeli na predterminu, ti, co resili ulohu ciste pres awk nenarazili na zadne problemy (vcetne me). Pri hodnoceni kritizoval pouze lidi, co resili ulohu editorem, pripadne se zasekli na nejakem problemu shellu ... Forst by se musel hodne snazit, aby vymyslel ulohu, ktera by nesla resit primo v awk, pouze s jednoduchym predspracovanim v shellu.
tobik
Matfyz(ák|ačka) level I
Příspěvky: 10
Registrován: 27. 5. 2011 18:10
Typ studia: Informatika Bc.

Re: Předtermín 27. 5. 2011

Příspěvek od tobik »

Proto říkám drobné :)

EDIT: Forstovi šlo v zásadě o to, abychom to celé nenamlátili v awk. Protože s funkcí getline by opravdu bylo možné celý příklad zvládnout v jednom awk scriptu a bylo by to pravděpodobně i kratší a jednodušší než se s tím patlat v shellu. A především by to napsal i člověk, který o shellu nic neví, čemuž chtěl samozřejmě Forst zabránit. A ztížení je to i v tom smyslu, že má člověk lehce omezené možnosti při běžných úkonech, expr nepodporuje všechny funkce, sed -r jsem také ve slajdech nenašel apod... Jsou to sice maličkosti, ale je otrava neustále na to dávat pozor a vymýšlet, jak ta omezení obejít.
Odpovědět

Zpět na „SWI095 Úvod do UNIXu“