Zapocet 18.1.2006 10:00

Uživatelský avatar
tutchek
Site Admin
Příspěvky: 795
Registrován: 21. 9. 2004 00:40
Typ studia: Informatika Mgr.
Bydliště: Praha, Bohnice
Kontaktovat uživatele:

Zapocet 18.1.2006 10:00

Příspěvek od tutchek »

Tak na nas byl dnes zadavajici hodny...

zpracovani vyrazu s promennymi

na vstupu to dostane soubor se vzorcem na prvnim radku a pak promenne

Kód: Vybrat vše

a+(8*9)-5
a 5
no a vyplivne to spoctane, umi to binarni operatory +,-,*,/ a unarni ~ (vse ekvivalenty ceckovych operatoru)

no a nejpodstatnejsi bylo vymyslet hezkou strukturu, pak aby to nepadalo.. a posledni priorita byla aby to umelo pocitat.... ale prej prihouri oko...

no zatim jsm to udelali tri, jeden vzdal a termin stale bezi...
exAdmin. Magistr přes umělou inteligenci. Právník přes daně.
Uživatelský avatar
Lada
Donátor
Donátor
Příspěvky: 165
Registrován: 9. 1. 2005 10:17
Typ studia: Informatika Bc.
Bydliště: Slaný / zácpa na Evropské

Příspěvek od Lada »

hmm, hezky, zdrojak sis neschoval?
Hail to you, champion:o)
Uživatelský avatar
tutchek
Site Admin
Příspěvky: 795
Registrován: 21. 9. 2004 00:40
Typ studia: Informatika Mgr.
Bydliště: Praha, Bohnice
Kontaktovat uživatele:

Příspěvek od tutchek »

sorry, po neblahe zkusenosti z PRG C/C++ zap test kdy jsem si to ukladal na J, jsem to ted ukladal na C do tempu a pak rychle vypadl, takze se to tam vali mozna jeste, SW1 druha rada od tabule, pocitac nejvic ke dverim ;))

jinak proste binarni strom na vyrazy a rozparsovani ja udelal rekurzivne jak to naznacuje töpfer - osekat zavorky okolo a pak podle priority najit bud prvni + ktery neni v zavorce, nebo -, *, /, ~ (postupne), hodit to do vrcholu stromu, text okolo poslat na zpracovani o parto niz a z toho postavit strom... obcas jsem hazel nejaky vyjimky a cvicicimu se to libilo...
exAdmin. Magistr přes umělou inteligenci. Právník přes daně.
Uživatelský avatar
Isidor
Adoptoval Tutcheka
Adoptoval Tutcheka
Příspěvky: 247
Registrován: 8. 12. 2004 23:22
Typ studia: Informatika Mgr.
Bydliště: mám
Kontaktovat uživatele:

Příspěvek od Isidor »

Ja mam svoj zdrojak... ked tak cez ICQ
Inteligentních lidí je menšina. Demokracie je vláda většiny.
qk
Matfyz(ák|ačka) level III
Příspěvky: 181
Registrován: 24. 2. 2005 10:03
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Příspěvek od qk »

tak ja byl posledni co daval a skore je ze 3 nedali, 2 vzdali a jeden to tam zmotal, ze mu rekl ze potrebuje vic praxe.
Jinak nastesti se nehralo na pure C++, takze mu nevadilo kdyz sem dle potreby parsil radek tak ze sem si ho prevedl do char * a pak rozarsoval,
Jinak nemel sem vse (uspesne sem zapomnel na zavorky a pak kdyz mi to vse behalo sem si na ne vzpomnel, ale nestihl dodelat. ale kdyz to videl ze to neco pocita, tak to vzal.
Jinak delal sem jako tutchek, postavil sem strom nad vyrazem

P.S. dokonce prezil i jeden mensi ulet v navrhu predka, kdy sem tam dal neco co melo byt az v potomkovi.
Don't worry, be dead
Uživatelský avatar
tutchek
Site Admin
Příspěvky: 795
Registrován: 21. 9. 2004 00:40
Typ studia: Informatika Mgr.
Bydliště: Praha, Bohnice
Kontaktovat uživatele:

Příspěvek od tutchek »

Takze se ke me dostal muj zdrojak... provedl jsem v nem vymaz warningu a jedne chybky (co kdby to nekdo prochazel, ze ;)))) a je to tu
Přílohy
Zapoctovy_test.zip
Tu je muj program
(2.45 KiB) Staženo 305 x
exAdmin. Magistr přes umělou inteligenci. Právník přes daně.
Uživatelský avatar
Trupik
Matfyz(ák|ačka) level III
Příspěvky: 251
Registrován: 3. 1. 2005 14:45
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Mam to..

Příspěvek od Trupik »

No, dalo se to zvladnout - i kdyz ty 3 hodinky mi byly tak akorát. K výsledku - chtěl nějakou pěkně navrženou reprezentaci toho výrazu. Nejlepší by asi bylo nedělat obyčejný binární strom, ale vytvořit různé typy vrcholů stromu - jeden typ pro operátory a pak různé druhy listů - pro čísla a pro proměné. Takže nejlépe mít nějaký abstraktní vrchol stromu - předek s virtuální funkcí vyhodnocení, která pro číslový vrchol vrátí číslo, pro vrchol s proměnou hodnotu proměné a pro vrchol s operátorem vrátí výsledek operace provedené na vyhodnocené podstromy. Taky jsem poprvé v životě viděl operátor ~ - binární negace integeru.
Jo a třída by měla mít nějakej fajnovej destruktor, kterej správně odalokuje strom.
Co mě docela zdrželo bylo odalokovávání napůl rozestavěného stromu při syntakticky špatném výrazu - protože jsem si tuhle nutnost uvědomil až když jsem to měl hotový a musel jsem to tam docpávat dodatečně.
Jinak to řešení se stromem s více druhy vrcholů jsem já nedělal - měl jsem jen jeden univerzální druh vrcholu, který reprezentoval všechny případy - a stačilo to (prej ne moc čistý, ale uznáme..). Taky se zas až tak nic moc nestalo, když to neumělo všechno (kolegovi to třeba vůbec neumělo závorky, a taky to dostal). Hlavní byla ta třída.
Algoritmus na vyhodnocení už asi všichni znají - takže jen pro jistotu - buď budete vždy ve výrazu hledat operátor nejmenší priority a ten provedete a tím se postupně bude výraz zjednodušovat, nebo se může použít nepřímá rekurze (jedna funkce vyhodnocuje sčítání a odčítání, druhá násobení a dělení, třetí negaci a čtvrtá podvýraz (buď něco v závorkách, nebo proměnná/číslo). Každá procedura pak volá proceduru pro nižší prioritu a podvýraz v případě závorek zase volá funkci pro sčítání a odčítání. Tenhle algoritmus pracuje lineárně vzhledem k délce výrazu (čte ho jen jednou a nevrací se)

Uff, to jsem se ale rozepsal...
Třeba to někomu pomůže.
Domovská stránka: http://www.jakubmaly.cz/, blog: http://blog.jakubmaly.cz/
Petice proti olympiádě http://olympiada.nazory.cz

Come on you target for faraway laughter,
Come on you stranger, you legend, you martyr, and shine!
Uživatelský avatar
twoflower
Supermatfyz(ák|ačka)
Příspěvky: 445
Registrován: 22. 9. 2004 21:07
Typ studia: Informatika Ph.D.
Kontaktovat uživatele:

Příspěvek od twoflower »

Jo, asi tak. Ja mel binarni strom s dvema typy uzlu (a v pripade toho druheho typu i listu), zdedenych od abstraktniho interfacu, i kdyz ze zacatku jsem to mel vicemene jen v jedne te tride a docistoval jsem to az pred koncem, protoze jsem se bal, ze se to cvicicimu nebude libit :) ale nakonec mi pripadalo, ze by si toho ani nevsimnul.
Odpovědět

Zpět na „2005“