Přeskočit na obsah

Cvičení

Cvičení 1

  • Zajistěte si optimální vývojové prostředí viz Fortran -> vývojová prostředí.
  • Nainstalujte si kompilátor viz Fortran -> kompilace a pro otestování funkčnosti si stáhněte a zkompilujte helloWorld.f90

Cvičení 2

  • Projděte si část Základy . Zkopírujte, zkompilujte a spusťte příklady 2-10, které najdete v částech Proměnné , Vstup z klavesnice a vystup na obrazovku a Vnitření funkce fortranu . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • V příkladu 4 používáme funkce huge() a tiny() na proměnné typu real(4) a real(8). Zkuste tyto funkce použít na proměnné typu real s vyšší přesností (16,32,64,…) a otestovat tak možnosti vašeho kompilátoru. (pozn. V praxi se nejčastěji používá přesnost (8).)
  • V příkladu 7 používáme převod proměnné typu integer a real abychom ji mohli použít jako argument funkce sin(). Co se ale stane pokud do funkce sin() vložíte jako argument integer? (Pozn. Při programování je běžné, že na každých 10 napsaných řádku najdete alespon 1 chybu. Na některé vás upozorní kompilátor a program vůbec nezkompiluje a jiný se projevý tím, že program nedělá to co má. Zvykněte si na to, že musíte neustále hledat chyby, neboť to k programování patří.)
  • Napište program který načte z klávesnice hodnotu do proměnné. Na tuto proměnnou aplikujte jednu či více z vnitřních funkcí, jak uznáte za vhodné.
  • Napište program který bude fungovat jako převodník jednotek. Uživatel zadá z klávesnice číslo v metrech a dostana výsledek v palcích, stopách, yardech a mílích.

Cvičení 3

  • Projděte si část Pole . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Napište program ve kterém budete mít jednorozměrné pole do kterého vložíte nějaké hodnoty. Pomocí Vnitřních funkcí s poli spočítejtě aritmetický průměr těchto hodnot. (nápověda: potřebujete sečíst všechny prvky a pak tento součet vydělit velikostí pole)
  • K předchozímu programu doprogramujte pomocí Vnitřních funkcí s poli výpočet směrodatné odchylku.
  • Při svislém vrhu nám na hmotný bod, který má počáteční polohu nad zemí x0 a počáteční rychlost v0, působí tíhové zrychlení g = -9.81 m*s^-2. Napište program ve kterém (a) budete mít g jako konstantu (parameter). (b) Budete mít pole t které bude mít velikost n a bude nabývat hodnot od 0 - n (např. t(3) = (/0.,1.,2./)). (c) Do pole x o velikosti n spočítejte výšku nad zemí hmotného bodu v časech t (podle vzorce x = x0 + v0*t + 1/2*g*t^2). (d) Proměnné nastavte na rozumné hodnoty např. x0=0. a v0=20. Výsledek vypište na obrazovku. (pozn. pro inicializaci pole t doporučuji použít poslední způsob z příkladu 11. Z výsledných hodnot byste měly vidět, že hodnota x nejprve stoupá a pak klesá, jak jej gravitace tahá dolů.) (pozn2. Pokud chcete můžete si výsledek zkopírovat napr. do excelu a vykreslit do grafu.)

Cvičení 4

  • Projděte si příklady z čísti Podmínky . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Napište program pro řešení kvadratické rovnice. Případ kde D<0 ošetřete tak, aby výsledek byla komplexní čísla.
  • Napište program, který načte celé číslo z klávesnice. Následně otestujte zda je číslo dělitelné 2, 3, 4, 5, … (limit si určete jak chcete) a pro každý test vypište buď “číslo je dělitelné …” nebo “číslo není dělitelné …“. (pozn. při řešení by vám mohla být užitečná funkce mod()).

Cvičení 5

  • Projděte si příklady z čísti Cykly . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Načítejte čísla z klávesnice (read(*,*)) dokud nebude zadáno 0. Potom vypište největší z přečtených čísel.
  • Načtěte číslo integer z klávesnice a pomocí cyklu spočtěte jeho faktorial.
  • Vypiste všechny dvojce cisel jejichž součin je menší než 30 a spocitejte jejich počet.
  • Číslo pí můžeme napsat jako nekonečný součet řady π=4k=0(1)k2k+1\pi = 4 \sum_{k=0}^{\infty} \frac{(-1)^k}{2k+1}. Napište program, který bude sčítat tuto řadu dokud absolutní hodnota rozdílu dvou po sobě jdoucích kroků nebude menší než 1e-6, tj. dokud aproximace čísla pí se v kroku k+1 nepiší od hodnoty v kroku k o měně než 1e-6. Následně vypište výslednou aproximaci čísla pí a počet členů řady, které jste museli sečíst.
  • Polohu hmotného bodu při šikmém vrhu můžeme popsat rovnicemi
    x(t)=x0+v0tcos(α)x(t) = x_0 + v_0 t \cos(\alpha)
    y(t)=y0+v0tsin(α)12gt2y(t) = y_0 + v_0 t \sin(\alpha) - \frac{1}{2} g t^2
    . Kde α\alpha udává směr vrhu, x0x_0 a y0y_0 jsou počáteční polohy, t je čas, g je gravitační zrychlení (9.81), v0v_0 je počáteční rychlost. Napište program, který bude požadovat načtení hodnot α\alpha a v0v_0 z klávesnice. x0x_0 a y0y_0 nastavte na 0.0. Vypisujte polohu (x, y) pro různé časy dokud hmotný bod nespadne znovu na zem (tj. y nebude menší nebo rovna 0.0). Na počátku nastavte t například na 0.1 a v každém kroku cyklu jej zvyšte o 0.1.

Cvičení 6

  • Projděte si příklady z čísti Funkce a subroutiny Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Napište funkci nebo subroutinu pro výpočet vektorového součinu trojrozměrných vektorů.
  • V příkladu 24 je funkce, která počítá průměrnou hodnotu prvků vstupního pole. Napište funkci, která vypočítá směrodatnou odchylku prvků v poli.
  • Napište funkci nebo subroutinu, která bude řešit rovnice z příklad o šikmém vrhu z cvičení 5 (poslední příklad). Vstupem procedury bude α\alpha, v0v_0, y0y_0. Jejím výstupem bude vzdálenost (x(t)x(t)), kterou hmotný bod urazí než spadne zpět na zem. Pomocí cyklu a této procedury prozkoumejte závislost dostřelu na úhlu α\alpha (ukažte, že maximum je 45°). Poté nastavte y0y_0 na nenulovou hodnotu a ukažte, že maximum není při 45°.
  • Napište funkci nebo subroutinu, která rozhodne zda na integer proměnná je prvočíslem. (Rada: mohla by se vám hodit funkce pro vypočet zbytku po dělení.)
  • Napište funkci nebo subroutinu, která nalezne největší společný dělitel dvou integer čísel. Pro řešení použijte Eulerův algoritmus https://cs.wikipedia.org/wiki/Eukleid%C5%AFv_algoritmus

Cvičení 7

  • Projděte si příklady z částí Náhodná čísla . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Naprogramujte proceduru, která vygeneruje reálné číslo s rovnoměrným rozdělení v rozsahu od a do b. Proměnné a a b budou vstupy této procedury.
  • Totéž jako v předchozím příkladu jen výsledkem bude integer.
  • Naprogramujte program, který s vámi bude hrát kámen, nůžky, papír. Uživatel zadá svou volbu, program náhodně vybere svou volbu a vyhodnotí výsledek. Program můžete napsat tak, že budete hrát dokud nezadáte “konec” nebo neuděláte nějakou ukončovací volbu.
  • Generujte v cyklu náhodná (integer) čísla v nějakém rozsahu a počítejte kolikrát vám jaké číslo padne. Cyklus opakujte minimálně 1000x. Výsledek tj. kolikrát vám jaké číslo padlo (tedy pole hodnot) vypište do souboru. Ověřte, že počet všech padlích hodnot je přibližně stejné a že s rostoucím počtem cyklů se rozdíly zmenšují. Počet výskytů každé hodnoty bude přibližně roven b-a/(počet pokusů).

Cvičení 8

  • Projděte si příklady z části Čtení a zápis do souboru a Formátování vstupu a výstupu . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Upravte program z předchozího příkladu předchozího cvičení tak, že bude v každém kroku cyklu počítat součet deseti náhodných čísel. Počítejte kolikrát vám padne jaký sosučet a výsledek vypište do souboru. Podle centrální limitní věty byste měli dostat gaussovo rozdělení. Výsledek zapište do souboru. Správnost si ověřte vykreslením hodnot do grafu (např. v Excelu).
  • V souboru najdete typický formát výsledky termodynamickéch veličin ze simulace. Z hlavičky souboru můžete vyčíst v jakém sloupečku je spočítána jaká veličiny. V každém řádku jsou hodnoty v určitém kroku (step). Spočítejte průměr a rozptyl sloupečku s teplotou (temp) a tlakem (press). Výsledek vypište do souboru. Data otevřete pomocí status=old aby jste si je omylem napřepsali.

Cvičení 9

  • Projděte si příklady z částí Dynamická alokace . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Upravte poslední příklad z předchozího cvičení tak, aby program hodnoty načítál do pole. Každý sloupeček bude mít své pole. Pole bude alokovatelné. Nakonec můžete pro spočtení průměru použít proceduru pro výpočet průměru, kterou byste již měli mít hotovou.

Cvičení 10

  • Projděte si příklady z částí Odvozený datový typ . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Vytvoře si uživatelský typ “karta”. Tento typ by měl mít alespoň dva atributy: číslo a barvu (tj. integer a character). Vytvořte pole několika karet (ideálně nějakým automatizovaným způsob - pomocí cyklů). To jakého typu karty budou je na vás (jestli mariášky, žolíkové či smyšlené). Můžou to být např. červená, modrá, zelená, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Karty budou v jednom poli. Pole karet zamíchejte tak, že náhodně vyberete dvě karty v poli (tj. 2 náhodná čísla od 1 - délka pole) a tyto karty prohoďte. Toto míchání proveďte tolikrát kolikrát uznáte za vhodné. Výsledek vypište a ujistěte se o tom, že jsou karty skutečně promíchané.

Cvičení 11

  • Projděte si příklady z částí Moduly . Ujistěte se, že rozumíte všemu, co je v těchto příkladech.
  • Napište si modul na práci s náhodnými čísly. Modul by měl obsahovat funkce na generování náhodných čísel s rovnoměrným rozdělením z předchozího cvičení.
  • Napište si modul na vyhodnocování statistických dat. Modul by měl obsahovat proceduru pro výpočet průměru pole a směrodatné odchylky.