Programovanie (1) v C/C++
1-INF-127, ZS 2024/25

Úvod · Pravidlá · Prednášky · Softvér · Testovač
· Kontaktujte nás pomocou e-mailovej adresy E-prg.png (bude odpovedať ten z nás, kto má príslušnú otázku na starosti alebo kto má práve čas).
· Prosíme študentov, aby si pravidelne čítali e-maily na @uniba.sk adrese alebo aby si tieto emaily preposielali na adresu, ktorú pravidelne čítajú.


Zimný semester, semestrálny test: Rozdiel medzi revíziami

Z Programovanie
Skočit na navigaci Skočit na vyhledávání
Riadok 1: Riadok 1:
* Záverečná písomka bude v stredu 9.12. 18:10 na MS Teams.
+
* Záverečná písomka bude v piatok 10.12. 11:30 počas doplnkových cvičení na MS Teams.
* Písomka bude trvať 90 minút a technicky bude fungovať podobne ako teoretické cvičenia 9, budete teda vypĺňať odpovede do pdf zadania alebo do textového súboru.  
+
* Písomka bude trvať 90 minút.
 +
* Personalizované zadania  a technicky bude fungovať podobne ako teoretické cvičenia 9, budete teda vypĺňať odpovede do pdf zadania alebo do textového súboru.  
 
* Písomka bude pokrývať učivo po prednášku 20.
 
* Písomka bude pokrývať učivo po prednášku 20.
 
* Môžete používať ľubovoľné papierové materiály aj stránku predmetu (poznámky z prednášok), zakázané sú iné webstránky, použitie editorov, kompilátorov, programátorských prostredí, komunikovanie s inými osobami
 
* Môžete používať ľubovoľné papierové materiály aj stránku predmetu (poznámky z prednášok), zakázané sú iné webstránky, použitie editorov, kompilátorov, programátorských prostredí, komunikovanie s inými osobami
Riadok 6: Riadok 7:
 
* Z pisomky je potrebné získať aspoň polovicu bodov. Počas skúškového bude ešte opravný termín (bližšie v [[Zimný semester, pravidlá|pravidlách predmetu]]).
 
* Z pisomky je potrebné získať aspoň polovicu bodov. Počas skúškového bude ešte opravný termín (bližšie v [[Zimný semester, pravidlá|pravidlách predmetu]]).
  
 +
<!--
 
* Pokročilí, ktorí mali na základe úvodného testu pre pokročilých uznané všetky tri pôvodné písomky, majú z tejto písomky automaticky plný počet bodov. Tí, ktorí mali uznanú jednu alebo dve písomky, budú mať plný počet bodov za niektoré príklady a zvyšné budú riešiť s ostatnými.
 
* Pokročilí, ktorí mali na základe úvodného testu pre pokročilých uznané všetky tri pôvodné písomky, majú z tejto písomky automaticky plný počet bodov. Tí, ktorí mali uznanú jednu alebo dve písomky, budú mať plný počet bodov za niektoré príklady a zvyšné budú riešiť s ostatnými.
 +
-->
 +
 +
=Zimný semester, príklady na test=
 +
Na semestrálnom teste budú podobné typy príkladov, aké poznáte z teoretických cvičení, napríklad
 +
<!-- * napíšte funkciu, ktorá robí zadanú činnosť  -->
 +
* doplňte chýbajúce časti funkcie
 +
* zistite, čo funkcia robí (pre daný vstup alebo všeobecne)
 +
Vyskytne sa však aj nový typ príkladov, kde je úlohou napísať, ako bude na nejakom vstupe fungovať algoritmus alebo dátová štruktúra z prednášky. Nižšie sú ukážky takýchto príkladov. Svoje odpovede si môžete skontrolovať na spodku stránky.
 +
 +
Príklady o binárnych vyhľadávacích stromoch a lexikografických stromoch (príklady 7 a 8 nižšie) na riadnom termíne testu nebudú, môžu sa však vyskytnúť na opravnom termíne.
 +
 +
==Ukážkové príklady na semestrálny test==
 +
 +
* '''Príklad 1:''' Prepíšte výraz 8 3 4 * + 2 3 + / z postfixovej notácie do bežnej infixovej notácie. Aká je jeho hodnota? Nakreslite ho aj ako strom.
 +
 +
* '''Príklad 2:''' Prepíšte výraz ((2+4)/(3*5))/(1-2) do postfixovej a prefixovej notácie.
 +
 +
* '''Príklad 3:''' Vyhodnocujeme výraz 8 3 4 * + 2 3 - / v postfixovej notácii algoritmom z prednášky. Aký bude obsah zásobníka v čase, keď začneme spracovávať znamienko +?
 +
 +
* '''Príklad 4:''' Máme zásobník s a rad q, pričom obidve štruktúry uchovávajú dáta typu char. Aký bude ich obsah po nasledujúcej postupnosti príkazov?
 +
<pre>
 +
init(s);
 +
init(q);
 +
push(s, 'A');
 +
push(s, 'B');
 +
push(s, 'C');
 +
enqueue(q, pop(s));
 +
enqueue(q, pop(s));
 +
push(s, 'D');
 +
push(s, dequeue(q));
 +
</pre>
 +
 +
* '''Príklad 5:''' Strom nižšie má v každom uzle uložené jedno písmeno (dáta typu char). V akom poradí budú vypísané jednotlivé písmená, ak použijeme inorder, preorder a postorder prehľadávanie?
 +
<pre>
 +
        A
 +
      /  \
 +
      /    \
 +
    B      C 
 +
    / \    / \
 +
  D  E  F  G
 +
      / \
 +
    H  I
 +
</pre>
 +
 +
* '''Príklad 6:''' Máme binárny strom, v ktorom má každý vrchol buď dve deti a v dátovom poli uložený znak '#' alebo nemá žiadne deti a v dátovom poli má uložený znak '*'. Keď tento strom vypíšeme v preorder poradí, dostaneme postupnosť ##*#*** Nakreslite, ako vyzerá tento strom.
 +
 +
* '''Príklad 7:''' Nakreslite binárny vyhľadávací strom, ktorý dostaneme, ak do prázdneho stromu postupne vkladáme záznamy s kľúčami 3, 4, 1, 2, 5, 6 (v tomto poradí).
 +
 +
* '''Príklad 8:''' Nakreslite lexikografický strom s abecedou {a,b}, do ktorého sme vložili reťazce aba, aaab, baa, bab, ba. Vrcholy, ktoré zodpovedajú niektorému reťazcu zo vstupu, zvýraznite dvojitým krúžkom.
 +
 +
* '''Príklad 9''' Ako bude vyzerať hešovacia tabuľka pri riešení kolízií pomocou spájaných zoznamov, ak hešovacia funkcia je |k| mod 5 a vkladáme prvky 13, -2, 0, 8, 10, 17?
 +
 +
==Vzorové riešenia ukážkových príkladov na písomný test==
 +
* '''Príklad 1:''' (8+3*4)/(2+3), hodnota 4, strom:
 +
<pre>
 +
        /
 +
      /  \
 +
      /    \
 +
    +      + 
 +
    / \    / \
 +
  8  *  2  3
 +
      / \
 +
    3  4
 +
</pre>
 +
* '''Príklad 2:''' postfix 2 4 + 3 5 * / 1 2 - / prefix: / / + 2 4 * 3 5 - 1 2
 +
* '''Príklad 3:''' na zásobníku budú čísla 8 a 12 (8 je na spodku zásobníka). Číslo 12 vzniklo vynásobením 3 a 4.
 +
* '''Príklad 4:''' na zásobníku budú znaky A, D, C (A na spodku zásobníka), v rade bude písmeno B
 +
* '''Príklad 5:'''
 +
<pre>
 +
Preorder:  ABDEHICFD
 +
Postorder: DHIEBFGCA
 +
Inorder:  DBHEIAFCG
 +
</pre>
 +
* '''Príklad 6:'''
 +
<pre>
 +
        #
 +
      / \
 +
      #  *
 +
    /\
 +
    *  #
 +
      /\
 +
    *  *
 +
</pre>
 +
* '''Príklad 7:'''
 +
<pre>
 +
        3
 +
      / \
 +
      1  4
 +
      \    \
 +
      2    5
 +
            \
 +
              6
 +
</pre>
 +
* '''Príklad 8:''' (namiesto dvojitého krúžku používame *)
 +
<pre>
 +
          .
 +
        / \
 +
        /  \
 +
      /    \
 +
      a      b
 +
    / \    /
 +
    a  b  a*
 +
  /  /  / \
 +
  a  a*  a*  b*
 +
/
 +
b*
 +
</pre>
 +
* '''Príklad 9:'''
 +
Pre každý index tabuľky 0,..,4 uvádzame zoznam prvkov, ktoré sa do neho zahešujú. Tieto budú pospájané v zozname v uvedenom poradí.
 +
<pre>
 +
0: 10, 0
 +
1:
 +
2: 17, -2
 +
3: 8, 13
 +
4:
 +
</pre>

Verzia zo dňa a času 11:46, 4. december 2021

  • Záverečná písomka bude v piatok 10.12. 11:30 počas doplnkových cvičení na MS Teams.
  • Písomka bude trvať 90 minút.
  • Personalizované zadania a technicky bude fungovať podobne ako teoretické cvičenia 9, budete teda vypĺňať odpovede do pdf zadania alebo do textového súboru.
  • Písomka bude pokrývať učivo po prednášku 20.
  • Môžete používať ľubovoľné papierové materiály aj stránku predmetu (poznámky z prednášok), zakázané sú iné webstránky, použitie editorov, kompilátorov, programátorských prostredí, komunikovanie s inými osobami
  • Pozor, nebude veľa času hľadať niečo v prednáškach, lepšie je spraviť si prehľadný ťahák
  • Z pisomky je potrebné získať aspoň polovicu bodov. Počas skúškového bude ešte opravný termín (bližšie v pravidlách predmetu).


Zimný semester, príklady na test

Na semestrálnom teste budú podobné typy príkladov, aké poznáte z teoretických cvičení, napríklad

  • doplňte chýbajúce časti funkcie
  • zistite, čo funkcia robí (pre daný vstup alebo všeobecne)

Vyskytne sa však aj nový typ príkladov, kde je úlohou napísať, ako bude na nejakom vstupe fungovať algoritmus alebo dátová štruktúra z prednášky. Nižšie sú ukážky takýchto príkladov. Svoje odpovede si môžete skontrolovať na spodku stránky.

Príklady o binárnych vyhľadávacích stromoch a lexikografických stromoch (príklady 7 a 8 nižšie) na riadnom termíne testu nebudú, môžu sa však vyskytnúť na opravnom termíne.

Ukážkové príklady na semestrálny test

  • Príklad 1: Prepíšte výraz 8 3 4 * + 2 3 + / z postfixovej notácie do bežnej infixovej notácie. Aká je jeho hodnota? Nakreslite ho aj ako strom.
  • Príklad 2: Prepíšte výraz ((2+4)/(3*5))/(1-2) do postfixovej a prefixovej notácie.
  • Príklad 3: Vyhodnocujeme výraz 8 3 4 * + 2 3 - / v postfixovej notácii algoritmom z prednášky. Aký bude obsah zásobníka v čase, keď začneme spracovávať znamienko +?
  • Príklad 4: Máme zásobník s a rad q, pričom obidve štruktúry uchovávajú dáta typu char. Aký bude ich obsah po nasledujúcej postupnosti príkazov?
init(s);
init(q);
push(s, 'A');
push(s, 'B');
push(s, 'C');
enqueue(q, pop(s));
enqueue(q, pop(s));
push(s, 'D');
push(s, dequeue(q));
  • Príklad 5: Strom nižšie má v každom uzle uložené jedno písmeno (dáta typu char). V akom poradí budú vypísané jednotlivé písmená, ak použijeme inorder, preorder a postorder prehľadávanie?
         A
       /  \
      /    \
     B      C  
    / \    / \
   D   E  F   G
      / \
     H   I
  • Príklad 6: Máme binárny strom, v ktorom má každý vrchol buď dve deti a v dátovom poli uložený znak '#' alebo nemá žiadne deti a v dátovom poli má uložený znak '*'. Keď tento strom vypíšeme v preorder poradí, dostaneme postupnosť ##*#*** Nakreslite, ako vyzerá tento strom.
  • Príklad 7: Nakreslite binárny vyhľadávací strom, ktorý dostaneme, ak do prázdneho stromu postupne vkladáme záznamy s kľúčami 3, 4, 1, 2, 5, 6 (v tomto poradí).
  • Príklad 8: Nakreslite lexikografický strom s abecedou {a,b}, do ktorého sme vložili reťazce aba, aaab, baa, bab, ba. Vrcholy, ktoré zodpovedajú niektorému reťazcu zo vstupu, zvýraznite dvojitým krúžkom.
  • Príklad 9 Ako bude vyzerať hešovacia tabuľka pri riešení kolízií pomocou spájaných zoznamov, ak hešovacia funkcia je |k| mod 5 a vkladáme prvky 13, -2, 0, 8, 10, 17?

Vzorové riešenia ukážkových príkladov na písomný test

  • Príklad 1: (8+3*4)/(2+3), hodnota 4, strom:
         /
       /  \
      /    \
     +      +  
    / \    / \
   8   *  2   3
      / \
     3   4
  • Príklad 2: postfix 2 4 + 3 5 * / 1 2 - / prefix: / / + 2 4 * 3 5 - 1 2
  • Príklad 3: na zásobníku budú čísla 8 a 12 (8 je na spodku zásobníka). Číslo 12 vzniklo vynásobením 3 a 4.
  • Príklad 4: na zásobníku budú znaky A, D, C (A na spodku zásobníka), v rade bude písmeno B
  • Príklad 5:
Preorder:  ABDEHICFD
Postorder: DHIEBFGCA
Inorder:   DBHEIAFCG
  • Príklad 6:
        #
       / \
      #   *
     /\
    *  #
      /\
     *  *
  • Príklad 7:
        3
       / \
      1   4
      \    \
       2    5
             \
              6
  • Príklad 8: (namiesto dvojitého krúžku používame *)
          .
         / \
        /   \
       /     \ 
      a       b
     / \     /
    a   b   a*
   /   /   / \
  a   a*  a*  b*
 /
b*
  • Príklad 9:

Pre každý index tabuľky 0,..,4 uvádzame zoznam prvkov, ktoré sa do neho zahešujú. Tieto budú pospájané v zozname v uvedenom poradí.

0: 10, 0
1:
2: 17, -2
3: 8, 13
4: