[Cvičení 5] [Obsah] [Cvičení 7]

Cvičení 6


Úloha 6.1

Napište program, který počítá součet dvou vektorů. Zadejte jejich velikost (počet prvků n) a alokujte dynamicky tři pole pro uložení vektorů. Prvky prvních dvou vektorů načtěte z klávesnice a uložte do dvou polí, výsledek uložte do třetího pole.

Spusťte si hotový program pro inspiraci: soucetvdyn.exe

Řešení:

CodeBlocks:soucetvdyn.cbp, soucetvdyn.c

Úloha 6.2

Napište program, který načítá z klávesnice posloupnost celých čísel zakončených -1 (hodnota -1 se již do pole neukládá, počet zadávaných čísel není předem znám). Program alokuje na počátku dynamicky pole určité velikosti. Pokud velikost pole v průběhu načítání nestačí, program provede realokaci. Použijte funkci malloc, realokaci nejprve naprogramujte nejdříve bez využití funkce realloc. Pro kopírování pole využijte funkci memcpy: void *memcpy(void *cil, const void *zdroj, size_t n); z knihovny mem.h. Nakonec naprogramujte variantu využívající funkci realloc.

Řešení:

CodeBlocks:dyn_pole2a.cbp, dyn_pole2a.c
CodeBlocks:dyn_pole2b.cbp, dyn_pole2b.c
CodeBlocks:dyn_pole3.cbp, dyn_pole3.c

Úloha 6.3

Dokončete následující program. Program čte text (max. 80 znaků) ze standardního vstupu. Pak se zadá jeden znak. Program hledá zadaný znak v textu. Pokud znak existuje, program vypíše znak na předchozí pozici a všechny následující znaky za nalezeným znakem (včetně) zašifruje Césarovou šifrou (posun o tři písmena v abecedě). Využijte ukazatelovou aritmetiku.
CodeBlocks:text.cbp, text.c

Řešení:

CodeBlocks:text.cbp, text.c

Úloha 6.4

Napište program, dynamicky alokuje dvourozměrné pole pro dolní trojúhelníkovou matici o velikosti n, n je zadané číslo představující rozměr matice. Pole pro jednotlivé řádky deklarujte různě velké, přesně podle potřeb trojúhelníkové matice. Matici vyplňte čísly podle obrázku a vytiskněte na obrazovku. Nezapomeňte na uvolnění paměti v závěru programu.

Řešení:

CodeBlocks:trojuh_matice.cbp, trojuh_matice.c

Domácí úkol

Napište program, který vypíše na obrazovku všechna prvočísla od 1 do n, n je přirozené číslo zadané z klávesnice. Využijte algoritmus Eratostenova síta. Pole alokujte dynamicky, dle zadaného n.

Polotovar:

CodeBlocks:eratosp.cbp, eratosp.c

Řešení:

CodeBlocks:eratos.cbp, eratos.c


Úloha 6.5

Dokončete program pocitani_obsahu z webových stránek - definujte funkci, která vypočítá obsah kruhu a volejte ji v hlavním programu.

Počítání obsahu (vzor):

CodeBlocks:pocitani_obsahu_vzor.cbp, pocitani_obsahu_vzor.c
Řešení:
CodeBlocks:pocitani_obsahu.cbp, pocitani_obsahu.c


Úloha 6.6

Přetižte funkce imaxmin, fmaxmin v programu z webových stránek. Nahraďte parametry typu ukazatel parametry typu reference.

Polotovar:
CodeBlocks:pretezovanip.cbp, pretezovanip.cpp

Řešení:

CodeBlocks:pretezovani.cbp, pretezovani.cpp

Úloha 6.7

Napište rekurzivní a nerekurzivní verzi funkce pro výpočet n-tého členu Fibonaciho posloupnosti.

F0 = 0
F1 = 1
Fn = Fn-1 + Fn-2

Řešení:

CodeBlocks:fibo.cbp, fibo.c

Úloha 6.8

Je dána celá částka v Kč. Máme k dispozici mince v hodnotách 20 Kč, 10 Kč, 5 Kč, 2Kč, 1 Kč. Napište rekurzivní proceduru, která vytiskne na obrazovku složení částky z co nejmenšího počtu mincí (vytiskne seznam mincí). Vytvořte také nerekurzivní verzi (s cyklem).

Příklad:

Částka: 57
MInce: 20 20 10 5 2

Řešení:

CodeBlocks:mince.cbp, mince.c

[Cvičení 5] [Obsah] [Cvičení 7]