BPC 1 E Potae a programovn 1 pro

  • Slides: 45
Download presentation
BPC 1 E: Počítače a programování 1 pro obor EST PŘEDNÁŠKA 2 TÉMA a)

BPC 1 E: Počítače a programování 1 pro obor EST PŘEDNÁŠKA 2 TÉMA a) Základní struktura programu b) Algoritmy c) Data a proměnné d) Výrazy e) Aritmetické konverze f) Operátory g) Příkazy C - úvod Prezentace vznikla za podpory projektu: Komplexní inovace studijních programů a zvyšování kvality výuky na FEKT VUT v Brně OP VK CZ. 1. 07/2. 2. 00/28. 0193

Základní struktura programu (1/10) Co je program? Jak program v C vytváříme? Jazyk symbolických

Základní struktura programu (1/10) Co je program? Jak program v C vytváříme? Jazyk symbolických adres = assembler = “zčitelněný” strojový (spustitelný) kód - instrukce (JSA) = operační kód - operandy (data, adresy)

Základní struktura programu (2/10) vložené hlavičkové soubory knihoven hlavička hlavní funkce tělo (definice) funkce

Základní struktura programu (2/10) vložené hlavičkové soubory knihoven hlavička hlavní funkce tělo (definice) funkce //precompiled header files #include <stdio. h> //standard inputs/outputs int main(void) { char c; //header of main function //body of main function //variable declaration printf("ahoj"); //printing fnc. (stdio. h) scanf("%c", &c); //wait until key pressed (stdio. h) return 0; deklarace proměnných volané knihovní funkce komentáře } příkaz návratu z funkce s předáním návratové hodnoty (0)

Základní struktura programu (3/10) • Způsoby řešení aplikací v C: • KONZOLOVÁ APLIKACE (platformově

Základní struktura programu (3/10) • Způsoby řešení aplikací v C: • KONZOLOVÁ APLIKACE (platformově nezávislá) – ANSI C • APLIKACE PLATFORMOVĚ ZÁVISLÁ (pro konkrétní OS s využitím jeho funkcí, pro konkrétní kontrolér s využitím jeho konkrétních periferií) – rozsáhlé knihovní funkce, např. API, MFC, Active X • Integrovaná vývojová prostředí IDE – kompletní nástroje pro tvorbu aplikací + průvodci (Wizards) pro nastavení projektu, například v MS Visual Studiu – open sourcová prostředí, např. Code: : Blocks nebo Eclipse nebo Code. Lite (není třeba licence)

Základní struktura programu (4/10) • Code: : Blocks – naše pracovní IDE • Založení

Základní struktura programu (4/10) • Code: : Blocks – naše pracovní IDE • Založení nebo otevření projektu nový projekt otevřít už vytvořený projekty pro jednočipy AVR 8 bitový ARM 32 bitový konzolová aplikace = textový výstup v DOS boxu

Základní struktura programu (5/10) • Nastavení jazyka překladače (ANSI-C)

Základní struktura programu (5/10) • Nastavení jazyka překladače (ANSI-C)

Základní struktura programu (6/10) • Nastavení jména projektu

Základní struktura programu (6/10) • Nastavení jména projektu

Základní struktura programu (7/10) • Nastavení kompilátoru (GNU GCC) GNU – otevřený svobodný software

Základní struktura programu (7/10) • Nastavení kompilátoru (GNU GCC) GNU – otevřený svobodný software (pakůň) GCC = GNU Compiler Collection

Základní struktura programu (8/10) • Debug verze vs. release verze DEBUG – ladící verze

Základní struktura programu (8/10) • Debug verze vs. release verze DEBUG – ladící verze – dokonalé ladění ale neoptimalizováno RELEASE – finální verze – optimalizovaný kód pro distribuci

Základní struktura programu (9/10) • ladění a spuštění aplikace – menu DEBUG spustí ladění

Základní struktura programu (9/10) • ladění a spuštění aplikace – menu DEBUG spustí ladění zastavuje se na ladících zarážkách zastaví ladění (program se může zacyklovat) krokuje v programu podle zdrojáku bez vstupu do funkcí vložení ladící zarážky Příklad: BPC 1 E_Ex 01. c krokuje v programu včetně vstupu do funkcí, předčasně lze funkci opustit

Základní struktura programu (10/10) Kde Code: : Blocks stáhnout ? Co stáhnout ? codeblocksxx.

Základní struktura programu (10/10) Kde Code: : Blocks stáhnout ? Co stáhnout ? codeblocksxx. xxmingwsetup. exe - obsahuje již integrovaný GNU C kompilátor UŽITEČNÉ CZ WEBY: http: //www. fit. vutbr. cz/~martinek/clang/ http: //www. sallyx. org/sally/c/codeblocks/

Algoritmy (1/6) • Algoritmus – definuje postup činností (operací) „programu“ nad daty • Základní

Algoritmy (1/6) • Algoritmus – definuje postup činností (operací) „programu“ nad daty • Základní rysy algoritmu: Konečnost – algoritmus se skládá z jednotlivých kroků, jejichž počet musí být konečný Vstupy/výstupy – algoritmus musí mít definovaný jednoznačné vstupy a výstupy (data, např. soubor) Determinovanost – algoritmus musí být přesně a jasně definovaný Efektivita – algoritmus musí být efektivní a optimálně využívat možnosti systému, na kterém je prováděn (efektivita z hlediska výkonného času vs. efektivita z hlediska využití operační paměti, příp. velikosti kódu)

Algoritmy (2/6) Univerzálnost – algoritmus musí být schopen pracovat s požadovanou množinou dat v

Algoritmy (2/6) Univerzálnost – algoritmus musí být schopen pracovat s požadovanou množinou dat v definovaném rozsahu • Základní elementy algoritmu: • Proměnné • Začátek algoritmu • Konec algoritmu • Kroky algoritmu • Podprogramy • Podmínky (binární relace) • Rozhodování • Sekvence • Cykly • Skoky (minimalizovat – program ztrácí strukturalizaci)

Algoritmy (3/6) Prostředky pro definici algoritmu: • Slovní – přirozená forma: textový (myšlenkový) návod,

Algoritmy (3/6) Prostředky pro definici algoritmu: • Slovní – přirozená forma: textový (myšlenkový) návod, vyhláška, zákon – často nepřesná definice, pak převod do programovacího jazyka není možný • Grafický – vývojový diagram – přehledného znázornění složitějších algoritmů včetně větvení pomocí definovaných značek s popisem a orientovaných spojnic • Symbolický – popis algoritmu pomocí přesně definované syntaxe (klíčová slova programovacího jazyka, který bude využit; metajazyk – generativní gramatika)

Algoritmy (4/6) Vývojový diagram - značky: začátek/konec algoritmu ruční vstup běžný příkaz zobrazení výstupu

Algoritmy (4/6) Vývojový diagram - značky: začátek/konec algoritmu ruční vstup běžný příkaz zobrazení výstupu podmíněné větvení zpracování souboru uložení dat do souboru podprogram cyklus s určeným počtem opakování cyklus s podmínkou na konci cyklus s podmínkou na začátku spojovací značka spojovací čára (tok algoritmu)

Algoritmy (5/6) Příklad vývojového diagramu program, který vypočítá kořeny libovolné kvadratické rovnice: ax 2

Algoritmy (5/6) Příklad vývojového diagramu program, který vypočítá kořeny libovolné kvadratické rovnice: ax 2 + bx + c = 0 Hodnoty koeficientů nechť jsou načteny jako vstupy z klávesnice okna. Vyjdou-li kořeny komplexní, vypíše se chybové hlášení.

Algoritmy (6/6) float a, b, printf("a = printf("b = printf("c = getchar(); c, y

Algoritmy (6/6) float a, b, printf("a = printf("b = printf("c = getchar(); c, y 1, y 2, r; "); scanf("%f", &a); "); scanf("%f", &b); "); scanf("%f", &c); r = b*b-4*a*c; if(r>=0) { y 1 = (-b+sqrt(fabs(r)))/(2*a); y 2 = (-b-sqrt(fabs(r)))/(2*a); printf("n 1 st root: %. 3 f", y 1); printf("n 2 nd root: %. 3 f", y 2); } else printf("n Result is not real"); Příklad: BPC 1 E_Ex 02. c

Data a proměnné (1/8) • Data – vstupní – I (Input), výstupní – O

Data a proměnné (1/8) • Data – vstupní – I (Input), výstupní – O (Output), pomocná (použité pro mezivýsledky algoritmu) • Zdroje a cíle dat – soubor (I/O – binární, textový), klávesnice (I), konzola (O), tiskárna (O), komunikační brána (port) (I/O) – často jsou funkce pro práci se zdroji a cíli dat definovány jako funkce pro práci se souborem • Druhy dat (proměnných) – numerické (celá nebo racionální čísla), znaky a řetězce (řetězec je pole znaků zakončené znakem NULL), pole (jednorozměrná = vektory, vícerozměrná = matice, 3 D matice, …), ukazatel (odkaz na pozici v paměti), struktura (definovaná zapouzdřená množina proměnných různých typů)

Data a proměnné (2/8) • Proměnná = pojmenované místo v paměti s požadovanou velikostí

Data a proměnné (2/8) • Proměnná = pojmenované místo v paměti s požadovanou velikostí (v Bytech) – GLOBÁLNÍ – platí v celém programu – LOKÁLNÍ – platí jen v těle dané funkce #include <stdio. h> // standard inputs and outputs int a = 5; // global variable int main(void) // main function { int b = 10; // local variable char c; printf("global: %drn", a); printf("local: %drn", b); scanf("%c ", &c); return 0; } Příklad: BPC 1 E_Ex 03. c

Data a proměnné (3/8) • Numerické typy v ANSI-C • short int = stačí

Data a proměnné (3/8) • Numerické typy v ANSI-C • short int = stačí definovat jen jako short • V C 99 celočíselný typ long (8 B) v rozsahu <-263; 263 -1>

Data a proměnné (4/8) • Řetězec = pole znaků (typ char) kódovaných dle ASCII

Data a proměnné (4/8) • Řetězec = pole znaků (typ char) kódovaných dle ASCII zakončené znakem NULL • Řetězec se zapisuje do uvozovek: "toto je retezec" znak NULL se dosadí automaticky • Znak = typ char, znak se zapisuje do apostrofů: ’a’, tím se do dané proměnné vloží ASCII hodnota tohoto znaku • Speciální znaky: b - backspace BS f - form feed FF (také clear screen) n - new line NL r - carriage return CR t - horizontal tab HT v - vertical tab (ne všechny verze) “ - znak uvozovka (ne všechny verze) ' - znak apostrof \ - znak zpětného lomítka ddd - znak ddd, kde ddd je ASCII kód znaku v okt. soustavě xhh - znak hh, kde hh je ASCII kód znaku v hex. soustavě

Data a proměnné (5/8) • Pole int main(void) { int A[5] = {0, 2,

Data a proměnné (5/8) • Pole int main(void) { int A[5] = {0, 2, 5, 7, 9}; int B[3][2] = {0, 4, 6, 9, 7, 1}; int i, j; char c; for(i=0; i<5; i++) printf("A[%d] = %drn", i, A[i]); B[0][0] = A[4]; for(i=0; i<3; i++) { for(j=0; j<2; j++) printf("B[%d, %d] = %drn", i, j, B[i][j]); } return 0; } Příklad: BPC 1 E_Ex 04. c

Data a proměnné (6/8) • Tisková funkce printf() (z knihovny stdio. h) int printf(const

Data a proměnné (6/8) • Tisková funkce printf() (z knihovny stdio. h) int printf(const char* format, …) Zapíše formátovaný řetězec na standardní výstup Řetězec format obsahuje příslušný text v uvozovkách jako konstantní řetězec s speciálními znaky pro dosazovaní hodnot proměnných (a konstant): %d nebo %i – celočíselné dekadické vyjádření %o – celočíselné oktalové vyjádření %x – celočíselné hexadecimální vyjádření %f – vyjádření racionálního čísla %e – vyjádření racionálního čísla ve tvaru mantisa + exponent %c – znak (proměnná nebo konstanta nese ASCII kód znaku)

Data a proměnné (7/8) Speciální znaky mohou obsahovat modifikátory, obecně: %[flags][width][. precision][length]specifier Např. kód:

Data a proměnné (7/8) Speciální znaky mohou obsahovat modifikátory, obecně: %[flags][width][. precision][length]specifier Např. kód: printf("Characters: %c %c n", 'a', 65); printf("Decimal: %d n", 500); printf("Floats: %4. 2 f %+. 0 e %E n", 3. 1416, 3. 1416); má výstup: Characters: a A Decimal: 500 Floats: 3. 14 +3 e+000 3. 141600 E+000

Data a proměnné (8/8) • Ukazatel (= adresa proměnné v paměti) #include <stdio. h>

Data a proměnné (8/8) • Ukazatel (= adresa proměnné v paměti) #include <stdio. h> int main(void) { float x = 3. 14, y = 2. 27; float* p; // address of float variable p = &x; *p = y; // address of x to p // content of y on address in p return 0; } Příklad: BPC 1 E_Ex 05. c

Výrazy (1/3) • Výraz: – konstrukce sloužící k výpočtu hodnot – sestavujeme z operandů

Výrazy (1/3) • Výraz: – konstrukce sloužící k výpočtu hodnot – sestavujeme z operandů a operátorů • Operand: – proměnná, konstanta nebo volání funkce, která vrací hodnotu • Operátor: – symbol definující aritmetickou, logickou, přiřazovací, relační a další operaci nad operandy

Výrazy (2/3) • Operandy jako proměnné int main(void) { int y 1, y 2,

Výrazy (2/3) • Operandy jako proměnné int main(void) { int y 1, y 2, a=10, b=6; char c; y 1 = a + b; y 2 = a / b; // // a, b +, / are operands are operators printf("%3 dn", y 1); printf("%3 dn", y 2); scanf("%c", &c); return 0; } Příklad: BPC 1 E_Ex 06. c + BPC 1 E_Ex 07. c

Výrazy (3/3) • Operand jako návratová hodnota po volání funkce. . . #include "math.

Výrazy (3/3) • Operand jako návratová hodnota po volání funkce. . . #include "math. h" // library for math. functions int main(void) { double y, x=10000. 2501; char c; y = sqrt(x); printf("Square root of %10. 4 f is %10. 8 fn", x, y); scanf("%c", &c); return 0; } Příklad: BPC 1 E_Ex 08. c

Aritmetické konverze (1/2) V ANSI-C při zpracování výrazu platí: • Všechny operandy typu …

Aritmetické konverze (1/2) V ANSI-C při zpracování výrazu platí: • Všechny operandy typu … – … char, short převedeny na int – … float převedeny na double • Je-li jeden z operandů typu … – … double , druhý převeden též na double – … long , druhý převeden též na long – … unsigned, druhý převeden též na unsigned

Aritmetické konverze (2/2) • Příklad aritmetických konverzí int float char a b c d

Aritmetické konverze (2/2) • Příklad aritmetických konverzí int float char a b c d e = = = a, b, c; d, e; f = 'A'; 3/5; 3/5. 0; f+1; 3/5. 0; // // // {int} = {float} printf("%3 dn", a); printf("%3 dn", b); printf("%3 dn", c); printf("%6. 2 fn", d); printf("%6. 2 fn", e); Příklad: BPC 1 E_Ex 09. c // // // {int}/{int}/{float} {char->int}+{int} = {int}/{float} 0 0 66 (ASCII of 'A' is 65) 0. 00 0. 60

Operátory (1/10) • Unární (jediný operand): – změna znaménka; – logická negace; – atd.

Operátory (1/10) • Unární (jediný operand): – změna znaménka; – logická negace; – atd. int a=1, b=6; a = -a; // changing sign b = !b; // negation printf("%3 dn", a); //-1 printf("%3 dn", b); //0 • Binární (dva operandy): – aritmetické (sčítání, odčítání, násobení, dělení); int a=1, b=6, c, d, e; – logické (and, or, xor, …); – relační (>, , ==, , <, , …); cd == a<=b; a!=b; // not equal – přiřazovací (=, …). e = a==b; printf("%3 dn", c); //1 printf("%3 dn", d); //1 printf("%3 dn", e); //0 Příklad: BPC 1 E_Ex 10. c + BPC 1 E_Ex 11. c

Operátory (2/10) • Aritmetické

Operátory (2/10) • Aritmetické

Operátory (3/10) • Příklad: priorita aritmetických operátorů (vyšší hodnota priority = nižší priorita) int

Operátory (3/10) • Příklad: priorita aritmetických operátorů (vyšší hodnota priority = nižší priorita) int a = 3, b = 12, c = 7; int x, y, z; x = -a + b % c; y = -(a + b) % c; z = (-a + b) % c; printf("%3 dn", x); printf("%3 dn", y); printf("%3 dn", z); Příklad: BPC 1 E_Ex 12. c //-3 + (12 % 7) = -3 + 5 = 2 //-(3 + 12) % 7 = -15 % 7 = -1 //(-3 + 12) % 7 = 9 % 7 = 2

Operátory (4/10) • Relační int a = 1, b = 6, c, d, e;

Operátory (4/10) • Relační int a = 1, b = 6, c, d, e; c = a <= b; d = a != b; e = a == b; //a is smaller or equals b, c = 1 //a does not equal b, d = 1 //a equals b, e = 0 Příklad: BPC 1 E_Ex 13. c

Operátory (5/10) • výsledkem relačního operátoru je 0 = nepravda nebo 1 = pravda

Operátory (5/10) • výsledkem relačního operátoru je 0 = nepravda nebo 1 = pravda • relační operátory lze využít ve složených výrazech pro testování složitých podmínek int a = 3, b = 12, c = 7; x = a + b == c; //(3 + 12) == 7 => x = 0 y = a + (b == c); //3 + (12 == 7) = 3 + 0 => y = 3 z = a <= b + c != a; //(3 <= (12 + 7)) != 3 = //(3 <= 19) != 3 => z = 1; Příklad: BPC 1 E_ Ex 14. c

Operátory (7/10) • Bitové int b = 12, c = 7; x = b

Operátory (7/10) • Bitové int b = 12, c = 7; x = b >> 2; //1100 b => 0011 b = 3 y = b & c; //1100 b & 0111 b = 0100 b = 4 z = b ^ c; //1100 b ^ 0111 b = 1011 b = 11 Příklad: BPC 1 E_Ex 16. c

Operátory (8/10) • Pravdivostní tabulka pro bitové operátory

Operátory (8/10) • Pravdivostní tabulka pro bitové operátory

Operátory (9/10) • Inkrementace / dekrementace double r 1, r 2, a 1 =

Operátory (9/10) • Inkrementace / dekrementace double r 1, r 2, a 1 = 5. 1, a 2 = 5. 1, b = 4. 2; r 1 = a 1++ + b; r 2 = ++a 2 + b; //5. 1+4. 2=9. 3 //1+5. 1+4. 2=10. 3 printf("%6. 2 fn", a 1); r 1); a 2); r 2); Inkrementace, dekrementace: priorita = 2 Příklad: BPC 1 E_Ex 17. c

Operátory (10/10) • Přiřazovací double r 1=2. 2, r 2=3. 3, a 1=4. 4,

Operátory (10/10) • Přiřazovací double r 1=2. 2, r 2=3. 3, a 1=4. 4, a 2=5. 5; int s 1=4, s 2=4; r 1 += a 2 -a 1; r 2 /= a 2 -a 1; // r 1=r 1+(a 2 -a 1) = 3. 3 // r 2=r 2/(a 2 -a 1) = 3. 0 printf("%6. 2 fn", r 1); printf("%6. 2 fn", r 2); s 1 <<= 2; s 2 >>= 2; // 00000100 b => 00010000 b => 16 d // 00000100 b => 00000001 b => 1 d printf("%3 dn", s 1); printf("%3 dn", s 2); Příklad: BPC 1 E_Ex 18. c

Příkazy C – úvod (1/4) • Program: posloupnost příkazů (vč. příkazů, výrazů, a volání

Příkazy C – úvod (1/4) • Program: posloupnost příkazů (vč. příkazů, výrazů, a volání funkcí) • Pokud příkaz – nepřenese řízení do jiné části programu – nezpůsobí přerušení programu (interrupt) jsou příkazy vykonávány sekvenčně (za sebou) • Příkaz standardní (ANSII C): uvozen rezervovaným slovem (např. for, if, else) • pozn. rezervovaná slova jsou v Code: : Blocks modře, nelze je používat jako jména proměnných

Příkazy C – úvod (2/4) • Prázdný příkaz if(err) goto lab 1; // in

Příkazy C – úvod (2/4) • Prázdný příkaz if(err) goto lab 1; // in case of error go to lab 1 c++; // otherwise increment lab 1: ; // label and empty command • Stejný význam jako prázdný příkaz má prázdný blok { } • Výrazový příkaz: – přiřazení – volání funkcí – atd.

Příkazy C – úvod (3/4) • Výrazový příkaz - příklad C++; A=cos(b)+c; • Složený

Příkazy C – úvod (3/4) • Výrazový příkaz - příklad C++; A=cos(b)+c; • Složený příkaz: – posloupnost příkazů uzavřená do složených závorek – může obsahovat další složený příkaz: vnořený blok nadřazený blok

Příkazy C – úvod (4/4) • Složený příkaz - příklad int main(void) { char

Příkazy C – úvod (4/4) • Složený příkaz - příklad int main(void) { char text[40]="The momentary laps of. . . "; int n, conv=0; for(n=0; n<strlen(text); n++) { if(text[n]==' ') { text[n+1] = text[n+1]-32; conv++; } } printf("Mod. : %s (%d changed)", text, conv); getchar(); return 0; }

DĚKUJI ZA POZORNOST Téma následující přednášky – Příkazy pro větvení – Příkazy pro cykly

DĚKUJI ZA POZORNOST Téma následující přednášky – Příkazy pro větvení – Příkazy pro cykly