# Zápočtový test 9.2.2009

<{ForumPost(poster="JiriD", timestamp=2009-02-10 09:13:10)}>
Ahoj.  
Tak zadání mi vůbec nesedlo.  
  
Vstupní soubor obsahuje řádky s informacemi o studentech.  
Každý platný řádek musí obsahovat jméno studenta ve tvaru: Xxxx Xxxx a ID skupiny, ve tvaru: #int . dále může řádek obsahovat libovolný počet intů, floatů a textových informací, které smí být složené pouze ze znaků a-z a mezery. Sloupce můžou být v libovolném pořadí a jsou odděleny | .  
př:  
Jan Novák | #2 | 345 | 20.4 | tento radek je v poradku | 43  | 45.76  
29|38|345.2|Honza Novák|take platny radek|#3  
  
úkolem je:  
1. načíst vstup do datových struktur  
2. setřídít podle abecedy (podle jména)  
3. vypsat deset jmen těch, u nichž je součet všech intů a floatů největší  
4 rozdělit řádky vstupu podle ID skupiny a uložit do jednotilivých souborů (na pořadí sloupců opět nezáleží)  
  
Mohl by mi někdo poradit, jak načíst ten vstupní soubor? Nešlo mi rozparsovat ty řádky..  
  
Díky
<{/ForumPost}>

<{ForumPost(poster="charlieMonroe", timestamp=2009-02-10 11:34:17)}>
Vezmes tu radku (string), najdes prvni svislitko atd:

    int pos = str.find('|');
    string part;
    if (pos!=string::npos){
       //neni to NotFound
       part = str.substr(0,pos+1?);
       str = str.substr(pos+1?); //s tema jednickama si musis vyhrat
    }else{
      part = str;
      str = "";
    }
    

A ted zjistis, co je to za druh vstupu. Pokud je prvni pismeno upper case (udelej si jednoduchy makro #define isUpperCase(a) (a>='a' && a<='z') , stejne tak pro uppercase), tak projdi cely text, jestli kazdej znak je lowercase nebo mezera. Pokud je to upper case, melo by to byt jmeno. Pokud to je jmeno, musi tam byt presne jedna mezera. Tak to projedes. Pak to hodis do stringstreamu, pres nej do floatu a jen zjistis, jestli tam puvodne byla nekde (opet find) desetinna tecka. Pokud ne, hodis to mezi inty (i kdyz tohle je uplne naprd, cely to mohlo byt ve vectoru floatu). Jeste to muze zacinat '#'... No a cely to mas ve while(str!=""). Jo a asi jsem zapomnel na osekavani mezer na zacatku a konci toho part...
<{/ForumPost}>

<{ForumPost(poster="mhb", timestamp=2009-02-10 21:31:13)}>
Já jsem to řešil prostě načtením ( z proudu) prvního znaku, který rozhodl, co by to eventuelně mohlo být za typ položky, a pak trochu delší if podle toho, co to konkrétně bylo. Využil jsem hlavně toho, že v C máme krásnou relaci uspořádání na znacích, dále klasické triky se streamy jako putback() znaku, co jsem si právě načetl, abych se nemusel trápit s inty a spol. Jak říkal kolega správně, řešit co to bylo za čísla vůbec nebylo potřeba - prostě se to nasázelo do sumy. Jinak - ve jméně nemusela být nutně právě jedna mezera, pokud vím :-) FrantisekRingo Cech by se zlobil :-)  
  
Jinak zadání mi přišlo naprosto férové - algoritmicky nebylo moc co vymýšlet, ale procvičil se I/O a trošku to STLko, což je víceméně to, co jsem od zápočtového testu čekal :-) Navíc dost času :-)
<{/ForumPost}>

<{ForumPost(poster="Anonymous", timestamp=2009-02-10 22:04:21)}>
A ta jmena mohla obsahovat diakritiku ?
<{/ForumPost}>

<{ForumPost(poster="mhb", timestamp=2009-02-10 22:08:03)}>

 > Návštěvník wrote:A ta jmena mohla obsahovat diakritiku ?

Nene, tak moc nás netrápil. Mohli jsme předpokládat, že to jsou znaky z \[a-zA-Z] (ve formátu Velké Prvni Jinak Mala).  
  
Mimochodem, jaká byla nakonec statistika úspěšnosti?
<{/ForumPost}>

<{ForumPost(poster="_V_", timestamp=2009-02-11 00:31:23)}>
uspesnost bola v pohode presla viac nez 1/2
<{/ForumPost}>

<{ForumPost(poster="kaja", timestamp=2009-02-11 01:15:05)}>
ale, nakonec jsme tam byli asi 3 a dovolil nám ten čas přetáhnout o hodinu  
  
nebylo to až tak těžké, ale já jsem s Mapem nikdy nedělal tak jsem se tam s nim tak hodinu trápil :/
<{/ForumPost}>

<{ForumPost(poster="seby", timestamp=2009-02-17 12:44:04)}>
Ještě dodám, že platily následující pravidla (ze začátku byl vypnutý switch, ale potom ho zapnul):  
Zakázáno:

* předepsaný kód => nechtěl vidět žádnou flešku
* komunikace s jinou osobou
* elektronické materiály (nejsem si jistý)
* později zakázány všechny stránky kromě těch povolených

Povoleno:

* offline MSDN
* jakékoliv tištěné materiály
* později povolena také online dokumentace - MSDN a [http://www.cplusplus.com](http://www.cplusplus.com)

<{/ForumPost}>

