Štruktúry (jazyk C): Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 58: Riadok 58:
 
<source lang="c">
 
<source lang="c">
 
#define MAX 20
 
#define MAX 20
  struct sMatica
+
struct sMatica
  {
+
{
    int r,s;
+
  int r,s;
    int M[MAX][MAX];
+
  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


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

  1. K položkám štruktúry pristupujeme pomocou operátora bodka ´.´
  2. Pre prácu s položkami štruktúry platia rovnaké pravidlá ako s premennými danej položky
    1. V našom príklade je d.den a d.rok dátový typ int
    2. 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:

Matica A
0 1
1 2
2 3

Matica B bude mať hodnoty:

Matica B
0 0 0
0 1 2
0 2 4
0 3 6