Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
IB001 – Úvod do programování skrze C
RNDr. Jaroslav PELIKÁN, Ph.D. katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Botanická 68a, BRNO kanc.: A209, : +420 –
2
Cíl předmětu Seznámit studenty se základními principy používanými při řešení problémů na počítači Předmět je vyučován s pomocí programova-cího jazyka C Na konci tohoto předmětu bude student scho-pen: navrhnout algoritmus řešící zadaný problém zapsat algoritmus v programovacím jazyce C provést odladění programu 13/04/2017
3
Organizace předmětu 1 přednáška: 24 cvičebních skupin:
2 hodiny týdně 24 cvičebních skupin: Zakončení předmětu: zkouška zápočet 13/04/2017
4
Požadavky ke zkoušce (1)
Zápočet: získat minimálně 30 bodů ze cvičení úspěšné napsání dvou průběžných písemek: probíhá v počítačové učebně napsání programu (na počítači), který řeší zadaný problém čas na vypracování: u každé písemky cca 50 minut maximální počet bodů: za 1. písemku: 25 bodů (nutno získat min. 12 bodů) za 2. písemku: 35 bodů (nutno získat min. 18 bodů) hodnocení z průběžných písemek se započítává do výsledného (celkového) hodnocení zkoušky 13/04/2017
5
Požadavky ke zkoušce (2)
čtyři domácí úkoly (napsání čtyř programů): na odevzdání úkolu je jeden týden na každý domácí úkol je jeden opravný termín (další týden) jestliže student na opravný termín odevzdá (opět) program, ve kterém jsou chyby, pak se mu odečítají body: podle závažnosti chyb v rozmezí –1 až – 4 body při neodevzdání domácího úkolu nebo odevzdání úplně špatného domácího úkolu se odečítá – 6 odečítané body za chybné domácí úkoly se započítá-vají do požadovaných 30 bodů na udělení zápočtu a do výsledného (celkového) hodnocení zkoušky 13/04/2017
6
Požadavky ke zkoušce (3)
poznámka: cvičící může zadat mimořádné domácí úkoly (max. 4) umožňují studentům doplnit si bodovou ztrátu z chybných domácích úkolů (nikoliv z průběžných písemek) za takto vypracovaný domácí úkol může získat: 1 bod za vyhovující řešení 0 bodů za nevyhovující řešení maximálně dvě neomluvené neúčasti na cvičení Zápočet musí být zapsán na ISu nejpozději 12 hodin před začátkem závěrečné zkoušky 13/04/2017
7
Požadavky ke zkoušce (4)
Poznámka: v průběhu semestru je možné využít jednoho opravného termínu průběžné písemky opravný termín bude na konci výukového období, popř. začátkem zkouškového období v rámci opravného termínu je možné, aby si student opravil bodové hodnocení z jedné své průběžné písemky 13/04/2017
8
Zkouška Závěrečná zkouška probíhá pouze písemnou formou (bez počítačů)
Čas na vypracování: 60 minut Maximální počet bodů: 40 bodů Výsledné hodnocení: dáno součtem bodů ze cvičení a závěrečné zkoušky: A: 92 – 100 bodů D: 65 – 73 bodů B: 83 – 91 bodů E: 56 – 64 bodů C: 74 – 82 bodů F: méně než 56 bodů 13/04/2017
9
Literatura Pelikán, Jaroslav: Prezentace k přednáškám z předmětu IB001 Úvod do programování skrze C – Herout, Pavel: Učebnice jazyka C, KOPP, České Budějovice 1994 Kernighan, Brian W. – Ritchie, Dennis M.: Programovací jazyk C, Computer Press, Brno 2006 Harbison, Samuel P. – Steele, Guy L. Jr.: Referenční příručka jazyka C, SCIENCE 1996 13/04/2017
10
Programovací jazyk Prostředek (soubor pravidel) pro zápis algo-ritmů, které mohou být provedeny na počítači Komunikační nástroj mezi programátorem a počítačem Zápis algoritmu ve zvoleném programovacím jazyce se nazývá program Příklady programovacích jazyků: C, C++, C#, Pascal, BASIC, Java, Prolog, Lisp 13/04/2017
11
Programovací jazyky – historie
Strojový kód Jazyk symbolických instrukcí – Assembler vědeckotechnické výpočty FORTRAN, COBOL, ALGOL hromadné zpracování dat SIMULA, SIMSCRIPT, LISP PL/1, ADA, Prolog, C/C++, C#, Pascal, Java 13/04/2017
12
Programovací jazyk C (1)
Univerzální programovací jazyk Není specializován pro žádnou konkrétní oblast Nejedná se o „jazyk vysoké úrovně“: pracuje přímo pouze se základními datovými typy (např. znaky, celá čísla, reálná čísla) neumožňuje přímo práci s řetězci a poli neobsahuje přímo nástroje pro vstupy a výstupy zmíněné akce (práce s řetězci, poli, vstupy a výstu-py) je nutné provádět pomocí volání funkcí 13/04/2017
13
Programovací jazyk C (2)
Jeho obecnost jej dělají vhodnějším a efektiv-nějším pro většinu úloh, než jiné jazyky Jazyk C se vyznačuje: úspornými výrazy standardizací řídících struktur, které vedou k vy-tváření dobře strukturovaných a čitelných progra-mů moderními datovými strukturami bohatou množinou operátorů Není vázán na konkrétní typ počítače ani na určitý operační systém 13/04/2017
14
Historie jazyka C (1) 1969 – 1973: 1973: 1978:
Dennis M. Ritchie, AT&T Bell Labs počáteční vývoj jazyka C předchůdci jazyka C: ALGOL, CPL, BCPL, B 1973: většina zdrojového kódu operačního systému UNIX byla přepsána do jazyka C 1978: Dennis M. Ritchie a Brian W. Kernighan vydáva-jí knihu The C Programming Language (K&R) 13/04/2017
15
Historie jazyka C (2) tato kniha sloužila jako první standard jazyka C popsaná verze jazyka C bývá označována jako K&R C 1983: American National Standards Institute (ANSI) sestavuje komisi X3J11 s úkolem vytvořit stan-dardní specifikaci jazyka C 1989: standard dokončen a schválen pod označením ANSI X „Programming Language C“ zmíněný standard bývá označován jako ANSI C, Standard C nebo C89 13/04/2017
16
Historie jazyka C (3) 1990: 1999: 2011:
standard ANSI C (s drobnými změnami) byl při-jat institucí International Organization for Stan-dardization (ISO) jako ISO/IEC 9899:1990 zmíněný standard se rovněž označuje jako C90 1999: vydán dokument ISO 9899:1999 (nazývaný také C99), který byl v roce 2000 přijat i jako ANSI standard 2011: vydán dokument ISO 9899:2011 (nazývaný také C11) 13/04/2017
17
„Životopis“ programu Systémové knihovny *.so, *.a, *.lib Editor
Objektové soubory *.o, *.obj Hlavičkové soubory *.h Zdrojový kód Sestavovací program linker *.c *.h Preprocesor Spustitelný program *.exe Překladač compiler Spuštění, ladění ladící program – debugger 13/04/2017
18
Preprocesor (1) Program, který zpracovává (upravuje) vstupní data tak, aby výstup mohl být dále zpracovaný jiným programem Často používán pro předzpracování zdrojové-ho kódu před vlastním překladem (kompilací) Preprocesor jazyka C: pracuje na základě svých direktiv (příkazů) zapsa-ných ve zdrojovém kódu za direktivu preprocesoru je považován každý řá-dek začínající znakem # 13/04/2017
19
Preprocesor (2) za znakem # musí následovat název direktivy
mezi operace prováděné preprocesorem jazyka C patří např.: vložení hlavičkových souborů (#include) rozvoj maker (#define) odstranění částí zdrojového kódu, které (v závislosti na vyhodnocených podmínkách) nemají být aktuálně pře-kládány – podmíněný překlad (#if, #else, #endif, #elif, #ifdef, #ifndef) případné odstranění komentářů výsledkem práce preprocesoru jazyka C je opět textový soubor 13/04/2017
20
Překladač – compiler Program realizující překlad zdrojového sou-boru (zpracovaného již preprocesorem) do objektového (relativního) kódu počítače Vzniká soubor *.o nebo *.obj V objektovém kódu ještě nejsou známy adresy proměnných a funkcí, které se nacházejí v knihovních modulech 13/04/2017
21
Sestavovací program – linker
Program provádějící propojení objektových kódů s knihovními moduly V průběhu sestavování jsou nalezeny dosud neznámé adresy proměnných a funkcí a odpo-vídající knihovní moduly jsou připojeny k vý-slednému programu Výsledkem činnosti sestavovacího programu je spustitelný soubor ve strojovém kódu (*.exe), popř. knihovna, která bude později využívána jiným programem 13/04/2017
22
Ladící program – debugger
Program sloužící pro ladění (nalézání) chyb, které nastávají při běhu programu Umožňuje např.: postupné provádění programu po jednotlivých řádcích, tzv. krokování sledování hodnot, kterých nabývají použité pro-měnné přerušení běhu programu na předem definovaném řádku (vložení breakpointu) a následné zahájení krokování 13/04/2017
23
Programovací jazyk C v IB001 (1)
Vývojové prostředí Code::Blocks: zaměřené na jazyky C a C++ existují verze pro operační systémy MS Windows, Linux a Mac OS X podporuje využití různých překladačů, např.: GCC/MinGW, MS Visual C++, Watcom, … dovoluje spolupráci s debuggerem GDB textový editor umožňuje např.: zvýrazňování syntaxe dokončování kódu skrývání částí kódu 13/04/2017
24
Programovací jazyk C v IB001 (2)
možnosti Code::Blocks lze dále rozšířit pomocí zásuvných modulů – plug-ins codeblocks-13.12mingw-setup.exe (cca 98 MB) obsahuje i překladač GCC a debugger GDB z MingGW MinGW – Minimalist GNU for Windows: distribuce poskytující sadu nástrojů vhodnou pro vývoj aplikací pro MS Windows 13/04/2017
25
Základní pojmy (1) Identifikátor:
konečná posloupnost písmen (anglické abecedy), číslic a znaku podtržítko nesmí: začínat číslicí obsahovat mezeru být shodný s klíčovým (rezervovaným) slovem název volíme mnemonicky např.: teplota, tlak, x1, x2, … 13/04/2017
26
Základní pojmy (2) Klíčová (rezervovaná) slova:
slova mající v programovacím jazyce svůj speciální význam identifikátor nesmí být pojmenovaný stejně jako klíčové slovo neobsahují mezeru např: while, if, else, do, switch, … 13/04/2017
27
Základní pojmy (3) Řetězcový literál (řetězcová konstanta):
posloupnost znaků uzavřená do uvozovek (”) může obsahovat mezery a znaky národních abeced může obsahovat řídící posloupnosti, které jsou uvozené znakem \, např.: \n přechod na nový řádek \t horizontální tabulátor \\ zpětné lomítko \” uvozovky \xhh kde hh označuje číslo v šestnáctkové soustavě požadovaného znaku \ooo kde ooo označuje číslo v osmičkové soustavě požadovaného znaku 13/04/2017
28
Poznámka Dva sousedící identifikátory, klíčová slova nebo čísla musí být od sebe oddělena ales-poň jednou: mezerou tabulátorem znakem konce řádku komentářem (překladač jej nahrazuje mezerou) Přebytečné mezery, tabulátory a znaky kon-ce řádků jsou překladačem ignorovány Jazyk C rozlišuje velká a malá písmena (case sensitive) 13/04/2017
29
Komentáře Poznámky, které jsou překladačem ignoro-vány
Nemají žádný vliv na funkci programu Slouží k lepší čitelnosti (lepšímu pochope-ní) programu Zapisují se: mezi znaky /*, */ za znaky // až ve standardu C99 nebo C++ za poznámku jsou považovány všechny znaky až do konce řádku 13/04/2017
30
Program v jazyce C (1) Na nejvyšší úrovni se skládá z:
direktiv preprocesoru: řádek začínající znakem # globálních deklarací a definic funkcí Jedna z funkcí se vždy jmenuje main: musí být v programu vždy uvedena volána jako první po spuštění programu 13/04/2017
31
Program v jazyce C (2) Funkce je tvořena:
hlavičkou, která specifikuje: viditelnost funkce vně souboru, ve kterém je defino-vána návratový typ – typ hodnoty, kterou funkce vrací jméno funkce seznam (typ a počet) formálních parametrů, pomocí nichž funkce může komunikovat se svým okolím tělem funkce, které obsahuje: lokální deklarace a definice posloupnost příkazů, která bude po vyvolání funkce provedena 13/04/2017
32
Program v jazyce C (3) Poznámky:
příkazy jsou prováděny postupně ve stejném pořadí, v jakém jsou zapsány všechny příkazy v jazyce C jsou ukončeny středníkem – středník je nedílnou součástí příkazu výjimku tvoří složený příkaz, který se střední-kem neukončuje 13/04/2017
33
Struktura programu v jazyce C (1)
/* Vložení hlavičkových souborů */ #include <soubor.h> /* Globální deklarace a definice */ návratový_typ jmFunkce(seznam formálních parametrů) { /* Tělo funkce jmFunkce */ } int main(seznam formálních parametrů) /* Tělo funkce main */ Hlavička funkce 13/04/2017
34
Struktura programu v jazyce C (2)
#include <soubor.h>: direktiva preprocesoru zabezpečí vložení hlavičkového souboru soubor.h do zdrojového kódu hlavičkové soubory mimo jiné popisují tzv. prototypy (deklarace) funkcí prototyp funkce: deklaruje funkci před jejím použitím a před tím, než je definována tvořen hlavičkou funkce, za níž následuje středník pro správné vyvolání funkce je zapotřebí, aby překla-dač znal informace uvedené v její hlavičce 13/04/2017
35
Struktura programu v jazyce C (3)
návratový_typ: udává typ hodnoty, kterou funkce vrací jestliže funkce nevrací žádnou hodnotu, pak by návratovým typem měl být typ void void: představuje prázdný datový typ používá se pro: označení funkcí, které nevracejí žádnou hodnotu označení prázdného seznamu formálních parametrů vytváření obecného ukazatele 13/04/2017
36
Struktura programu v jazyce C (4)
jmFunkce: identifikátor specifikující jednoznačné jméno funkce následně se používá pro její vyvolání seznam formálních parametrů: slouží k předání vstupních hodnot funkci je-li prázdný, měl by být použitý typ void 13/04/2017
37
Struktura programu v jazyce C (5)
Funkce main: každý spustitelný program musí obsahovat právě jednu funkci main volána jako první po spuštění programu návratový typ by měl být vždy int (celé číslo) konvence: jestliže program skončí bezchybně, pak by funkce main měla vracet hodnotu 0 v případě chybového stavu by měla vracet celočísel-nou hodnotu v rozmezí 1 až 255 13/04/2017
38
Struktura programu v jazyce C (6)
seznam formálních parametrů může být využitý pro předání vstupních hodnot z příkazové řádky operačního systému 13/04/2017
39
Příkaz return (1) Používán k ukončení právě probíhající funkce
Pomocí příkazu return je možné, aby fun-kce vrátila svou hodnotu Obecný tvar: return výraz; Funkce: způsobí ukončení právě prováděné funkce řízení se předá na místo bezprostředně následující za voláním funkce výraz se vyhodnotí a výsledná hodnota je funkcí vrácena není-li uveden výraz, pak funkce nevrací žádnou hodnotu 13/04/2017
40
Příkaz return (2) Poznámka:
jestliže program dosáhne konce těla funkce, aniž by byl proveden příkaz return, pak je výsledek stejný, jako by se provedl return neobsahující žádný výraz 13/04/2017
41
Funkce výstupu (1) Funkce puts: deklarována v: stdio.h
prototyp: int puts(const char *s); funkce: vypíše řetězec s na standardní výstup (obrazovka monitoru) a provede odřádkování vrácená hodnota: při úspěšném výpisu vrací nezápornou hodnotu při neúspěšném výpisu vrací hodnotu EOF (-1) 13/04/2017
42
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
prototyp: int printf(const char *format,…); funkce: vypíše na standardní výstup posloupnost dat specifikova-nou parametrem format za parametrem format očekává alespoň tolik dalších argumentů, kolik je specifikováno parametrem format vrácená hodnota: při úspěšném výpisu vrací počet vypsaných znaků při neúspěšném výpisu vrací záporné číslo 13/04/2017
43
Funkce výstupu (3) Formátovací značka: parametr format: obecný tvar:
řetězec obsahující text, který se má vypsat může obsahovat formátovací značky, za něž jsou do-sazeny a podle nichž jsou odpovídajícím způsobem formátovány hodnoty uvedené v následujících argu-mentech Formátovací značka: obecný tvar: %[příznaky][šířka][.přesnost][délka]specifikátor šířka: určuje minimální šířku pole pro výpis argumentu argument s méně znaky bude zleva, popř. zprava doplněn výplňovými znaky (obvykle mezera) 13/04/2017
44
Funkce výstupu (4) přesnost:
u reálných čísel určuje počet číslic, které budou vypsány za desetinnou čárkou (implicitně 6) příklady specifikátorů pro výpis číselných hodnot: d, i celé číslo se znaménkem v desítkové soustavě o celé číslo bez znaménka v osmičkové soustavě x, X celé číslo bez znaménka v šestnáctkové soustavě u celé číslo bez znaménka v desítkové soustavě f reálné číslo v desítkové soustavě počet desetinných míst je dán částí přesnost e, E reálné číslo v desítkové soustavě v semilogarit- mickém (exponenciálním) tvaru počet desetinných míst je dán částí přesnost % vypíše znak % 13/04/2017
45
Úprava programu Znaky { a } psát pod sebe
Příkazy mezi { a } odsadit o dvě až čtyři me-zery Středník psát bezprostředně za příkaz Záhlaví programu opatřit komentářem, který obsahuje zadání problému, jehož řešení pro-gram představuje 13/04/2017
46
Konstanty (1) Pevně dané hodnoty určitého typu (např. číslo):
čísla v jazyce C: celá (int): 264, –1, 8765 reálná (double): , – , 1.0, E–5, 1.2E3 Pojmenované konstanty: lze definovat pomocí direktivy preprocesoru obecný tvar: #define IDENTIFIKÁTOR hodnota např: #define PI 13/04/2017
47
Konstanty (2) takto definované konstanty nemají specifikovaný datový typ preprocesor provede textové nahrazení všech výsky-tů identifikátoru IDENTIFIKÁTOR hodnotou hodnota poznámka – konvence: identifikátory za direktivou #define zapisovat vždy velkými písmeny 13/04/2017
48
Výrazy (1) Tvořeny pomocí operátorů a operandů
Příklady aritmetických operátorů: + součet – rozdíl * součin / podíl (reálný i celočíselný) % zbytek po celočíselném dělení Při vyhodnocování je respektována běžná prio-rita operátorů (podobně jako v matematice) Změnu priority operátorů je možné provést pomocí kulatých závorek – (, ) 13/04/2017
49
Výrazy (2) Příklady operandů: Příklady výrazů: konstanty
pojmenované konstanty proměnné volání funkcí: funkce je vyhodnocena a výsledná hodnota je použita jako operand Příklady výrazů: 20+30*5–8/2 2*sin(PI/2)+6 4*(2+5)*( ) 13/04/2017
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.