Základy programování (IZP)

Podobné dokumenty
Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Iterační výpočty Projekt č. 2

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Základy programování (IZP)

Základy programování (IZP)

Programování v C++ 1, 1. cvičení

Základy programování (IZP)

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Úvod do programování 7. hodina

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Dokumetace k projektu pro předměty IZP a IUS

Programování v C++, 2. cvičení

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

Wolfram Alpha. v podobě html stránky, samotný výsledek je často doplněn o další informace (např. graf, jiné možné zobrazení výsledku a

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Algoritmizace a programování

Úvod do programování - Java. Cvičení č.4

Dynamicky vázané metody. Pozdní vazba, virtuální metody

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

ISU Cvičení 1. Marta Čudová

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Iterační výpočty. Dokumentace k projektu pro předměty IZP a IUS. 22. listopadu projekt č. 2

- jak udělat konstantu long int: L long velka = 78L;

Rekurze. Jan Hnilica Počítačové modelování 12

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Břetislav Fajmon, UMAT FEKT, VUT Brno. Poznámka 1.1. A) první část hodiny (cca 50 minut): představení všech tří metod při řešení jednoho příkladu.

Základy algoritmizace a programování

Lekce 01 Úvod do algoritmizace

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Iterační výpočty. Dokumentace k projektu pro předměty IZP a IUS. projekt č listopadu 2008

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do programování. Lekce 3

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

1. test z PJC Jméno studenta: Pocet bodu: Varianta 37: příklad 5 (5 bodů)

Úvod do programování. Lekce 5

Základy programování (IZP)

Operační systémy. Cvičení 3: Programování v C pod Unixem

Zimní semestr akademického roku 2015/ ledna 2016

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Rozvinutí funkce do Maclaurinova rozvoje

Matematická analýza ve Vesmíru. Jiří Bouchala

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

ALGORITMIZACE A PROGRAMOVÁNÍ

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Požadavky k opravným zkouškám z matematiky školní rok

Martin Flusser. November 1, 2016

Úvod do programování. Lekce 1

Formátové specifikace formátovací řetězce

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

NPRG030 Programování I, 2016/17 1 / :58:13

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

PROGRAMOVÁNÍ V C++ CVIČENÍ

Jednoduché cykly

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

5 Přehled operátorů, příkazy, přetypování

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Řídicí struktury. alg3 1

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Diskrétní matematika. DiM /01, zimní semestr 2017/2018

Racionální čísla, operátory, výrazy, knihovní funkce

Příklad 1. Řešení 1a Máme vyšetřit lichost či sudost funkce ŘEŠENÉ PŘÍKLADY Z M1A ČÁST 3

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Poslední nenulová číslice faktoriálu

Programování v C++ 1, 14. cvičení

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

POSLOUPNOSTI A ŘADY INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky

NPRG030 Programování I, 2010/11

POSLOUPNOSTI A ŘADY INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ

Programování v jazyce C pro chemiky (C2160) 7. Ukazatele, Funkce pro práci s řetězci

Základy algoritmizace a programování

Kombinatorika, výpočty

I. TAYLORŮV POLYNOM. 2. a) x x3, b) x x3 + x5, c) 1 + 2x x2 2x 4, f (4) (0) = 48, d) x , c)

Algoritmizace a programování

MS EXCEL_vybrané matematické funkce

. je zlomkem. Ten je smysluplný pro jakýkoli jmenovatel různý od nuly. Musí tedy platit = 0

Numerické algoritmy KAPITOLA 11. Vyhledávání nulových bodů funkcí

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Transkript:

Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 2016/2017

Důležité informace Můj profil: http://www.fit.vutbr.cz/~iveigend/ Kancelář: A221 Konzultační hodiny: po domluvě emailem Karta Výuka odkaz na osobní stránky Komunikace: email prosím používejte předmět: IZP - <předmět emailu> IZP cvičení 8 2

Náplň cvičení Seznámení se zadáním druhého projektu Funkce a řetězce Iterační výpočty IZP cvičení 9 3

Hodnocení prvního projektu Konzultace 15.11. 09-11:15; 16-17 A221 Formulář online, adresa v mailu IZP cvičení 9 4

SEZNÁMENÍ S DRUHÝM PROJEKTEM IZP cvičení 9 5

Seznámení se zadáním druhého projektu Iterační výpočty (max 7 bodů) Obhajoba: Odevzdání: Název: proj2.c Výstup: 21.11.2016 (Po) / 23.11.2016 (St) 27.11.2016, 23:59:59 do WISu standardní výstup pro výpis výsledků (na wiki) standardní chybový výstup pro výpis chyb V rámci projektu můžete používat pouze matematické operace +,-,* a / Překlad: nutno využít přepínač -lm: gcc -std=c99 -Wall -Wextra -Werror proj2.c -lm -o proj2 IZP cvičení 9 6

Syntaxe spuštění./proj2 -log X N./proj2 -pow X Y N --log: vypočítá přirozený logaritmus čísla X v N iteracích A) Pomocí Taylorova polynomu B) Pomocí zřetězených zlomků (Continued Fractions) --pow: vypočítá exponenciální funkci z čísla Y s obecným základem X v N iteracích A) Pomocí Taylorova polynomu B) Pomocí zřetězených zlomků (Continued Fractions) IZP cvičení 9 7

Implementační detaily Zakázáno: používat funkce z math.h Povoleno: Funkce Konstanty log(), isnan(), isinf() NAN, INFINITY Nezapomeňte důkladně testovat na merlinovi!!! Pozor na ošetření vstupních hodnot IZP cvičení 9 8

Implementační detaily (--log) Taylorův polynom double taylor_log(double x, unsigned int n); x = číslo n = počet členů Taylorova polynomu Pro 0 < x < 2 log 1 x = x x2 2 x3 3 x4 4 Pro x > ½ n x 1 log x = x n n=1 Doporučená mezní hodnota mezi polynomy je 1 IZP cvičení 9 9

Implementační detaily (--log) zřetězený zlomek double cfrac_log(double x, unsigned int n); x = číslo (zde z) n = stupeň rozvoje zřetězeného zlomku IZP cvičení 9 10

Implementační detaily (--log) formát výpisu log(x) = LOG_X cfrac_log(x) = CFRAC_LOG_X taylor_log(x) = TAYLOR_LOG_X X hodnota daná argumentem (printf %g) LOG_X hodnoty log() z math.h CFRAC_LOG_ hodnoty vypočtené zřetězeným zlomkem TAYLOR_LOG_ hodnoty vypočtené Taylorovým polynomem Všechny *LOG_* a *POW hodnoty odpovídají formátu %.12g IZP cvičení 9 11

Implementační detaily (--pow) formát výpisu pow(x,y) = POW taylor_pow(x,y) = TAYLOR_POW taylorcf_pow(x,y) = TAYLORCF_POW X,Y hodnota daná argumentem (printf %g) POW hodnota pow() z math.h TAYLORCF_POW hodnoty vypočtené zřetězeným zlomkem TAYLOR_POW hodnoty vypočtené Taylorovým polynomem Všechny *LOG_* a *POW hodnoty odpovídají formátu %.12g IZP cvičení 9 12

Implementační detaily (--pow) Taylorův polynom double taylor_pow(double x, double y, unsigned int n); double taylorcf_pow(double x, double y, unsigned int n); n = počet členů Taylorova polynomu x,y = odpovídají parametrům funkce pow z matematické knihovny a x x ln a = e x ln a = 1 + 1! pro a > 0 + x2 ln 2 a 2! + x3 ln 3 a 3! + Funkce se liší pouze tím, jak se počítá přirozený logaritmus IZP cvičení 9 13

Prémie Implementace funkcí double mylog(double x); double mypow(double x, double y); Funkce volí podle hodnoty zadaného argumentu nejpřesnější typ výpočtu (Taylorův polynom nebo zřetězené zlomky) Minimální počet iterací pro požadovanou přesnost (8 významných číslic, výstupní formát %.7e přesného výsledku) Podmínkou je úspěšná obhajoba projektu a vypracovaných prémiových funkcí IZP cvičení 9 14

FUNKCE A ŘETĚZCE IZP cvičení 9 15

Funkce pro práci s řetězci string.h Vyhledání znaku c v řetězci s, vrací ukazatel na vyhledaný znak, jinak NULL char* strchr(char* s, int c); Kopie řetězce src do řetězce dst, vrací ukazatel na dst char* strcpy(char* dst, char* src); Spojení řetězců dst a src, výsledek v dst char* strcat(char* dst, char* src); Lexikografické porovnání řetězců s1 a s2 int strcmp(char* s1, char* s2); IZP cvičení 9 16

ITERAČNÍ VÝPOČTY IZP cvičení 9 17

Rekurentní problémy Rekurentní problém: výpočet nové hodnoty závisí na hodnotě výpočtu z předcházejícího kroku Rekurentní vztah obecně: Y i+1 = F(Y i ) Pro výpočet hodnoty Y i+1 je nutné zjistit hodnotu Y i IZP cvičení 9 18

Rekurentní problémy Musí být dána počáteční hodnota Y 0 Co musí platit pro hodnoty získané posloupnosti Y i+1 = F(Y i ) pro y 0 Y i Y j pro všechna i j Y i pro i < N nesplňuje podmínky požadované hodnoty Y N splňuje podmínky hledané hodnoty IZP cvičení 9 19

Posloupnosti Algoritmické schéma posloupnosti Y = y0; // Y proměnná, y0 počáteční hodnota while( B(Y)) // dokud není splněna koncová podmínka Y = F(Y); // budeme počítat další prvek // posloupnosti IZP cvičení 9 20

Posloupnosti Algoritmické schéma posloupnosti Y = y0; // Y proměnná, y0 počáteční hodnota while( B(Y)) // dokud není splněna koncová podmínka Y = F(Y); Zápis v C může vypadat např. // budeme počítat další prvek // posloupnosti IZP cvičení 9 21

Posloupnosti Algoritmické schéma posloupnosti Y = y0; // Y proměnná, y0 počáteční hodnota while( B(Y)) // dokud není splněna koncová podmínka Y = F(Y); Zápis v C může vypadat např. double y = y0; // budeme počítat další prvek // posloupnosti while(!b(y)) // dokud není splněna koncová podmínka return y; y = f(y); // budeme počítat další prvek // posloupnosti IZP cvičení 9 22

Ukončovací podmínka Běžně se iterační výpočet ukončí, pokud Y i Y i 1 EPS To se dá v C zapsat např. Algoritmické schéma lze použít pro výpočet číselných řad (Taylorův rozvoj), kterými lze aproximovat funkce IZP cvičení 9 23

Ukončovací podmínka Běžně se iterační výpočet ukončí, pokud Y i Y i 1 EPS To se dá v C zapsat např. double y = y0; // aktuální člen double yp; // předchozí člen do { yp = y; // uložíme hodnotu předchozího členu y = f(y); // vypočítáme další člen } while (fabs(y - yp) > eps); Algoritmické schéma lze použít pro výpočet číselných řad (Taylorův rozvoj), kterými lze aproximovat funkce IZP cvičení 9 24

Posloupnosti BODOVANÝ ÚKOL IZP cvičení 9 25

Příklad 1: Druhá odmocnina Newtonovou metodou Implementujte funkci, která vypočítá druhou odmocninu x Newtonovou metodou y i+1 = 1 2 x y i + y i Prototyp funkce si vhodně zvolte Můžete použít funkci sqrt(x) pro ověření funkčnosti řešení IZP cvičení 9 26

Algoritmické schéma double y = y0; // aktuální člen double yp; // předchozí člen do { yp = y; // uložíme hodnotu předchozího členu y = f(y); // vypočítáme další člen } while (fabs(y - yp) > eps); y i+1 = 1 2 x y i + y i sqrt(x) IZP cvičení 9 27

Řady (částečné součty) K výpočtu řad se používají částečné součty Pro řadu t 0, t 1, t 2, t 3,, kde t i = f t i 1 můžeme napsat řadu částečných součtů s 0, s 1, s 2, s 3,, kde s i = Můžeme je opět řešit rekurentně: s 0 = t 0 s 1 = s 0 + t 1 = t 0 + t 1 i j=0 s i = s i 1 + t i částečný součet pro aktuální člen je částečný součet pro předchozí člen + hodnota aktuálního členu t j IZP cvičení 9 28

Řady (částečné součty) Algoritmické schéma T = t0; // první člen řady S = T; // součet = první člen řady while( B(S, T)) { } T = f(t); // vypočítáme nový člen řady S = S + T; // tento člen přičteme k aktuálnímu // částečnému součtu Je nutné si vždy zjistit, jak se od sebe liší jednotlivé členy řady Pozor: Některé řady konvergují nejrychleji jen v omezeném definičním oboru funkce IZP cvičení 9 29

Posloupnosti vs. řady (částečné součty) Y = y0; // Y proměnná, y0 počáteční hodnota while( B(Y)) // dokud není splněna koncová podmínka Y = F(Y); // budeme počítat další prvek // posloupnosti T = t0; // první člen řady S = T; // součet = první člen řady while( B(S, T)) { } T = f(t); // vypočítáme nový člen řady S = S + T; // tento člen přičteme k aktuálnímu // částečnému součtu IZP cvičení 9 30

Částečné součty (řady) BODOVANÝ ÚKOL IZP cvičení 9 31

Bodovaný úkol 2 Pomocí částečných součtů implementuje výpočet exponenciální funkce e x. (Taylorova) řada má následující tvar: e x = 1 + x + x2 2! + x3 3! + x4 4! + Výsledek porovnejte s matematickou knihovnou math.h a obě hodnoty vypište na standardní výstup Nemůžete použít mocninu, faktoriál a funkci exp(x) z matematické knihovny math.h. Můžete použít funkci fabs()pro výpočet absolutní hodnoty a exp(x) pro ověření funkčnosti řešení IZP cvičení 9 32

Bodovaný úkol 2 (66.684 ) x = 4.2; eps = 0.01; e x = 1 + x + x2 2! + x3 3! + x4 4! + double t = t0; // první člen řady double s = t; int i = 1; while (fabs(t) > eps) { // součet = první člen řady // index aktuálního členu řady t = f(t, i); // vypočítáme nový člen řady s = s + t; } return s; // tento člen přičteme k // aktuálnímu částečnému součtu IZP cvičení 9 33

Continued Fractions ZŘETĚZENÉ ZLOMKY IZP cvičení 9 34

Algoritmické schéma double cf = 1.0; // nebo 0.0 while (k >= 1) { cf = fa(k) / ( fb(k) + cf ); k = k - 1; } return fb(0) + cf; IZP cvičení 9 35

Zřetězené zlomky Implementujte výpočet čísla π pomocí zřetězeného zlomku: π = 1 + 3 + 4 5 + 1 2 2 2 3 2 7 + 42 9 + IZP cvičení 9 36

Zřetězené zlomky Implementujte výpočet čísla π pomocí zřetězeného zlomku: π = 1 + n = 4 3 + 4 5 + 1 2 2 2 3 2 7 + 42 9 + IZP cvičení 9 37

Zřetězené zlomky Implementujte výpočet čísla π pomocí zřetězeného zlomku: π = n = 3 1 + n = 4 3 + 4 5 + 1 2 2 2 3 2 7 + 42 9 + IZP cvičení 9 38

Zřetězené zlomky Implementujte výpočet čísla π pomocí zřetězeného zlomku: π = n = 2 n = 3 1 + n = 4 3 + 4 5 + 1 2 2 2 3 2 7 + 42 9 + IZP cvičení 9 39

Zřetězené zlomky Implementujte výpočet čísla π pomocí zřetězeného zlomku: n = 1 π = n = 2 n = 3 1 + n = 4 3 + 4 5 + 1 2 2 2 3 2 7 + 42 9 + IZP cvičení 9 40

Příklad 2: Zřetězené zlomky Implementujte výpočet čísla π pomocí zřetězeného zlomku: π = 1 + 3 + 4 5 + 1 2 2 2 3 2 7 + 42 9 + IZP cvičení 9 41

PŘÍKLADY K PROCVIČENÍ IZP cvičení 9 42

Příklad na rozehřátí Implementujte funkci void getmax(int *pole, int len, int *max); která vyhledá v poli maximální hodnotu a vrátí ji přes ukazatel IZP cvičení 9 43

Příklad na rozehřátí Implementujte funkci void getmax(int *pole, int len, int *max); která vyhledá v poli maximální hodnotu a vrátí ji přes ukazatel Jak inicializujeme pole? IZP cvičení 9 44

Příklad na rozehřátí Implementujte funkci void getmax(int *pole, int len, int *max); která vyhledá v poli maximální hodnotu a vrátí ji přes ukazatel Jak inicializujeme pole? int pole[10]={7,2,3,9,15,20,-1,42,100,-75}; IZP cvičení 9 45

Příklad na rozehřátí Implementujte funkci void getmax(int *pole, int len, int *max); která vyhledá v poli maximální hodnotu a vrátí ji přes ukazatel Jak inicializujeme pole? int pole[10]={7,2,3,9,15,20,-1,42,100,-75}; Jak zavoláme funkci getmax()? IZP cvičení 9 46

Příklad na rozehřátí Implementujte funkci void getmax(int *pole, int len, int *max); která vyhledá v poli maximální hodnotu a vrátí ji přes ukazatel Jak inicializujeme pole? int pole[10]={7,2,3,9,15,20,-1,42,100,-75}; Jak zavoláme funkci getmax()? int maximum = 0; getmax(pole, &maximum); IZP cvičení 9 47

Příklad 3: Zřetězené zlomky Implementujte výpočet čísla π pomocí zřetězeného zlomku: 4 π = 1 + 1 2 + Čitatele se vypočítají podle vztahu (2 n 1) 2 9 2 + 25 2 + IZP cvičení 9 48

Příklad 4: práce s řetězci Implementujte si vlastní funkci pro lexikografické porovnání dvou řetězců int strcmpmy(char* s1, char* s2); Funkce vrací: 0 pokud s1 == s2-1 pokud s1 < s2 1 pokud s1 > s2 Vyzkoušejte implementovat i další funkce z knihovny string.h IZP cvičení 9 49

Děkuji Vám za pozornost! IZP cvičení 9 50