MFF UK / Ústav teoretické fyziky / Tomáš Ledvinka
Přednášky
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
Počítačová algebra
Klasická elektrodynamika (2.r)
Klas. teorie záření
Numerická relativita
Vybrané partie OTR

Cvičení
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
  Zadání domácích úloh
  Užitečné programy
  Body z domácích úloh
  Příklady ze cvičení
  Příklady ze cvičení v C
Teoretická mechanika (2.r)
Klasická elektrodynamika (2.r)
Programování prakticky


Věda
. . . . . . . . . . . . . . . . . . . . . . . . . .
Diskové zdroje v OTR
Hyperbolické systémy v OTR


Kontakt
. . . . . . . . . . . . . . . . . . . . . . . . . .
Email
Konzultační hodiny


Ostatní
. . . . . . . . . . . . . . . . . . . . . . . . .
Mallorca
Ze společnosti

Caption bar

Seznam vybraných programů ze cvičení v C.

Nejde o programy v ANSI C, pro překlad jsme používali MS Visual Studio, a tam, kde příslušná konstrukce v jazyce Object Pascal (v němž probíhá přednáška) nemá protějšek v ANSI C a nebo i tam, kde je to z bezpečnostních důvodů žádoucí (např. u printf), jsme používali konstrukce z C++ . Níže uvedené programy by s použitím minimálního souboru StdAfx.h měly jít přeložit pomocí GNU C++.

Příklady ze cvičení


  1. cv01a.cpp - Součet čísel. Cykly, proměnné, výstup.
  2. cv01b.cpp - Součet kvadrátů celých čísel. Kvůli přetečení ceočíselné aritmeticky používáme reálná čísla.
  3. cv01c.cpp - Hledání racionální aproximace odmocniny ze 2: cyklus a podmínka
  4. Celočíselné typy - Rozsahy hodnot a přetečení (cppreference.com).
  5. cv02b_retezovy_zlomek.cpp - Hledání racionální aproximace čísla Pi v opodobě řetězového zlomku.
  6. cv02c_hvezdicky.cpp - Vnořené fykly for.
  7. cv03a_rada.cpp - Součet geometrické řady.
  8. Kartézké hádanky - Logické výraz se dvěma celočíslenými proměnnými.
  9. cv03b_tabulka1.cpp - Komplikace s reálnými čísly při opakovaném sčítání.
  10. cv03b_tabulka2.cpp - Ekvidistantní tabelace funkčních hodnot.
  11. cv03c_pi1.cpp - Počítáme Pi z obvodu n-úhelníků.
  12. cv04a_stihacka.cpp - Použití součtových vzorců při kreslení parametricky zadané kružnice.
  13. cv04b_gcd.cpp - Jak napsat funkci.
  14. cv04c_nexp.cpp - Funkce počítající součet prvních členů Taylorovy řady exponenciály.
  15. ZubataFce.cpp - Spojitá funkce, co nemá skoro nikde derivaci.
  16. cv06a_koreny.cpp - Hledáme kořeny funkce.
  17. cv07a_baccab.cpp - Pole jako proměnné a argumenty funkcí.
  18. cv07b_baccab_array.cpp - Pole jako proměnné a argumenty funkcí. Šablona std::array
  19. Stejne.cpp - Procházení pole celých čísel, hledání duplicit.
  20. cv08a_duplo.cpp - Hledání duplicit v poli.
  21. cv08b_duplo_proc.cpp - Hledání duplicit v poli. Předávání různě dlouhých polí.
  22. cv08c_duplo_vect.cpp - Hledání duplicit v poli. Šablona vect.
  23. cv10b_eliminace.cpp - Řešení soustavy rovnic.
  24. cv10c_matice.cpp - Funkce vracenjící vektory a matice libovolné dimenze.

Příklady 2021

  1. Nasobilka.cpp - Malá násobilka. Cykly, proměnné, výstup.
  2. tabelace1.cpp - (Ne zcela vydařená) tabelace funkčních hodnot.
  3. tabelace2.cpp - Tabelace funkčních hodnot. Graf funkce.
  4. spirala.cpp - Archimédova spirála. Malování výstupu pomocí programu GNUPLOT.
  5. Kruznice.cpp - Použití součtových vzorců při kreslení parametricky zadané kružnice. (Co se stane, když zapomeneme na saved_cos_f?)
  6. obvod2n.cpp - Výpočet obvodu n-úhelníka opakovaným půlením stran, ztráta přesnosti.
  7. taylor_sin.cpp - Součet Taylorovy řady, funkce se dvěma parametry.
  8. RiemannovaFce.cpp - Spojitá funkce, co nemá skoro nikde derivaci.
  9. puleni_intervalu.cpp - Hledáme kořen půlením intervalu.
  10. ctverec_odkazem.cpp - Předáváme parametry odkazem.
  11. cv07_baccab.cpp - Pole v.1
  12. cv08_prvocisla.cpp -- Hledame mezery mezi prvocisly.
  13. cv08b_soustava_rovnic.cpp -- Gauss-Jordanova eliminace (zatím bez výběru/prohazování řádků).
  14. cv11_permutace.cpp -- Konstrukce permutací seznamu.
  15. cv12_planeta.cpp -- Řešení soustavy obyč. dif. rovnic. Vysvětlení viz následující bod.
  16. Ode.zip - 7 příkladů ukazujících princip numerického řešení obyčených diferenciálních rovnic. Komentář ke cvičení.
  17. cv11e_dalsi_metody.cpp Planeta - Porovnání různých metod.
  18. cv13_kosikova.cpp -- Zkoumáme rozdělení náhodných čísel.

Příklady 2020

  1. cv02a_Cyklus_While_Geometricka_Rada.cpp - Cyklus while , výstup přes iostream.
  2. cv02b_Vnoreny_cyklus.cpp - Cyklus for. Vnořený cyklus.
  3. cv02c_RacionalniAproximacePi.cpp - Cyklus procházející všechny jmenovatele. Testování minima.
  4. cv02d_RetezovyZlomekPi.cpp - Cyklus konstruuje řetězový zlomek pro Pi. Knihovna cmath.
  5. cv03a_GeometrickaRada.cpp - Cyklus počítá součet geometrické řady.
  6. cv03b_RadaProPi.cpp - Cyklus počítá součet řady (-1)^k/(2k+1).
  7. cv03c_nUhelnikObvod.cpp - Obvod n-úhelníka, ztráta přesnosti.
  8. cv04a_ReadWrite.cpp - Čtení hodnot ze vstupi. Přesměrování vstupu a výstupu.
  9. cv04b_Spirala.cpp - Archimédova spirála. Malování výstupu pomocí programu GNUPLOT.
  10. cv05a_Kolo.cpp - Parametrická křivka. Výstup do souboru. GNUPLOT.
  11. cv10_eliminace.cpp - Lineární algebra. Gaussova-Jordanova eliminace. Matice jako konstanta.
  12. cv10_eliminace2.cpp - Tvorba matice za běhu programu.
  13. cv11_Teziste.cpp - Výpočet těžiště polokoule jako těžiště souboru rovnoměrně rozdělených náhodných bodů stejné váhy uvnitř tělesa.
  14. cv11a_Koren.cc - Funkce jako argument -- kořen funkce.
  15. cv11b_Lichob.cc - Funkce jako argument -- lichoběžníkové pravidlo.
  16. cv11c_HarmOsc.cc - Funkce jako argument -- Eulerova metoda pro soustavu dvou dif. rovnic.
  17. cv11d_Planeta.cc - Funkce jako argument -- Eulerova metoda pro soustavu čtyř dif. rovnic.
  18. cv11e_dalsi_metody.cpp Planeta - Porovnání různých metod.

Příklady 2019

  1. cv01b_Uz_bezim.cpp - Nejjednodušší program, výstup přes iostream.
  2. cv01c_nsd.cpp - Program pro největší společný dělitel z přednášky.
  3. cv02a.cpp - Zkoušíme cylus while a výstup přes std::cout.
  4. cv02b.cpp - Zkoušíme cylus s testem na konci.
  5. cv02c.cpp - Zkoušíme cylus for.
  6. cv02e.cpp - Dva cykly a dvě pdmínky (násobilka).
  7. cv03a_SoucetRady.cpp - Matematický vzorec.
  8. cv03c_graf_fce.cpp - (Ne zcela vydařená) tabelace funkčních hodnot.
  9. cv03e_graf_fce2.cpp - Tabelace funkčních hodnot. Graf funkce.
  10. RiemannovaFce.cpp - Spojitá funkce, co nemá skoro nikde derivaci.
  11. Kruznice.cpp - Použití součtových vzorců při kreslení parametricky zadané kružnice. (Co se stane, když zapomeneme na saved_cos_f?)
  12. cv04a_Pi_spatne.cpp - Zaokrouhlovací chyby, počítáme π z obvodu 2n úhelníka a vzorce pro sinus polovičního úhlu.
  13. cv04a_Pi.cpp - Obcházíme problémy se zaokrouhlovacími chybami.
  14. cv04c_ctverec.cpp - Předáváme parametry odkazem.
  15. puleni_intervalu.cpp - Hledáme kořen půlením intervalu.
  16. Stejne.cpp - Procházení pole celých čísel, hledání duplicit.
  17. cv08a_interp.cpp - Lagrangeova interpolace. Předávání polí jako parametrů
  18. cv08b_interp.cpp - Lagrangeova interpolace. Bezpečnější předávání polí jako parametrů
  19. cv08c_det.cpp - Práce s maticemi. Výpočet determinantu.
  20. cv09a_soustava.cpp - Práce s maticemi. Řešení soustavy rovnic.
  21. cv09b_hilbert.cpp - Práce s maticemi proměnné velikosti. Řešení soustavy rovnic. Ošklivé matice.
  22. cv11a_ODE1.cpp Dif. rovnice - 1. Princip a chyba Eulerovy metody
  23. cv11b_ODE2.cpp Matematické kyvadlo - 2. Eulerova metoda pro dif. rovnici 2. řádu
  24. cv11c_ODE2.cpp Matematické kyvadlo - 3. Eulerova metoda jako univerzální nástroj
  25. cv11d_ODE3.cpp Planeta - 4. Eulerova metoda jako univerzální nástroj II.
  26. cv11e_ODE3.cpp Planeta - 4. Lepší num. metoda - Midppoint.
  27. cv11f_ODE3.cpp Planeta - 5. Porovnání různých metod.
  28. randtest.cpp - Házení kostkou. Základní použití rand() při generování celých a reálných čísel (nevhodné pro serióznější výpočty).
  29. cv13_rand_boost.cpp - Rychlý návod, jak generovat lepší náhodná čísla (zejména než 15-bitová funkce rand() u MSVC).
  30. cv13_kosikova.cpp - Náhodná čísla II
  31. cv13_Teziste.cpp - Výpočet těžiště polokoule jako těžiště souboru rovnoměrně rozdělených náhodných bodů stejné váhy uvnitř tělesa.

Příklady 2018

  1. cv01a_Uz_bezim.cpp - Nejjednodušší program, výstup přes stdio.
  2. cv01b_Uz_bezim.cpp - Nejjednodušší program, výstup přes iostream.
  3. cv01c_nsd.cpp - Program pro největší společný dělitel z přednášky.
  4. cv02a.cpp - Zkoušíme cylus while a výstup přes std::cout.
  5. cv02b.cpp - Zkoušíme cylus s testem na konci.
  6. cv02c.cpp - Zkoušíme cylus for.
  7. cv02e.cpp - Dva cykly a dvě pdmínky (násobilka).
  8. cv03a_SoucetRady.cpp - Matematický vzorec.
  9. cv03c_graf_fce.cpp - (Ne zcela vydařená) tabelace funkčních hodnot.
  10. cv03e_graf_fce2.cpp - Tabelace funkčních hodnot. Graf funkce.
  11. cv03f_sin.cpp - Naše první funkce.
  12. cv04a_Pi_spatne.cpp - Zaokrouhlovací chyby, počítáme π z obvodu 2n úhelníka.
  13. cv04a_Pi.cpp - Obcházíme problémy se zaokrouhlovacími chybami.
  14. cv04c_ctverec.cpp - Předáváme parametry odkazem. (Úlohu můžete rozšířit podle následujícího přikladu v jazyce Pascal: ViceCtvercu.lpr.)
  15. cv03p_Koch - Učíme se rekuzi: Kochova křivka. Výstup do souboru.
  16. cv04q_vypis_obracene.cpp - Učíme se rekuzi: Výpis cifer čísla.
  17. cv04r_vypis_zaklad.cpp - Učíme se rekuzi: Výpis cifer čísla II.
  18. cv04s_mocneni.cpp - Učíme se rekuzi: mocnění násobením. viz wikipedia.
  19. cv06b_koreny.cpp - Hledáme kořeny funkce
  20. Fibo_r.cpp - Rekurzivní výpočet Fibonacciho čísel.
  21. Fibo_c.cpp - Výpočet Fibonacciho čísel cyklem.
  22. Legendre.cpp - program vypíše data pro namalování prvních k_max Legendrových polynomů.
  23. cv07_baccab.cpp - Pole v.1
  24. cv07b_array.cpp - Pole v.2
  25. cv07c_operator.cpp - Pole v.3
  26. cv09_det.cpp - Pracujeme s maticemi: výpočet determinantu
  27. cv10a_matice.cpp - Zvládáme matice různé velikosti I
  28. cv10b_matice.cpp - Zvládáme matice různé velikosti II
  29. cv11a_ODE1.cpp Dif. rovnice - 1. Princip a chyba Eulerovy metody
  30. cv11b_ODE2.cpp Matematické kyvadlo - 2. Eulerova metoda pro dif. rovnici 2. řádu
  31. cv11c_ODE2.cpp Matematické kyvadlo - 3. Eulerova metoda jako univerzální nástroj
  32. cv11d_ODE3.cpp Planeta - 4. Eulerova metoda jako univerzální nástroj II.
  33. cv11e_ODE3.cpp Planeta - 4. Lepší num. metoda - Midppoint.
  34. cv11f_ODE3.cpp Planeta - 5. Porovnání různých metod.

Příklady 2017

  1. Nasobilka.cpp - Malá násobilka s jedním cyklem for jako varování před zatemňováním kódu.
  2. cv01a.cpp - První program, příkazy, řetězce, komentáře.
  3. cv01b.cpp - Zkoušíme cylus while a výstup přes std::cout.
  4. cv01c.cpp - Zkoušíme cylus s testem na konci.
  5. cv01d.cpp - Zkoušíme cylus for.
  6. cv02a.cpp - Dva cykly (násobilka).
  7. cv02b.cpp - Učíme se logické výrazy.
  8. rada_pi.cpp - Součet řady. Výpočet (-1)k bez volání pow.
  9. cv03a.cpp - Tabulka funkčních hodnot.
  10. Kruznice.cpp - Použití součtových vzorců při kreslení parametricky zadané kružnice
  11. cv04a_funkce.cpp - Deklarace a použití funkce.
  12. cv04b_funkce.cpp - Funkce počítající součet řady.
  13. cv05c_fib.cpp - Jednoduché fukce.
  14. cv06a_ctverec.cpp - Předávání parametru odkazem.
  15. cv06b_baccab.cpp - Pole jako typ, proměnná a parametr.
  16. cv06c_array.cpp - Jak donutit C++ funkce vracet pole.
  17. cv08_interp.cpp - Předávání polí jako parametrů
  18. cv08_stat.cpp - Předávání polí jako parametrů II
  19. cv08a_LinSolve.cpp - První pokus o lineární algebru.
  20. cv09b_Interpolace.cpp - Ilustrace užití řešení soustavy rovnic
  21. cv11cODR3.cpp - Numerické řešení Newtonových pohybových rovnic
  22. Ode.zip - 7 příkladů ukazujících princip numerického řešení obyčených diferenciálních rovnic. Komentář ke cvičení.
  23. cv13_rand.cpp - Náhodná čísla I
  24. cv13_rand_boost.cpp - Náhodná čísla I, lepší náhodná čísla
  25. cv13_kosikova.cpp - Náhodná čísla II
  26. cv13_Teziste.cpp - Výpočet těžiště polokoule jako těžiště souboru rovnoměrně rozdělených náhodných bodů stejné váhy uvnitř tělesa.


Příklady 2016

  1. Nasobilka.cpp - Malá násobilka s jedním cyklem for jako varování před zatemňováním kódu.
  2. Nasobilka.cpp - Malá násobilka. Cykly, proměnné, výstup.
  3. nsd.cpp - Zrychlená verze Euklidova algoritmu pro výpočet NSD.
  4. bool.cpp - Složitější logické podmínky. &&, ||, ...
  5. rada_pi.cpp - Součet řady. Výpočet (-1)k bez volání pow.
  6. fce1.cpp - Součet řady (tentokrát přestěhován do podprogramu).
  7. nfakt.cpp - Jednoduchá funkce (výpočet n!).
  8. taylor_sin.cpp - Součet Taylorovy řady, funkce se dvěma parametry.
  9. sincos.cpp - Tabulka funkčních hodnot. Knihovna matematických funkcí.
  10. zaokr.cpp - Ukázka, jak se vyhnout jednomu nepříjemnému důsledku zaokrouhlovacích chyb.
  11. Kruznice.cpp - Použití součtových vzorců při kreslení parametricky zadané kružnice
  12. RiemannovaFce.cpp - Spojitá funkce, co nemá skoro nikde derivaci.
  13. Fibo_r.cpp - Rekurzivní výpočet Fibonacciho čísel.
  14. Fibo_c.cpp - Výpočet Fibonacciho čísel cyklem.
  15. Legendre.cpp - program vypíše data pro namalování prvních k_max Legendrových polynomů.
  16. koreny2014.cpp - Hledání kořenů funkce. (Prvni pokus)
  17. koreny.cpp - Hledání kořenů funkce. (Pokročilejší verze)
  18. Odkaz.cpp - Předávání parametrů odkazem
  19. PoleUvod.cpp - Deklarace, procházení a předávání polí
  20. PoleZarazka.cpp - Předávání polí - zarážka
  21. Vektory3D.cpp - Funkce vrací pole s použitím parametru
  22. Vektory3Da.cpp - Funkce prací pole. 3-vektory, matice 3x3
  23. structKomplex.cpp - Datový typ záznam, komplexní čísla
  24. Mandelbrot14.cpp - Aproximace Mandelbrotovy mnoziny, komplexní aritmetika. Děkuji L.H.
  25. midpoint.cpp - Funkce jako parametr, řešení obyč. diferenciálních rovnic, předávání funkce jako parametru.
  26. Ode.zip - 7 příkladů ukazujících princip numerického řešení obyčejných diferenciálních rovnic. Komentář; ke cvičení.
  27. randtest.cpp - Házení kostkou. Základní použití rand() při generování celých a reálných čísel (nevhodné pro serióznější výpočty).
  28. cv13_Teziste.cpp - Výpočet těžiště polokoule jako těžiště souboru rovnoměrně rozdělených náhodných bodů stejné váhy uvnitř tělesa.

Příklady z minulých let

  1. Nasobilka.cpp - Malá násobilka s jedním cyklem for jako varování před zatemňováním kódu.
  2. Krivka.cpp - Kreslení funkce jedné proměnné v gnuplotu Ukázka vlivu zaokrouhlovacích chyb. Sčítání mocninné řady (a proč nám obvykle nechybí operátor pro umocňování).
  3. Kruznice.cpp - Použití součtových vzorců při kreslení parametricky zadané kružnice [cos(s),sin(s)]
  4. Fibo_r.cpp - Rekurzivní výpočet Fibonacciho čísel.
  5. Fibo_c.cpp - Výpočet Fibonacciho čísel cyklem.
  6. Legendre.cpp - program vypíše data pro namalování prvních k_max Legendrových polynomů.
  7. Koch.cpp - Kreslení Kochovy křivky.
  8. mandel12.cpp Letošní Mandelbrotova množina, plus reklama na FORTRAN (děkuji L.H.)
  9. Mandel2.cpp - Barevné znázornění okolí Mandelbrotovy množiny.
  10. koreny.cpp - Hledání kořenů funkce.
  11. Stejne.cpp - Procházení pole celých čísel, hledání duplicit.
  12. Sito.cpp - Deklarace a užití polí. Eratostenovo sito. Cykly. Ve výstupu programu jsou prvočísla reprezentována jako body na číselné spirále, a vypadá to takto.
  13. strtest.cpp - Pole znaků jako řetězce.
  14. ode_euler1.cpp Řešení obyč. dif. rovnice. (děkuji L.H.)
  15. ode_euler2.cpp Řešení soustavy obyč. dif. rovnic -- Svisly vrh. (děkuji L.H.)
  16. lorenz.cpp Řešení soustavy obyč. dif. rovnic -- Lorenzův atraktor. (děkuji L.H.)
  17. detA.cpp - Výpočet determinantu matice.
  18. qpoc.cpp - Třídění pole celých čísel, hledání duplicit.
  19. randi.cpp - Výpočet těžiště polokoule jako těžiště souboru rovnoměrně rozdělených náhodných bodů stejné váhy uvnitř tělesa.
  20. cmplx.cpp - Předávání odkazem. Pro návrat hodnoty komplexního čísla použijeme dva reálné parametry předávané odkazem.
  21. Komplex.cpp - Typ struct,  předávání odkazem, návrat strukturované hodnoty, inicializace struturované proměnné.
  22. Vektory.cpp - 3D vektory jako struct {double x,y,z},  návrh hlaviček funkcí, ověření Ax(BxC) = B(A.C)-C(A.B).
  23. Extrapol.cpp Urychlení sčítání řady při použití polynomiální extrapolace.
  24. Mandelbrot.cpp - Barevné znázornění okolí Mandelbrotovy množiny. Pokud chcete, můžete použít i komplexní čísla, jak je nazančeno v MandelbrotComplex.cpp, ovšem očekávejte cca 3x pomalejší výpočet.
  25. Eratosthenes.cpp - Deklarace a indexování polí. Eratostenovo sito. Cykly. Ve výstupu programu jsou prvočísla reprezentována jako body na číselné spirále, a vypadá to takto. Kdosi se ptal na Python, tak tady je ukázka 20x pomalejší zato pythonové verze téhož algoritmu.
  26. Diference.cpp - Pole jako skladiště. Doplnění všeobecného vzdělání: co to jsou třetí diference. Ch. Babbage.
  27. Ode.zip - 7 příkladů ukazujících princip numerického řešení obyčených diferenciálních rovnic. Komentář ke cvičení.
.