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)

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

Základy programování (IZP)

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

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

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

Základy programování (IZP)

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

Základy programování (IZP)

Základy programování (IZP)

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

Úvod do programování 7. hodina

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

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

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

Algoritmizace a programování

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

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

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

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

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

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

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

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

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Základy algoritmizace a programování

Úvod do programování. Lekce 5

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

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.

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

Základy programování (IZP)

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

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

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

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

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

Úvod do programování. Lekce 3

Lekce 01 Úvod do algoritmizace

ISU Cvičení 1. Marta Čudová

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

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

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

Rozvinutí funkce do Maclaurinova rozvoje

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

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

Martin Flusser. November 1, 2016

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

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

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

Řídicí struktury. alg3 1

Elektronika pro informační technologie (IEL)

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

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

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

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

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

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

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

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

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.

Programovani v Maplu Procedura

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

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

Jednoduché cykly

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)

Text může být postupně upravován a doplňován. Datum poslední úpravy najdete u odkazu na stažení souboru. Veronika Sobotíková

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

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

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Algoritmizace a programování

Diferenciální rovnice 1

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

Nalezněte obecné řešení diferenciální rovnice (pomocí separace proměnných) a řešení Cauchyho úlohy: =, 0 = 1 = 1. ln = +,

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

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

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

FUNKCE, ZÁKLADNÍ POJMY - CVIČENÍ

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

1 Integrální počet. 1.1 Neurčitý integrál. 1.2 Metody výpočtů neurčitých integrálů

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.

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

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Komplexní čísla, Kombinatorika, pravděpodobnost a statistika, Posloupnosti a řady

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

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 Gabriela Nečasová, inecasova@fit.vutbr.cz 2016/2017

Důležité informace Můj profil: http://www.fit.vutbr.cz/~inecasova/ Kancelář: A221 Konzultační hodiny: po domluvě emailem Karta Výuka odkaz na osobní stránky: IZP 2016/2017 Cvičení Materiály Komunikace: email prosím používejte předmět: IZP - <předmět emailu> IZP cvičení 9 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

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

Seznámení se zadáním druhého projektu Iterační výpočty (max 7 bodů) Obhajoba: 21.11.2016 Odevzdání: 27.11.2016, 23:59:59 do WISu Název: proj2.c Výstup: 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 5

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 6

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!!! IZP cvičení 9 7

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 x log x = n n=1 Doporučená mezní hodnota mezi polynomy je 1 IZP cvičení 9 8

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 9

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 10

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 11

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 12

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

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 14

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

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 16

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 17

Posloupnosti Algoritmické schéma posloupnosti IZP cvičení 9 18

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 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 Zápis v C může vypadat např. 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ř. 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 21

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 22

Posloupnosti BODOVANÝ ÚKOL 1 IZP cvičení 9 23

Bodovaný úkol 1: sqrtmy(7) = 2.645751 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 x = 7 eps=1e-19 Můžete použít funkci sqrt(x) pro ověření funkčnosti řešení Výpis: printf("%.10f", vysledek); IZP cvičení 9 24

Ř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 = i j=0 Můžeme je opět řešit rekurentně: s 0 = t 0 s 1 = s 0 + t 1 = t 0 + t 1 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 25

Řady (částečné součty) Algoritmické schéma řady IZP cvičení 9 26

Řady (částečné součty) Algoritmické schéma řady 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 27

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 28

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

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 Výpis: printf("%.10f", vysledek); 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 30

Bodovaný úkol 2: expmy(4.2)=66.6840321 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 31

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

Zřetězené zlomky π=3,14159 26535 89793.. 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 33

Zřetězené zlomky π=3,14159 26535 89793.. 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 34

Zřetězené zlomky π=3,14159 26535 89793.. 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 35

Zřetězené zlomky π=3,14159 26535 89793.. 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 36

Zřetězené zlomky π=3,14159 26535 89793.. 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 37

Zřetězené zlomky π=3,14159 26535 89793.. 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 38

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

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 40

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 41

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 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 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 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? 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 44

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

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 46

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