B0B99PRPA Procedurální programování. Stanislav Vítek

Podobne dokumenty
B0B99PRPA Procedurální programování

B0B99PRPA Procedurální programování

Úvodní informace. 18. února 2019

Martin Pergel. 26. února Martin Pergel

TGH01 - Algoritmizace

Komplexní analýza. Martin Bohata. Katedra matematiky FEL ČVUT v Praze Martin Bohata Komplexní analýza Mocninné řady 1 / 18

TGH01 - Algoritmizace

Aproximace funkcí 1,00 0,841 1,10 0,864 1,20 0,885. Body proložíme lomenou čarou.

Charakteristika jazyka C

Vybrané kapitoly z matematiky

Kristýna Kuncová. Matematika B2 18/19

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

IJC Jazyk C. Petr Peringer peringer AT fit.vutbr.cz. (Verze: ) Božetěchova 2, Brno. Úvod ISO C libc C99 11 Debug C++ Link Opt...

Wstęp do programowania 1

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Funkce zadané implicitně. 4. března 2019

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Quick sort, spojové struktury

Numerické metody 8. května FJFI ČVUT v Praze

(1) Derivace. Kristýna Kuncová. Matematika B2 17/18. Kristýna Kuncová (1) Derivace 1 / 35

Matematika (KMI/PMATE)

1. Informace o předmětu, úvod do programování

Co nie powinno być umieszczane w plikach nagłówkowych:

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

MATEMATIKA 3. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

5. a 12. prosince 2018

Funkcja (podprogram) void

1 Soustava lineárních rovnic

Podstawy programowania C. dr. Krystyna Łapin

Reprezentace dat. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner

Edita Pelantová, katedra matematiky / 16

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Kapitola 4: Soustavy diferenciálních rovnic 1. řádu

Kristýna Kuncová. Matematika B2

2 Przygotował: mgr inż. Maciej Lasota

Obsah Atributová tabulka Atributové dotazy. GIS1-2. cvičení. ČVUT v Praze, Fakulta stavební, katedra mapování a kartografie

Cauchyova úloha pro obyčejnou diferenciální rovnici

Kristýna Kuncová. Matematika B3

Numerické metody minimalizace

Elementární funkce. Edita Pelantová. únor FJFI, ČVUT v Praze. katedra matematiky, FJFI, ČVUT v Praze

Programowanie Proceduralne

Automatové modely. Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Matematika 2, vzorová písemka 1

Co nám prozradí derivace? 21. listopadu 2018

Internet a zdroje. (Zdroje na Internetu) Mgr. Petr Jakubec. Katedra fyzikální chemie Univerzita Palackého v Olomouci Tř. 17.

Logika V. RNDr. Kateřina Trlifajová PhD. Katedra teoretické informatiky Fakulta informačních technologíı BI-MLO, ZS 2011/12

ggplot2 Efektní vizualizace dat v prostředí jazyka R Martin Golasowski 8. prosince 2016

Inverzní Z-transformace

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Univerzita Palackého v Olomouci

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Výzvy, které před matematiku staví

Obsah: CLP Constraint Logic Programming. Úvod do umělé inteligence 6/12 1 / 17

Necht je funkce f spojitá v intervalu a, b a má derivaci v (a, b). Pak existuje bod ξ (a, b) tak, že f(b) f(a) b a. Geometricky

Linea rnı (ne)za vislost

Operace s funkcemi [MA1-18:P2.1] funkční hodnota... y = f(x) (x argument)

Programowanie strukturalne i obiektowe

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

katedra informatiky FEI VŠB-TU Ostrava etr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Začínáme s C/C září / 25

Instrukcje sterujące. Programowanie Proceduralne 1

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Kristýna Kuncová. Matematika B2 18/19. Kristýna Kuncová (1) Vzorové otázky 1 / 36

Programowanie Proceduralne

Microsoft IT Academy kurs programowania

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Podstawy Programowania.

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie w elektronice: Podstawy C

Wstęp do Programowania, laboratorium 02

Literatura. Zdroje informací. Tyto slajdy jsou určeny pro předmět ICP na FIT VUT v Brně. Obsahují základní popis jazyka C++ vhodný pro studenty, kteří

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Programowanie obiektowe

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia. Krzysztof Banaś Podstawy programowania 1

Powyższe reguły to tylko jedna z wersji gry. Istnieje wiele innych wariantów, można też ustalać własne zasady. Miłej zabawy!

DFT. verze:

Zmienne, stałe i operatory

Elementarne wiadomości o języku C

Podstawy Programowania

Programowanie Proceduralne

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Vlastnosti. Příprava. Czech - 2 -

Język ANSI C. Pierwsze starcie. Programowanie Proceduralne 1

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 13.2.

Programowanie strukturalne język C - wprowadzenie

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Typy danych i formatowanie

(13) Fourierovy řady

NÁVOD K POUŽITÍ KEZELÉSI KÉZIKÖNYV INSTRUKCJA OBSŁUGI NÁVOD NA POUŽÍVANIE. Česky. Magyar. Polski. Slovensky

Diferenciální rovnice základní pojmy. Rovnice se

tablica: dane_liczbowe

Pytania sprawdzające wiedzę z programowania C++

Transkrypt:

3. Základní řidící struktury B0B99PRPA Procedurální programování Stanislav Vítek Katedra radioelektroniky Fakulta elektrotechnická České vysoké učení v Praze 1/40

Přehled témat Y Část 1 Programování v C Funkce a modularita Hodnoty datových typů Standardní vstup a výstup Y Část 2 Řidící struktury Řídicí struktury Větvení Cykly Y Část 3 Zadání 2. domácího úkolu 2/40

Část I Zápis programu v C 3/40

I. Zápis programu v C Funkce a modularita Hodnoty datových typů Standardní vstup a výstup 4/40

Funkce Y Funkce tvoří základní stavební blok modulárního jazyka C Modulární program je složen z více modulů/zdrojových souborů. Y Každý spustitelný program v C obsahuje alespon jednu funkci a to funkci main() Y Deklarace hlavička funkce (prototyp) navratovy_typ jmeno_funkce(formalni parametry); Deklarace obsahuje informace, které vyžaduje překladač. Y Definice hlavička funkce a její tělo (sekvence příkazů) navratovy_typ jmeno_funkce(formalni parametry) { // telo funkce } Definice funkce bez předchozí deklarace je zároveň deklarací funkce. 5/40

Vlastnosti funkcí Y C nepovoluje funkce vnořené do jiných funkcí Y Jména funkcí se mohou exportovat do ostatních modulů (souborů) Y Formální parametry funkce jsou lokální proměnné, které jsou inicializovány skutečnými parametry při volání funkce Parametry se do funkce předávají hodnotou Y C dovoluje rekurzi funkce může volat sebe samu Y Funkce nemusí mít žádné vstupní parametry, zapisujeme: jmeno_funkce(void) Y Funkce nemusí vracet funkční hodnotu návratový typ je void 6/40

Struktura modulu 1 #include <stdio.h> /* hlavickovy soubor */ 3 #define PI 3.14 /* symbolicka konstanta - makro */ 5 float kruh(int a); /* hlavicka/prototyp funkce */ 7 int main(void) /* hlavni funkce */ 8 { 9 int v = 10; /* definice promennych */ 10 float r; 11 r = kruh(v); /* volani funkce */ 12 return 0; /* ukonceni hlavni funkce */ 13 } 15 float kruh(int r) /* definice funkce */ 16 { 17 float b = PI*r*r; 18 return b; /* navratova hodnota funkce */ 19 } lec03/modul.c 7/40

Zdrojové a hlavičkové soubory Y Rozsáhlejší programy je vhodné rozdělit do více souborů modulů Y Rozdělení na zdrojové a hlavičkové soubory umožňuje rozlišit definici a deklaraci, především však podporuje Y Organizaci zdrojových kódů v adresářové struktuře souborů Y Modularitu Y Hlavičkový soubor obsahuje popis (seznam) funkcí a jejich parametrů bez konkrétní implementace (deklarace funkcí) Bývá zvykem do hlavičkových souborů umisťovat i definice datových typů, konstanty a makra. Y Zdrojový soubor konkrétní implementace funkcí modulu Y Pokud se modul od posledního překladu nezměnil, není třeba zdrojový kód modulu znova překládat Optimalizace procesu překladu. Y Znovupoužitelnost Y Pro využití binární knihovny potřebuje znát její rozhraní, které je deklarované v hlavičkovém souboru Výhodné pro práci na velkých projektech nebo týmech. 8/40

I. Zápis programu v C Funkce a modularita Hodnoty datových typů Standardní vstup a výstup 9/40

Literály Y Hodnoty datových typů označujeme jako literály (konstanty) Y Jazyk C má 6 typů konstant (literálů) Y Celočíselné Y Racionální Y Znakové Y Řetězcové Y Výčtové Y Symbolické #define NUMBER 10 Datový typ enum. Direktivy preprocesoru. 10/40

Literály celočíselných datových typů Y Zápis čísel Y dekadický 123 450932 Y šestnáctkový (hexadecimální) 0x12 0xFAFF (začíná 0x nebo 0X) Y osmickový (oktalový)) 0123 0567 (začíná 0) Y unsigned 12345U (přípona U nebo u) Y long 12345L (přípona L nebo l) Y unsigned long 12345ul (přípona UL nebo ul) Y Není-li přípona uvedena, jde o literál typu int 11/40

Literály neceločíselných datových typů Y Neceločíselné datové typy jsou dané implementací, většinou se řídí standardem IEEE-754-1985 Y Formát zápisu racionálních literálu: Y S řádovou tečkou 13.1 Y Mantisa a exponent 31.4e-3 nebo 31.4E-3 Y Typ racionálního literálu: Y double pokud není explicitne urcen Y float prípona F nebo f Y long double přípona L nebo l 12/40

Znakové literály Y Formát znak v jednoduchých apostrofech A, B nebo \n Y Hodnota znakový literál má hodnotu odpovídající kódu znaku 0 48, A 65 Hodnota znaku mimo ASCII (větší než 127) závisí na překladači. Y Typ znaková konstanta je typu int Y Specifikace číselné hodnoty v tabulce znaků (ASCII) Y hodnota v osmičkové nebo šestnáctkové soustavě, uvozena apostrofy, před vlastní hodnotu zpětné lomítko Pokud neuvedeme na začátku 0, je hodnota interpretována jako číslo v osmičkové soustavě tj. \32 je totéž jako \032, tedy hodnota 32 v osmičkové soustavě (26 v desítkové) Příklad řídící znaky. \110, \07, \0xA3 13/40

Řetězcové literály Y Formát posloupnost znaků a řídicích znaků (escape sequences) uzavřená v uvozovkách Y "Retezcova konstanta s koncem radku\n" Řetězcové konstanty oddělené oddělovaci (white spaces) se sloučí do jediné, např. "Retezcová konstanta" "s koncem radku\n" se sloučí do "Retezcova konstanta s koncem radku\n" Y Typ řetězcová konstanta je uložena v poli typu char a zakoncená znakem \0 a h o j \0 14/40

Konstanty výčtového typu Y Formát Y Implicitní hodnoty konstanty výčtového typu zacínají od 0 a každý další prvek má hodnotu o jedničku vyšší Y Hodnoty mužeme explicitne predepsat enum { SPADES, CLUBS, HEARTS, DIAMONDS }; enum { SPADES = 10, CLUBS, /* hodnota je 11 */ HEARTS = 3, DIAMONDS = 20 }; Y Typ výčtová konstanta typu int Y Hodnotu konstanty mužeme použít pro iteraci v cyklu enum {SPADES, CLUBS, HEARTS, DIAMONDS, NUM_COLORS}; for (int i = SPADES; i < NUM_COLORS; ++i) {... } 15/40

Symbolické konstanty Y Formát konstanta je založena příkazem preprocesoru #define Y Tzv. neparametrické makro Y Každý #define musí být na samostatném řádku #define ZAPOCET 1 Vetšinou používáme velká písmena. Y Symbolické konstanty mohou vyjadřovat konstantní výraz #define MAX_1 ((10*6) - 3) Y Symbolické konstanty mohu být vnořené #define MAX_2 (MAX_1 + 1) Y Je-li hodnota výraz, jsou kulaté závorky nutné pro správné vyhodnocení výrazu, např. pro 5*MAX 1 s vnějšími závorkami je 5*((10*6) - 3)=285 vs. 5*(10*6) - 3=297. 16/40

Proměnné s konstantní hodnotou Y Uvedením kĺıčového slova (modifikátoru) const lze označit proměnnou jako konstantu Y Překladač kontroluje přiřazení a nedovoĺı hodnotu proměnné nastavit znovu. Příklad const float pi = 3.14159265; Y Na rozdíl od symbolické konstanty mají konstantní proměnné typ a překladač tak může provádět typovou kontrolu. #define PI 3.14159265 17/40

I. Zápis programu v C Funkce a modularita Hodnoty datových typů Standardní vstup a výstup 18/40

Standardní výstup příklad 1/4 3 #define PAGES 931 5 int main(void) 6 { 7 printf("*%d*\n", PAGES); 8 printf("*%2d*\n", PAGES); 9 printf("*%10d*\n", PAGES); 10 printf("*%-10d*\n", PAGES); lec03/printf-field.c user@machine:~/prpa/lec03$./printf-format *931* *931* * 931* *931 * 19/40

Standardní výstup příklad 2/4 5 const double RENT = 3852.99; 7 printf("*%f*\n", RENT); 8 printf("*%4.2f*\n", RENT); 9 printf("*%3.1f*\n", RENT); 10 printf("*%10.3f*\n", RENT); 11 printf("*%+4.2f*\n", RENT); 12 printf("*%010.2f*\n", RENT); lec03/printf-float.c user@machine:~/prpa/lec03$./printf-float *3852.990000* *3852.99* *3853.0* * 3852.990* *+3852.99* *0003852.99* 20/40

Standardní výstup příklad 3/4 1 #include <stdio.h> 3 int main(void) 4 { 5 printf("%x %X %#x\n", 31, 31, 31); 6 printf("*%d*% d*% d*\n", 42, 42, -42); 7 printf("*%5d*%5.3d*%05d*%05.3d*\n", 6, 6, 6, 6); 9 return 0; 10 } lec03/printf-format.c user@machine:~/prpa/lec03$./printf-format 1f 1F 0x1f *42* 42*-42* * 6* 006*00006* 006* 21/40

Standardní výstup příklad 4/4 3 #define STRING "Testovaci retezec!" 5 int main(void) 6 { 7 printf("*%2s*\n", STRING); 8 printf("*%24s*\n", STRING); 9 printf("*%24.5s*\n", STRING); 10 printf("*%-24.5s*\n", STRING); lec03/printf-format.c user@machine:~/prpa/lec03$./printf-string *Testovaci retezec!* * Testovaci retezec!* * Testo* *Testo * 22/40

Standardní vstup příklad int m,n; scanf("%d,%d", &m, &n); 88,121 88, 121 88, 121 scanf("%d,%d", &m, &n); 88,121 88,121 88, 121 protože scanf přeskakuje bílé znaky předcházející další položce vstupu (zde celému číslu), je možné za čárkou psát mezeru nebo enter koncept několik bíých znaků připouští i variantu žádný bílý znak Trochu jinak se scanf chová při použití specfifikátoru %s scanf("%c", &a); // načte znak včetně bílých scanf(" %c", &a); // načte první nebílý znak 23/40

Standardní vstup příklad 1 #include <stdio.h> 3 int main(void) 4 { 5 int n; 7 printf("napis tri cela cisla:\n"); 8 scanf("%*d %*d %d", &n); 9 printf("posledni cislo je %d\n", n); 11 return 0; 12 } lec03/scanf-skip.c Napis tri cela cisla: 3 4 5 Posledni cislo je 5 24/40

Část II Řídicí struktury 25/40

II. Řídicí struktury Řídicí struktury Větvení Cykly 26/40

Řídicí struktury Y Části programu, které předepisují způsob provedení dílčích příkazů Y Základní druhy řídících struktur Y posloupnost postupné provedení příkazů Y větvení provedení příkazů v případě splnění podmínky Y cyklus opakované provedení, dokud je splněna podmínka Y Budeme používat Y složený příkaz a blok pro posloupnost Y příkazy if a switch (přepínač) pro větvení Y příkazy while, do a for pro cyklus 27/40

Složený příkaz a blok Y Složený příkaz posloupnost příkazů { } // vymezení složeného příkazu složenými závorkami printf("no. of steps \%i\n", steps); Y Blok posloupnost definic proměnných a příkazů Y ovlivňuje rozsah platnosti proměnných Y pojmenovaný blok základ procedur a funkcí { int steps = 10; printf("no. of steps \%i\n", steps); } steps += 1; //nelze - mimo rozsah platnosti bloku Definice alokace paměti podle konkrétního typu proměnné. Rozsah platnosti proměnné je lokální v rámci bloku. 28/40

II. Řídicí struktury Řídicí struktury Větvení Cykly 29/40

Podmíněný příkaz if Y Umožňuje větvení programu na základě podmínky Y Má dva tvary: if (podminka) prikaz1 else prikaz2 if (podminka) prikaz Y podminka logický výraz, jehož hodnota je logického typu false (hodnota 0) nebo true (hodnota různá od 0) Y prikaz příkaz, složený příkaz nebo blok Příkaz je zakončen stredníkem ; Příklad varianty zápisu zjištění menší hodnoty z x a y: int min = y; if (x < y) min = x; int min = y; if (x < y) min = x; int min = y; if (x < y) { min = x; } 30/40

II. Řídicí struktury Řídicí struktury Větvení Cykly 31/40

Příkaz cyklu while Y Tvar příkazu while (podminka) prikaz Y Průběh cyklu 1. Vyhodnotí se výraz podminka 2. Pokud podminka!= 0, provede se příkaz prikaz, jinak cyklus končí 3. Opakování vyhodnocení výrazu prikaz Y Řídicí výraz Y vyhodnocení na začátku cyklu cyklus se nemusí provést ani jednou Y aktualizace v těle cyklu, jinak je cyklus nekonečný 32/40

Příkaz cyklu do - while Y Tvar příkazu do prikaz while (podminka); Y Průběh cyklu 1. Provede se příkaz prikaz 2. Vyhodnotí se výraz podminka 3. Pokud podminka!= 0, cyklus se opakuje Y Řídicí výraz Y vyhodnocení na konci cyklu cyklus se provede vždy alespoň jednou Y aktualizace v těle cyklu, jinak je cyklus nekonečný 33/40

Příkaz cyklu for Y Cyklus je často řízen proměnnou, pro kterou je stanoveno: Y jaká je počáteční hodnota Y jaká je koncová hodnota (podmínka pro provedení těla cyklu) Y jak změnit hodnotu proměnné po každém provedení těla cyklu Y Příklad: int f = 1; int i = 1; while (i<=n) { f = f*i; i = i+1; } // počáteční hodnota řídící proměnné // řídící výraz // tělo cyklu // změna řídící proměnné Cykly tohoto druhu lze zkráceně předepsat příkazem for: int f = 1; for (int i=1; i<=n; i=i+1) f=f*i; 34/40

Příkaz cyklu for Y Tvar příkazu for (inicializace; podminka; zmena) prikaz Y Odpovídá cyklu while ve tvaru: inicializace; while (podminka) { prikaz; zmena; } Příklad for (int i = 0; i < 10; ++i) { printf("i = %i\n", i); } Změnu řídicí proměnné lze zapsat operátorem inkrementace ++ nebo dekrementace --, lze též použít zkrácený zápis přiřazení, např. +=. 35/40

Příkaz cyklu for příklady Y Správný zápis for (i = 0; i < 10; i++) for ( ; a < 4.0; a += 0.2) for ( ; i < 10; ) for ( ; ; i++) /* Nekonecny cyklus */ for ( ; ; ) /* Nekonecny cyklus, ekv. while(1) */ Y Nesprávné použití for ( ) /* Chybi stredniky */ for (i = 1, i == x, i++) /* Carky misto stredniku */ for ( x < 4 ) /* Chybi stredniky */ 36/40

Část III Zadání domácího úkolu 37/40

Zadání 2. domácího úkolu (HW02) Téma: První cyklus Y Motivace: Automatické načítání vstupních dat Y Cíl: Využití cyklu jako základní programového konstrukce pro hromadné zpracování dat. Y Zadání: https://cw.fel.cvut.cz/wiki/courses/b0b99prpa/hw/hw02 Y Zpracování libovolně dlouhé posloupnosti celých čísel Y Výpis načtených čísel Y Výpis statistiky vstupních čísel Y Počet načtených čísel; Počet kladných a záporných čísel a jejich procentuální zastoupení na vstupu Y Četnosti výskytu sudých a lichých čísel a jejich procentuální zastoupení na vstupu Y Průměrná, maximální a minimální hodnota načtených čísel Y Termín odevzdání: 19.10.2019, 23:59:59 38/40

Shrnutí přednášky 39/40

Diskutovaná témata Y Programování v jazyce C Y Interakce s uživatelem Y Funkce Y Hodnoty proměnných Y Řidící struktury Y Větvení Y Cykly Y Příště: řidící struktury podrobněji 40/40

Diskutovaná témata Y Programování v jazyce C Y Interakce s uživatelem Y Funkce Y Hodnoty proměnných Y Řidící struktury Y Větvení Y Cykly Y Příště: řidící struktury podrobněji 40/40