Zápočtový test 9.2.2009

Základní kurs objektově orientovaného programování v C++. Třídy a objekty, zapouzdření, metody, plymorfismus. Abstraktní datové typy, přetěžování. Kontejnery, iterátory, algoritmy. Šablony, generické programování, kompilační polymorfismus. Výjimky. Bezpečné a přenositelné programování, vazby na OS.
JiriD
Matfyz(ák|ačka) level I
Příspěvky: 44
Registrován: 2. 2. 2008 09:35
Typ studia: Informatika Bc.

Zápočtový test 9.2.2009

Příspěvek od JiriD »

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
Wenn ich morgen meinem Gott gegenüberstehe, kann ich sagen:
Ich bin unschuldig,
ich habe niemanden betrogen,
ich habe niemandem weh getan,
ausser mir selbst.

Und das wird er mir wohl verzeihen!
charlieMonroe

Re: Zápočtový test 9.2.2009

Příspěvek od charlieMonroe »

Vezmes tu radku (string), najdes prvni svislitko atd:

Kód: Vybrat vše

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...
Uživatelský avatar
mhb
Matfyz(ák|ačka) level II
Příspěvky: 50
Registrován: 3. 2. 2008 03:38
Typ studia: Informatika Ph.D.
Kontaktovat uživatele:

Re: Zápočtový test 9.2.2009

Příspěvek od mhb »

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 :-)
Návštěvník

Re: Zápočtový test 9.2.2009

Příspěvek od Návštěvník »

A ta jmena mohla obsahovat diakritiku ?
Uživatelský avatar
mhb
Matfyz(ák|ačka) level II
Příspěvky: 50
Registrován: 3. 2. 2008 03:38
Typ studia: Informatika Ph.D.
Kontaktovat uživatele:

Re: Zápočtový test 9.2.2009

Příspěvek od mhb »

Návštěvník píše: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?
_V_

Re: Zápočtový test 9.2.2009

Příspěvek od _V_ »

uspesnost bola v pohode presla viac nez 1/2
Uživatelský avatar
kaja
Matfyz(ák|ačka) level II
Příspěvky: 99
Registrován: 20. 12. 2007 00:53
Typ studia: Informatika Bc.
Bydliště: Miðgarðr
Kontaktovat uživatele:

Re: Zápočtový test 9.2.2009

Příspěvek od kaja »

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 :/
PONIES
seby
Matfyz(ák|ačka) level I
Příspěvky: 42
Registrován: 31. 1. 2008 15:40
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Re: Zápočtový test 9.2.2009

Příspěvek od seby »

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
Odpovědět

Zpět na „NPRG041 Programování v C++“