Úvod do programování. Lekce 5

Podobné dokumenty
Funkce, intuitivní chápání složitosti

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

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

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

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

8 Třídy, objekty, metody, předávání argumentů metod

Programovani v Maplu Procedura

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Úvod do programování. Lekce 3

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

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

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

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

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

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

2 Datové typy v jazyce C

Struktura programu v době běhu

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Příkazy if, while, do-while, for, switch

Algoritmizace a programování

Algoritmizace a programování

Řídící struktury, if, while, switch

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

Algoritmizace a programování

Algoritmizace a programování

Řídící struktury, if, while, switch

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Rozklad problému na podproblémy, rekurze

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Jazyk C++, některá rozšíření oproti C

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

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Základy programování (IZP)

Struktury a dynamická paměť

Pointery II. Jan Hnilica Počítačové modelování 17

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

Př. další použití pointerů

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Základy programování (IZP)

Více o konstruktorech a destruktorech

Rozklad problému na podproblémy, rekurze

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Programování II. Mgr. Monika Pinkasová. Zlepšování podmínek pro využívání ICT ve výuce a rozvoj výuky angličtiny na SPŠei Ostrava

Programování v jazyce C pro chemiky (C2160) 6. Funkce, struktury

11a Dynamické dvourozměrné pole (obdobně vícerozměrné)

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

Základy programování (IZP)

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

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.

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

Přijímací zkouška na navazující magisterské studium 2015

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

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

Výčtový typ strana 67

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: Ukončí program. Nula znamená, že vše proběhlo bez chyby.

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

Základy programování (IZP)

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

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

Odvozené a strukturované typy dat

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Funkce, procedury, složitost

Základy algoritmizace a programování

Řídicí struktury. alg3 1

Základy programování (IZP)

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

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

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

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

C# konzole Podíl dvou čísel, podmínka IF

Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu.

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

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

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Objektově orientované programování

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Základy programování (IZP)

Základní stavební prvky algoritmu

12. Automatické vyhodnocení derivací. jaro 2012

3 KTE / ZPE Informační technologie

Algoritmizace a programování

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Transkript:

I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í Inovace a zvýšení atraktivity studia optiky reg. č.: CZ.1.07/2.2.00/07.0289 Úvod do programování Lekce 5 Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

Funkce definice funkce zahrnuje specifikaci počtu a typů parametrů, typu návratové hodnoty, a vlastního těla funkce příklad: funkce najde maximum ze dvou celých čísel int maximum(int a, int b){ return(a>b? a : b); // hlavicka funkce // telo funkce int c1,c2; printf("zadej dve cela cisla: "); scanf("%d %d",&c1,&c2); printf("vetsi je cislo %d\n",maximum(c1,c2)); // volani funkce poznámky: příkaz return předává řízení nadřazené funkci a zároveň vrací výsledek pokud funkce nemá parametry, popř. nevrací žádnou hodnotu, použijeme typ void příklad: program využívá funkce tab() a podtrhni() pro formátování výpisu void tab(void){ // zadne parametry, nevraci hodnotu printf(" "); // telo funkce // neni nutno pouzit return() void podtrhni(void){ putchar('\n'); for(i=1;i<60;i++) putchar(' '); putchar('\n'); printf("prvni sloupec"); tab(); printf("druhy sloupec"); tab(); printf("treti sloupec"); podtrhni(); // podtrhne // ukonci radek // zavorky () nesmi byt vynechany rekurzivní funkce funkce může volat sama sebe využití rekurze může vést k nepřednému a neefektivnímu kódu nevyužívat, pokud není nutné

příklad: výpočet faktoriálu celého čísla s využitím rekurze int fakt(int n){ return((n<=0)? 1 : n*fakt(n 1)); // rekurzivni volani funkce int k; printf("zadej k:"); scanf("%d",&k); printf("k!=%d\n",fakt(k)); oblast platnosti proměnných lokální proměnné definice uvnitř funkce, platnost do konce funkce globální proměnné definice vně funkce, platí do konce souboru příklad: lokální proměnná z funkce main() je nedostupná ve funkci tisk_b() int a; // definice globalni promenne void tisk_a(void){ printf("%d\n",a); void tisk_b(void){ int b; // definice lokalni promenne ve fci tisk_b() b=20; printf("%d\n",b); // tiskne hodnotu "20" int b; // definice lokalni promenne ve fci main() a=b=10; tisk_a(); // tiskne hodnotu "10" tisk_b(); printf("%d\n",b); // tiskne hodnotu "10" volání parametrů volání hodnotou do funkce se předávají kopie skutečných parametrů, nelze je tedy uvnitř funkce měnit volání odkazem jazyk C nezná, lze obejít předáním ukazatelů na skutečné parametry, viz. např. funkce scanf() příklad: funkce vymění obsah proměnných void vymen(int *p_x, int *p_y){ int pom;

pom=*p_x; *p_x=*p_y; *p_y=pom; // referencni operator ziska obsah na adrese "p_x" int a=1,b= 1; printf("puvodne: %d %d\n",a,b); vymen(&a,&b); printf("po vymene:%d %d\n",a,b); // do funkce posilame adresy! poznámky: operátor * umožňuje přístup k obsahu adresy, např. a=*adr operátor & získá adresu proměnné, např. adr=&a předání ukazatelů na parametry (předání parametrů odkazem) lze využít pro vrácení dvou a více hodnot z funkce, viz. následující příklad příklad: funkce vypočítá součet a rozdíl dvou celých čísel a výsledek vrátí skrz parametry void spatne(int a, int b, int soucet, int rozdil){ soucet=a+b; // tyto hodnoty budou po opusteni rozdil=a b; // funkce zapomenuty void spravne(int a, int b, int *soucet, int *rozdil){ *soucet=a+b; // "soucet" ukazuje na "s" *rozdil=a b; // "rozdil" ukazuje na "r" int a,b,s,r; a=10; b=22; s=0; r=0; spatne(a,b,s,r); // volani hodnotou printf("funkce spatne(): s=%3d r=%3d\n",s,r); spravne(a,b,&s,&r); // volani odkazem printf("funkce spravne(): s=%3d r=%3d\n",s,r); příklad: program demonstruje chybu výpočtu numerické derivace #include<math.h> double der(double x, double dx){ double d; d=(sin(x+dx) sin(x))/dx; // numericka derivace return(d); double dx;

for(i= 1;i> 16;i ){ dx=pow(10,i); // nastavi dx printf("%d %.20f\n",i,cos(M_PI/4) der(m_pi/4,dx)); příklad: program ověří přesnost vlastní implementace funkce sin(x) založené na rozvoji sin(x) v mocninnou řadu: sin x = 1 i 1 x 2 i 1 i=1 2i 1! #include<math.h> #define pi 3.141592653589793 double faktorial(int n){ double f=1; for(i=2;i<=n;i++) f*=i; return(f); double mocnina(double x, int a){ double moc=1; for(i=1;i<=a;i++) moc*=x; return(moc); double mujsin(double x, int clenu){ double suma; int i,n,znamenko; suma=0; znamenko=1; for(i=1;i<=clenu;i++){ n=2*i 1; suma+=znamenko*mocnina(x,n)/faktorial(n); znamenko*= 1; // znamenko v rade alternuje return(suma); double x,dx,s1,s2,ds; int clenu; x=pi/4.; // nejdrive zjistime jak presnost vypoctu zavisi na poctu clenu // toto provedeme pro uhel pi/4 printf("clenu mujsin sin rozdil\n"); printf(" \n"); for(clenu=1;clenu<=5;clenu++){ s1=mujsin(x,clenu); s2=sin(x); ds=s1 s2;

printf("%3d %15.8f %12.8f %12.8f\n",clenu,s1,s2,ds); // nyni overime zda je presnost stejna pro vsechny uhly clenu=3; dx=pi/2./10.; // krok v uhlu printf("\n\n"); // odradkuje printf(" x mujsin sin rozdil\n"); printf(" \n"); for(x=0;x<=pi/2.;x+=dx){ s1=mujsin(x,clenu); s2=sin(x); ds=s1 s2; printf("%6.4f %15.8f %12.8f %12.8f\n",x,s1,s2,ds); funkční prototyp pokud v programu volání nějaké funkce předchází její definici, uvedeme na začátku programu úplný funkční prototyp volané funkce; často jsou tyto deklarace umístěny v hlavičkovém souboru příklad: funkce mujsin() a mujcos() se volají navzájem #include<math.h> #define pi 3.141592653589793 double mujsin(double x); // uplny funkcni prototyp double mujcos(double x){ if(x<pi/4.) return(1 x*x/2.); // pro male uhly, jinak pouziji mujsin() else return(mujsin(pi/2. x)); double mujsin(double x){ if(x<pi/4.) return(x); // pro male uhly, jinak pouziji mujcos() else return(mujcos(pi/2. x)); printf("sin(0.01)=%f\n",mujsin(0.01)); printf("sin(pi/2 0.01)=%f\n",mujsin(pi/2. 0.01)); ukazatel na funkci double (*p_fce)(); // ukazatel na funkci vracející typ double p_fce=sin; // p_fce ukazuje na funkci sin() y=p_fce(x); // totéž jako: y=sin(x) p_fce=cos; y=p_fce(x); // v y bude cos(x)