Zjednodušené základy jazyku C. Josef Podstata

Podobné dokumenty
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

2 Datové typy v jazyce C

Základy jazyka C. Základy programování 1 Tomáš Kühr

5 Přehled operátorů, příkazy, přetypování

Formátové specifikace formátovací řetězce

Algoritmizace a programování

Algoritmizace a programování

Základy algoritmizace a programování

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Operační systémy. Cvičení 3: Programování v C pod Unixem

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

- jak udělat konstantu long int: L long velka = 78L;

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Úvod do programování. Lekce 1

Algoritmizace a programování

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Programovací jazyk Pascal

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

MAXScript výukový kurz

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Základy PERLu snadno a rychle

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Tabulkový procesor. Základní rysy

Základy algoritmizace a programování

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Proměnná a její uložení v paměti

VISUAL BASIC. Práce se soubory

Pointery II. Jan Hnilica Počítačové modelování 17

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Sada 1 - Základy programování

C# konzole Podíl dvou čísel, podmínka IF

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Stručný návod k programu Octave

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

POČÍTAČE A PROGRAMOVÁNÍ

Úvod do programování - Java. Cvičení č.4

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Základy jazyka C. Úvod do programování 1 Tomáš Kühr

Paměť počítače. alg2 1

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

PHP tutoriál (základy PHP snadno a rychle)

Racionální čísla, operátory, výrazy, knihovní funkce

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Racionální čísla, operátory, výrazy, knihovní funkce

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

PROGRAMOVÁNÍ V SHELLU

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

6 Příkazy řízení toku

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Programovací jazyk C++ Hodina 1

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec

Operátory. Základy programování 1 Tomáš Kühr

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

IUJCE 07/08 Přednáška č. 1

Základy programování (IZP)

DUM 06 téma: Tvorba makra pomocí VBA

8 Třídy, objekty, metody, předávání argumentů metod

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

3 KTE / ZPE Informační technologie

6. Příkazy a řídící struktury v Javě

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Operační systémy. Cvičení 4: Programování v C pod Unixem

7. Datové typy v Javě

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Úvod do programovacích jazyků (Java)

Úvod do programování. Lekce 3

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Základy programování (IZP)

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

LEKCE 6. Operátory. V této lekci najdete:

Řídicí struktury. alg3 1

Algoritmizace a programování

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Proměnné a datové typy

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Jazyk C# a platforma.net

Transkript:

Zjednodušené základy jazyku C Josef Podstata 3. 4. 014 1

Předmluva Tento dokument je určen všem zájemcům o programování v jazyce C. Nezáleží na tom, jestli už jste někdy v céčku programovali nebo ne. Text vznikl jako projekt do předtmětu TeX pro začátečníky vyučovaného na Univerzitě Palackého v Olomouci.

Obsah I Úvod 5 1 Historie 5 Vývojové prostředí 5 3 Kompilace 5 II První program 6 4 Vytvoření projektu 6 5 Hello world 7 III Datové typy 8 6 Čísla 8 6.1 Char.................................. 8 6. Short, int a long........................... 8 6.3 Float a double............................ 8 6.4 Signed a unsigned.......................... 8 7 Jednoduchý příklad 9 8 Proměnné v printf() 9 9 Načtení proměnné ze vstupu 10 10 Středně těžký příklad 10 11 Těžší příklad 11 1 Samostatná práce 1 IV Řízení programu 13 13 Podmíněný příkaz 13 13.1 If.................................... 13 13. Else.................................. 13 13.3 Else if................................. 14 14 Operátory 14 15 Příklad 14 16 Další příklad 15 3

17 Poslední příklad 16 V Pole 17 18 Jednorozměrné pole 17 18.1 Řetězce................................ 17 19 Vícerozměrné pole 18 19.1 Příklad................................ 18 0 Konec 18 4

Část I Úvod 1 Historie C je jeden z nejpopulárnějších kompilovaných programovacích jazyků 1 minulosti. V roce 197 ho vyvinuli Ken Thompson a Dennis Ritchie. Do dnes se ale používá například k výuce na školách, protože je jednoduchý, čitelný, dostatečně silný a obsáhlý, a navíc z něho vychází dnes popularní programovací jazyky, například C# nebo Java. Vývojové prostředí Softwaru pro psaní a kompilování kódu (tzn. vývojového prostředí, také IDE) v jazyce C je několik. Ještě k tomu je jazyk multiplatformní a na každém operačním systému je rozdílný výběr prostředí. Na Windows je často používané Microsoft Visual Studio, na Mac OS například Xcode. Svobodné multiplatformní vývojové prostředí je například Code::Blocks. 3 Kompilace Pojem kompilování jsem zmínil už výše. Co to ale znamená? Zkráceně řečeno, napíšeme několik řádků zdrojového kódu a chceme, aby se program spustil. Kompilátor (též překladač.) kód zpracuje a vytvoří z něho spustitelný program. Do detailů zacházet nemusíme. 1 http://en.wikipedia.org/wiki/programming_language http://en.wikipedia.org/wiki/compiler 5

Část II První program 4 Vytvoření projektu Teď budete potřebovat nějaké vývojové prostředí. Na obrázkovém tutorialu používám Xcode, ale v čem budete pracovat je čistě na vás. Ve většině IDE je postup založení projektu stejný, a to něco ve smyslu File New Project. Poté zvolte konzolovou aplikaci (Console Application, Command Line Tool atp.). Zadáte jméno projektu a ujistíte se, že programovací jazyk je nastaven na C. 6

Zbývá už jen v editoru otevřít soubor main.c, tedy náš zdrojový kód. Možná už ho máte otevřený hned po založení projektu, možná ne. 5 Hello world Základní kostra programu by už pro nás měla být napsána. Jestli ne, napište ji sami: 5 p r i n t f ( " H e l l o world! \ n" ) ; 6 7 r e t u r n 0 ; 8 } Když program spustíme (tlačítkem Run, Compile, Build and run atp., ve Visual Studiu také klávesou F5 ), neudělá nic jiného, než že do konzole (na standartní výstup) vypíše: Hello world! Pojďme si kód rozebrat po jednotlivých řádcích. Příkaz na prvním řádku říká jen, že v kódu budeme používat funkce z knihovny stdio.h (například printf() na pátém řádku). Tuhle knihovnu využijete při psaní snad každého programu, proto v prvním řádku nemusíte hledat žádnou vědu, prostě tam je vždy. Druhý řádek je vynechaný jen kvůli lepší přehlednosti. Na třetím nám začíná funkce main(), tedy hlavní funkce, která se spustí při spuštění programu. Jako každá jiná funkce má své tělo ohraničeno složenými závorkami ({ na čtvrtém a } na osmém řádku). Zatím o ní víc vědět nemusíme. Na pátém řádku voláme funkci printf(), které předáváme jeden argument - řetězec "Hello World! \n". O řetězcích jindy, teď stačí vědět, že reprezentují text, píší se do uvozovek a "\n" zalomí řádek. Na sedmém řádku se volá příkaz return, který ukončí funkci main() a tím pádem skončí běh celého programu. Všimněte si, že jednotlivé příkazy jsou vždy ukončeny středníkem. Takový program by se měl chovat jak očekáváme. Některé vývojové prostředí ale zavírají konzoli hned po skončení programu a to má za výsledek, že nám program jen problikne před očima. Jedna z možností řešení je příkaz system("pause");, který vložíme před příkaz return. 7

Část III Datové typy V programování se používají k uchovávání různých dat proměnné 3. Hodnota proměnné se může během programu měnit a každá proměnná má v jazyku C svůj datový typ, který určuje druh hodnot, kterých může nabývat. Také nám určuje, které operace pak lze s proměnnou provádět. Vývojové prostředí nás bude varovat když nebudou sedět operace pro dané datové typy, například když budeme chtít sčítat celé číslo a text. 6 Čísla typ velikost rozsah char 1B od -18 do 17 short B od -3,768 do 3,767 int B nebo 4B pro 4B od -,147,483,648 do,147,483,647 long 4B od -,147,483,648 do,147,483,647 unsigned long 4B od 0 do 4,94,967,95 float 4B od 1.E-38 do 3.4E+38 double 8B od.3e-308 do 1.7E+308 6.1 Char Datový typ char může sloužit dvojím způsobem. Méně častější je jako celé číslo v rozmezí -18 až 17. Častěji jako jeden znak z ASCII tabulky (viz. http: //cs.wikipedia.org/wiki/ascii). Tedy proměnná je pořád uložená jako malé číslo, ale má dvojí rozdílnou reprezentaci. Například číslo 65 reprezentuje znak A a naopak. Jako znak z ASCII tabulky se zapisuje vždy do apostrofů ( znak ). 6. Short, int a long Všechny tři datové typy reprezentují celé číslo, liší se pouze rozsahem. U int ještě rozhoduje operační systém a vývojové prostředí. 6.3 Float a double Tyto datové typy slouží k uchování čísla s desetinnou čárkou (správně řečeno pohyblivou nebo plovoucí řádovou čárkou). Typ float může uchovávat až 6 cifer za desetinnou čárkou, double až 15. Kdyby vám ani to nestačilo, ještě existuje typ long double. 6.4 Signed a unsigned Signed nebo unsigned lze napsat před celočíselné datové typy a udělat tak z nich proměnné pro uchování pouze kladných nebo pouze záporných čísel. 3 http://en.wikipedia.org/wiki/variable_(computer_science) 8

7 Jednoduchý příklad Například bychom chtěli, aby v proměnné x byla uchována hodnota 5, v y rozdíl proměnné x a čísla 1 (5 1 = 4). Poté přidáme proměnnou desetinne, do kterého uložíme výsledek dělení čísel x a y (5 / 4 = 1,5, nebo ne?). Tady přichází moment správné volby datových typů. Pokud by proměnná desetinne byla typu int, nešlo by do ní uložit 1,4 a hodnota by se uložila jako celé číslo, tedy 1. Celý příklad by mohl vypadat takhle: 5 i n t x = 5 ; 6 i n t y = x 1 ; 7 f l o a t d e s e t i n n e = x / y ; 8 9 r e t u r n 0 ; 10 } Program by měl fungovat tak, jak jsme chtěli. Jediná nevýhoda je, že se vše provede interně a my nevidíme na výstupu ani ň. K tomu si musíme více objasnit funkci printf(), se kterou jsme se už setkali. 8 Proměnné v printf() Kromě napevno předaného textu dokáže funkce printf() vypisovat i proměnné, popřípadě delší text, který obsahuje více proměnných. Vždy musíme uvést, v jaké reprezentaci proměnnou chceme vypsat. 5 i n t x = 5 ; 6 i n t y = 1 ; 7 f l o a t d e s e t i n n e = 1. 7 6 5 ; 8 p r i n t f ( "x j e %d \n", x ) ; 9 p r i n t f ( "y j e %d a d e s e t i n n e j e %f \n", y, d e s e t i n n e ) ; 10 p r i n t f ( "x + 5 = %d \n", x + 5 ) ; 11 1 char pismenoa = 6 5 ; 13 char pismenoh = h ; 14 p r i n t f ( "%c%c o j \n", pismenoa, pismenoh ) ; 15 16 r e t u r n 0 ; 17 } Možná tušíte, že výpis do konzole bude: x je 5 y je 1 a desetinne je 1,765 x + 5 = 10 Ahoj Výpis je úhledně na čtyři řádky, protože sme každý řetězec poctivě ukončovali znakem \n, tedy skokem na nový řádek. Jinak by se vše vypsalo na jeden řádek. 9

Na osmém řádku voláme funkci printf() s řetězcem a proměnnou. V řetězci je přesně vyznačené místo, kde se má dosadit proměnná, a to díky řídící sekvenci %d. Písmeno za znakem % určuje reprezentaci čísla. Řídící sekvence je i \n. %d celé číslo %f reálné číslo %c celé číslo jako znak %o celé číslo v osmičkové soustavě %h celé číslo v šestnáctkové soustavě Porovnejte údaje v tabulce a kód. Snad je to jasné a jestli ne, tak ještě ve zkratce: v řetězci se může vyskytovat více řídících sekvencí a jako výraz se může předat i úplně nový výpočet (x + 5 ), ne jen proměnná. 9 Načtení proměnné ze vstupu 5 i n t x ; 6 p r i n t f ( " z a d e j x : " ) ; 7 s c a n f ( "%d", &x ) ; 8 p r i n t f ( "%d \n", x ) ; 9 10 r e t u r n 0 ; 11 } Program funguje tak, že načte celé číslo ze vstupu, uloží ho do proměnné x a poté ho vytiskne na výstup. Pojďme si kód rozebrat po řádcích. Na pátém řádku deklarujeme ( založíme ) proměnnou x. Na šestém řádku fuckce printf() vytiskne text s instrukcemi. Na sedmém řádku voláme funkci scanf(), která načte celé číslo do proměnné x. Proměnná x má navíc před sebou znak &, který odkazuje na adresu proměnné x. Moc to neřeště, funkce scanf() vypadá skoro vždy stejně. 10 Středně těžký příklad Chceme implementovat naprosto neužitečnou matematickou funkci: f : y = x + ln x #i n c l u d e <math. h> 3 4 i n t main ( ) 5 { 6 i n t x ; 7 p r i n t f ( " z a d e j x : " ) ; 8 s c a n f ( "%d", &x ) ; 9 p r i n t f ( "y = %f \n", ( x x ) + l o g ( x ) ) ; 10 11 r e t u r n 0 ; 1 } 10

11 Těžší příklad Chceme sestavit program, který ze vstupu přečte 3 číselné hodnoty reprezentující strany a, b a c nějakého trojúhelníku. Poté vypočte obvod a obsah trojúhelníku a vypíše je. Pro výpočet obvodu slouží jednoduchý známý vzorec: O = a + b + c A pro obsah využijeme Heronův vzorec: Definice 1 Jsou-li a, b, c délky stran trojúhelníka, platí pro jeho obsah kde s = a+b+c je poloviční obvod trojúhelníka. S = s(s a)(s b)(s c) (1) #i n c l u d e <math. h> 3 4 i n t main ( ) 5 { 6 i n t a, b, c ; 7 8 p r i n t f ( " z a d e j s t r a n u A: " ) ; 9 s c a n f ( "%d", &a ) ; 10 p r i n t f ( " z a d e j s t r a n u B: " ) ; 11 s c a n f ( "%d", &b ) ; 1 p r i n t f ( " z a d e j s t r a n u C: " ) ; 13 s c a n f ( "%d", &c ) ; 14 15 f l o a t obvod = a + b + c ; 16 f l o a t s = obvod / ; 17 f l o a t obsah = s q r t ( s ( s a ) ( s b ) ( s c ) ) ; 18 19 p r i n t f ( " obvod j e %f \n", obvod ) ; 0 p r i n t f ( " obsah j e %f \n", obsah ) ; 1 r e t u r n 0 ; 3 } Na šestém řádku deklarujeme několik proměnných naráz. Už jste si možná všimli, že deklarace může být bez zadání hodnot a naplnění hodnotou až později (int x; a potom x = 4; nebo scanf("%d", &x);), nebo naplníme hodnotou přímo v deklaraci (int x = 4;). Oba způsoby platí i pro více deklarací na jednom řádku (viz 6. řádek nebo např. int x = 4, y = ;). Podle Heronova vzorce jsme potřebovali použít odmocninu. Tu na řádku 1 vypočítává funkce sqrt(). Kvůli tomu jsme museli přidat knihovnu math.h na matematické funkce (druhý řádek). Pro vstupy 9, 9 a 9 by se mělo do konzole vypsat: zadej stranu A: 9 zadej stranu B: 9 zadej stranu C: 9 obvod je 7.000000 obsah je 35.07408 11

1 Samostatná práce Napište program, který ze vstupu bere reálné číslo a na výstupu vypíše sinus, cosinus a druhou mocninu tohoto čísla. Implementujte tedy funkce: f(x) = sin x 0.5 4 4 0.5 f(x) = cos x 1 0.5 4 4 0.5 f(x) = x 0 10 4 4 Ke všem najdete příslušnou funkci v knihovně math.h. Jmenovitě sin() a cos(). Druhou mocninu lze implementovat jako x x. Pro vstup 3.14 by měl program vypsat něco jako: Zadej cislo: 3.14 sinus: 0.001593 cosinus: -0.999999 na druhou: 9.859601 1

Část IV Řízení programu 13 Podmíněný příkaz Často musíme program rozdělit na více větví, které se vykonají pouze bude-li určitá podmínka pravda nebo ne. Například při čtení dvou čísel ze vstupu bychom chtěli vypsat, které zadané číslo bylo větší. Za předpokladu, že by se čísla uložili do proměnných A a B, bychom zkoumali podmínku A > B. 13.1 If Větvení pomocí if vypadá následovně: if (podmínka) { tělo } Tedy u výše zmíněného příkladu by to vypadalo: if (A > B) { printf("a je vetsi. \n"); } Pokud se výraz v závorkách vyhodnotí jako pravda, tělo proběhne. Jestli ne, celé tělo se přeskočí (příkazy v něm jsou ignorovány). Hodilo by se ještě podotknout, že výraz (A > B) sice může skončit jako pravda nebo nepravda, v jazyku C se ale ale vyhodnotí na celé číslo, tedy 1 (pravda) nebo 0 (nepravda). V jiných programovacích jazycích jsou pravdivostní hodnoty reprezentovány speciálním datovým typem, v céčku se ale musíme spokojit jen s čísly. Obecně je ale bráno jako pravda jakékoliv číslo kromě nuly. 13. Else Else větev se vykoná, pokud předchozí podmínka skončila jako nepravda. To nám tedy umožňuje rozdělit program na dvě rozdílné větve. Na základě vyhodnocení podmínky vždy vykoná pouze jedna z větví. if (A > B) { printf("a je vetsi. \n"); } else { printf("a neni vetsi. \n"); } V takovém případě je při vyhonocování úplně ignorována jedna z větví. Takže nezáleží, jak velká tajemství větev else skrývá, nebo jestli skončí chybou a pádem programu pokud se podmínka vyhodnotí na pravdu, celá část else se přeskočí. 13

13.3 Else if Else if slouží k testování další podmínky, pokud předchozí skončila nepravdou. Například: if (A > B) { printf("a je vetsi. \n"); } else if (A < B) { printf("b je vetsi. \n"); } else { printf("a ma stejnou hodnotu jako B. \n"); } 14 Operátory Už vás možná napadlo, že na klasické operace s čísly fungují známé znaky +,, * (krát) a / (děleno). Představíme si ale několik nových, které se vyhodnocují na pravdu nebo nepravdu. operátor význam > větší než < menší než == rovná se!= nerovná se >= větší nebo roven <= menší nebo roven && a zároveň nebo Větší než a menší než už jsme si ukázali. U rovná se je důležité, že se znak = píše dvakrát po sobě. To kvůli tomu, že samostatně to je přiřazení (např. int x = 4;). Logický operátor && skončí pravdou pouze tehdy, když jsou oba výrazy také pravda. zase pokud alespoň jeden z výrazů je pravda. 15 Příklad Zase budeme načítat ze vstupu 3 hodnoty jakožto strany a, b a c nějakého trojúhelníku. Tentokrát ale budeme testovat, zda takový trojúhelník vůbec lze sestrojit. Aby šel sestrojit, musí součet libovolných dvou stran být vždy větší než strana třetí, tedy: a + b > c b + c > a c + a > b 14

5 i n t a, b, c ; 6 7 p r i n t f ( " z a d e j s t r a n u A: " ) ; 8 s c a n f ( "%d", &a ) ; 9 p r i n t f ( " z a d e j s t r a n u B: " ) ; 10 s c a n f ( "%d", &b ) ; 11 p r i n t f ( " z a d e j s t r a n u C: " ) ; 1 s c a n f ( "%d", &c ) ; 13 14 i f ( ( a + b > c ) && ( b + c > a ) && ( c + a > b ) ) { 15 p r i n t f ( " t r o j u h e l n i k l z e s e s t r o j i t! \n" ) ; 16 p r i n t f ( " j e h o obvod bude : %d \n", ( a + b + c ) ) ; 17 } 18 e l s e { 19 p r i n t f ( " t r o j u h e l n i k n e l z e s e s t r o j i t! \n" ) ; 0 } 1 r e t u r n 0 ; 3 } Podmínka na řádku 16. možná vypadá na první pohled nepřehledně. S tím nám částečně pomáhají závorky. Závorky určují i nastavení priority, například 1+ 3 není to samé co (1 + ) 3 a jestli nevíte proč, vraťte se na základní školu. Pro vstupy vstupy 8, 0 a 8 by program měl vypsat: zadej stranu A: 8 zadej stranu B: 0 zadej stranu C: 8 trojuhelnik nelze sestrojit! 16 Další příklad Chtěli bychom ze tří zadaných hodnot najít maximum. Poprvé používáme funkci scanf() k načtení více hodnot naráz, oddělené pouze mezerou. If taky používáme trochu jinak než do teď - bez těla ve složených závorkách. Pokud tělo obsahuje pouze jeden příkaz, lze to napsat takhle. 5 i n t a, b, c, max ; 6 p r i n t f ( " Zadej 3 c i s l a : " ) ; 7 s c a n f ( "%i %i %i ", &a, &b, &c ) ; 8 9 i f ( a >= b && a >= c ) max = a ; 10 i f ( b >= a && b >= c ) max = b ; 11 i f ( c >= b && c >= a ) max = c ; 1 13 p r i n t f ( " N e j v e t s i c i s l o j e %i. \n", max ) ; 14 15 r e t u r n 0 ; 16 } 15

17 Poslední příklad Program příjme jedno písmeno (char) a vypíše: "pismeno je male", pokud je zadaný znak malé písmeno "pismeno je velke", pokud je zadaný znak velké písmeno "znak neni pismeno", pokud je zadaný znak cokoliv jiného než písmeno 5 char znak ; 6 p r i n t f ( " Zadej pismeno : " ) ; 7 s c a n f ( "%c ", &znak ) ; 8 9 i f ( znak >= a && znak <= z ) { 10 p r i n t f ( " Pismeno j e male. \n" ) ; 11 } 1 e l s e i f ( znak >= A && znak <= Z ) { 13 p r i n t f ( " Pismeno j e v e l k e. \n" ) ; 14 } 15 e l s e { 16 p r i n t f ( " Zadany znak neni pismeno. \n" ) ; 17 } 18 19 r e t u r n 0 ; 0 } Na devátém a dvanáctém řádku testujeme podmínku, jestli zadaný znak malé nebo velké písmeno podle tabulky ASCII (6.1). Protože jsou písmena v tabulce hned za sebou, platí podmínka ( a < b ) atd. Pro vstup Z prohram vypíše: Zadej pismeno: Z Pismeno je velke. A pro vstup 4 prohram vypíše: Zadej pismeno: 4 Zadany znak neni pismeno. 16

Část V Pole Pole je v informatice datová struktura, která ukládá daný počet prvků stejného typu (celá čísla, reálná čísla,...). K jeho prvkům se přistupuje přes index, což je celé číslo určující pořadí prvku. Indexuje se od nuly, nikoli od jedničky. Velikost pole zůstává v jazyku C neměnná. Pole je i už zmíněný řetězec a můžeme mít i více rozměrné pole. 18 Jednorozměrné pole Mějme celočíselné pole, do kterého chceme uložit čísla 0, 4, x, 4, kde x bude číslo přečtené ze vstupu. 5 i n t x ; 6 p r i n t f ( " Zadej c i s l o : " ) ; 7 s c a n f ( "%d", &x ) ; 8 i n t p o l e [ 4 ] ; 9 p o l e [ 0 ] = 0 ; 10 p o l e [ 1 ] = 4 ; 11 p o l e [ ] = x ; 1 p o l e [ 3 ] = 4 ; 13 14 r e t u r n 0 ; 15 } Celočíselné pole tedy deklarujeme stejně jako celé číslo, pouze za název do hranatých závorek napíšeme jeho rozsah (viz. 8. řádek). Všimněte si indexování od nuly - zadali jsme velikost pole 4, ale prvek na indexu 4 neexistuje, protože poslední je na indexu 3. Pole můžeme naplnit už při deklaraci, a to pomocí složených závorek. Výše zmíněný postup je ekvivalentní s: int pole[4] = {0, 4, x, 4}; 18.1 Řetězce Textový řetězec je znakové (char, 6.1) pole. Ukažme si program, který ze vstupu přečte celý řetězec a vypíše z něho první a druhé písmeno. 5 char r e t e z e c [ 1 6 ] ; 6 p r i n t f ( " Zadej r e t e z e c : " ) ; 7 s c a n f ( "%s ", &r e t e z e c ) ; 8 9 p r i n t f ( "%c %c \n", r e t e z e c [ 0 ], r e t e z e c [ 1 ] ) ; 10 11 r e t u r n 0 ; 1 } 17

Protože nevíme, jak dlouhý bude vstupní řetězec, zvolili jsme na pátém řádku nějaký rozsah, v našem případě 16 písmen. Pokud zadáme víc, program by spadl. Možná vám vývojové prostředí hází varování, ale to neřešte. Pro vstup "Ahoj" by program měl vypsat "A h": Zadej retezec: Ahoj A h 19 Vícerozměrné pole Další rozměr poli přidáme další hranatou závorkou v deklaraci. Například bychom chtěli celočíselné dvourozměrné pole o rozměrech 3 10, tedy o třech řádcích a deseti sloupcích : int pole[3][10]; 19.1 Příklad Chceme zapsat jednoduchou matici A o rozměrech 4 3: 5 3 A 4,3 = 4 7 9 6 8 0 4 8 1 Zdrojový kód bude velice jednoduchý, jelikož jsme chtěli matici pouze zapsat a nic víc. 5 i n t matice [ 4 ] [ 3 ] = {{, 5, 3}, 6 {4, 7, 9}, 7 {6, 8, 0}, 8 {4, 8, 1 } } ; 9 10 r e t u r n 0 ; 11 } 0 Konec Tak a to je vše. Pokud jste to dočetli až sem, tak palec hore. Dohledání dalších elementů jazyka je na vás. Doporučuji se podívat na cykly. 18