baddevil96 Temat założony przez niniejszego użytkownika |
Sposób działania tablicy jako argumentu funkcji [Lekcja 19] » 2015-11-21 23:21:56 Jestem po 19 lekcji kursu z tej strony. Właściwie do tej pory wszystko było dla mnie jasne, argumenty funkcji, jako "potrzebne rzeczy" przez funkcję, lecz nie mogłem zrozumieć sposobu działania tablic jako argumentów. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int tablica_losowanie( int t[], int iLiczby, int min, int max ) { max = max - min + 1; int i = 0; do { t[ i ] =(( rand() % max ) + min ); i++; } while( i < iLiczby ); }
int wypisz_liczby( int tablica_wypisz[], int iLiczby ) { int i = 0; tablica_wypisz[ iLiczby ]; do { cout << tablica_wypisz[ i ] << ", "; i++; } while( i < iLiczby ); }
int sumujemy( int tablica_suma[], int iLiczby ) { int i = 0; int suma = 0; do { suma = suma + tablica_suma[ i ]; i++; } while( i < iLiczby ); cout << endl << "Suma wynosi: " << suma; }
int main() { srand( time( 0 ) ); int iLiczby = 0; int min = 0; int max = 0; int tablica_zakres1[ 999 ]; cout << " Podaj ile liczb ma zostac wylosowane, max 999: "; cin >> iLiczby; cout << endl << endl << "Podaj zakres (od, do) liczb ktore maja zostac wylosowane: " << endl; cin >> min; cin >> max; cin.clear(); cin.sync(); tablica_losowanie( tablica_zakres1, iLiczby, min, max ); wypisz_liczby( tablica_zakres1, iLiczby ); sumujemy( tablica_zakres1, iLiczby ); }
No niby wszystko fajnie, zadanie zrobiłem ostatecznie bez zadnej pomocy, lecz tak naprawdę nie mam zielonego pojęcia o co chodzi z tymi tablicami.. tablica_losowanie( tablica_zakres1, iLiczby, min, max );
Wywołuje funkcje i daje jej potrzebne argumenty, w tym jeden w postaci tablicy, i magicznie tablica ktorą podałem jako argument wypełnia się liczbami wygenerowanymi tutaj: int tablica_losowanie( int t[], int iLiczby, int min, int max ) { max = max - min + 1; int i = 0; do { t[ i ] =(( rand() % max ) + min ); i++; } while( i < iLiczby ); }
No dobra, rozumiem ze dla tablicy te argumenty dzialaja jakos odwrotnie, skoro 'tablica_zakres1' dostaje dane z 't'. I potem robie osobna funkcje ktora mi te liczby wypisze: int wypisz_liczby( int tablica_wypisz[], int iLiczby ) { int i = 0; tablica_wypisz[ iLiczby ]; do { cout << tablica_wypisz[ i ] << ", "; i++; } while( i < iLiczby ); }
I w tym przypadku dane z tablicy 'tablica_zakres1' są przesłane do funkcji 'wypisz_liczby', a nie jak w poprzednim przykładzie, odwrotnie... Moze za duzo dzisiaj siedze i dostaje jakiegos mindfucka, moze napisalem zly program, w sumie juz nic nie wiem i proszę, wytłumaczy mi ktoś z jakimiś prostymi przykładami jaka jest zaleznosć miedzy tablicą a argumentem funkcji? Dzięki :) |
|
carlosmay |
» 2015-11-22 01:32:44 W wywołaniu funkcji tablica_losowanie( tablica_zakres1, iLiczby, min, max );
podajesz w argumencie nazwę tablicy, ale jej nazwa w wywołaniu funkcji jest zupełnie dowolna (taki alias nazwy). I w tym przypadku dane z tablicy 'tablica_zakres1' są przesłane do funkcji 'wypisz_liczby', a nie jak w poprzednim przykładzie, odwrotnie... |
to nie tak. Wszystkie działania odbywają się na oryginalnej tablicy, bo do funkcji przekazujesz adres początku tablicy (zapoznaj się ze wskaźnikami), czyli "wskaźnik" (można tak to nazwać, ale działa tak samo) na pierwszy element. Więc cokolwiek zrobisz z tablicą w funkcji, działasz tam gdzie jest zadeklarowana. Operator '[]' nawias kwadratowy służy do wyłuskania (odczytania) zawartości komórki tablicy pod danym nr indeksu. Można też odczytać dane z tablicy za pośrednictwem wskaźnika. int tab[ 3 ] = { 1, 2, 3 }; cout << & tab[ 0 ] << ", " << & tab[ 2 ] << endl; funkcja_edytuj_tablice( tab, 3 );
void funkcja_edytu_tablice( int tablica_w_funkcji[], int rozmiar ) { cout << & tablica_w_funkcji[ 0 ] << ", " << & tablica_w_funkcji[ 2 ] << endl; cout << * tablica_w_funkcji << endl; cout << *( tablica_w_funkcji + 1 ) << endl; }
adresy tych samych elementów pokrywają się. To dowód, że tablica nie jest przekazywana przez wartość, a w funkcji zmienia się jej identyfikator (nazwa) na dowolną zadeklarowaną w nagłówku funkcji. |
|
baddevil96 Temat założony przez niniejszego użytkownika |
» 2015-11-22 02:06:25 Czyli jeśli dobrze rozumiem... tablica_losowanie( tablica_zakres1, iLiczby, min, max );
Tutaj działam na zadeklarowanej tablicy, 'tablica_zakres1', a wywołując funkcję 'tablica_losowanie, zmieniam po prostu jej zawartosc? wypisz_liczby( tablica_zakres1, iLiczby );
Tutaj dzialam tez na 'tablica_zakres1' lecz nie modyfikuje jej zawartosci lecz po nią "sięgam"? |
|
carlosmay |
» 2015-11-22 02:33:00 Tak. |
|
« 1 » |