Algoritmy I Cvičení č. 4
Cíl hodiny Základy práce s polem Procházení pole pomocí cyklů Tvorba jednoduchých funkcí
Úloha č.1 Je dáno následující pole: int moje_pole[3] = { -200, 4, 66}; A.) Vypište první prvek z pole (na výstupu bude číslo -200). B.) Vypište poslední prvek z pole vynásobený číslem 3 (na výstupu bude 198). C.) Vypište součet všech tří prvků v poli (bez cyklů). Na výstupu bude číslo -130.
Úloha č.2 Je dáno následující pole: double moje_pole[4]; Nejprve všem čtyřem prvkům pole přiřaďte nulu. Nepoužijte přitom konstrukce {} jako v úloze 1. Uživatel pak zadá celé číslo. A.) Pokud bude zadané číslo záporné, tak program přiřadí druhému prvku číslo 100 a všem ostatním číslo -1. B.) Pokud zadané číslo bude nula, tak program třetímu prvku v poli přiřadí hodnotu -200 a zbylým prvkům přiřadí číslo 999. C.) Pokud bude zadané číslo větší než 1000 a zároveň liché, tak program poslednímu prvku v poli přiřadí číslo 7. D.) Pokud bude zadané číslo bezezbytku dělitelné třemi a bude menší než 800, tak program do prvního prvku v poli přiřadí číslo 3. E.) Program vypíše všechny prvky pole.
Úloha č.3 Vytvořte pěti prvkové pole znaků a naplňte ho různými hodnotami (znaky). Vypište všechny prvky pole: A.) Pomocí cyklu for B.) Pomocí cyklu while C.) Pomocí cyklu do-while
Úloha č.4 Vytvořte program, který postupně načte 4 čísla. Tyto čísla uložte do čtyř prvkového pole (pole nejdříve inicializujte samými nulami). Vypište všechny čísla v poli v obráceném pořadí (libovolným cyklem).
Úloha č.5 Vytvořte pěti prvkové celočíselné pole, které naplníte různými čísly. Program vypíše: A.) Maximum z těchto čísel. B.) Všechny sudá čísla. C.) Všechny lichá čísla větší než 100 a menší než 1000. D.) Průměrnou hodnotu všech prvků v poli (pozor na celočíselné/reálné dělení!)
Úloha č.6 Vytvořte pole a naplňte ho různými čísly. Program bude v cyklu načítat uživatelský vstup (číslo). Pokud se uživatelem zadané číslo vyskytuje i v poli, program vypíše index tohoto čísla. Pokud se prvek v poli nevyskytuje, tak vypíše text: „Prvek se v poli nevyskytuje“. Program se ukončí po přečtení nuly. Např. int pole[] = { -5, 10, 20}; Vstup: 10 Výstup: Index je 1
Úloha č.7 Jsou dány dva vektory u a v o velikosti N. A.) Vypište oba vektory na obrazovku. B.) Spočtěte a vypište součet těchto vektorů s = u + v C.) Spočtěte a vypište na obrazovku součin skaláru α = 10 a vektoru u D.) Spočtěte a vypište na obrazovku vektor x. x = α.u + v Nápověda: Vytvořte pole u a pole v. Oba pole musí mít stejný počet prvků. Pak je můžeme považovat za dva vektory stejné dimenze. Součet dvou vektorů je definován tak, že se sečtou vždy dva prvky na stejném indexu. Výsledkem sčítání je opět vektor (v našem případě stačí jen vypsat jednotlivé prvky na obrazovku). Součin skaláru a vektoru je definován, jako jeho součin s každým prvkem vektoru. Výsledkem je stejně jako u sčítání opět vektor. Příklad: (1, 2, 3) + (4, 5, 6) = (5, 7, 9) 10.(1, 2, 3) = (10, 20, 30)
Úloha č.8 Je dáno pole celých čísel, které obsahuje nezáporná čísla od 0 do 20. Vypište jednoduchý histogram jako zde: Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** Zarovnání může být jiné než v příkladu výše, jde o to, vypsat na řádky tolik hvězdiček, jaká je hodnota čísla v poli.
Úloha č.9 Napište následující funkce. Otestujte vytvořené funkce tím, že je zavoláte s různými parametry. A.) Funkci, která bude vracet součet dvou celých čísel. B.) Funkce přijme celé číslo. Pokud je číslo v intervalu <5, 500>, vrátí číslo o dvě větší, jinak vrátí stejné číslo, jako je v parametru. C.) Funkce bude obsahovat dva parametry. Znak z a číslo c. Funkce vypíše na obrazovku c znaků z. Např. pro ‘F’ a 4 program vypíše FFFF. D.) Funkce, do které pošlete dvě celá čísla a znak. Znak může nabývat následující hodnoty: ‘+’, ‘-’, ‘*’, ‘/’, ‘%’. Na základě hodnoty znaku, proveďte příslušnou aritmetickou operaci. Např. pro znak ‘+’ vraťte součet dvou čísel. E.) Funkce, která na základě váhy a výšky spočítá BMI (Body Mass Index) a vypíše na obrazovku klasifikaci dle WHO. Nápověda: najděte vzoreček a klasifikaci dle WHO na internetu.
Úloha č.10 Uživatel zadá dva body (reálné čísla A=(x1, y1), B=(x2, y2). Kde x1 < x2 a zároveň y1 < y2. A.) Vypište délku úsečky AB B.) Vypište vektor v, který je dán body A, B. C.) K vektoru v přičtěte vektor g, který má hodnotu (0, -1). D.) V cyklu od 100 do 0 snižujte velikost vektoru v tak, že v i-tém průchodu bude mít velikost i-procent. Například když i = 50, bude mít vektor v poloviční (50-ti procentní) velikost oproti původní velikosti. E.) Vytvořte cyklus, kde v každé iteraci k vektoru v přičtěte vektor g (podobně jako v bodě C.)). Cyklus se zastaví, když bude hodnota y souřadnice vektoru v menší než nějaká konstantní hodnota (například -100) a vypište hodnotu x souřadnice vektoru v. F.) Vypište hodnotu výsledného vektoru po průchodu cyklem v bodě E.) Pro všechno vytvořte funkce.
Co si zapamatovat? Práci s jednorozměrným polem Procházení pole pomocí cyklů Tvorbu a použití funkcí
Domácí úkol Upravte úlohu č. 10 tak, aby program zjednodušeně simuloval vystřelení z kanónu. Vektor v představuje počáteční rychlost vystřelení z kanónu. Vektor g pak simuluje gravitaci. Vhodně definujte odpor vzduchu vektorem d. Střelu zastavte pokud bude souřadnice y u koule menší nebo rovna nule (simulace dopadu na zem). Vypište vzdálenost od počátku. Počítejte i s hmotností koule (hmotnost krát gravitace). g v