Štruktúry (jazyk C): Rozdiel medzi revíziami
Riadok 58: | Riadok 58: | ||
<source lang="c"> | <source lang="c"> | ||
#define MAX 20 | #define MAX 20 | ||
− | + | struct sMatica | |
− | + | { | |
− | + | int r,s; | |
− | + | int M[MAX][MAX]; | |
− | + | } | |
</source> | </source> | ||
+ | V progmame použijeme túto štruktúru nasledovne: | ||
+ | <source lang="c"> | ||
+ | int main() | ||
+ | { | ||
+ | sMatica A,B; | ||
+ | A.r=3; | ||
+ | A.s=2; | ||
+ | for(int i=0 ; i<A.r ; i++) | ||
+ | for(int j=0 ; j<A.s ; j++) | ||
+ | A.M[i][j]=i+j; | ||
+ | |||
+ | B.r=4; | ||
+ | B.s=3; | ||
+ | for(int i=0 ; i<B.r ; i++) | ||
+ | for(int j=0 ; j<B.s ; j++) | ||
+ | B.M[i][j]=i+j; | ||
+ | } | ||
+ | </source> | ||
+ | Matici A sme nastavili rozmery 3x2, matici B rozmery 4x3. Pre prístup k položkám matice A použijeme zápis A.M. Tento výraz predstavuje dvojrozmerné pole celých čísel, preto musíme ešte špecifikovať index riadku a stĺpca. Matica A bude mať hodnoty: | ||
+ | {| class="wikitable" style="width:150px" border=1 cellpadding=5 | ||
+ | |+ Matica A | ||
+ | |- | ||
+ | | 0 | ||
+ | | 1 | ||
+ | |- | ||
+ | | 1 | ||
+ | | 2 | ||
+ | |- | ||
+ | | 2 | ||
+ | | 3 | ||
+ | |} | ||
+ | Matica B bude mať hodnoty: | ||
+ | {| class="wikitable" style="width:150px" border=1 cellpadding=5 | ||
+ | |+ Matica B | ||
+ | |- | ||
+ | | 0 | ||
+ | | 0 | ||
+ | | 0 | ||
+ | |- | ||
+ | | 0 | ||
+ | | 1 | ||
+ | | 2 | ||
+ | |- | ||
+ | | 0 | ||
+ | | 2 | ||
+ | | 4 | ||
+ | |- | ||
+ | | 0 | ||
+ | | 3 | ||
+ | | 6 | ||
+ | |} |
Verzia zo dňa a času 16:36, 26. december 2009
Obsah
Definícia štruktúr
Štruktúry majú v jazyku C význam dátových kontainerov, ktoré obsahujú pomenované položky ľubovoľného dátového typu. Štruktúry sú podobné dátovému typu záznam (record) v jazyku Pascal. Položky štruktúry sú uložené postupne v pamäti v poradí, ako boli zadefinované. Veľkosť štruktúry je totožná súčtu veľkostí všetkých jej premenných.
Príklad definície štrutúry:
1 struct datum
2 {
3 int den;
4 char mesiac[8];
5 int rok;
6 };
Vysvetlenie:
Riadok č. 1 - definícia štruktúry s názvom "datum". den a rok sú celočíselné typy (riadok č. 3 a 5), mesiac je reťazec (riadok č. 4). Definícia štruktúry musí byť uzatvorená v zložených zátvorkách '{' a '}' a za ukončujúcou zátvorkou je bodkočiarka ';'.
Použitie štruktúry a prístup k jej položkám
datum d; // d je premenná typu datum
d.den=1;
strcpy(d.mesiac,"januar");
d.rok=2010;
Pravidlá pre prácu s položkami štruktúry
- K položkám štruktúry pristupujeme pomocou operátora bodka ´.´
- Pre prácu s položkami štruktúry platia rovnaké pravidlá ako s premennými danej položky
- V našom príklade je d.den a d.rok dátový typ int
- d.mesiac je dátový typ jednorozmerné pole znakov.
Inicializácia
Položky štruktúry môžeme inicializovať pri vytváraní inštancie štruktúry. Ak štruktúru neinicializujeme, jej hodnoty zostanú tiež neinicializované (budú obsahovať náhodné hodnoty). Poradie inicializácie premenných štruktúry je rovnaké ako je poradie pri definícii. Nasledujúci kód vytvorí premennú d2 typu datum a inicializuje ho na "1. januar 2010". Tento kód robí urobí to isté ako v predchádzajúcom príklade.
datum d2={1,"januar",2010};
Hodnoty pri iniciaizácii musia zodpovedať dátovým typom štruktúry. V našom prípade musí byť ako prvá hodnota celé číslo, nasleduje pole znakov a akao posledný údaj je opäť celé číslo.
Práca s položkami štruktúry
Povolené operácie so štruktúrami
- Prístup k položkám
- d.den
- Priradenie hodnôt položkám štruktúry
- d.den=3
Pozor, pravidlá pre priradenie hodnôt pre dátový typ pole! - Priradenie rovnakých štruktúr
- d2=d
Nepovolené operácie so štruktúrami
- Porovnenie štruktúr
- Štruktúry ao celok sa nedajú použiť v relačných výrazoch. Pri porovnávaní musíme pracovať s položkami štruktúry.
Vzorový príklad
Zadanie: Vytvorte štruktúru, ktorá bude reprezentovať maticu. Matica je charakterizovaná počtom riadkov, počtom stĺpcov a samotným dátovou štruktúrou dvojrozmerné pole. Uvažujme max. rozmery 20x20.
Riešenie 1: Pre reprezenttáciu matice si vytvoríme 2rozmerné statické pole. Ako prvé si zadefinujeme štruktúru sMatica, ktorá nám bude reprezentovať našu maticu:
#define MAX 20
struct sMatica
{
int r,s;
int M[MAX][MAX];
}
V progmame použijeme túto štruktúru nasledovne:
int main()
{
sMatica A,B;
A.r=3;
A.s=2;
for(int i=0 ; i<A.r ; i++)
for(int j=0 ; j<A.s ; j++)
A.M[i][j]=i+j;
B.r=4;
B.s=3;
for(int i=0 ; i<B.r ; i++)
for(int j=0 ; j<B.s ; j++)
B.M[i][j]=i+j;
}
Matici A sme nastavili rozmery 3x2, matici B rozmery 4x3. Pre prístup k položkám matice A použijeme zápis A.M. Tento výraz predstavuje dvojrozmerné pole celých čísel, preto musíme ešte špecifikovať index riadku a stĺpca. Matica A bude mať hodnoty:
0 | 1 |
1 | 2 |
2 | 3 |
Matica B bude mať hodnoty:
0 | 0 | 0 |
0 | 1 | 2 |
0 | 2 | 4 |
0 | 3 | 6 |