Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

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 chcę zauważyć, że nazwa tablicy jest wskaźnikiem na jej pierwszy element. Oznacza to, że przekazując tablicę jako argument funkcji, 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]);

Przykład 1

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

#include<iostream>
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]<<" ";
        
        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.

Przykład 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>
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];
	
	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>
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]<<" "; 
	
	return 0;
}

Tablice przydzielane dynamicznie opisane są tutaj.