Poslední aktualita


  • 31. října 2011 (Po) 2. kolo projektu Cesta k vědě bylo oficiálně zakončeno.



Poskytovatelé podpory

logo-oppa.jpg, 3 kB logo-praha.jpg, 3 kB logo-eu.jpg, 3 kB

Evropský sociální fond
Praha & EU: Investujeme
do vaší
budoucnosti




Partneři projektu

logo-fjfi.jpg, 3 kB logo-gjs.jpg, 3 kB logo-gs.jpg, 3 kB logo-gchd.jpg, 3 kB logo-gjn.jpg, 3 kB
 

Informatika a výpočetní technika ve vědecké praxi

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



OPPA_Inf_01_uvod_historie.ppt

Úvod, obsah přednášky, historie výpočetní techniky.

OPPA_Inf_02_architektura_digitalizace.ppt

Číselné soustavy, proč používat digitální systém, základy architektury současných počítačů.

OPPA_Inf_03_OS_linux.ppt

K čemu je operační systém, základy práce pod OS Linux.

OPPA_Inf_04_OS_linux_podrobne.ppt

Důležité části jádra, disky a diskové operace, souborový systém ext2 a VFS, správa paměti a virtuální paměťové stránky, procesy, programování pro shell bash. Příklady k přednášce:

         bash_examples.zip - příklady skriptů pro bash
         .bashrc - inicializační skript pro bash
         setroot
         setgeant3
         setfluka
         setaliroot - příklady složitějších skriptů
        
Pozn. : texty příkladů jsou upravovány pod windows, jež se od linuxu liší způsobem ukončování řádku. Pro správnou funkci pod linuxem je třeba v každém příkladě umazat přebývající znak na konci řádku.

OPPA_Inf_05_CPP_basic.ppt

Základy programování v jazyce C

         hello.c - nejjednodušší program v C
         Makefile
         make_example.zip - příklad skriptu Makefile
         Makefile - příklad složitějšího skriptu Makefile

OPPA_Inf_06_CPP_OOP.ppt

Úvod do objektově orientovaného programování v jazyce C++

copyright © 2006 Vladimír Pospíšil, webdesign Vojtěch Kusý