headerphoto

Pole jako parametr funkce

Pokud použijeme pole jako parametr funkce, funguje vždy jako vstupně-výstupní parametr. To znamená, že hodnoty uložené v poli do funkce vstupují a zároveň, pokud se ve funkci změní, z funkce vystupují. Není potřebné je předávat z funkce přes návratovou hodnotu.

Vysvětlení: název pole je zároveň adresou pole. Po předání pole do funkce, pracuje funkce přímo na té adrese v paměti, kde jsou uložena data z pole.


1. Funkce pro výpis hodnot z pole

Budeme pracovat s polem reálných čísel. Funkce vypíše všechna čísla uložená v poli.

Vstupy do funkce: hodnoty pole (musíme vědět, jaké pole použijeme) a aktuální počet hodnot v poli (jinak bychom nevěděli, kolik je hodnot).

Výstupy z funkce (t.j. co se změnilo): funkce jenom hodnoty vypíše, nic se nemění. Funkce nemá žádný výstup, použijeme funkci typu void.

void vypis_pole(float pole[], int n)  
  {
     if( n == 0 )
     {
        printf("Nejsou zapsana zadna cisla\n");
        return;                           
     }
     printf("\nV poli jsou zapsany hodnoty : \n");
     for( i = 0; i < n; i++ )
     {
           printf("%.2f, ", pole[i]);
     }
     printf("\n\n"); 
  } 
 
 


2. Funkce pro přidání hodnoty do pole

Budeme pracovat s polem reálných čísel. Funkce přidá do pole jedno číslo, které umístíme na konec pole (za všechny předchozí hodnoty). Hodnotu čísla načteme z klávesnice.

Vstupy do funkce: hodnoty pole (musíme vědět, do jakého pole přidáváme) a aktuální počet hodnot v poli (jinak bychom nevěděli, na kterou pozici přidáváme).

Výstupy z funkce (t.j. co se změnilo): hodnoty pole (přibylo jedno číslo) a aktuální počet hodnot.

Máme tedy 2 vstupní a 2 výstupní proměnné. Pokud tedy pole uvedeme jako parametr funkce, bude vstupem a zároveň výstupem. To samé ale potřebujeme i pro počet hodnot, který do funkce vstupuje a potřebuje ho taky vrátit z funkce, protože se změní. Aktuální počet hodnot bude určitě druhým parametrem funkce. Jeho výstup lze vyřešit 2 způsoby: vrátit změněný počet přes návratovou hodnotu funkce nebo použít pro počet ukazatel. Druhý způsob je přehlednější, ale možný až při znalosti práce s ukazateli.

  //první varianta
 int pridej_do_pole1(float pole[], int n)
  {
     float cislo;
     if( n == MAX )                 //testování na maximální rozsah pole
     {
        printf("Nelze dale vkladat cisla, prekrocen povoleny rozsah\n");
        return -1;                           
     }
     printf("\nZadej cislo: ");
     scanf("%f", &cislo);
     pole[n] = cislo;
     n++;
     return n;
  } 
 
 

  //druhá varianta - nutná znalost práce s ukazatelem
 void pridej_do_pole2(float pole[], int *n)
  {
     int i;
     float cislo;
     if( *n == MAX )                 //testování na maximální rozsah pole
     {
        printf("Nelze dale vkladat cisla, prekrocen povoleny rozsah\n");
        return ;                           
     }
     printf("\nZadej cislo: ");
     scanf("%f", &cislo);
     pole[*n] = cislo;
     (*n)++;
  } 
 
 

Použití funkcí ve funkci main():

  
 int main()
  {
     int pocet = 0;
     float cisla[MAX];
     ...
     //chci přidat jedno číslo do pole cisla
     pocet = pridej_do_pole1(cisla, pocet);    // pridej_do_pole2(cisla, &pocet);
     ...
     //chci vypsat všechny hodnoty z pole cisla
     vypis_pole(cisla, pocet);
     ...
  } 
 
 

Poznámka: pokud chceme použít jako parametr funkce vícerozměrné pole, nemůžeme v hlavičce funkce nechat u názvu pole jenom prázdné závorky, je třeba v nich uvést maximální rozměr pole.

Design downloaded from Free Templates - your source for free web templates