Poskytovatelé podpory
Partneři projektu
Přednáška heslovitě shrnuje základní poznatky nutné pro základní práci s počítači ve vědeckých oborech - zejména ve fyzice. Obsahuje historii výpočetní techniky, architekturu a elektroniku současných počítačů, dvojkovou soustavu a digitalizaci, hardware a software (aneb sestavte si vlastní počítač), operační systémy a překladače, základy práce pod operačním systémem Linux, základy programování – algoritmy a struktury údajů, jazyk C++ a objektově orientované programování, programy pro vědecké výpočty, práce v programu Mathematica, počítačové systémy pro řízení experimentů a sběr dat, programy pro zpracování dat (systém ROOT), počítačové simulace, sítě (architektura, internet, distribuované výpočty, GRIDy), typografický systém LaTeX, prezentační software a publikování na webu.
Prezentace jsou vytvořeny v aplikaci MS PowerPoint XP, ovšem vzhledem k minimálnímu obsahu animovaných prvků a složitých stylových konstrukcí jsou snadno přenositelné i do jiných aplikací (OpenOffice a podobně). Přednášky jsou volně ke stažení pro všechny účastníky projektu, jejich použití pro výuku či studium i mimo projekt je možné, čtěte pravidla pro použití dokumentů k projektu Cesta k vědě.
Pro úspěšné zakončení kurzu musí každý účastník (kromě 66% docházky) odevzdat vlastnoručně napsaný program v C/C++. Seznam témat (i s přihlášenými) je hned za tímto odstavcem. Dle obtížnosti je u každého příkladu vypsán maximální počet lidí, kteří se na něm smí podílet.
Generování výpisu všech permutací z n-členné množiny
Program by měl vypsat všechny permutace s n-členné číselné množiny {1, 2, ..., n}.
Počet prvků n zadá uživatel při startu programu. Tuto úlohu je vhodné řešit rekurzí.
Přihlášení : O. Horský
Hledání rozmístění dam na šachovnici, aby se navzájem neohrožovaly
Existuje několik možností, jak rozmístit na šachovnici 8 dam tak, aby se navzájem neohrožovaly. Program by je
měl všechny nalézt a vypsat do souboru jako seznam matic 8x8 s označeným políčky, na kterých stojí dámy.
Toto je vhodné řešit rekurentním algoritmem.
Přihlášení : M. Dítě
Vypracování : Kralovny.c
Poznámka : Program je jednoduchý a elegantní, ovšem až na proceduru echo(), která vypíše do souboru řetezec a při té přiležitosti
ho otevre a zase zavře. To je velice neekonomické - soubor by se měl otevřít jednou na začátku programu a pak na konci programu zavřít. Tím
spíše, že se dále v programu procedura echo() volá vždy na jediný znak.
Simulace šikmého vrhu v obecném gravitačním poli pomocí diskretizace času
Diskratizace času je jednoduchá metoda simulace fyzikálních dějů. Spočívá ve zvolení malého časového okamžiku,
po který se fyzikální veličiny pokládají za konstantní (síla, zrychlení, rychlost) a výpočet veličin mezi dvěmi
kroky se tak stává lineárním a proto snadno proveditelným. Veličiny jsou pak zaznamenávany jako posloupnosti
hodnot v diskrétních časových okamžicích vzdálených o zvolený krok namísto funkcí. Například při vrhu vzhůru
je zrychlení po celou dobu konstantní (-g) a pro závislost polohy na čase platí vztah
Tento vztah lze pomocí diskretizace času rozložit na posloupnosti
kde x0 = 0 a v0 je nějaká počáteční rychlost. Pak stačí vhodně zvolit velikost dt a počet iterací a výsledné
posloupnosti nám popíší chování tělesa při fyzikálním procesu, v tomto případě při vrhu vzhůru. V takto jednoduchém
případě je simulace samozřejmě zbytečná, neboť závislost polohy na čase x(t) lze analyticky vyjádřit, je-li ale případ
složitější, jiný způsob není.
V tomto příkladě je za úkol nasimulovat pohyb hmotného bodu v rovině (šikmý vrh), ovšem s obecným gravitačním polem,
tj. s vektorovou funkcí g(x,y) - směr i velikost gravitačního zrychlení je závislé na místě v prostoru. Tato funkce
bude zadána přímo do zdrojového kódu před překladem. Počáteční polohu a rychlost hmotného bodu zadá uživatel po startu programu.
Výstup programu by měl být ve formě tabulky s třemi sloupci (t,x,y) resp. (t,vx,vy) zobrazitelné v nějakém vhodném programu
(excel, gnuplot).
Přihlášení : D. Bernhauer
Vypracování : throw.cpp
Poznámka : Program je pěkný, ale zasloužil by si trochu ukecanější vstup (např. by měl mít možnost rychlost tělesa
zadat i v polárních souřadnicích - tedy velikost a úhel, nebo zvolit časový krok) a méně obsáhlý výstup - simulace vyplivne skoro 40
tisíc řádek, což je problém dále zpracovat v běžných programech. Bylo by dobré, aby uživatel mohl zadat přesnost výstupu - tj. například
tisknout každou desátou, padesátou, stou řádku.
Simulace pohybu nabité částice v magnetickém či elektrickém poli pomocí diskretizace času
Program má za úkol nasimulovat pohyb nabité hmotné částice obecně zadaným elektrickým a magnetickým poli
v trojrozměrném prostoru. Pole E(x,y,z) i B(x,y,z) budou zadány před překladem přímo do zdrojového kódu, počáteční
polohu a rychlost částice zadá uživatel při startu programu. Výstup programu by měl být ve formě tabulky se
čtyřmi sloupci (t,x,y,z) resp. (t,vx,vy,vz) zobrazitelné v nějakém vhodném programu (gnuplot). Popis metody
diskretizace času viz výše.
Přihlášení : -VOLNO-
Simulace pohybu n gravitujících hmotných bodů pomocí diskretizace času
Program má za úkol nasimulovat pohyb systému gravitujících hmotných bodů, z nichž některé mohou mít
fixovanou polohu. Každý z bodů má zadánu počáteční polohu, rychlost a hmotnost - tyto údaje budou načteny
při startu programu z textového souboru. Výstup by měl být grafický v reálném čase (pohyb bodů může uživatel
sledovat na obrazovce) a zároveň ve formě tabulky do textového souboru. Popis metody diskretizace času viz výše.
Úloha je vhodna pro skupinu již zkušenějšch programátorů (max 3 lidé).
Přihlášení : M. Rost, P. Jiroušek, -VOLNO-
Simulace pohybu hmotného bodu kolem gravitujícího geometrického objektu
Program má za úkol nasimulovat pohyb hmotného bodu v okolí gravitujícího nebodového tělesa v 3D prostoru.
Těleso bude zadáno funkcí nebo konvexní množinou do zdrojového kódu před překladem, počáteční polohu a
rychlost hmotného bodu zadá uživatel při spuštění aplikace. Simulace bude provedena metodou diskretizace času
(viz výše). Pro výpočet intenzity gravitačního pole v okolí tělesa je třeba využít integrálního počtu funkce
třech proměnných.
Přihlášení : -VOLNO-
Numerický výpočet určitého integrálu sloupcovou metodou a metodou Monte Carlo
Program by měl vypočíst neurčitý integrál z funkce zadané přímo do zdrojového kódu před překladem,
a to dvěmi metodami - sloupcovou (viz definice určitého integrálu) a metodou Monte Carlo.
Přihlášení : J. Kliment
Vypracování : integral.cpp
Jednoduchý kalkulátor
Program by měl být schopen řešit jednoduché aritmetické výrazy (+, -, *, /, ^) s čísly i proměnnými vč. nastavení
priority operací pomocí závorek. Výrazy zadává uživatel z klávesnice.
Přihlášení : J. Hadrava
Vypracování : komcomp.cpp
Poznámka : Program je pěkný, ale trochu nepřehledný, byť se autor snažil kód komentovat. Další velkou nevýhodu spatřuji
v nepřenositelnosti - použitá knihovna termios.h je, jak tuším, specifická pro Linux/Unix a pod Windows běžně neexistuje - alespoň
MinGW jej nezná.
Převody mezi číselnými soustavami
Program převádí čísla z libovolné číselné soustavy do jiné (od dvojkové až do 35kové). Uživatel zadá číslo
v libovolné soustavě (pomocí symbolů 0-9, A-Z), zadá soustavu, ve které je číslo zapsáno a cílovou soustavu
a počítač vytiskne totéž číslo v cílové soustavě.
Přihlášení : V. Šamla
Implementace obousměrného spojového seznamu s obecnými daty
Program by měl obsahovat třídu, zajišťující všechny operace s
lineárním spojovým seznamem. Třída by měla nejideálněji být šablonou pro libovolný datový typ. Musí umět spravovat
seznam, vkládat, mazat, vyhledávat a podobně.
Přihlášení : M. Steklý
Vypracování : seznam.c
Implementace dynamického pole s obecnými daty
Program by měl obsahovat třídu, zajišťující všechny operace s dynamickým polem (obdobná funkčnost
jako třídavector STL.
Třída by měla nejideálněji být šablonou pro libovolný datový typ. Musí umět spravovat
pole, vkládat prvky, ubírat prvky, vyhledávat a podobně.
Přihlášení : -VOLNO-
Převod mezi římskou a desítkovou číselnou soustavou
Program by měl umět převádět římská čísla na desítková a zpět podle zadání uživatele.
Přihlášení : L. Záruba
Vypracování : rimska_soustava.cpp
Spojování a třídění databázových záznamů a práce s nimi
Program by měl umět načítat databázové položky z textového souboru (jméno, příjmení, věk apod.),
ukládat je a umožnit uživateli vkládat nové. Soubor by měl být vždy po ukončení práce setříděný.
Program by také měl umět soubory spojovat.
Přihlášení : J. Píro
Vypracování : database.c
Poznámka : Program funguje dobře, ovšem pouze pro celé řádky. Bylo by mnohem praktičtější, kdyby dovoloval pracovat
s jednotlivými záznamu na řádku (jméno, příjmení, věk ...) a třídit podle zvoleného sloupce.
Výpočty n soustav o n neznámých
Program by měl umět několika metodami řešit velké soustavy (řádově desítky tisíc rovnic). Vstup a výstup
by měl být přes soubory. Jedna z metod by měla být Gaussova eliminace, další pak mohou být například
akcelerovaná Gauss-Seidelova metoda nebo jiné.
Přihlášení : F. Blachowicz
Vypracování : matice.cpp
Generátor postav pro DrD, DrD+ nebo D&D
Program by měl uživateli umožnit snadno vygenerovat postavu podle pravidel RGP Dračí doupě,
Dračí doupě + nebo Dungeons & Dragons. Může být v grafickém nebo textovém módu. Z vygenerované
postavy bu měl být schopen sestavit osobní deník (textový soubor) a uložit data v takovém formátu,
aby je mophl použít následující příklad.
Přihlášení : M. Kasl, J. Švec
Nástroj pro souboje DrD, DrD+ nebo D&D (s postavami z předchozího úkolu)
Program by měl s daty z předchozího příkladů a databází nestvůr umožňovat uživateli snado a efektivně
simulovat a provádět souboje z výše uvedených RPG her.
Přihlášení : T. Dupal, L. Toman
Vypracování : DrD.h, DrD.cpp
Poznámka : Program má základní funkčnost, kterou má mít, ovšem jako mínuy bych vypíchl jednak nemožnost rozšíření databáze ras,
předmětů a příšer bez překladu programu (údaje by měly být uloženy v nějakých snadno upravitelných datových souborech, ne natvrdo
zakódovaných do programu) a druhak psaní těl dlouhých procedur do hlavičkového souboru *.h . Je dobrým zvykem do hlaviček dávat opravdu
JEN DEKLARACE procedur a členských metod. Kdyby se tento program měl rozšířit o další modul, měli by autoři velké problémy.
Maticová aritmetika
Naprogramujte šablonu třídy pro práci s maticemi obecných rozměrů a prvků. Třída pomocí přetížených operátorů
musí umět základní aritmetické operace s maticemi (+, -, *) a operace mezi maticemi a čísly (*, /). Také musí umět
sama sebe vytisknout na obrazovku nebo do souboru.
Přihlášení : O. Kolda
Kořeny polynomických rovnic
Naprogramujte řešení rovnic typu P(x) = 0, kde P je libovolný polynom zadaný uživatelem z klávesnice pomoci
Newtonovy metody
Přihlášení : O. Grover
Vypracování : polynomator.hpp, polynomator.cpp
Poznámka : Tak toto je ukázka vynikající programátorské práce. Všiměnte si zejména komentářů uvnitř kódu.
Výběr nejkratší cesty
Načtěte ze souboru "silniční mapu" - seznam měst a silnic mezi nimi, které jsou charakterizovány délkou.
Najděte nejkratší cestu mezi dvěmi uživatelem zadanými městy a vytiskněte itinerář jízdy.
Přihlášení : D. Janda
Výpočet pravděpodobnosti kombinací v Texas hold'em pokeru.
Šlo by o program, u kterého by uživatel nejdříve zadal hodnotu a barvu dvou karet a následně spočítal
pravděpodobnost kombinací, které mohou přijít na flop (vypsal tabulku s kombinacemi a s jejich příslušnou
pravděpodobností). Pak podle dalších 3 zadaných karet, spočítá pravděpodobnosti kombinací, která můžou přijít
na turn a tak dále, dokud hra neskončí.
Přihlášení : T. Krupička