OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Programování v C jazyku - SEMINÁŘ
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Přednáška 11 Jiří Šebesta
C++ Přednáška 1 Neobjektové rozšíření jazyka Základy vstupu a výstupu Ing. Jiří Kulhánek, kat. 352, VŠB TU Ostrava 2004.
Příkazy Přednáška č. 4. Příkazy (statements)  Příkaz – dílčí krok programu (část kódu – zpravidla jeden řádek)  Program – posloupnost příkazů  Příkazy.
Pole, ukazatele a odkazy
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Preprocess Úvod do tvorby funkcí Princip preprocesoringu Direktivy preprocesoru Podmíněný překlad Základy tvorby funkcí Zjednodušený popis principu předávaní.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Algoritmizace a programování
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
ALGORITMIZACE ÚVODNÍ PŘEDNÁŠKA 2 SLOVO ALGORITMUS VZNIKLO ZE JMÉNA ARABSKÉHO MATEMATIKA AL-KHWARIZMIHO, KTERÝ V DEVÁTÉM STOLETÍ SEPSAL ROZSÁHLOU KOLEKCI.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Objektové programování
Počítače a programování 1 pro obor EST BPC1E PŘEDNÁŠKA 3
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Příklady v jazyku C – část 6
Současný svět Projekt č. CZ /3. 1
6. cvičení Polymorfismus
Jiří Znoj - zno Tvorba konkordace Algoritmy II 3. projekt, 5. zadání Jiří Znoj - zno
Počítače a programování 1
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
JavaScript Funkce.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
OSNOVA: a) Úvod a klasifikace b) Funkce main() s argumenty c) Souborový vstup a výstup d) Programování WAV Jiří Šebesta Ústav radioelektroniky, FEKT VUT.
OSNOVA: a) Příkazy pro cykly II. b) Příkazy pro řízení přenosu c) Příkazy – příklad d) Řetězce v C e) Funkce “stdio.h“ pro řetězce f) Funkce “string.h“
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
ALGO – Algoritmizace 4. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
OSNOVA: a) Algoritmy třídění b) Třídění dynamických záznamů Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST.
Příklady v jazyku C – část 1. Výstupy pomocí printf. printf(" Tisk textu \n v apostrofech \n ") ; p=10; printf("%d\n", p) ; /* tisk konstanty */ printf("Tisk.
OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
C – procedury Mgr. Lenka Švancarová.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 5
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 11
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Počítače a programování 2
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
C# konzole – Podíl dvou čísel, podmínka IF
Vzorové řešení zápočtového testu
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 3
TNPW1 JavaScript Ing. Jiří Štěpánek.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Oblast platnosti identifikátoru (1)
C# přehled vlastností.
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Funkce s proměnným počtem parametrů
Transkript prezentace:

OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST BPC1E PŘEDNÁŠKA 7

Funkce – úvod (1/3) Funkce: posloupnost příkazů uvedená hlavičkou Využití: – opakovaně volaná sekvence = jeden kód pro danou část vykonávaného algoritmu, ušetří se programová paměť – strukturování programu = funkce pro danou skupinu úloh (algoritmů) jsou zapouzdřeny ve společné knihovně (nezávislý soubor), volání dané funkce se provádí jen předáváním parametrů v hlavičce – např. y=cos(x), zdrojový soubor pro vykonání kosinu je skrytý v knihovním souboru – ošetření událostí = v případě vzniku události na základě přerušení (aktivační signál) se zavolá příslušná funkce, např. pohyb myší zavolá funkci, která přepočítá novou pozici kurzoru

Co se děje při volání funkce: Funkce – úvod (2/3)

Základní dělení funkcí: - funkce bez parametru - funkce s parametrem - volané parametrem – nezmění obsah vstupních pro- měnných, ty jsou kopírovány do nových proměnných alokovaných během provádění funkce - volané odkazem – mohou měnit obsah vstupních proměnných, předává se adresa proměnné, proto ji lze kdykoli během vykonávání funkce změnit) -funkce s/bez návratové hodnoty – pokud potřebujeme vrátit více než jednu hodnotu (výstup), musíme místa pro uložení výstupů definovat jako volání odkazem Funkce – úvod (3/3)

Hlavičky funkcí (1/13) void func_name(void) { } void warning(void) // no input, no output { printf("Your computer is being destroyed"); getchar(); } void main(void) { warning(); // calling the function } Funkce bez parametru a bez návratové hodnoty:

double func_name(double A) { } int pow3(int A) // 1 input, 1 output { int y = A*A*A; return y; } Funkce s jedním parametrem volaným hodnotou a s návratovou hodnotou: void main(void) { int n; for(n=0; n<20; n++) printf("%d^3 is %d\n", n, pow3(n)); } Hlavičky funkcí (2/13)

double func_name(double A, double B) { } float pow_n(float A, int B) // 2 inputs, 1 output { float y=1; int n; for(n=0; n<=B; n++) if(n>0) y*=A; return y; } Funkce se dvěma parametry volanými hodnotou a s návratovou hodnotou: Funkce pro n-tou mocninu racionálního čísla Hlavičky funkcí (3/13)

int main(void) { int n; float y[9]; float m = 5.123; for(n=2; n<11; n++) { y[n-2] = pow_n(m, n); printf("%dth power of %f is %f\n", n, m,y[n-2]); } getchar(); return 0; } Příklad: BPC1E_Ex54.c Hlavičky funkcí (4/13)

??? func_name(char* A) { } int numinstr(char *s) { int n, cnt=0; for(n=0; s[n]!='\0'; n++) if(s[n]>='0‘ && s[n]<='9') cnt++; return cnt; } Funkce s parametrem typu řetězec Funkce pro nalezení počtu znaků číslic v řetězci Hlavičky funkcí (5/13)

int main(void) { char txt1[]="ab9bj65D9"; char txt2[]="34x9z56A0"; char txt3[]="3cvz1111E"; int n1, n2, n3; n1=numinstr(txt1); n2=numinstr(txt2); n3=numinstr(txt3); printf("%d in 1st, %d in 2nd, %d in 3rd", n1, n2, n3); getchar(); return 0; } Příklad: BPC1E_Ex55.c Hlavičky funkcí (6/13)

??? func_name(int *A, int *B) { } void polar2cart(float *A, float *B) // A is magnitude {// B is phase in deg. float pha; pha=3.1415**B/180; *B=*A*sin(pha); // B is imag. part *A=*A*cos(pha);// A is real part } Funkce s parametry volanými odkazem Parametry jsou ukazatele odkazující na pozice proměnných v paměti Funkce pro převod z polárních do kartézských souřadnic Hlavičky funkcí (7/13)

int main(void) { float x=2.0; float y=90.0; printf("Magnitude is %f and phase is %f deg.", x, y); polar2cart(&x, &y); printf("Real part is %f and imag. part is %f", x, y); getchar(); return 0; } Příklad: BPC1E_Ex56.c Hlavičky funkcí (8/13)

float mean(float *vect, int n) // vect is input vector { // n is length of the vector int m; float s=0; // s is partial sum for(m=0; m<n; m++) // for all elements of vector s+=vect[m]; return s/(1.0*n); // average computation } Funkce s parametrem jako odkazem na první prvek pole (podobně jako u řetězců) Funkce pro výpočet střední hodnoty vektoru racion á ln í ch č í sel Hlavičky funkcí (9/13)

int main(void) { float x[5], m; int len_x=5, n; srand(time(NULL)); for(n=0; n<len_x; n++) { x[n]=(rand()%1000)/100.0; printf("%4.2f\n", x[n]); } m = mean(x, len_x); printf("The average of vector of number is %f", m); getchar(); return 0; } Příklad: BPC1E_Ex57.c Hlavičky funkcí (10/13)

typedef int t_mat[3][3]; void func_name(t_mat A, t_mat B) { } Definice proměnn é vlastn í ho typu pomoc í typedef int func_name(t_mat A) { } t_mat func_name(t_mat A) { } ! Funkce může vracet pouze hodnotu (ne pole) Hlavičky funkcí (11/13)

typedef int t_mat[3][3]; int det_mat(t_mat x)// determinant of 3x3 matrix { int det=0, m, n, pplus, pminus; for(m=0; m<3; m++) { pplus=1; pminus=1; for(n=0; n<3; n++) { pplus*=x[(m+n)%3][n]; pminus*=x[(m+n)%3][2-n]; } det+=pplus-pminus; } return det; } Funkce pro výpočet determinantu matice 3x3 Hlavičky funkcí (12/13)

int main(void) { t_mat mat; int m, n; srand(time(NULL)); for(m=0; m<3; m++)//random matrix for(n=0; n<3; n++) mat[m][n]=rand()%198-99; //from -99 to +99 printf("The determinant is %d", det_mat(mat)); getchar(); return 0; } Příklad: BPC1E_Ex58.c Hlavičky funkcí (13/13)

Rekurze funkcí (1/1) unsigned int factorial(unsigned int n) { if(n) // test if n is not zero return n*factorial(n-1); // n is not zero else // n is zero return 1; } int func_name(int A) { … x=func_name(y); … } Funkce může v jejím těle volat sebe samu – rekurzivní funkce Příklad: BPC1E_Ex59.c Funkce pro výpočet faktori á lu

my_lib.c: soubor obsahující zdrojové kódy našich funkcí my_lib.h: soubor obsahuj í c í hlavičky našich funkc í ze stejnojmenného souboru, v hlavičce jsou definovány typy proměnných a jméno funkce, jednotlivé hlavičky musí být odděleny středníkem pomocí direktivy #include "my_lib.h" vložené na začátek programu aktivuji přístup k funkcím z příslušného knihovního souboru my_lib.c, linker přidá knihovnu k projektu Ze souboru vlastních funkcí lze vytvořit knihovnu: Knihovny funkcí (1/10)

Postup v Code::Blocks: File > New > File my_lib.c + my_lib.h do adresáře projektu nebo do vlast- ního adresáře s vlastními knihovnami Knihovny funkcí (2/10)

Nastavení cest pro kompilátor v Code::Blocks: Settings > Compiler přidat cesty se zdrojovými soubory a hlavičkami knihoven tak, aby se přeložili i zdrojové kódy vlastních knihovních funkcí Knihovny funkcí (3/10)

Knihovny funkcí (4/10) Př. Vlastní knihovna funkcí pro práci s maticemi 3x3 hlavičkový soubor matops.h typedef int t_mat [3][3]; int det_mat(t_mat A);// determinant of A void print_mat(t_mat A);// printing A void gen_mat(t_mat A, int start, int stop); // gener. A void copy_mat(t_mat A, t_mat B); // copying A to B void add_mat(t_mat A, t_mat B);// A=A+B void sub_mat(t_mat A, t_mat B);// A=A-B void clr_mat(t_mat A);// zeroing A definice vlastních typů proměnných definice hlaviček funkcí s typy vstupních i výstupních parametrů

zdrojový soubor knihovny matops.c #include typedef int t_mat[3][3]; int det_mat(t_mat A)// compute determinant { int det=0, m, n, pplus, pminus; for(m=0; m<3; m++) { zdrojov é k ó dy jednotlivých funkc í podle hlavičkov é ho souboru matops.h Knihovny funkcí (5/10)

pplus=1; pminus=1; for (n=0; n<3; n++) { pplus*=A[(m+n)%3][n]; pminus*=A[(m+n)%3][2-n]; } det+=pplus-pminus; } return det; } Knihovny funkcí (6/10)

void print_mat(t_mat A)// printing matrix A {int m,n; for(m=0; m<3; m++) {for(n=0; n<3; n++) { printf("%4d ", A[m][n]); } printf("\n"); } void gen_mat(t_mat A, int start, int stop) // random {int m, n;// generation of matrix A srand(time(NULL)); for(m=0; m<3; m++) for(n=0; n<3; n++) A[m][n]=rand()%(stop-start+1)+start; } Knihovny funkcí (4/10)

void copy_mat(t_mat A, t_mat B) // copying A to B { int m, n; for(m=0; m<3; m++) for(n=0; n<3; n++) A[m][n]=B[m][n]; } void add_mat(t_mat A, t_mat B) // A=A+B { int m, n; for(m=0; m<3; m++) for(n=0; n<3; n++) A[m][n]+=B[m][n]; } Knihovny funkcí (4/10)

void sub_mat(t_mat A, t_mat B)// A=A-B { int m, n; for(m=0; m<3; m++) for(n=0; n<3; n++) A[m][n]-=B[m][n]; } void clr_mat(t_mat A)// zeroizing A { int m,n; for(m=0; m<3; m++) for(n=0; n<3; n++) A[m][n]=0; } Knihovny funkcí (4/10)

#include #include "matops.h" int main(void) { t_mat mat1, mat2, mat3; // this type was defined //in mathops.h int m, n; gen_mat(mat1, -9, 9); print_mat(mat1); printf("The det. of mat1 is %d\n",det_mat(mat1)); copy_mat(mat3, mat1); sub_mat(mat1, mat2); … Př. Program, který využ í v á na š i knihovnu matops.h Příklad: BPC1E_Ex60.c + matops.c(h) Knihovny funkcí (4/10)

Příklady (1/2) Př. Vytvořte knihovnu funkcí pro vý- počet plochy 2-D geometrických objektů (funkce sestavte pro obdélníka, elipsu a trojúhelník). double s_rect(double a, double b); double s_ell (double a, double b); double s_tri (double a, double b); Hlavičkový soubor knihovny areas2D.h

#include "areas2D.h" double s_rect(double a, double b) { return a*b;} double s_ell (double a, double b) { return *a*b;} double s_tri (double a, double b) { return 0.5*a*b;} Knihovní funkce areas2D.cpp Příklad: BPC1E_Ex61.c + areas2D.c(h) Příklady (2/2)

Téma následující přednášky DĚKUJI ZA POZORNOST –Preprocesor –Standardní knihovny ANSI-C –Příklady