Zadání bylo následující. Měli jsme vstup v souboru, jehož jméno jsme dostali jako první argument na příkazové řádce. Vstup byl jeden řádek který bylo třeba naparsovat a zpracovat. Znaménka byla binární +, -, *, / a unární negace #. Mezery oddělovaly čísla(resp. písmena) ale taky mohly oddělovat znaménka (bacha test 5). Pan Bednárek psal na tabuli priority operací v té C++ notaci, bylo to myslím I. # II. * / III. + -. Upřímně řečeno jsem o C++ notaci nikdy předtím neslyšel, přesto že nám tam pořád tvrdil, jak to všichni máme znát
INPUT BYL NÁSLEDUJÍCÍ:
- 1. --2 3 4 || OUT: 2-3-4
2. -2-3#4 || OUT: 2-(3- -4)
3. */*/1 2 3 4 5 || OUT: 1/2*3/4*5
4. +-*/1 2 3 4 5 || OUT: 1/2*3-4+5
5. / * - +1 2 3 4 5 || OUT: (1+2-3)*4/5
6. -a-b c || OUT: a-(b-c)
7. *a-b c || OUT: a*(b-c)
8. -a*b c || OUT: a-b*c
9. *#a b ||OUT: -a*b
10. #*a b || OUT: -(a*b)
11. -a#b || OUT: a- -b
12. #-a b || OUT: -(a-b)
Potom přidal dvě "hrůzy na závěr", co dělaly všem problém
h1. /*a b c || OUT: a*b/c
h2. /a*b c ||OUT: a/(b*c)
Kód: Vybrat vše
struct polozka{
std::string typ; // používal jsem OP a VAL
std::string value; //buď číslo/písmenu nebo znaménko
}
int main(int argc, char* argv[]){
std::stack<polozka>zasobnik; <- zde jsem si nacetl soubor z argv[1]
když jsem to měl, tak jsem zahájil převod
std::stack<polozka> druhy_zasobnik; <- zde jsem si prehazoval veci abych provedl zpracovani infixu
while (zasobnik.size()!=1){
while(zasobnik.top().typ!=="OP"){
polozka p = zasobnik.top();
zasobnik.pop();
druhy_zasobnik.push(p)
}
// tady jsme narazili na operátor binární + - * /, takže top pop top pop proved operaci a vrat na zasobnik jako typ="VAL" value="A OP B" a prehazej pomocny zpet
// nebo unarni # kdyz se to provede jenom na jedno ale prehazovani zasobniku je stejne
// v prubehu bylo potreba zavorkovat a aplikovat pravidla (delal jsem pomoci ifu elsu a podobnych podle pana Bednárka prasáren)
}
std::cout<<zasobnik.top().value<<std::endl;
return 0;
}
Ta C++ notace byla fakt divná, doteď pořádně nechápu jaká má pravidla a kde se vyskytuje. Přišlo mi to trošku jako taková Bednárkovina - nemyšleno hanlivě, ale v tom smyslu, že to nikdy nikdo neviděl jinde než na C++ku a panu Bednárkovi se to líbí, tak nám to zadal
Při předvádění kódu byl na nás hodný. Prošli skoro všichni (na rozdíl od Loydovy patnáctky pana Čecha http://siret.ms.mff.cuni.cz/cech/cpp/LoydPuzzle.pdf ). Dokonce nám tam prodlužoval čas o ~30minut, protože to mělo málo lidí; a to i přesto, že tam za ním v půlce testu přišli nějací známí. Ke konci testu jsem si odskočil a oni na něj čekali u labu na židlích
Za mě hodnocení spokojenosti testu 10 z 10