37
M1160 – Úvod do programování I RNDr. Jaroslav PELIKÁN, Ph.D. katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Botanická 68a, 602 00 BRNO kanc.: A209, : +420 – 549 495 751 E-mail: [email protected] http://www.fi.muni.cz/usr/pelikan

M1160 – Úvod do programování I

  • Upload
    fiona

  • View
    48

  • Download
    1

Embed Size (px)

DESCRIPTION

M1160 – Úvod do programování I. RNDr. Jaroslav PELIKÁN, Ph.D . katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Šumavská 15, 602 00 BRNO kanc.: G409,  : +420 – 54 9 495 751 E-mail: [email protected] http://www.fi.muni.cz/usr/pelikan. - PowerPoint PPT Presentation

Citation preview

Page 1: M1160 – Úvod do programování I

M1160 – Úvod do programování I

RNDr. Jaroslav PELIKÁN, Ph.D.

katedra počítačových systémů a komunikacíFakulta informatiky Masarykovy univerzity

Botanická 68a, 602 00 BRNO

kanc.: A209, : +420 – 549 495 751E-mail: [email protected]

http://www.fi.muni.cz/usr/pelikan

Page 2: M1160 – Úvod do programování I

23-04-24 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

Page 3: M1160 – Úvod do programování I

23-04-24 3

Organizace předmětu• 1 přednáška:

– 2 hodiny týdně• 3 cvičební skupiny:

– 2 hodiny týdně• Zakončení předmětu:

– kolokvium• Předmět pokračuje v jarním semestru před-

náškou M2160 Úvod do programování II

Page 4: M1160 – Úvod do programování I

23-04-24 4

Požadavky ke kolokviu• Zápočet:

– „úspěšné“ napsání průběžných písemek– splnění všech domácích úkolů (v termínu)– 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 kolokvia

• Kolokvium probíhá ve dvou částech:– vypracování programu (na počítači): 90 minut– diskuse nad řešeným problémem + další otázky

Page 5: M1160 – Úvod do programování I

23-04-24 5

Literatura• Pelikán, Jaroslav: Prezentace k přednáškám

z předmětu M1160 Úvod do programování I – http://www.fi.muni.cz/usr/pelikan

• 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

Page 6: M1160 – Úvod do programování I

23-04-24 6

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

Page 7: M1160 – Úvod do programování I

23-04-24 7

Programovací jazyky – historie • Strojový kód • Jazyk symbolických instrukcí – Assembler

– vědeckotechnické výpočty• FORTRAN, COBOL, ALGOL

– vědeckotechnické výpočty– hromadné zpracování dat

• SIMULA, SIMSCRIPT, LISP• PL/1, ADA, Prolog, C/C++, C#, Pascal, Java

Page 8: M1160 – Úvod do programování I

23-04-24 8

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í

Page 9: M1160 – Úvod do programování I

23-04-24 9

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

Page 10: M1160 – Úvod do programování I

23-04-24 10

Historie jazyka C (1)• 1969 – 1973:

– 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)

Page 11: M1160 – Úvod do programování I

23-04-24 11

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 X3.159-1989 „Programming Language C“– zmíněný standard bývá označován jako ANSI C,

Standard C nebo C89

Page 12: M1160 – Úvod do programování I

23-04-24 12

Historie jazyka C (3)• 1990:

– 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)

Page 13: M1160 – Úvod do programování I

23-04-24 13

„Životopis“ programuEditor

*.c *.h

Preprocesor

Překladačcompiler

Objektovésoubory

*.o, *.obj

Systémovéknihovny

*.so, *.a, *.lib

Sestavovací programlinker

Spustitelný program*.exe

Hlavičkovésoubory*.h

Spuštění, laděníladící program – debugger

Zdrojový kód

Page 14: M1160 – Úvod do programování I

23-04-24 14

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 #

Page 15: M1160 – Úvod do programování I

23-04-24 15

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

Page 16: M1160 – Úvod do programování I

23-04-24 16

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

Page 17: M1160 – Úvod do programování I

23-04-24 17

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

Page 18: M1160 – Úvod do programování I

23-04-24 18

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í

Page 19: M1160 – Úvod do programování I

23-04-24 19

Programovací jazyk C v M1160 (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

Page 20: M1160 – Úvod do programování I

23-04-24 20

Programovací jazyk C v M1160 (2)– možnosti Code::Blocks lze dále rozšířit pomocí

zásuvných modulů – plug-ins– http://www.codeblocks.org/– http://www.codeblocks.org/downloads/26– codeblocks-16.01mingw-setup.exe (cca 80 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

Page 21: M1160 – Úvod do programování I

23-04-24 21

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, …

Page 22: M1160 – Úvod do programování I

23-04-24 22

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, …

Page 23: M1160 – Úvod do programování I

23-04-24 23

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

Page 24: M1160 – Úvod do programování I

23-04-24 24

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)

Page 25: M1160 – Úvod do programování I

23-04-24 25

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

Page 26: M1160 – Úvod do programování I

23-04-24 26

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

Page 27: M1160 – Úvod do programování I

23-04-24 27

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

Page 28: M1160 – Úvod do programování I

23-04-24 28

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

Page 29: M1160 – Úvod do programování I

23-04-24 29

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

Page 30: M1160 – Úvod do programování I

23-04-24 30

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

Page 31: M1160 – Úvod do programování I

23-04-24 31

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

Page 32: M1160 – Úvod do programování I

23-04-24 32

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

Page 33: M1160 – Úvod do programování I

23-04-24 33

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

Page 34: M1160 – Úvod do programování I

23-04-24 34

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

Page 35: M1160 – Úvod do programování I

23-04-24 35

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

Page 36: M1160 – Úvod do programování I

23-04-24 36

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

Page 37: M1160 – Úvod do programování I

23-04-24 37

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)