Programování v jazyce C



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:

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

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

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

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

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

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

Funkce, intuitivní chápání složitosti

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

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

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

2 Datové typy v jazyce C

Algoritmizace a programování

Programování v C++ 1, 1. cvičení

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

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

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

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

Základy algoritmizace a programování

Programovací jazyk Pascal

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

Prezentace a vysvětlení programového prostředí NXC

Programovací jazyk C++ Hodina 1

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

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í

Základy programování (IZP)

Př. další použití pointerů

Opakování programování

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

Algoritmizace a programování

Úvod do programování. Lekce 1

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

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

Algoritmizace a programování

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

Standardní vstup a výstup

Algoritmizace a programování

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

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

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

Zápis programu v jazyce C#

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

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

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

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

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

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

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

6 Příkazy řízení toku

Jazyk C++, některá rozšíření oproti C

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

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

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

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Řídící struktury, if, while, switch

Základy algoritmizace a programování

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

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

Řídicí struktury. alg3 1

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

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

Základy C++ I. Jan Hnilica Počítačové modelování 18

Programování v C++, 2. cvičení

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

Základy programování (IZP)

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

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Úvod do programovacích jazyků (Java)

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

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

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

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

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

1. Téma 03 - Rozhodování

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

Algoritmizace a programování

7: #include <stdio.h> //standardni knihovna

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.

Základy programování (IZP)

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

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

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

Proměnné a datové typy

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

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

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Algoritmy a datové struktury

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

Pole a kolekce. v C#, Javě a C++

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

Sada 1 - Základy programování

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Příkazy if, while, do-while, for, switch

Transkript:

Programování v jazyce C Obecné charakteristiky jazyka C: jazyk C je programátorsky přívětivý, obecně použitelný většinou je implementován jako překladač překladač jazyka C je rozsahem malý a lze ho poměrně snadno převést na jiné platformy programy vytvořené pomocí jazyka C mají poměrně krátkou dobu provádění, nízké nároky na paměť a dají se lehce přenášet na jiné počítače Zdrojový kód jazyk C důsledně rozlišuje malá a velká písmena první řádek obsahuje příkaz #include, který určuje hlavičkový soubor stdio.h důležitý pro správné provádění vstupně-výstupních datových operací každý program musí mít jednu povinnou součást, kterou je hlavní funkce main, tento název je pevně daný a neměnný Na programování potřebujeme vývojové prostředí, které slouží pro překlad algoritmů napsaných v nějakém vyšším programovacím jazyce do jazyka strojového neboli strojového kódu pomocí kompilátoru. Budeme používat Vytvoření projektu 1. Na úvodní stránce: Create a new project... 2. Vyberte skupinu Projects a v kategorii Console položku Console Application.

3. 4. 5. 6. 7. program vygeneruje první soubor 8. Kompilace: Build->Build nebo tlačítkem 9. Spuštění programu: Build->Run nebo tlačítkem

Jak pracuje kompilátor Vstupem do kompilátoru je náš zdrojový kód s příponou *.c ten se dostane do preprocesoru který nám "před připraví" náš kód např.: smaže komentáře poté kód vstupuje do kompilátoru kompilátor nám vytvoří program v objektovém kódu ovšem který ještě nejde spustit. Poté kód vstupuje do tzv. linkeru a právě linker nám poskládá už objektový kód knihovny tak, aby program nyní šel spustit. Komentáře: Komentáře se jako v jiných jazycích používají také v jazyce C příklady: /* Sem si můžete napsat libovolný komentář */ <- správně! // Sem si můžete napsat libovolný komentář <- správně! */ Sem si můžete napsat libovolný komentář /* <- špatně! V komentářích můžete libovolně používat diakritiku, protože jak už víte tak se komentáře při kompilaci vymažou. Co je to hlavičkový soubor? Hlavičkový soubor je soubor, který nám umožňují používat funkce. Hlavičkové soubory musí být připojený ke každému zdrojovému kódu.

příklad: Hlavičkový soubor stdio.h -> Obsahuje hodně užitečných spíš až základních funkcí. Hlavní z nich jsou printf();scanf();getchar(); a jiné Funkce main po spuštění se vždy načte jako první má syntaxi - typ název (parametr) - začíná a končí složenými závorkami Funkce printf() vytiskne zadaná data na obrazovku syntaxe - int printf("formát výstupního řetězce, vycet_promennych) - printf("vysledek %a:%b je %lf", a, b, c); Funkce scanf() slouží k načítání dat ze standardního vstupu tato data ukládá do proměnných, které jí předáme jako parametry syntaxe - int scanf("formát vstupního retezce", seznam promennych); u proměnných, do kterých chceme data načítat, musíme použít refenční operátor & (ampersand) - scanf("%lf %lf", &a, &b); takto předáme funkci scanf adresu v paměti, kam má načtenou hodnotu zapsat Funkce getcahr / putchar tyto dvě funkce představují základní možnost načítání a vypisování znaků funkce getchar má následující syntaxi - int getchar(void); funkce nepřebírá žádné parametry, pouze vrací celé číslo - ASCII kód načteného znaku z toho vyplývá, že jazyk C vnitřně pracuje se znakovou proměnnou, jako s celým číslem funkce putchar - syntaxe - void putchar(int ch); slouží k výpisu znaku na standardní výstup a přebírá jediný parametr, a tím je celé číslo reprezentující kód znaku, který chceme tisknout Ukázka, jak pomocí getchar znak načíst, a pomocí putchar zase zpět vypsat. int ch; printf("zadejte alfanumericky znak:"); ch = getchar(); printf("vytiskneme pomoci putchar:"); putchar(ch);

Základní datové typy jazyka C Typ Bity Významy čísel char 8 znak short 16 krátké celé číslo int 16/32 celé číslo long 32 dlouhé celé číslo long long 64 ještě delší celé číslo enum 8/16/32 výčtový typ float 32 racionální číslo double 64 racionální číslo s dvojitou přesností long double 80 velmi dlouhé racionální číslo pointer 16/32 ukazatel Při výběru vhodného datového typu je třeba počítat s tím, že rozsah datového typu (tj. nejmenší a největší číslo, které do něj můžete nacpat) se bude lišit počítač od počítače. Boolovské datové typy V některých programovacích jazycích se používá datový typ bool, který může nabývat pouze hodnot true (pravda) nebo false (nepravda). Tyto hodnoty se používají ve vyhodnocování podmínek při řízení běhu programu a podmíněných operátorů. Na tomto místě si jen řekneme, že v jazyce C takovýto typ neexistuje. V jazyce C se jako nepravda vrací 0 a jako pravda 1. A dále platí, že cokoliv nenulového se vyhodnocuje jako pravda (tj. vše kromě 0 a NULL). Datový typ bool můžete používat, pokud zahrnete do svého zdrojového kódu knihovnu <stdbool.h>: #include <stdbool.h> bool x = true; x = false; Bloky, deklarace a definice Blokem se rozumí vše, co je mezi složenými závorkami a. V příkladu nahoře máme jediný blok, a to tělo funkce main (). Všechny proměnné, které deklarujeme v bloku, jsou tzv. lokální proměnné a proměnné mimo blok jsou globální. Lokální proměnné platí jen v těle bloku a v blocích vnořených (jinde je překladač neuvidí). Proměnné jsou místa kdesi v paměti počítače, které definujeme v programu. Velikost místa v paměti závisí na datovém typu proměnné. Do proměnných lze vkládat hodnoty, měnit je a číst. Deklarací proměnných určujeme, jaké proměnné se v programu objeví. Nejdříve se určí datový typ

a za ním názvy proměnných oddělené čárkou. Deklarace se ukončí středníkem. Při deklaraci je možné do proměnné rovnou vložit hodnotu. Názvy proměnných nesmí obsahovat mezeru, národní znaky (č, ř, š atp.) a nesmí začínat číslem. Jejich maximální délka je závislá na překladači. Jazyk C rozlišuje malá a velká písmena, takže můžete vytvořit proměnné se jmény Ahoj, ahoj, ahoj a program je bude chápat jako různé identifikátory. Dobrým zvykem je pro proměnné používat vždy jen malá písmena. unsigned int i,j,k; signed int cislo1, cislo2 = cislo3 = 25; Proměnné mohou být v jazyce C deklarovány pouze na začátku bloku funkce (tzv. lokální proměnné), nebo na začátku programu (globální proměnné). Lokální proměnné existují jen v bloku, ve kterém jsou definovány (případně v blocích v něm vnořených) a nelze je tudíž používat mimo něj. NULL NULL je speciální znak, který označuje velké nic. Používá se například v souvislosti s ukazateli. NULL je definováno v knihovně <stddef.h>, která je načítána např. pomocí <stdlib.h> a <stdio.h>. Konstanty Konstanty jsou objekty, jejichž hodnota se za chodu programu nemění. Konstanty se definují za klíčovým slovem const. Po něm následuje datový typ konstanty. Pokud ne, překladač jej chápe jako int. Dále je v definici identifikátor konstanty a za rovnítkem hodnota. const float a = 5; Řídící sekvence %d Celé číslo %f Reálné číslo %lf Reálné číslo se zvýšenou přesností %c Celé číslo, které je konvertováno na znak, např. 64 = @ %o Celé číslo v oktalové soustavě %x Celé číslo v hexadecimální soustavě \a Varovné pípnutí \n Skok na začátek nového řádku \r Přesune vozík na začátek aktuálního řádku \v Vertikální tabulátor; skočí na nový řádek, ale zůstane v aktuálním sloupci

Pondělí 7. ledna Větvení Příkaz if else jedná se o příkaz, který umožňuje program větvit do dvou větví na základě logické hodnoty výrazu. Tyto výrazy mohou nabývat dvou stavů pravda/nepravda. K vyjádření těchto výrazů používáme následující operátory: A == B Podmínka je splněna, pokud se A rovná B. A!= B Podmínka je splněna, pokud se A nerovná B. A < B Podmínka je splněna, pokud je A menší než B. A > B Podmínka je splněna, pokud je A větší než B. A <= B Podmínka je splněna, pokud je A menší, nebo rovno než B. A >= B Podmínka je splněna, pokud je A větší, nebo rovno než B. Prostředky pro konstrukci složitějších výrazů: (a!= b) && (b < 25) Výraz je pravdivý, pokud se a nerovná b a současně je b menší než 25 (a < 10) (a > 20) Výraz je pravdivý, pokud je a menší než 10 nebo pokud je a větší než 20. & - pravý alt + c - pravý alt + w Příklady: Dělitelnost int a, b, zbytek; printf("zadejte celá čísla, dělence a dělitele:\n"); scanf("%d%d", &a,&b); zbytek=a % b; if (zbytek==0) printf("číslo %d\ je dělitelné číslem %d",a,b); else printf("číslo %d\ není dělitelné číslem %d",a,b); system("pause"); Jednoduchá kalkulačka #include <stdlib.h> int x, y; char znak;

printf("vytvořte jednoduchou kalkulačku, zadejte čísla x, y a operátora "); scanf("%d%d%c",&x, &y, &znak); switch(znak) case '+': printf("vysledek je %d",x+y); break; case '-': printf("vysledek je %d",x-y); break; case '*': printf("vysledek je %d",x*y); break; case '/': printf("vysledek je %f",x/y); break; default: printf("zadali jste špatného operátora"); Pondělí 14. ledna Př. Rozhodněte, zda zadaná čísla mohou být strany trojúhelníku #include <stdlib.h> int a, b, c; printf("zadejte tři čísla a zjistěte, jde-li o strany trojúhelníku\n: "); scanf("%d%d%d", &a,&b,&c); if (a+b>c) if (a+c>b) if(b+c>a) printf("jde o trojúhelník"); else printf("není to trojúhelník"); Podmínky je možné do sebe také vnořovat #include <stdlib.h> int hotovost = 200; int ucet = 3000; double cena = 3500; if (hotovost > cena) if (ucet > cena) puts("můžeš platit kartou i hotovostí."); else puts("zaplať hotovostí.");

else if (ucet > cena) puts("zaplať kartou."); else puts("ten nový počítač nepotřebuješ."); Funkce puts() vytiskne řetězec, jenž je jejím argumentem, do standardního výstupu Cykly V případě, že třeba nějakou činnost vykonat opakovaně, je pro tento případ standardním nástrojem cyklus. Céčko nabízí hned tři typy cyklů. for while do - while for cyklus je předem známý počet opakování obecně: for (inicializace; podmínka; krok) příkaz nebo blok Př. Vypište pod sebe čísla od 1 do 10 #include <stdlib.h> int i; for (i = 1; i <= 10; i++) printf("%i\n", i); Př. Vypočítejte faktoriál zadaného čísla int n,i; int faktorial=1; printf("napište èíslo, jehož faktoriál chcete vypoèítat:"); scanf("%d",&n); for (i=2;i<=n; i++) faktorial= faktorial*i;

printf("%d",faktorial); Pondělí 21. ledna while cyklus cyklus s podmínkou na začátku obecně: while (logická hodnota) příkaz nebo blok Př. Vypište čísla od 1 do 10 int i = 1; while (i <= 10) printf("%d\n", i); i++; Př. Vypište pod sebe násobky čísla n, které jsou menší než m int i = 1; int n,m,j ; printf("vypište všechny násobky čísla n, které jsou menší než m\n"); printf("zadejte n\n"); scanf("%d",&n); printf("zadejte m\n"); scanf("%d",&m); while (n*i<= m) j=i*n; printf("%d\n",j ); i++; Př. Najdi minimum z neznámého počtu kladných celých čísel podmínka X -1 printf("najdi minimum z neznámého počtu kladných celých čísel podmínka X -1\n"); int x,min=0; printf("zadej číslo x\n"); scanf("%d",&x); min=x; while (x!=-1) if (x<min) min=x; printf("zadej další číslo :\n"); scanf("%d",&x); printf("nejmenší číslo je %d",min);

do - while cyklus cyklus s podmínkou na konci. Tento cyklus se používá v případech, kdy potřebujeme tělo cyklu vykonat alespoň jednou obecně: Př. do příkaz nebo blok while (logická hodnota); Zjistěte, kolik čísel jsme napsali, než padla nula int x, pocet=0; do printf("napiste cislo:\n "); scanf("%d",&x); pocet=pocet +1; while (x!= 0); printf("pocet zadanych císel je %d",pocet); Pondělí 28. ledna Switch přepínač int a; printf("napiste cele cislo z intervalu 1-4"); scanf("%d",&a); printf("zvolili jste "); switch(a) case 1: printf("jaro"); break; case 2: printf("leto"); break; case 3: printf("podzim"); break; case 4: printf("zima"); break; default: printf("spatne cislo");

Příkazy break a continue Tyto příkazy se používají v případě, že potřebujeme okamžitě zastavit provádění těla cyklu, případně začít vykonávat tělo cyklu od začátku. Continue V případě, že při provádění programu narazíme na tento příkaz, dojde k okamžitému ukončení aktuální iterace a tělo cyklu se začne provádět od začátku. K vyskočení z cyklu tedy nedojde Break Tento příkaz způsobuje okamžité vyskočení z cyklu a program pokračuje bezprostředně za cyklem. K okamžitému přerušení cyklu můžeme použít vyjma příkazu break také příkaz goto. Př. Dělení int x,y; float z; printf("napis delence a delitele:"); scanf("%d%d",&x,&y); if (y!=0) z=(float)x/y; // je nutné přetypovat výsledek printf("vysledek je %lf ",z); Abychom dostali po dělení správný výsledek (desetinné číslo) je potřeba použít přetypování. Tím můžeme sdělit, jakého typu má být výsledek nějakého výrazu (z=(float)x/y;)

Prověrka 1. Vypočítejte průměr ze tří zadaných čísel int a,b,c; double p; printf("zadejte tri cisla: \n"); scanf("%d%d%d",&a,&b,&c); p=(double)(a+b+c)/3; printf("prumer zadanych cisel je %lf\n", p); 2. Najděte největší ze tří zadaných čísel int a,b,c; printf("zadejte tri cisla: \n"); scanf("%d%d%d",&a,&b,&c); if (a>b) if (a>c) printf("největší číslo je %d",a); else printf("největší číslo je %d",c); else if (b>c) printf("největší číslo je %d",b); else printf("největší číslo je %d",c); 3. Načtěte 5 čísel a spočítejte, kolik z nich je záporných int x,i,pocet; printf("napiste cislo:\n"); scanf("%d",&x); pocet=0; for (i=1;i<=5;i++) if (x<0) pocet=pocet + 1; printf("napiste cislo:\n"); scanf("%d",&x); printf("mezi zadanymi cisly je %d zapornych ",pocet);

Pondělí 25. února V jazyce C se každý, byť sebemenší program obsahuje alespoň jednu funkci, funkci main. Pokud při programování píšeme rozsáhlejší program, potřebujeme prostředek, který nám umožní na první pohled složitý problém rozložit do menších částí, a to z několika důvodů. Uživatelské funkce lze volat opakovaně, tedy to, co jednou naprogramujeme, můžeme používat opakovaně. Původně složitý problém můžeme rozdělit na množství dílčích úkonů, které již není problém naprogramovat, a takový kód je snáze udržovatelný. Můžeme používat lokální proměnné, které jsou viditelné pouze v prostoru dané funkce, čímž se vyhneme problémům se jmény a takový kód může pracovat paralelně. Úvodní pojmy Ještě než si ukážeme několik možností, jak vytvářet naše vlastní funkce a jak je používat podíváme se na dva pojmy, se kterými se setkáme. Jsou jimi deklarace a definice funkce. Deklarace funkce - říkáme pouze to, že někde bude existovat funkce s daným názvem, návratovým typem a parametry. Definicí funkce rozumíme samotné výkonné tělo, tedy kód, který daná funkce vykonává. Nutno poznamenat, že deklaraci ve své podstatě používat nemusíme, ale potom narážíme na problém, že funkce musí být definována před svým prvním použitím, aby o ní překladač věděl. To může na první pohled vypadat jako samozřejmost, ale později, až budeme mít více funkcí, kde z jedné budeme volat druhou atp., se můžeme do problému tak zamotat, že deklarace pro nás bude vysvobozením. Každá funkce v jazyce C je dána jednak svým názvem, chcete-li identifikátorem, návratovým typem a seznamem parametrů. název funkce by měl být volen tak, aby hned z názvu bylo patrné, co funkce dělá název funkce nesmí začínat číslicí je-li název složen z více slov, musí být psána za sebou bez mezery Návratový typ určuje, jakého typu bude výsledek, který od funkce získáme. Pokud se bude jednat o funkci pro provádění nějakého výpočtu, návratovým typem bude nepochybně číselná hodnota.

Př. Napište funkci, která vypočítá rychlost v km/h #include <stdlib.h> float VypocetRychlosti(float draha, float cas); int draha; int cas; printf("zadej delku drahy v km\n "); scanf("%d",&draha); printf("zadej cas jizdy v minutách\n "); scanf("%d",&cas); printf("%lf km/hod ",VypocetRychlosti(draha,cas)); float VypocetRychlosti(float draha, float cas) return draha/(cas/60); Př. Stejný příklad ještě s funkcí, která převede rychlost z km/h na m/s #include <stdlib.h> float VypocetRychlosti(float draha, float cas); float PrevedRychlost (float rychlost); int draha; int cas; float rychlost; printf("zadej delku drahy v km\n "); scanf("%d",&draha); printf("zadej cas jizdy v minutách\n "); scanf("%d",&cas); rychlost = VypocetRychlosti(draha,cas); printf("%lf km/hod\n ",VypocetRychlosti(draha,cas)); printf("%lf m/s ",PrevedRychlost (rychlost)); float VypocetRychlosti(float draha, float cas) return draha/(cas/60); float PrevedRychlost (float rychlost) return rychlost*3.6;

Hlavičkový soubor standardní knihovny jazyka C, který zpřístupňuje matematické funkce je math.h Funkce pow je funkce, která umožňuje umocňovat reálný základ reálným číslem. Př. Napište funkci, která vypočítá mocninu x y #include <stdlib.h> #include <math.h> int Mocnina(int x, int y); int x, y; printf( "Zadejte mocnence a mocnitele\n "); scanf ("%d%d",&x,&y); printf("cislo %d na %d. je %d",x, y, Mocnina(x,y)); int Mocnina(int x, int y) return pow(x, y); Př. Výpočet mocniny jinak #include <stdlib.h> int Mocnina(int x, int y); int x, y; printf( "Zadejte mocnence a mocnitele\n "); scanf ("%d%d",&x,&y); printf("cislo %d na %d. je %d",x, y, Mocnina(x,y)); int Mocnina(int x, int y) int pom, i; i=1; pom = x; while(i<y) pom = x * pom; i++; return pom;

Pondělí 11. března Pole Pole jsou homogenní datové struktury, jejichž prvky jsou indexovány. První prvek pole má index 0. Pole můžeme rozdělit na statická a dynamická, jednorozměrná a vícerozměrná. Deklarace pole Pole je v jazyce C interně podporováno, a tedy není nutné vkládat žádné speciální hlavičky. Deklarace pole má následující strukturu: <typ> <jméno>[<[velikost]>]; Deklarace se tedy příliš neliší od deklarace proměnné. Typ je základní typ buňky pole (pole je homogenní, není možné měnit typ u jednotlivých buněk), jméno je identifikátor pole jméno proměnné typu pole a velikost určuje, kolik buněk bude pole mít. Velikost je nepovinný údaj, stačí inicializovat pole a překladač si velikost doplní sám. Pokud velikost uvedeme, musíme vždy použít celé nezáporné číslo. V konkrétním případě tedy pole o deseti prvcích se jménem pole a typem int bude vypadat takto: int pole[10]; Inicializace pole Pole můžeme inicializovat jako každou jinou proměnnou při jejím vzniku. U pole je to ale o něco složitější. Musíme totiž vyjmenovat obsahy jednotlivých buněk. int pole1[5] = 1, 2, 3, 4, 5; int pole2[] = 1, 2, 3, 4, 5; int pole3[5] = 1, 2; int pole4[5] = 0; Na první řádce kompletně inicializujeme pole s pěti buňkami. Na druhé řádce vytvoříme ekvivalentní pole s polem pole1, viz výše. Co se ale stane s polem pole3? Zde vyplníme pouze první dvě buňky, zbytek bude vynulován. Stejně tak pole4 bude kompletně vyplněné nulami.

Práce s polem Indexace Máme-li vytvořenou proměnnou typu pole, můžeme k jednotlivým buňkám přistupovat pomocí operátoru indexace nebo-li indexem v hranatých závorkách. Nesmíme ovšem zapomínat na to, že první buňka má index nula int pole[5] = 1, 2, 3, 4, 5; int a = pole[0]; // první buňka pole, v a bude 1 int b = pole[1]; // druhá buňka pole, v b bude 2 int c = pole[5]; // chyba, saháme za konec pole!! Na poslední řádce se pokoušíme číst buňku s indexem pět. To je samozřejmě chybně, protože pole má poslední buňku na indexu čtyři. Jazyk C nemá žádnou zabudovanou kontrolu mezí polí. V případě jako je výše, dojde k potenciálně nebezpečnému čtení paměti. To může způsobit pád programu nebo náhodně vrácená data. Porovnávání polí Pole nelze jednoduše porovnávat, jako to jde s jednoduchými číselnými typy. Od následujícího kódu nelze očekávat korektní chování, pokud nám jde o srovnání obsahu polí: if (pole1 == pole2) //... Chceme-li srovnat obsahy polí, nezbude nám nic jiného, než vytvořit cyklus a porovnat buňku po buňce. Další možností je použít funkci int memcmp(const void *pole1, const void *pole2, size_t velikost) z hlavičkového souboru string.h,, která srovná dva úseky paměti zadané délky a vrátí podobně jako funkce strcmp() hodnotu menší než nula, nula, nebo větší než nula, pokud je první pole po bajtech menší, rovno, nebo větší než druhé pole. Pole jako parametr funkce Pole lze předávat do funkce jako každou jinou proměnnou. Stačí pouze označit, že se jedná o pole párem hranatých závorek: void funkce (int pole[], int velikost) Jako první parametr funkce funkce se očekává pole typu int. Ve druhém parametru předáváme délku pole. Délka pole se nedá jednoduše zjistit, a proto ji musíme předávat samostatně. S polem se v těle funkce pracuje jako s obyčejným lokálně vytvořeným polem.

Vícerozměrná pole Doteď jsme se zabývali pouze jednorozměrným polem. Jazyk C nás ale v dimenzích pole neomezuje. Dvourozměrné pole vytvoříme zadáním velikosti nadvakrát. int pole2d [3][3]; Zde jsme vytvořili dvourozměrnou matici 3x3. Vícerozměrná pole můžeme také inicializovat. Jelikož jsou pole v jazyce C ukládaná po řádkách, musíme inicializaci psát řádkově. int pole2d1 [3][3] = 1, 2, 3, 4, 5, 6, 7, 8, 9; int pole2d2 [3][3] = 1, 2, 3; int pole2d3 [3][3] = 0; Jako v případě jednorozměrných polí, i zde můžeme část inicializace vynechat. Překladač zbytek doplní nulami. Pole pole2d3 bude tedy reprezentovat nulovou matici 3x3. Na libovolný prvek pole se dá dostat vícenásobnou indexací. int a = pole2d[1][1]; Stejně jako u jednorozměrných polí i zde se indexuje od nuly. Levý horní prvek matice má tedy index [0][0]. Pondělí 25. března Př. Porovnejte dvě pole a zjistěte, jsou-li shodná #include <stdlib.h> int pole1[5]= 1,2,8,4,5; int pole2 [5] = 1,2,3,4,5; int i, shoda=1; for(i=0;i<5;i++) if (pole1[i]!= pole2[i]) shoda=0; break; if (shoda==1) printf("pole jsou shodna %d",shoda); else printf("pole nejsou shodna %d",shoda);

Př. Vytvořte pole deseti náhodných čísel #include <stdlib.h> int pole [10], i; for (i=0; i<10; i++) pole[i]= rand()%100; //vybere čísla od 0 do 99 printf("%d\n ",pole[i]); printf("\n");