390 likes | 648 Views
Počítače a programování 1. P řednáška 3 7 .10.2013 Jiří Šebesta. T ÉMA. Číselné soustavy Základní struktura programu Algoritmy Data a proměnné. Číselné soustavy (1/2). Používané soustavy :. Obecná definice vyjádření :. Číselné soustavy (2/2).
E N D
Počítače a programování 1 Přednáška 3 7.10.2013 Jiří Šebesta
TÉMA Číselné soustavy Základní struktura programu Algoritmy Data a proměnné
Číselné soustavy (1/2) Používané soustavy : Obecná definice vyjádření :
Číselné soustavy (2/2) Používají se symboly 0 – 9, pro soustavy se základem nad 10 se přidávají písmena z abecedy: např. pro hexadecimální soustavu: A = 10 B = 11 C = 12 D = 13 E = 14 F = 15 Příklad hexadecimálního vyjádření : Číslo 0x3CF0 reprezentuje hodnotu: 3 · 4096 + 12 · 256 + 15 · 16 = 15600
Základní struktura programu (1/10) Jak program v C vytváříme? Co je program? Jazyk symbolických adres = assembler = zčitelněný strojový (spustitelný) kód strojový (spustitelný) kód - instrukce (JSA) = operační kód - operandy (data, adresy)
Základní struktura programu (2/10) komentáře hlavička hlavní funkce //precompiled header files #include <stdio.h>//standard inputs/outputs int main(void) // header of main function { // body of main function char c; // variable declaration printf("ahoj"); // printing fuct. (stdio.h) scanf("%c", &c);//wait until key pressed(stdio.h) return 0; } tělo (definice) funkce vložené hlavičkové soubory knihoven deklarace proměnných volané knihovní funkce příkaz návratu z funkce s předáním návratové hodnoty (0)
Základní struktura programu (3/10) • KONZOLOVÁ APLIKACE (platformově nezávislá) – ANSI C/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 CodeLite (není třeba licence) Způsoby řešení aplikací v C/C++:
Základní struktura programu (4/10) nový projekt • Project otevřít už vytvořený projekt projekty pro jednočipy AVR 8 bitový ARM 32 bitový Code::Blocks – náš pracovní nástroj konzolová aplikace = textový výstup v DOS boxu
Nastavení jazyka překladače Základní struktura programu (5/10)
Nastavení jména projektu Základní struktura programu (6/10)
Nastavení kompilátoru Základní struktura programu (7/10) GNU – otevřený svobodný software (pakůň) GCC = GNU Compiler Collection
Debug verze vs. release verze Základní struktura programu (8/10) DEBUG – ladící verze – dokonalé ladění ale neoptimalizováno RELEASE – finální verze – optimalizovaný kód pro distribuci
ladění a spuštění aplikace – menu DEBUG Základní struktura programu (9/10) 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 krokuje v programu včetně vstupu do funkcí, předčasně lze funkci opustit Příklad: Ex01.c
Kde Code::Blocks stáhnout ?? Základní struktura programu (10/10) UŽITEČNÉ CZ WEBY:http://www.fit.vutbr.cz/~martinek/clang/ http://www.sallyx.org/sally/c/codeblocks/
Algoritmus definuje postup činností (operací) „programu“ nad daty Algoritmy (1/6) • 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)
Univerzálnost – algoritmus musí být schopen pracovat s požadovanou množinou dat v definovaném rozsahu Algoritmy (2/6) • 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)
Prostředky pro definicialgoritmu: Algoritmy (3/6) • 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í definova-ný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)
Vývojový diagram - značky: Algoritmy (4/6) Začátek/konec algoritmu Ruční vstup Zobrazení výstupu Běžný příkaz Zpracování souboru Podmíněné větvení Uložení dat do souboru Cyklus s určeným počtem opakování Podprogram Cyklus s podmínkou na konci Spojovací značka Cyklus s podmínkou na začátku Spojovací čára
Vývojový diagram - značky: Algoritmy (5/6) Pro program, který vypočítá kořeny libovolné kvadratické rovnice: ax2 + bx + c=0 Hodnoty koeficientů načtěte z konzolového okna. Vyjdou-li kořeny komplexní, vypište chybové hlášení.
Algoritmy (6/6) float a, b, c, y1, y2, r; printf("a =");scanf("%f", &a); printf("b ="); scanf("%f", &b); printf("c ="); scanf("%f", &c); getchar(); r = b*b-4*a*c; if(r>=0) { y1 = (-b+sqrt(fabs(r)))/(2*a); y2 = (-b-sqrt(fabs(r)))/(2*a); printf("\n 1st root: %.3f", y1); printf("\n 2nd root: %.3f", y2); } else printf("\nResult is not real"); Příklad:Ex02.c
Data – vstupní – I (Input), výstupní – O (Output) , pomocná (použité pro mezivýsledky algoritmu) Data a proměnné (1/15) • 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, 3D matice, …), ukazatel (odkaz na pozici v paměti), struktura (definovaná zapouzdřená množina proměnných různých typů)
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 Data a proměnné (2/15) // precompiled header files #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: %d\r\n ", a); printf("local: %d\r\n ", b); scanf("%c ", &c); return 0; } Příklad: Ex03.c
Numerické typy Data a proměnné (3/15)
Numerické typy bez desetinnéčárky pro celá čísla Data a proměnné (4/15) - bezznaménkové (unsigned) - uložení v paměti - znaménkové (signed) - uložení v paměti
Příklad pro unsigned char (8 bitů) Data a proměnné (5/15) • Příklad pro signed char (8 bitů) – standardní vyjádření
Doplňkové kódování • Příklad pro signed char (8 bitů) – doplňkové vyjádření Data a proměnné (6/15) • Od absolutní hodnoty kódo-vaného záporného čísla je ode-čtena jednička, číslo je převede-no do dvojkové soustavy a je provedena jeho negace. • Jednodušší hardware ALU
Numerické typy s desetinnou čárkou pro racionální čísla Data a proměnné (7/15) - uložení v paměti (obecně podle IEEE754 normy) S je hodnota znaménkového bitu E je binární hodnota v exponentu Mje binární hodnota v mantise
Numerické typy s desetinnou čárkou pro racionální čísla Data a proměnné (8/15) Float (4 byty) Double (8 bytů)
Float (4 byty) Data a proměnné (9/15)
Double (8 bytů) Data a proměnné (10/15)
Pole Data a proměnné (11/15) #include"stdio.h" int main( void) { int A[5] = {0, 1, 2, 3, 4}; int B[3][2] = {0, 1, 2, 3, 4, 5}; int i,j; char c; for( i=0; i<5; i++) printf("A[%d] = %d\r\n", i, A[i]); B[0][0] = A[4]; for(i=0; i<3; i++) { for( j=0; j<2; j++) printf("B[%d,%d] = %d\r\n", i, j, B[i][j]); } scanf("%c", &c); return 0; } Příklad: Ex04.c
Data a proměnné (12/15) • NTS (Null Terminated Strings) : posledním znakemnull – spec. znak v C/C++’\0’ • Složky pole:ukazatele na znaky Řetězec: pole znaků (v paměti: 1 byte/znak – kód ASCII)
Data a proměnné (13/15) Řetězec jako pole ASCII kódů znaků v paměti :
Data a proměnné (14/15) \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 ve všech verzích) \“ - znak uvozovka (ne ve všech verzích) \' - znak apostrof \\ - znak zpětného lomítka\ddd - znak ddd, kde ddd je ASCII kód znaku v oktalové soustavě \xhhh - znak hhh, kde hhh je ASCII kód znaku v hexadecimální soustavě Speciální znaky:
Typy proměnných – ukazatel(= adresa proměnné v paměti) Data a proměnné (15/15) #include <stdio.h> intmain(void) { float x = 3.14, y = 2.27; float* p; // address of float variable p = &x; // address of x to p *p = y; // content of y on address in p return 0; } Příklad: Ex05.c
TÉMA NÁSLEDUJÍCÍ PŘEDNÁŠKY Výrazy Aritmetické konverze Operátory Příkazyif-else a for DĚKUJI ZA POZORNOST