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

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

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

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

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

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

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

Řídicí struktury. alg3 1

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

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

Úvod do programování. Lekce 3

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

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

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

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

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

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

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

6 Příkazy řízení toku

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

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.

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Příkaz while. while (podmínka) { příkaz; } Příklad: int i=0; while (i < 10) { System.out.println(i); i++; } // vypíše čísla od 0 do 9

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

2. lekce Algoritmus, cyklus Miroslav Jílek

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

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

Úvod do programovacích jazyků (Java)

Úvod do programování. Lekce 1

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

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

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

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

Struktura programu v době běhu

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

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

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

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

Algoritmizace a programování

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Programovací jazyk C++ Hodina 1

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

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

Programovací jazyk Pascal

NPRG031 Programování II --- 2/2 Z, Zk

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ

PSK3-9. Základy skriptování. Hlavička

Algoritmizace a programování

Zápis programu v jazyce C#

Objektově orientované programování

Základy algoritmizace a programování

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

VISUAL BASIC. Práce se soubory

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

Standardní vstup a výstup

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

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

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

10 Práce s řetězci - pokračování

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

Jazyk C# a platforma.net

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

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

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

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

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

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

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

Základy algoritmizace a programování

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

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

1. Téma 03 - Rozhodování

Algoritmy a datové struktury

Úvod do programování. Lekce 5

O datových typech a jejich kontrole

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Základy programování (IZP)

Funkce, podmíněný příkaz if-else, příkaz cyklu for

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

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

Lekce 01 Úvod do algoritmizace

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

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 -

Algoritmizace a programování

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Basic256 - úvod do programování Příklady. ing. petr polách

Sada 1 - Základy programování

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

2 Datové typy v jazyce C

URČITÝM ZPŮSOBEM PODOBNÉ

Algoritmizace a programování

Regulární výrazy. Filtry grep, sed a awk.

Např.: // v hlavičkovém souboru nebo na začátku // programu (pod include): typedef struct { char jmeno[20]; char prijmeni[20]; int rok_nar; } CLOVEK;

PROGRAMOVÁNÍ V SHELLU

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

Transkript:

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

Podmínky a cykly Dokončení stručného přehledu řídících struktur jazyka C.

Složený příkaz, blok Pascalské BEGIN a END představují v jazyce C složené závorky { a }. Příkazy uvnitř složených závorek { } představují jeden složený příkaz. Používá se tehdy, potřebujeme-li provést několik příkazů tam, kde se očekává pouze jeden, např. v cyklech. Závorky {} uzavírají také blok, proto uvnitř závorek smíme (mimo jiné) deklarovat proměnné.

Podmíněný příkaz větvení ano? ne if (podmínka) příkaz_1; else příkaz_2; příkaz_1 příkaz_2 Platí-li podmínka, provede se příkaz_1. Neplatí-li podmínka, provede se příkaz_2. ano? ne if (podmínka) příkaz_1; příkaz_1 Platí-li podmínka, provede se příkaz_1. (Je-li v sobě vnořeno několik if, patří else k poslednímu if bez else)

Příkaz switch přepínač Příkaz pro mnohonásobné větvení programu. Nejedná se o plný ekvivalent příkazu CASE známého z Pascalu: nelze jednoduše napsat prostý výčet několika hodnot pro jeden příkaz rozhodovací výraz musí být typu int v každé větvi smí být více příkazů bez {} složených závorek každá větev musí být ukončena break; jednu větev lze definovat jako default

Příkaz switch přepínač (2) switch (výraz) { case h1: př_1; break; case h2: case h3: př_3; break; default: př_def; [break;] } == h1 ne == h2 ne == h3 ne ano ano ano výraz př_1 př_3 break; př_def break; break;

Cyklus for for (inicializace; podmínka; iterační výraz) příkaz; Inicializace se provede pouze jedenkrát na začátku. Cyklicky se pak provádí: Příklad: test platnosti podmínky je-li splněna provedení příkazu vyhodnocení iteračního výrazu for (int x = 0; x < 10; x++) printf( Ahoj ); příkaz ano iterační výraz inicializace? ne

Cyklus while a do-while ano? ne while (podmínka) příkaz; příkaz Dokud platí podmínka, provádí se příkaz. (příkaz se nemusí provést) ano příkaz? ne do příkaz; while(podmínka); Provede se příkaz. Dokud platí podmínka, provádí se příkaz. (příkaz se provede nejméně jednou)

Příkazy break a continue Mění normální průběh cyklu. Použití má smysl v cyklech (for, while, dowhile) a v případě break i v přepínači. break ukončuje smyčku opouští ihned cyklus continue skáče na konec smyčky vynutí další iteraci cyklu neopouští cyklus Oba se vztahují k nejvnitřnější neuzavřené smyčce.

Příkazy break a continue (2) int x = 0; while (x++ < 5) { if (x == 3) break; if (x == 2) continue; printf ("%d\n", x); } printf ("%d\n", x); ne x = 0 ano < 5 ano == 3 break; ne ano continue; == 2 ne 1 uvnitř cyklu 3 mimo cyklus printf() printf()

Příklady ekvivalentních cyklů for(x = 0; x < 10; x++) vysledek += x; x = 0; do { vysledek += x; x++; } while (x < 10); x = 0; while (x < 10) { vysledek += x; x++; } x = 0; if (x < 10) do { vysledek += x; x++; } while (x < 10);

Příklady ekvivalentních cyklů x = 0; if (x < 10) do ; while (vysledek += x++, x < 10); x = 0; for (;;) { vysledek += x; if (++x >= 10) break; }

Fibonacciho posloupnost int p1 = 0, p2 = 1, f; printf ("0 : 0\n"); printf ("1 : 1\n"); for (int x = 2; x < 10; x++) { f = p1 + p2; p1 = p2; p2 = f; } printf ("%d : %d\n", x, f);

Fibonacciho posloupnost Vaším úkolem je program přepsat bez použití cyklu for.

Fibonacciho posloupnost Vaším úkolem je program přepsat bez použití cyklu for. int x = 2, p1 = 0, p2 = 1, f; printf ("0 : 0\n"); printf ("1 : 1\n"); while (x < 10) { f = p1 + p2; p1 = p2; p2 = f; printf ("%d : %d\n", x, f); x++; }

Přetypování Přetypování Typová konverze

Přetypování, typová konverze Převod proměnné nebo hodnoty určitého typu na typ jiný. Dva typy typové konverze Implicitní prováděny automaticky nemůžeme téměř ovlivnit Explicitní přetypování (typecasting) plně pod naší kontrolou používá se často, zejména při práci s ukazateli nevhodné použití může způsobit značné komplikace v C probíhá v době překladu, C++ i dynamicky

Přetypování příklad použití int a = 10, b = 3; printf("10/3 = %d\n", a/b); printf("10/3 = %f\n", (double)a/b); 10/3 = 3 10/3 = 3.333333 double d = 5.4, e = 5.9; int c = (int)d; //c == 5 c = (int)e; //c == 5

Vstupně výstupní operace Základní informace.

Vstupně výstupní operace Programovací jazyk C neimplementuje žádnou IO (Input Output) operaci jako vlastní součást jazyka (jako tomu je třeba u jazyka Pascal). Standardní knihovna proto obsahuje několik IO funkcí, které vstupně výstupní operace zajišťují. Prototypy těchto základních funkcí jsou v hlavičkovém souboru stdio.h.

Čtení/zápis znak po znaku putchar() zajistí výstup jednoho znaku getchar() zajistí vstup jednoho znaku Obě pracují s celočíselným typem int (ne s char).

Formátovaný vstup a výstup scanf( řídící řetězec formátu, parametry) zajišťuje vstup printf( řídící řetězec formátu, parametry) zajišťuje výstup Řídící řetězec formátu obsahuje Formátové specifikace začínají % určují formát výstupu či vstupu Znakové posloupnosti nejsou uvozeny % používají se zejména u printf()

Formátovaný vstup a výstup (2) Formátování je přehledně uvedeno na stránkách předmětu. Pozor, při čtení pomocí funkce scanf() musí být před proměnnou znak & pokud se nejedná o ukazatel (problém předávání hodnotou). Funkce scanf() vrací počet přečtených položek ( %d %d odpovídá návratové hodnotě 2). Funkce printf() vrací počet vypsaných znaků ( %d %d může odpovídat návratové hodnotě více než 2). %16.10lf... tisk celkem na 16 míst, z toho 10 za desetinnou tečkou. První číslo se nedodrží, pokud s daným počtem nelze hodnotu vypsat.

Vstupně výstupní operace (2) Probíhají asynchronně (buffer) pokud někdo zadá vstup 10 20 30 40 50 a budeme číst desítková čísla v cyklu proběhne cyklus 5x a pak scanf() vrátí EOF while (scanf("%d", &cislo)!= EOF) { ++poradi; printf("%d: opis: %d\n", poradi, cislo); } 10 20 30 40 50 1: opis: 10 2: opis: 20 3: opis: 30 4: opis: 40 5: opis: 50

1. Úkol průměr Napište program pro výpočet aritmetického průměru bez použití pole. Jednotlivé hodnoty čtěte ze vstupu až do konce souboru (Ctrl+D) nebo do výskytu záporné hodnoty. Poté vypište aritmetický průměr zadaných hodnot. Hodnoty >= 100 ignorujte (nezapočítávejte). Snažte se použít příkazů break i continue. Zkusit lze na počítači Aisa: /home/xbayer/open/prumer

1. Úkol průměr (2) while (scanf ("%d", &vstup)!= EOF) {

1. Úkol průměr (2) while (scanf ("%d", &vstup)!= EOF) { if (vstup >= 100) continue;

1. Úkol průměr (2) while (scanf ("%d", &vstup)!= EOF) { if (vstup >= 100) continue; else if (vstup < 0) break;

1. Úkol průměr (2) while (scanf ("%d", &vstup)!= EOF) { if (vstup >= 100) continue; else if (vstup < 0) break; printf ("Zadano: %d\n", vstup);

1. Úkol průměr (2) while (scanf ("%d", &vstup)!= EOF) { if (vstup >= 100) continue; else if (vstup < 0) break; printf ("Zadano: %d\n", vstup); soucet += vstup;

1. Úkol průměr (2) while (scanf ("%d", &vstup)!= EOF) { if (vstup >= 100) continue; else if (vstup < 0) break; printf ("Zadano: %d\n", vstup); soucet += vstup; pocet++; }

1. Úkol průměr (2) while (scanf ("%d", &vstup)!= EOF) { if (vstup >= 100) continue; else if (vstup < 0) break; printf ("Zadano: %d\n", vstup); soucet += vstup; pocet++; } //vypocet pak muze byt ((double)soucet / pocet));

2. Úkol koza, vlk a zelí Na počítači Aisa si stáhněte soubor: /home/xbayer/open/zeli.c Dokončete program tak, aby pracoval. Vyzkoušet lze na: /home/xbayer/open/zelifull K dispozici je již řada hotových funkcí, Vaším úkolem bude zejména naprogramovat vlastní ovládání.

2. Úkol koza, vlk a zelí cíle Na jedné straně (A) jezera se vyskytujete Vy, koza, vlk a zelí. Koza má zálusk na zelí. a vlk na kozu Máte loďku a vždy můžete přepravit sebe a jednoho společníka. Úkolem je dostat všechny tři na druhou stranu (B) jezera. (Triviální řešení, kdy necháme kozu sežrat zelí, poté vlka kozu a následně převezeme vlka, bude uznáno pouze, pokud předvedete i reversní proces )

2. Úkol hotové funkce (1) Vzhledem k probrané látce není program napsán příliš elegantně. Tři globální proměnné typu char (k, v, z) nabývají hodnot A a B, dle umístění kozy, vlka a zelí. Pro testování konfliktů a korektního vstupu již máte napsány funkce, stačí použít, např.: do { if (scanf ("%c", &vstup) == EOF) return 1; } while (preprav ('a', vstup));

2. Úkol hotové funkce (2) Funkce test() int test (char breh); Zjistí, zda nedošlo ke konfliktu na jednom z břehů (parametr breh A, B ). V případě konfliktu vypíše hlášení a vrátí hodnotu 1. Pokud vše OK, vrátí hodnotu 0 a nic nevypisuje. Funkce kdo_ceka() void kdo_ceka (char breh); Nepovinné, jen vypíše, kdo je na daném břehu.

2. Úkol hotové funkce (3) Funkce preprav() int preprav (char odkud, char vstup); Pokusí se přepravit vstup (změnit stav globálních proměnných). Na vstup obdrží znak, co uživatel zadal. Jako parametr odkud obdrží A nebo B, dle toho, odkud kam vstup přepravujeme. Vrátí hodnotu 0, pokud vše OK. Vrátí hodnotu 1, pokud se vyskytnul problém. Řeší i nemožnost přepravy, jelikož pasažér je na druhém břehu, vypisuje odpovídající hlášení.

2. Úkol hotové funkce (4) Funkce test_vitezstvi() int test_vitezstvi (void) Vrátí hodnotu 0, pokud nebylo dosaženo vítězství. Vrátí hodnotu 1, pokud hráč vyhrává. Způsoby volání funkcí: test ( B ); //test konzistence na břehu B kdo_ceka ( B ); //výpis, kdo čeká na břehu B while (preprav ( A', vstup)); //kde vstup je znak test_vitezstvi (); //pravda, když hráč vyhrál

Shrnutí Bez cyklů nelze programovat, je žádoucí jimi plně proniknout. IO v jazyku C je značně problematické a nejednou možná strávíte mnoho hodin hledáním chyby v C++ je značně vylepšeno. Děkuji za pozornost.