Cvičenie č. 7 - Exceptions, Streams, Monte Carlo
Úloha č. 1: CharReader
Vytvorte dve implementácie ICharReader-u, jedna bude po jednom načítavať
znaky z konzole a druhá zo súboru. Použite šablonu nižšie.
interface ICharReader {
char nextChar();
}
class ConsoleCharReader : ICharReader {
public char nextChar() {
throw new NotImplementedException();
}
}
class FileCharReader : ICharReader {
public char nextChar() {
throw new NotImplementedException();
}
}
Úloha č. 2: WordReader
Pomocou naimplementovaných ICharReader-ov z úlohy 1 vytvorte WordReader,
ktorý bude schopný načítavať stream po slovách. Použite šablonu nižšie.
Čo presne slovo je nechám na vás, úplne postačí sekať stream po medzerách.
Otestuje svoju implementáciu s ConsoleCharReader-om aj FileCharReader-om.
class WordReader {
ICharReader reader;
public WordReader(ICharReader reader) {
this.reader = reader;
}
public String nextWord() {
// doimplementujte
}
}
Domáca úloha: Aproximácia čísla π
Názvom Monte Carlo sa označuje rodina algoritmov, ktorá pri riešení problémov používa náhodu. Tento prístup je možné jednoducho ilustrovať na aproximácii čísla π.
Predstavte si kruh vo štvorci:

- Obsah modrého kruhu spočítate ako $πr^2$
- Obsah sivého štvorca zas ako $4r^2$
- Pomer obsahu kruhu voči štvorcu je teda $p=\frac{πr^2}{4r^2}=\frac{π}{4}$
- Takže hodnotu π dostaneme ako $π=4p$
- Stačí uvažovať červený výsek, pomer $p$ je rovnaký a uľahčí nám to jeho výpočet.
Samotný algoritmus bude uvažovať kruh s polomerom 1, tzn. že veľkosť hrany štvorca v červenom výseku je tiež 1. Predstavte si, že stred kruhu je v súradnici 0,0. Algoritmus Monte Carlo začne náhodne generovať body v tomto štvorci a skontroluje či sa tento bod nachádza aj vo výseku modrej kružnice. Pomer bodov v kruhu voči všetkým vygenerovaným bodom nám dáva aproximáciu hľadaného $p$. Čím viac bodov vygenerujete, tým lepšiu aproximáciu $p$, tzn. aj $π$ dostanete. Počet vygenerovaných bodov musí byť parametrizovateľný, vyskúšajte ako počet bodov ovplyvňuje presnosť odhadu.
Podľa popisu vyššie naimplementujte tento algoritmus v C# a zdroják mi pošlite mailom. Zdroják by mal obsahovať aj testovací kód a implementácia by mala byť v nejakej triede, nechcem vidieť statické metódy.
Termín odovzdania: 9. 4. 2017 (23:59)
Spôsob odovzdania: zdrojový kód mailom
Počet bodov: 20