Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Standardní knihovní funkce pro práci s textovými řetězci
Pro začátek něco lehčího
Programování v C jazyku - SEMINÁŘ
Programování 2 Cvičení 5.
Prezentace a vysvětlení programového prostředí NXC
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
Pole, ukazatele a odkazy
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
C# pro začátečníky Mgr. Jaromír Osčádal
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Programování v C++ Cvičení.
Algoritmy I Cvičení č. 4.
Algoritmy I Cvičení č. 3.
Algoritmizace a programování
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Generování mezikódu Jakub Yaghob
Informatika I 3. přednáška
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
DEKLARACE PROMĚNNÝCH A KONSTANT
Současný svět Projekt č. CZ /3. 1
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
JavaScript Podmínky, cykly a pole.
Cvičení.
Příklady v jazyku C – část 4
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
Hlášky Hlášky v JavaScriptu jsou trojího typu: Hlášky v JavaScriptu jsou trojího typu: Alert Alert Prompt Prompt Confirm Confirm Alert – zobrazí upozorňovací.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
JavaScript Funkce.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
NEÚPLNÁ PODMÍNKA V JAVĚ. VÝVOJOVÝ DIAGRAM +- Podmínka Příkaz_1.
C – switch Mgr. Lenka Švancarová. switch syntaxe switch (výraz) { case hodnota_1: příkaz(y)_ve_větvi_1; case hodnota_2: příkaz(y)_ve_větvi_2; … default:
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
Ukazatele BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
PŘÍKAZ CYKLU S PODMÍNKOU NA ZAČÁTKU
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
ZÁKLADNÍ POJMY. ZDROJOVÝ TEXT PROGRAMU Tvoří: klíčová slova komentáře identifikátory.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Programování ÚVOD, PROMĚNNÉ, OPERÁTORY A PODMÍNĚNÝ PŘÍKAZ ERIK KRÁL.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Počítače a programování 2
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Programovací jazyk C# 4. část - cykly.
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Programování v jazyce C++
Kurz algoritmizace a programování v jazyce C
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Itemize Enumerate Description
Oblast platnosti identifikátoru (1)
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
C# přehled vlastností.
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král

Obsah Symbolické konstanty Výčtové konstanty Příkaz pro větvení switch Jednorozměrná pole Inicializace pole Přístup k prvkům pole Kopírování a porovnávání prvků pole Dvojrozměrná pole

Symbolické konstanty Kromě symbolických konstant využíváme také výčtové konstanty pomocí klíčového slova enum. Následující příklad nevhodného použití symbolických konstant upravíme na dalším snímku s využitím výčtových konstant. #include <stdio.h> #define HRAJE 0 #define VYHRAL 1 #define PROHRAL 2 #define KONEC 3 int main() { int stav = HRAJE; do int znak = getchar(); if (znak == 'q') stav = KONEC; } } while (stav == HRAJE); return 0; Symbolické konstanty očíslované „ručně“

Výčtové konstanty (enum) U výčtových konstant za nás může kompilátor generovat hodnoty. Často představují vhodnější variantu než symbolické konstanty. #include <stdio.h> enum StavHry { HRAJE, VYHRAL, PROHRAL, KONEC }; int main() enum StavHry stav = HRAJE; do int znak = getchar(); if (znak == 'q') stav = KONEC; } } while (stav == HRAJE); return 0; Výčtové konstanty očíslované kompilátorem automaticky od 0. Výčtový typ

Výčtové konstanty (enum) Hodnoty u výčtových konstant můžeme zadávat také i ručně. Automatické očíslování potom pokračuje od poslední ručně zadané hodnoty. #include <stdio.h> enum StavHry { HRAJE = 10, VYHRAL = 20, PROHRAL, KONEC }; int main() enum StavHry stav = HRAJE; do int znak = getchar(); if (znak == 'q') stav = KONEC; } } while (stav == HRAJE); return 0; Výčtové konstanty očíslované částečně „ručně“ a částečně automaticky PROHRAL == 21, KONEC == 22

Switch Příkaz switch slouží ke větvení programu na základě konstantních celočíselných hodnot například znakových konstant. enum StavHry stav = HRAJE; do { int znak = getchar(); switch (znak) case 'q': stav = KONEC; break; case 'w': stav = VYHRAL; case 'l': stav = PROHRAL; default: } } while (stav == HRAJE); Klíčové slovo break používáme k tomu aby program nepokračoval na další case. Otestujte co se stane, pokud break vynecháme. Volitelně je možné použít klíčové slovo default které označuje všechny ostatní možnosti než jsou v case. Poslední break není nutný, ale je jen doporučený.

Ukázka příkazu switch a výčtových konstant Live coding

Jednorozměrné pole Pole je nepřerušený blok po sobě jdoucích objektů stejného typu. Délka pole musí být konstanta. Pouze standard C99 obsahuje povinně pole s proměnnou délkou - Variable- Length Array (VLA), ale standard C11 už obsahuje VLA pouze jako nepovinnou (volitelnou) součást. int a[10]; Definuje pole o velikosti 10, tedy blok po sobě jdoucích objektů typu int pojmenovaných a[0] až a[9] a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

Inicializace pole Vynechaný počet prvků pole char a[] = "abc"; Výchozí hodnota prvků pole na zásobníku je náhodná (co zrovna zůstalo v paměti). Při definici je možné pole zároveň i inicializovat. Inicializovat pole můžeme řetězcem a nebo hodnotami ve složených závorkách. Při inicializaci můžeme vynechat počet prvků pole pokud si jej kompilátor může dopočítat. Vynechaný počet prvků pole char a[] = "abc"; a[0] a[1] a[2] a[3] 'a' 'b' 'c' '\0' Načte pouze první 3 znaky a vynechá znak '\0' na konci řetězce. Menší počet než 3 nepůjde přeložit. U většího počtu doplní '\0'. char b[3] = "abc"; b[0] b[1] b[2] 'a' 'b' 'c'

Inicializace pole Inicializace pomocí složených závorek. char a[] = { 'a', 'b', 'c' }; a[0] a[1] a[2] 'a' 'b' 'c' int b[] = { 0, 1, 2 }; b[0] b[1] b[2] 1 2 int c[3] = { 0 }; c[0] c[1] c[2] Pouze první hodnota bude 10 a zbytek bude 0 int d[3] = { 10 }; d[0] d[1] d[2] 10

Indexy pole int pole[] = { 0, 1, 2, 3 }; int prvek = 0; K prvkům pole přistupujeme pomocí operátoru indexace []. Jazyk C nehlídá indexy pole a může dojít k přepsání paměti a poškození dat nebo vlastního programu a dojít k nepředvídatelným chybám nebo i pádu celého programu. int pole[] = { 0, 1, 2, 3 }; int prvek = 0; prvek = pole[0]; // 1. prvek prvek = pole[2]; // 2. prvek prvek = pole[3]; // 3. prvek prvek = pole[4]; // 4. (posledni) prvek pole[-1] = 100; pole[5] = 200; Přepíše paměť před polem Přepíše paměť za polem, častá chyba programátorů v jazyce C

Přístup k prvkům Nastavení všech prvků pole na 0 #include <stdio.h> #define DELKA 3 int main() { int pole[DELKA] = { 0 }; for (int i = 0; i < DELKA; i++) pole[i] = i * 2; } int prvek = pole[i]; printf("%d ", prvek); return 0; Nastavení všech prvků pole na 0 Přiřazení hodnoty prvku pole Získání hodnoty prvku pole

Práce s polem Jazyk C neumí pracovat s polem jako s celkem, nemůžeme tedy mezi sebou pole jednoduše kopírovat nebo porovnávat. Musíme pracovat buď s jednotlivými prvky pole a nebo využít například funkce pro práci s pamětí. Lepší situace je u textových řetězců, kde můžeme využít například funkce pro kopírování (strcpy) nebo porovnávání (strcmp). Tyto funkce mají jako parametry ukazatele a proto je probereme později. int poleA[] = { 0, 1, 2, 3 }; int poleB[] = { 0, 1, 2, 3 }; bool test = false; // poleA = poleB; test = poleA == poleB; test = poleA > poleB; Nejde ani přeložit! Porovná pouze adresy prvních prvků! Porovná pouze adresy prvních prvků!

Porovnání dvou polí Pokud chceme zjistit zda prvky pole rovnají, tak musíme ověřit každý prvek zvlášť. To samé platí pro kopírování prvků pole a další operátory. int poleA[] = { 0, 1, 2, 3 }; int poleB[] = { 0, 2, 2, 3 }; bool testRovnostiHodnot = true; for (int i = 0; i < 4; i++) { if (poleA[i] != poleB[i]) testRovnostiHodnot = false; break; }

Kopírování hodnot pole #define N 4 int main() { int poleA[N] = { 0, 1, 2, 3 }; int poleB[N] = { 0 }; for (int i = 0; i < N; i++) poleB[i] = poleA[i]; } return 0; Kopírujeme prvek po prvku

Dvojrozměrná pole Prakticky jde pole polí Vnořená inicializace #include <stdio.h> #define VYSKA 3 #define SIRKA 2 int main() { char matice[VYSKA][SIRKA] = { {'1', '2'}, {'3', '4'}, {'5', '6'} }; for (int i = 0; i < VYSKA; i++) for (int j = 0; j < SIRKA; j++) char prvek = matice[i][j]; printf("%c ", prvek); } printf("\n"); return 0; Prakticky jde pole polí Vnořená inicializace Získáme j-tý prvek v i-tém pole Získáme i-té pole

Ukázka práce s polem Live coding

Děkuji za pozornost Otázky?