Seminární skupina IB001 Úvod do programování skrze C (skupiny 27 a 28)

Týden 8

Složené (agregované) datové typy II - vícerozměrné pole

V jazyce C je možné nadefinovat vícerozměrná pole. Výhodou vícerozměrných polí může být jednodušší zápis programu. Představme si, že chceme v programu definovat matici celých čísel o rozměrech 2x2, v C to můžeme udělat takto:

// definice matice 2x2 jako dvourozmerneho pole
int matrix[2][2];
// prvky matice pak můžeme adresovat pomocí dvou indexů od 0
int a11 = matrix[0][0];

Pokud v C definujeme vícerozměrné pole výše uvedeným bude pravděpodobně (záleží na kompilátoru) v paměti toto pole reprezentováno jako jednorozměrné. Např. naše matice se nejspíše uloží tak, že se nejprve uloží jednorozměrné pole matrix[0] a za něj pole matrix[1]. Celé to pak v paměti bude vypadat pole o 4 prvcích - int pole[4] = { matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1] };

Funkce

Funkce umožňují zapsat mimo hlavní tělo programu opakující se logické celky kódu nebo např. často užívané jednoduché operace. Ústřední funkcí v programu v jazyce C je main a ostatní funkce se zapíší obdobně:

  • zapíšeme návratový typ funkce
  • poté její identifikátor (jméno)
  • poté do kulatých závorek typy a jména parametrů
  • a nakonec zapíšeme do složených závorek tělo funkce
  • funkce běžně vrací hodnotu příkazem return, není-li typu void

Zápis i užití můžeme vidět např. na funkci pro výpočet maxima ze dvou celých čísel:

// definice funkce pro vypocet maxima ze dvou cisel
int maximum(int a, int b)
{
    int max = a;
    if (b > a) {
        max = b;
    }
    return max;
}

Místo kam můžeme zapsat funkci a jak ji zavolat je vidět z následujícího kódu:

#include <stdio.h>

// Definice funkce add pred main, aby jeji jmeno bylo v main videt
// Argumenty a, b jsou jmena lokalnich promennych (v add), pri volani jsou do nich ulozeny hodnoty opravdovych argumentu
int add(int a, int b)
{
    return a + b;
}

int main(void)
{
    // Promenne a, b jsou viditelne pouze v tele funkce main
    // Jsou to tedy jine opravdove promenne nez stejnojmenne a, b z definice funkce add!
    int a, b;
    printf("Zadejte 2 cela cisla: ");
    scanf("%d %d", &a, &b);
    // Funkci zavolame zapisem jmena, za kterym nasleduji skutecne argumenty v kulatych zavorkach oddelene carkou
    int sum = add(a, b);
    printf("Soucet cisel a + b = %d", sum);
    // Funkce main vraci 0, pokud program neskoncil s chybou
    return 0;
}