Programování v C/CPP

Z ωικι.matfyz.cz
(Přesměrováno z PRG012)
Přejít na: navigace, hledání
Programování v C/C++
Kód předmětu: NPRG029
Přednáší: David Bednárek

Předmět nahrazen předmětem Programování v CPP (NPRG041)


Na co si dajte pozor![editovat | editovat zdroj]

Na com vsetkom si zaciatocnik moze vylamat zuby a skuseny harcovnik len gula ocami...

Jeden znak navyse[editovat | editovat zdroj]

a hoci sa kompilator tvari spokojne, vas program nefunguje a zo zapoctovej pisomky idete domov naprazdno...

if (podmienka); /* bodkociarka navyse */
{
    akcia();
}

O jeden znak míň[editovat | editovat zdroj]

Kompilátor to sice nezkousne, ale ani nám moc neporadí, co s tím. Místo toho zařve něco ve smyslu "Unexpected bla bla..." všude tam, kde hlavičku includujeme.

/* hlavicka.h */

class trida
{
    int cislo;
    void fce();
} // tady chybí středník

Zápočtové příklady[editovat | editovat zdroj]

Interaktivny zarovnavac textu do bloku (justify)[editovat | editovat zdroj]

ak riadok zacina '/' je to prikaz, inak je to text, pridava sa na koniec buffra. ak je text ukonceny '/' odstavec pokracuje na dalsom riadku, ak je '\n' je to koniec odstavca

prikazy:

  • /L <file> - nacita vstup zo suboru (staci pripojit za buffer) [mozte predpokladat ze v subore nie su prikazy]
  • /A <wraplen> - dlzka zarovnaneho riadku (ak je 0 tak nezarovnany [nemusi by v rovnakom tvare ako na vstupe])
  • /S - vypis zarovnaneho textu na obrazovku
  • /O <file> - vypis zarovnaneho textu do suboru
  • /E - koniec

pozn: nemusi vas trapit ze nejde napisat riadok ktory zacina alebo '/'

pokus o riešenie

Další oblíbená zadání[editovat | editovat zdroj]

  • vyhodnoceni vyrazu zapsaneho jako retezec v jedne z notaci infix, postfix nebo prefix - rada: prefix se da vyhodnocovat rekurzi nebo zasobnikem, postfix zasobnikem, infix neprimou rekurzi
  • setrideni souboru dle radek (popr. podle n-teho slova v radku, podle znaku n az m a dalsi varianty), nekdy chteji setridit soubor v pameti (treba quicksortem), nekdy je pozadavek pouzit vnejsi trideni (mergesort) - rada: mergesort si muzete hodne zjednodusit, kdyz doplnite pocet radek v textovem souboru nejakymi dumm radkami na mocninu dvojky - odpadne prace se "zbytky" - pokud tedy nepouzivate prirozene slucovani
  • podobne jako zarovnani do bloku take zarovnani doleva, doprava a na stred - rada: problem s dynamickou alokaci se da vyresit velmi snadno - naalokujte si buffer pevne delky - tak velky, jak ma byt dlouha radka na vystupu, az ji zaplnite, vytisknete ji a zacnete od zacatku...
  • prikaz podobny unixovskemu cut (na vstupu text. soubor a oddelovac sloupcu a sloupce, ktere chceme vypsat) - rada: nacist radku do jednoho char*, udelat si pole pointru na vsechny oddelovace v nactene radce, vsechny tyhle oddelovace nahradit nulou - pak uz jen pro kazdy sloupec, ktery ma byt na vystupu, vypsat spravny ukazatel
  • program, ktery z textoveho souboru cte radky #define xxxxxx zzzzzz a od nacteni makra xxxxxx bude textovy soubor upravovat - nahradi xxxxxxx za zzzzzzz - rada: zadna :), jen si poradit s dynamickou alokaci...
  • prikaz podobny unixovskemu grep (regularni vyrazy - ruzne modifikace) - rada: pokud je ve vyrazu povolena hvezdicka pro opakovani, neni to uz takova sranda, protoze regexp z*z by asi mel matchovat s radkou zzzz, takze je videt, ze nemuzete matchovat s hvezdickou tak dlouho jak to jde. Reseni ale necham pro nejakeho vetsiho odbornika
  • naprogramovat funkci podobnou printf - rada: easy...
  • Jakub Yaghob dává s oblibou jako zadání zápočtového testu naprogramování virtuálního stroje, který dostane na vstupu soubor s instrukcemi jakéhosi procesoru (instrukce a jejich přesný význam se dozvíte), naprogramovat si musíte registry aj. Pak vám dá soubor s instrukcemi a na konci vám musí vypadnout správný výsledek výpočtu. Pokud si vzpomínám, tak to z 15 lidí udělali jen 2.
  • Součítání a odčítání čísel v růyných číselných soustavách #include<stdio.h> naknec tak akorat easy http://wiki.matfyz.cz/wiki/Programov%C3%A1n%C3%AD_v_C/CPP/soucet_cisel_v_ruznych_ciselnych_soustavach

Odkazy[editovat | editovat zdroj]