Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja wypełniająca tablicę dwuwymiarową losowymi liczbami

Ostatnio zmodyfikowano 2017-03-03 22:30
Autor Wiadomość
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...
C/C++
#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ć?
P-158486
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:
C/C++
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ć.
P-158487
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...
P-158489
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ą.
P-158490
mokrowski
» 2017-03-03 22:30:32
C/C++
....

int ** wywolanie( int wysokosc, int niskosc ) {
    // Inicjalizacja i budowanie pustej tablicy
    int ** tablica = new int *[ wysokosc ];
    for( int i = 0; i < wysokosc; ++i ) {
        tablica[ i ] = new int[ niskosc ];
    }
   
    srand( time( NULL ) );
   
    // Wypełnianie wartościami losowymi
    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';
    }
}

// Usuwa tablice
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" );
}
P-158492
« 1 »
  Strona 1 z 1