mff

Markéta Popelová - Výuka

Programování 1

Ukázky programů ze cvičení - Programování 1

2. hodina (11.10.2012)

  1. Vyhledávání v setříděném seznamu - algoritmus zapsaný v pseudokódu.

3. hodina (18.10.2012)

  1. Načítání čísel I. - načtení n čísel: ukázka použití for-cyklu. Ke stažení: code.pas.
  2. Načítání čísel II. - načtení posloupnosti čísel ukončených -1: ukázka použití while-cyklu. Ke stažení: code.pas.
  3. Mini kalkulačka - procvičení podmínky (if). Ke stažení: code.pas.

4. hodina (25.10.2012)

  1. Dělitelé v intervalu - procvičení podmínky for-cyklu a operace mod. Ke stažení: code.pas.
  2. Kladná čísla - procvičení while-cyklu (trochu jiné zadání než na hodině). Ke stažení: code.pas.
  3. Obrácený výpis n čísel - procvičení for-cyklu a pole. Ke stažení: code.pas.
  4. Test prvočíselnosti I. - elegantní (ale ne ideálně efektivní) řešení pomocí while cyklu. Ke stažení: code.pas.
  5. Test prvočíselnosti II. - efektivnější řešení pomocí for-cyklu a boolean proměnné. Ke stažení: code.pas.

5. hodina (1.11.2012)

  1. Testík 1 - princezniny korále: první řešení. Ke stažení: code.pas.
  2. Testík 2 - princezniny korále: druhé řešení. Ke stažení: code.pas.
  3. Hádanka 1 - aneb pozor na indentaci, begin a end. Ke stažení: code.pas.
  4. Hádanka 2 - kreslení z hvězdiček. Ke stažení: code.pas.
  5. Hádanka 3 - aneb pozor na indenatci a středníky. Ke stažení: code.pas.
  6. Hádanka 4 - aneb pozor na závorky a prioritu operací. Ke stažení: code.pas.
  7. NSD 1 - pomalá verze Euklidova algoritmu. Ke stažení: code.pas.
  8. NSD 2 - pokus o rychlejší verzi, ale s chybou. Ke stažení: code.pas.
  9. NSD 3 - rychlejší verze Euklidova algoritmu. Ke stažení: code.pas.
  10. Faktoriál malého čísla - ukázka funkce. Ke stažení: code.pas.
  11. Kódy všech znaků - operace chr. Ke stažení: code.pas.
  12. Je zadaný znak cifra? - ukázka funkce a použití ord. Ke stažení: code.pas.
  13. Hodnota cifry - ukázka funkce a použití ord. Ke stažení: code.pas.

6. hodina (8.11.2012)

  1. Testík - funkce jeZnak. Ke stažení: code.pas.
  2. Opisovač vstupu - detekce konce vstupu pomocí EOF, načítání vstupu po znacích. Ke stažení: code.pas.
  3. Jednoduchý devypatlátor - použití ord, chr, převody znaků. Ke stažení: code.pas.
  4. Hornerovo schema - načítání čísla (v desítkové soustavě) po znacích a převedení na integer. Ke stažení: code.pas.
  5. Z dvojkove - načtení čísla zadaného v dvojkové soustavě a převedení na integer pomocí Hornerova schematu. Ke stažení: code.pas.
  6. Rekurzivní výpis sestupný - ukázka jednoduché lineární rekurze na sestupný výpis čísel. Ke stažení: code.pas.
  7. Rekurzivní výpis vzestupný - ukázka jednoduché lineární rekurze na vestupný výpis čísel. Ke stažení: code.pas.
  8. Ladění v Pascalu - součást úkolu - na tomto (chybném) programu si vyzkoušejte ladící prostředky Pascalu a odhalte všechny chyby. Ke stažení: code.pas.
  9. Soubory 1 - převod velkých písmen na malá - ze standardního vstupu na standardní výstup. Ke stažení: code.pas.
  10. Soubory 2 - převod velkých písmen na malá - ze souboru na standardní výstup. Jako vstup můžete použít například tento soubor in1.txt. Ke stažení: code.pas.
  11. Soubory 3 - převod velkých písmen na malá - ze souboru do souboru. Jako vstup můžete použít například tento soubor in1.txt. Výstup hledejte v souboru out1.txt. Ke stažení: code.pas.
  12. Soubory 4 - výpis kódů všech znaků do souboru. Výstup hledejte v souboru znaky.txt. Ke stažení: code.pas.

7. hodina (15.11.2012)

  1. Testík - Str2Int. Ke stažení: code.pas.
  2. Parametry 1 - předávání odkazem a hodnotou. Ke stažení: code.pas.
  3. Parametry 2 - předávání odkazem a hodnotou. Ke stažení: code.pas.
  4. Parametry 3 - předávání odkazem a hodnotou. Ke stažení: code.pas.
  5. Generování 1 - generování čísel o K cfirách v jedničkové soustavě. Ke stažení: code.pas.
  6. Generování 2 - generování čísel o K cfirách ve dvojkové soustavě. Ke stažení: code.pas.
  7. Generování 3 - generování čísel o K cfirách v soustavě o základu N. Ke stažení: code.pas.

8. hodina (22.11.2012)

  1. Testík - část 1 - funkce, procedury a předávání odkazem a hodnotou. Ke stažení: code.pas.
  2. Testík - část 2 - funkce, procedury a předávání odkazem a hodnotou. Ke stažení: code.pas.
  3. Testík - část 3 - funkce, procedury a předávání odkazem a hodnotou. Ke stažení: code.pas.
  4. Faktoriál - ukázka jednoduché nevětvící se rekurze. Ke stažení: code.pas.
  5. Mocnina - ukázka jednoduché nevětvící se rekurze. Ke stažení: code.pas.
  6. Součet - ukázka jednoduché nevětvící se rekurze. Ke stažení: code.pas.
  7. Binární vyhledávání - ukázka nevětvící se rekurze. Ke stažení: code.pas.
  8. Rozklad na sčítance - již větvící se trošku složitější rekurze. Ke stažení: code.pas.
  9. Batoh 1 - část domácího úkolu - co (a jak) dělá tento rekurzivní program? Ke stažení: code.pas.
  10. Batoh 2 - část domácího úkolu - co (a jak) dělá tento rekurzivní program? Ke stažení: code.pas.

9. hodina (29.11.2012)

  1. Dlouhá čísla - ukázka sčítačky celých (tedy kladných i záporných) čísel. Použití vlastního datového typu a recordu. Nejedná se zrovna super-krátké řešení, ale zase je pěkně dekomponované. Ke stažení: code.pas.

11. hodina (13.12.2012)

  1. Fronta - povídání o datové struktuře fronta.
  2. UnitData - jednotka obsahující datový typ pro položky, které budeme ukládat do zásobníku či fronty. Ke stažení: code.pas.
  3. UnitZasobnik - jednotka obsahující datovou strukturu zásobník včetně základních operací pro práci se zásobníkem. Ke stažení: code.pas.
  4. Test zásobníku - program testující, zda nám zásobník funguje správně. Ke stažení: code.pas.
  5. UnitFronta - chcete-li domácí úkol napsat jako knihovnu, můžete vyjít z tohoto kódu. Ke stažení: code.pas.
program faktorial;
{ Úkolem bylo napsat funkci, která dostane číslo n a vrátí n!, tedy faktoriál zadaného čísla. Přičemž se dalo
  počítat s tím, že n! se vejde do datového typu longint. Úkolem bylo napsat rekurzivní funkci (která nebude
  používat žádné cykly).

  Časté chyby či problémy:
  1) Rekurzivní volání. Základ je, že pro n-1 vám to spočítá rekurze a vy to pak jen vynásobíte
     číslem n. Ale jak to zapsat? Viz 6. řádek funkce f.
  2) Návratová hodnota. Výsledek musíte uložit do f (kde f je název Vaší rekurzivní funkce). Zároveň když
     voláte nějakou funkci, tak to, co Vám vrátí, můžete použít někde jinde, viz 6. řádek funkce f.
  3) Ukončovací podmínka. Nesmíte zapomenout rekurzi správně ukončit (aby se program na nějakých datech
     nezacyklil). Zde je takovou podmínkou test, zda zadané n je 1 (či méně). Pak rovnou vrátíme 1 a již se
     rekurzivně na nic nevoláme. Naopak v tu chvíli se začneme vracet z rekurze. Viz 3. a 4. řádek funkce f. }

var n : integer;

function f(n : integer):longint;
begin
  if (n <= 1) then  { Ukončovací podmínka. }
    f:=1
  else
    f:=n*f(n-1);  { Rekurzivní volání. }
end;

{ Testovací program, pomocí kterého bychom zkontrolovali, zda nám funkce f funguje. }
begin
  read(n);
  writeln(f(n));
end.

Kdo byste našel v nějakém z těchto programů chybu, dejte mi to vědět - můžete tak získat bonusové body (1 chyba ≈ 5 bodů). ;)

© Markéta Popelová 2009 - 2012