C++ - 5. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ - 5. lekceC++ - 5. lekce

 

C++ - 5. lekce

Google       Google       13. 4. 2005       96 104×

  • struktury – deklarace, inicializace, volání
  • pole struktur
  • bitová pole
  • uniony
  • úkol č. 5

Struktury

Úvod do struktur

Předpokládejme, že chcete (a nekecejte, že ne) uložit jméno, věk a BMI index několika osob. Pole, leč může obsahovat několik položek, to neudělá, protože musí být stejného typu. Odpovědí je struktura v C++. Chcete-li si udělat přehled o všech zaměstnancích, vytvoříte pole struktur. Struktura je jistým prostředkem vedoucím do lahůdky C++ v OOP, třídy. Díky strukturám se přiblížíte OOP (Objektově orientovanému programování), srdci C++.

Struktury tvoříme nejčastěji vně f-ce main. Nazývá se externí deklarací struktury. Proč? Externí deklarace se může použít u všech f-cí, které ji následují, kdežto interní deklarace (např. hned za složenou závorkou za int main) se může použít pouze ve f-ci, ve které se nachází.

Deklarace struktury:


struct nazev_promenne
{
   char jmeno[10];
   int vek;
   double bmi;
};

Inicializace struktury

(za nazev_promenne jsme si zvolili lide):


lide ales =
{
   "Ales",    //jmeno
   22,         // vek
   11.49     // bmi index
};

Volání některé proměnné ze struktury

Chceme-li vyvolat věk alese, napíšeme:


cout << ales.vek;

To vypíše 22, tedy věk Aleše.

. je operátor příslušnosti. (ales.vek – proměnná vek ve struktuře ales)

Vytvořit struktur si můžeme, kolik chceme, klidně celý počet zaměstnanců. Tedy např.:


lide petr =
{ ... }

…atp

Nebo si můžeme vytvořit prázdné struktury:


lide martin, honza, alena;

Vytvořili jsme tři struktury, každá má svoje proměnné stejně jako ales, ale nemají žádné hodnoty. K čemu by nám ale byly struktury, které mají pevně stanovené hodnoty. Pokud chceme například zapsat vek do struktury alena, napíšeme:


alena.vek = 17;

Je to snadné, stejně jako proměnné, jen tu je navíc tečka, která nám ukazuje, kam daná proměnná patří.

Vytvořit struktury můžeme už při její deklaraci:


struct lide
{
   int vek;
} milan;

Je to stejné jako:


struct lide
{
   int vek;
};
lide milan;

Kdo přesně stále nechápe struktury, malé vysvětlení:


struct osoba
{ 
char jmeno[20];
int vek[20];
char prace[20];
} zamestnanec;

Proč nefunguje např. cout << osoba.jmeno;, ale cout << zamestnanec.jmeno;? Co značí „osoba“ a co „zamestnanec“?

Protože:


struct osoba
{ 
char jmeno[20];
int vek[20];
char prace[20];
};

…je jen DEFINICE, nemá žádné hodnoty.

Vysvětlím to jinak:

Jsou to šuplíky, koupil sis nábytek se třemi šuplíky a teď do nich chceš dát mrkev, hrách a petržel a nazveš to ZELENINA. Takže pokud chceš hrách, dáš zelenina.hrach

A zase: můžeš do nich dát i rýži, fazole a čočku a nazveš to LUSTENINY. Přístup bude: lusteniny.fazole

Ale všechno můžeš mít v těch šuplících. Oni dávají jen místo, je na tobě, jak si to celé pojmenuješ a pak jim dáš hodnotu.

Příklad použití:


#include <iostream>
using namespace std;
struct rostliny
{
char jmeno[20];
float vaha;
double cena;
};
int main()
{
rostliny venkovni =
{
"slunecnice",
0.20,
12.49
};
rostliny vyber;
cout << "kytice: " << venkovni.jmeno << " za ";
cout << venkovni.cena << " Kc\n";
vyber = venkovni; // přiřadí jednu strukturu druhé
cout << "vyber: " << vyber.jmeno << " za ";
cout << vyber.cena << " Kc\n";
return 0;
}

Tady jsme si ukázali i kopírování jedné struktury do druhé.

Pole struktur

Je možné vytvořit i pole, jehož prvky jsou struktury:


rostliny vnitrni[100];    // pole o 100 strukturách rostliny
vnitrni[0].cena;     // pouzije promennou cena ze struktury vnitrni[0]

Bitová pole

C++ (podobně jako C) vám umožňuje specifikovat strukturní členy, které zaujímají určitý počet bitů. To můžete použít např. na vytvoření datové struktury, která odpovídá registru nějakého hardwarového zařízení.


struct vypocet
{
   int key : 4;                // 4 bity pro hodnotu key
   bool otazka : 1;        // platný vstup (1 bit)
};

Pro přístup k bitovým polím použijte stejnou syntaxi jako u struktur.

vypocet.key = ...

Bitová pole se často používají na úrovni strojově orientovaného programování.

Uniony

Union je datovým formátem, který může používat různé datové typy, ale pouze jeden typ v daném okamžiku. Zatímco struktura může používat typy int, long a float, union může buď int, nebo long, nebo float. Syntaxe je podobná jako u struktur, jen význam různý.


union zkouska
{
  int hodn1;
  long hodn2;
  double hodn3;
};

Proměnnou zkouska můžete využít na uchování int, long, double pouze tak dlouho, dokud potřebujete:


zkouska stetec;
stetec.hodn1 = 15;            // uloží int
cout << stetec.hodn1;
stetec.hodn2 = 1.25;        // uloží double, hodnota int se ztratí
cout << stetec.hodn2;

Protože v jednom okamžiku proměnná obsahuje jen jednu hodnotu, musí mít dostatek prostoru na úschovu svého nevětšího členu. Z toho důvodu je velikost unionu velikostí největšího členu. Kde se používá? Úspora prostoru…

Úkol:

Vytvořte fiktivní podnik, který bude mít x struktur na seznam zaměstnanců. X je počet zaměstnanců, které určí uživatel na začátku programu. Poté bude uživatel vyzván k zadání 1. zaměstnance a tak dále, dokud se nedostane k poslednímu zaměstnanci, nebo pokud uživatel již nechce přidat dalšího zaměstnance (mezi přidáním dalšího zaměstnance bude otázka, zda si přeje založit dalšího zaměstnance). Pokud odpoví, že již ne, program vypíše všechny údaje o všech zaměstnancích v TABULCE (použití \t, \n apod.) a název firmy. Každý zaměstnanec bude mít následující udaje: jmeno, vek a druh prace. Maximální počet zaměstnanců bude 32 000 (aby to bylo int) ;)

Rada pro ty, co neví: struktury a cykly.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Lukáš ChurýLukáš je šéfredaktorem Programujte, vyvíjí webové aplikace, fascinuje ho umělá inteligence a je lektorem na FI MUNI, kde učí navrhovat studenty GUI. Poslední dobou se snaží posunout Laser Game o stupeň výše a vyvíjí pro něj nové herní aplikace a elektroniku.
Web     Twitter     Facebook     LinkedIn    

Nové články

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Reklama autora

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý