Programowanie i algorytmy

Tablica jako argument funkcji

powrót

W tym artykule opiszę w jaki sposób przekazujemy tablicę do wnętrza funkcji poprzez jej argumenty. Omówię tablice jedno i wielowymiarowe:

Na wstępie pragnę zauważyć, że nazwa tablicy jest wskaźnikiem na jej pierwszy element. Oznacza to, że przekazując tablicę będziemy pracować na jej oryginalnym adresie (wszelkie zmiany w modyfikacji tablicy będą widoczne w miejscu, gdzie ją stworzyliśmy).

 

Konstrukcja nagłówka funkcji dla tablicy jednowymiarowej
sposób 1:

typ_funkcji nazwa(typ_elementów_tablicy nazwa_tablicy[]);

 

Można opcjonalnie w nawiasie podać ilość elementów tablicy.

Przykładowa funkcja może wyglądać następująco:


void funkcja(int tablica[10]);


Zadanie. 1. Napisz program, który zamieni wartości tablicy 10 elementowej na ich kwadraty.

#include<iostream>
#include<cstdlib>
using namespace std;
 
void zamiana(int tab[])
{
        for(int i=0; i<10; i++)
                tab[i]*=tab[i]; //lub tab[i] = tab[i] * tab[i];
}
 
int main()
{
        //inicjacja tablicy
        int tablica[10] = {0, 3, 4, 3, 6, 7, 11, -5, -10, 87}; 
 
        //wypisanie elementów tablicy
        for(int i=0;i<10;i++)
                cout<<tablica[i]<<" ";
 
        cout<<endl; //wstawienie znaku końca linii (enter)
 
        //wykonanie polecenia
        zamiana(tablica); //przekazując tablicę, podajemy tylko jej nazwę
 
        //ponowne wypisanie elementów tablicy
        for(int i=0;i<10;i++)
                cout<<tablica[i]<<" ";
 
        cout<<endl;
 
        system("pause");
 
        return 0;
}
 

 

Wyście:

0 3 4 3 6 7 11 -5 -10 87 
0 9 16 9 36 49 121 25 100 7569 

 

Uwaga!!!. Przekazując tablicę wpisujemy tylko jej nazwę bez nawiasu kwadratowego.

 

Konstrukcja nagłówka funkcji dla tablicy jednowymiarowej sposób 2:

typ_funkcji nazwa(typ_elementów_tablicy *nazwa_tablicy);

 

Drugim sposobem jest przekazanie tablicy poprzez wskaźnik na pierwszy element tej tablicy.

Program będzie się różnił tylko nagłówkiem funkcji:

 

void zamiana(int *tab) 
{
  for(int i=0; i<10; i++)
    tab[i]*=tab[i]; //lub tab[i] = tab[i] * tab[i];
}
 
 

 

Konstrukcja nagłówka funkcji dla tablicy wielowymiarowej
sposób 1:

Pierwszy sposób jest podobny jak w przypadku tablicy jednowymiarowe. Przykład dotyczy tablicy dwuwymiarowej. Tablice o większej liczbie wymiarów przekazujemy podobnie. Przeanalizujmy zadanie:

Zadanie. 2. Napisz program, który zamieni wartości tablicy dwuwymiarowej o wymiarach 3x3, na ich kwadraty. Tablicę wypełniamy liczbami pseudolosowymi z przedzialu [0..9].

#include<iostream>
#include<cstdlib>
 
using namespace std;
 
void zamiana(int tab[3][3]) 
{
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      tab[i][j]*=tab[i][j]; //lub tablica[i][j] = tablica[i][j]*tablica[i][j];
}
 
int main()
{
  //inicjacja tablicy dwuwymiarowej
  int tablica[3][3] = {{1, 2, 3}, {4, 5, 6}, {-1, -2, -3}}; 
 
  //wypisanie elementów tablicy
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      cout<<tablica[i][j]<<" "; //lub tablica[i][j] = tablica[i][j]*tablica[i][j];
 
  cout<<endl; //wstawienie znaku końca linii (enter)
 
  //wykonanie polecenia
  zamiana(tablica); //przekazując tablicę, podajemy tylko jej nazwę
 
  //ponowne wypisanie elementów tablicy
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      cout<<tablica[i][j]<<" "; //lub tablica[i][j] = tablica[i][j]*tablica[i][j];
 
  cout<<endl;
 
  system("pause");
 
  return 0;
}
 

 

Przykładowe wyjście:

1 2 3 4 5 6 -1 -2 -3 
1 4 9 16 25 36 1 4 9 

 

Konstrukcja nagłówka funkcji dla tablicy wielowymiarowej
sposób 2:

Drugi sposób opiera się na utworzeniu tablicy dynamicznej postaci:

typ_tablicy **nazwa_tablicy;

 

Przeanalizujmy powyższe zadanie rozwiązane tym sposobem:

 

#include<iostream>
#include<cstdlib>
using namespace std;
 
void zamiana(int **tab) 
{
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      tab[i][j]*=tab[i][j]; //lub tab[i][j] = tab[i][j]*tab[i][j];
}
 
int main()
{
  srand(time(NULL)); //ustawienie ziarna
 
  //deklarujemy tablicę dynamicznie
  int **tablica = new int *[3];
  for(int i=0;i<3;i++)
    tablica[i] = new int [3];
 
  //przypisanie do tablicy losowych liczb z przedziału [0..9]
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      tablica[i][j] = rand()%10; 
 
  //wypisanie elementów tablicy
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      cout<<tablica[i][j]<<" "; 
 
  cout<<endl; //wstawienie znaku końca linii (enter)
 
  //wykonanie polecenia
  zamiana(tablica); //przekazując tablicę, podajemy tylko jej nazwę
 
  //ponowne wypisanie elementów tablicy
  for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
      cout<<tablica[i][j]<<" "; 
 
  cout<<endl;
 
  system("pause");
 
  return 0;
}
 

 

Tablice przydzielane dynamicznie opisane są tutaj.