www.amapro.cz & David Bazala [Programování]

Otevře webové stránky AmaPro


Otevře hlavní stránku společnosti AmaPro
Internetové stránky určené pro studenty středních a vysokých odborných škol.


amapro.cz/odkazy Projekt eliminuje vyhledávání klíčových slov na komerčních stránkách a v e-schopech.



Nový projekt AmaPro

 

enum

 

Je standardní příkaz Céčka, který napomáhá zpřehledňovat zdrojovou část a především zvyšuje modularitu programu. Příkaz enum nám definuje výčtový typ konstant, které může příslužná proměnná nabývat. Například bool nabývá true a false.

 

Nejpoužívanější konstrukce enum:

 

typedef enum

{

BILA, MODRA, ZLUTA, ZELENA

} barvy;

barvy A;

 

Konstrukce s typedef je nejvíce používaná. Definuje výčtový typ barvy, který může nabývat jen těch hodnot, které jsou uvedeny v definici. Pak lze deklarovat proměnnou A jako datový typ enum se synonymem barvy. Proměnnou A lze modifikovat jako A=MODRA.

 

Při deklaraci proměnné s datovým typem enum dochází k alokaci příslušného paměťového prostoru. Protože počítač se přepisuje inicializaci A=MODRA jako A=1 (indexuje), stačí mu jen jeden Byte pro 256 výčtů, 2 Byte pro 65536 výčtů a tak pod. K proměnné A lze přistupovat i jako k int či char (A=3, A=‘*‘).

 

Specifická konstrukce enum:

 

typedef enum

{

BILA=11, MODRA, ZLUTA, ZELENA

} barvy;

barvy A;

 

Tato konstrukce umožňuje změnit indexování konstant výčtu nového datového typu. Tato konstrukce se nedoporučuje používat, a už vůbec ne jinak, než je uvedeno. Převaděč přiděluje indexy konstantám dle jejich pořadí vzestupně. Narazí-li na explicitní inicializaci BILA=11, bude další indexování 12,13 …

 

 

PŘÍKLAD: enum_1

typedef enum                                                      //hlavička pro deklaraci nového výčtového typu

 {                                                                           //začátek těla deklarací

  MODRA, ZELENA, ZLUTA,          // 0, 1, 2,

  FIALOVA, CERNA, BILA,                             // 3, 4, 5,

  CERVENA, RUDA, HNEDA                           // 6, 7, 8

 } barvy;                                                               //název synonyma nového datového typu pro typedef

barvy A;                                                              //alokace  paměti (dle nastavení překladače)

barvy B;                                                               //alokace  paměti (dle nastavení překladače)

A=MODRA;                                        //inicializace A konstantou MODRA z výčtu barvy

B=4;                                                                      //inicializace B indexem výčtového typu barvy

if(A==MODRA)                                                 //test podmínky hodnoty A a hodnoty z výčtu barvy

        cout<<"A=MODRA"<<endl;                  //výpis informační zprávy

if(B==4)                                                                //test podmínky hodnoty A a indexu jako int

        cout<<"B=CERNA"<<endl;                     //výpis informační zprávy

getchar();                                                             //čekání na entr

return 0;                                                               //výstup z konzolové aplikace

 

Příklad demonstruje využití příkazu enum pro definici nového výčtového typu, jehož název je pomocí typedef předefinován na název barvy. Následně je v těle příkazu enum definován výčet dat pro barvy. Těm je implicitně přidělen index od 0 výše dle pořadí za sebou. Dále jsou deklarovány proměnné A, B jako výčtový typ barvy a je alokováno určité množství bajtu v paměti. Poznámka: zpravidla 1 Byte, který dovolí 256 výčtů (MODRA, ZELENA ….) je dostačující. Proměnná A je inicializována přímo předefinovanou konstantou MODRA. Proměnná B je inicializována pomocí hodnoty čísla (indexu) 4, což představuje CERNA. Proměnné lze testovat na hodnoty dle syntaxního názvu či hodnoty jako int.

 

 

PŘÍKLAD: enum_2

typedef enum                       //hlavička pro deklaraci nového výčtového typu

     {                                        //začátek těla deklarací

     FALSE,                            // 0

     TRUE                               // 1 ,POZN: zde není středník ani čárka

     }boolean;                        //název synonyma nového datového výčtu pro typedef

boolean stav;                       //alokace paměti jako 1x signed char

stav=FALSE;                       //inicializace konstantou FALSE (tedy 0)

cout<<!stav;                        //výstup negované hodnoty stav jako int (tedy 1)

cout<<stav<<endl;             //výstup aktuální hodnoty stav jako int (tedy 0)

getchar();                              //čekání na entr

return 0;                                //opuštění konzolové aplikace

 

Příklad simuluje datový typ boolean, který reprezentuje pouze dva logické stavy false a true. Tyto stavy jsme si nadefinovali v těle enum jako syntaxi FALSE a TRUE. Poznámka: false a true nelze, neboť to jsou klíčová slova. Převaděč implicitně indexoval jako FALSE  0 a TRUE 1. Poznámka: Pozor pořadí FALSE a TRUE. Název nového výčtového typu je boolean (pozor není syntaxně klíčové slovo) a dále deklarujeme proměnnou stav jako boolean. Logicky se jedná o dvoustavový bool, ale pro alokaci je  použit 1 Byte. Inicializujeme jako FALSE. Do vstupního proudu vstupuje hodnota negovaného boolean, což je TRUE. Cout zpracuje proměnnou jako int a vypíše 1. Že !stav nezpůsobilo negaci vlastní hodnoty nam vypíše následující řádek.

 

 

PŘÍKLAD: enum_3

typedef enum                                      //hlavička pro deklaraci nového výčtového typu

     {                                                        //začátek těla deklarací

     JABKO=11,                                     // 11,

     BANAN,                                         // 12,

     HRUSKA,                                       // 13,

     SVESTKA                                       // 14

     }ovoce;                                           //název synonyma nového datového výčtu pro typedef

ovoce A=13;                                        //inicializace B indexem výčtového typu barvy

if(A==HRUSKA)                                //test podmínky hodnoty A a hodnoty z výčtu barvy

        cout<<"A=HRUSKA";              //výpis informační zprávy

getchar();                                             //čekání na entr

return 0;                                                //výstup z konzolové aplikace

 

Příklad demonstruje jak lze změnit implicitní indexování od 0. Je vytvořená definice výčtového typu s názvem ovoce, kde jsou předdefinované syntaxe možných výčtů. První položka je inicializována hodnotou 11, která nastavuje indexaci od hodnoty 11. Následující výčty jsou automaticky indexovány jako o jedno vyšší než předchozí. Explicitní inicializace proměnné A jako výčtu typu ovoce nastavuje hodnotu indexu na 13, což představuje výčet HRUSKA. Potvrzení nám dává informační cout v testu podmínky if.

 

 

PŘÍKLAD: enum_4

typedef enum                                                      //hlavička pro deklaraci nového výčtového typu

 {                                                                           //začátek těla deklarací

  MODRA, ZELENA, ZLUTA,          // 0, 1, 2,

  FIALOVA, CERNA, BILA,                             // 3, 4, 5,

  CERVENA, RUDA, HNEDA                           // 6, 7, 8

 } barvy;                                                               //název synonyma nového datového typu pro typedef

char *n_barvy[]=                                               //deklarace proměnné jako ukazatele na pole charů

 {

  "MODRA", "ZELENA", "ZLUTA",

  "FIALOVA", "CERNA", "BILA",

  "CERVENA", "RUDA", "HNEDA"

 };

for(int i=0;i<9;i++)                              //od i=0 do i=9 při zvyšování x o jedna

    cout<<n_barvy[i]<<endl;                             //příkaz těla for, výstup na obrazovku

getchar();                                                             //čekání na entr

return 0;                                                               //výstup z konzolové aplikace

 

Příklad demonstruje elegantní formu výpisu znakové syntaxe výčtového typu. Příkazem enum je definovaný výčet pro typ barvy. Ta samá kopie je provedená jako pole charů, do které je možné přistupovat pomocí ukazatelů. Index přístupu k znakovému řetězci je stejný jako indexování výčtu hodnot barvy. Smyčka cyklu for provede výstup znakových řetězců na monitor.

 

 

 



Abecední seznam všech článků Vyhledání pojmů ve článcích




Procesory a mikroprocesory
Obecný úvod do základů mikroprocesorové techniky, architektury počítačů
knihy/mikroprocesory/obsah_mikro2.php
CSS html vlasnosti
Přehled CSS vlastností pro tvorbu webu
datove_zdroje/stranky/css
Číslicové počítače
Základní aritmetické operace, logické operace a vztahy mezi nimi.
programovani/cislicove_pocitace
Zapojení kabelů
Popis vývodů a křížení různých propojovacích kabelů
konektory.php
Mikroprocesory IV.
Varianty návrhu číslicových řídících systémů realizovaných jako sekvenční obvody.
programovani/procesory_4
JavaScript - ukázky
Příklady užití některých často používaných efektů na stránky.
katalogy/javascript
Programování PHP
Články o programování webových stránek pomocí PHP.
internet/katalog_programovani_php
Popis jazaka C
Průvodce příkazy programovacího jazyka C.
programovani/jazyk_c
Weby o programování
Odkazy na velké servery o programování a vývoji SW
odkazy/programovani
Otevře stránky Fulltextové vyhledávání na celém serveru
Digitalizované odborné knihy
Velká encyklopedie pojmů a zkratek
Česko - anglicko - německý technický slovník
Klasický katalog firem, služeb a stránek
OnLine překladač  vět a textů (nepoužívá Google)
Stránky pro chvíle oddechu od studia, relaxace
Katalog českých firem dle technologií
Internetový odkazník
Otevře hlavní stranu pro oddíl programování




 Wikipedie   Seznam stránek   Kapitoly témat   Významné servery   Klíčová slova 








Otevře hlavní stranu společnosti AmaPro

Všechna práva vyhrazena. Určeno jen pro osobní využití. Bez předchozího písemného souhlasu správce www.amapro.cz je zakázána jakákoli další publikace, přetištění nebo distribuce jakéhokoli materiálu nebo části materiálu zveřejněného na www.amapro.cz a to včetně šíření prostřednictvím elektronické pošty. Články, jejichž přímým autorem není amapro.cz lze publikovat pouze se souhlasem jejich majitelů či administrátoru příslušného webu.