Rainbow Temat założony przez niniejszego użytkownika |
Funkcja wypełniająca tablicę dwuwymiarową losowymi liczbami » 2017-03-03 19:54:04 Niby proste, ale najwyraźniej mój Dev nie chce z jakiegoś powodu przepuścić, nie rozumiem dlaczego... #include<conio.h> #include<iostream> #include<windows.h> #include<cstdio> #include<cstdlib> #include<ctime> using namespace std; int wywolanie( int wysokosc, int niskosc ) { int tablica[ wysokosc ][ niskosc ]; srand( time( NULL ) ); int i = niskosc; for( wysokosc; wysokosc > 0; wysokosc-- ) { for( i; i > 0; i-- ) { tablica[ wysokosc - 1 ][ i - 1 ] = rand(); } i = niskosc; } return tablica[][]; } int main() { int wysokosc, niskosc; cout << "Podaj liczbe wierszy:" << endl; cin >> wysokosc; cout << "Podaj liczbe kolumn:" << endl; cin >> niskosc; int tablica[ wysokosc ][ niskosc ] = wywolanie( wysokosc, niskosc ); system( "pause" ); return 0; } Przy czym problem kompilator znajduje w linii 21, cytat: "[Error] expected primary-expression before ']' token". Pojawia się taka informacja dwa razy, odnosząc się do obu kwadratowych nawiasów. Ma ktoś jakiś pomysł co może by nie tak i jak to naprawić? |
|
michal11 |
» 2017-03-03 20:03:39 Nie wiem od czego zacząć to może od tego, że nie ma takiego słowa jak niskość, powinna być raczej szerokość (skoro jest wysokość). Tworzysz tablice statyczną z niestałym rozmiarem, nie powinno się tego robić, jeżeli kompilator to przepuszcza to jest to jego niestandardowe rozszerzenie. Próbujesz zwrócić nie wiadomo co, jeżeli wpisałbyś indeksy to zwróciłbyś pojedynczy element tablicy co byłoby poprawne (aczkolwiek nie tak chce żeby to działało). Twoja pętla jest dziwna, nie analizowałem jej ale dlaczego nie napiszesz po prostu tak: for( int i = 0; i < wysokosc; ++i ) { for( int j = 0; j < szerokosc; ++j ) { tab[ i ][ j ] = rand(); } }
jak jeszcze dodasz przekazywanie tablicy przez argument to powinni ci wszystko śmigać. |
|
Rainbow Temat założony przez niniejszego użytkownika |
» 2017-03-03 20:19:10 Co do niskości, to po prostu pozwoliłam sobie na taki żart w kodzie.
Próbuję zwrócić losowo wypełnioną tablicę o wymiarach wcześniej podanych, to ma robić ta funkcja. Nie do końca tego chyba rozumiem, nie wolno zwracać tablic z funkcji? Dopiero się uczę i jeszcze nie wiem wielu rzeczy, tablice dwuwymiarowe to dla mnie dzisiejszy materiał, a ten kod to mój pierwszy program z ich użyciem, więc może...
A pętla jest "dziwna", bo tak mi się napisała, mogę poprawić, ale skoro tak działa (wnioskuję po tym, że kompilator się jej nie czepia) to nie wiem po co... |
|
karambaHZP |
» 2017-03-03 21:27:25 Nie do końca tego chyba rozumiem, nie wolno zwracać tablic z funkcji? |
Niestety nie w tej postaci, jakiej oczekujesz. Można zwrócić wskaźnik (nazwę tablicy), ale typ zwraca przez funkcję powinien wyglądać int ** . Można też skorzystać z kontenera STL i wtedy traktować go jak każdą inną zmienną. |
|
mokrowski |
» 2017-03-03 22:30:32 ....
int ** wywolanie( int wysokosc, int niskosc ) { int ** tablica = new int *[ wysokosc ]; for( int i = 0; i < wysokosc; ++i ) { tablica[ i ] = new int[ niskosc ]; } srand( time( NULL ) ); for( int i = 0; i < wysokosc; ++i ) { for( int j = 0; j < niskosc; ++j ) { tablica[ i ][ j ] = rand(); } } return tablica; }
void pokaz( int ** tablica, int wysokosc, int niskosc ) { for( int i = 0; i < wysokosc; ++i ) { cout << "wiersz " << i << ": "; for( int j = 0; j < niskosc; ++j ) { cout << tablica[ i ][ j ] << " "; } cout << '\n'; } }
void usun_tablice( int ** tablica, int wysokosc ) { for( int i = 0; i < wysokosc; ++i ) { delete[] tablica[ i ]; } delete[] tablica; }
int main() { int wysokosc, niskosc; cout << "Podaj liczbe wierszy:" << endl; cin >> wysokosc; cout << "Podaj liczbe kolumn:" << endl; cin >> niskosc; int ** tablica = wywolanie( wysokosc, niskosc ); pokaz( tablica, wysokosc, niskosc ); usun_tablice( tablica, wysokosc ); system( "pause" ); }
|
|
« 1 » |