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

[C++] Tablica dwuwymiarowa do funkcji

Ostatnio zmodyfikowano 2015-12-02 15:16
Autor Wiadomość
zelek52
Temat założony przez niniejszego użytkownika
[C++] Tablica dwuwymiarowa do funkcji
» 2015-12-02 14:44:34
Witam, próbuję stworzyć program pobierający od użytkownika elementy tablicy dwuwymiarowej, a potem sumujący obie. Działał program z tablicami jednowymiarowymi, jednak po przekształceniu wysypuje kilka błędów. Używam Codeblocks. Proszę o pomoc. (PS Jeszcze nie miałem wskaźników, więc w zadaniu nie można ich użyć, jeśli się da to również nie chciałbym innych bibliotek używać.)

mój kod :

C/C++
#include <iostream>

using namespace std;

void wczytaj_tab( int wiersz, int kolumna );
void wypisz_tab( int wiersz, int kolumna );
float suma_tab( int wiersz, int kolumna, float pierwsza[][], float druga[][] );

float tab_a[ 100 ][ 100 ];
float tab_b[ 100 ][ 100 ];
float tab_c[ 100 ][ 100 ];

int main()
{
    int n, m;
   
    cout << "Ile wierszy maja miec obie tablice (1-100)?\n";
    cin >> n;
    cout << "Ile kolumn maja miec obie tablice (1-100)?\n";
    cin >> m;
   
   
   
    if( n > 0 && n <= 100 && m > 0 && m <= 100 )
    {
        wczytaj_tab( n, m );
        suma_tab( n, m, tab_a, tab_b );
        wypisz_tab( n, m );
       
    }
    else
    {
        cout << "Nieprawidlowy rozmiar !" << endl;
    }
   
}

void wczytaj_tab( int wiersz, int kolumna )
{
    cout << "Wprowadzanie elementow do pierwszej tablicy" << endl;
    for( int i = 0; i < wiersz; i++ )
    {
        for( int j = 0; j < kolumna; j++ )
        {
            cout << "Tab_a[" << i << "][" << j << "] = ";
            cin >> tab_a[ i ][ j ];
        }
    }
    cout << endl;
    cout << "Wprowadzanie elementow do drugiej tablicy" << endl;
   
    for( int i = 0; i < wiersz; i++ )
    {
        for( int j = 0; j < kolumna; j++ )
        {
            cout << "Tab_b[" << i << "][" << j << "] = ";
            cin >> tab_b[ i ][ j ];
        }
    }
   
}



float suma_tab( int wiersz, int kolumna, float pierwsza[][ 100 ], float druga[][ 100 ] )
{
    for( int i = 0; i < wiersz; i++ )
    {
        for( int j = 0; j < kolumna; j++ )
        {
            tab_c[ i ][ j ] = tab_a[ i ][ j ] + tab_b[ i ][ j ];
        }
    }
}




void wypisz_tab( int wiersz, int kolumna )
{
    cout << "wydruk pierwszej tablicy :" << endl;
    for( int i = 0; i < wiersz; i++ )
    {
        for( int j = 0; j < kolumna; j++ )
        {
            cout << "Tab_a[" << i << "][" << j << "] = "; << tab_a[ i ][ j ] << endl;
        }
    }
    cout << endl;
    cout << "wydruk drugiej tablicy :" << endl;
   
    for( int i = 0; i < wiersz; i++ )
    {
        for( int j = 0; j < kolumna; j++ )
        {
            cout << "Tab_b[" << i << "][" << j << "] = "; << tab_b[ i ][ j ] << endl;
        }
    }
   
    cout << endl;
   
    cout << "Suma tablic :" << endl;
   
    for( int i = 0; i < wiersz; i++ )
    {
        for( int j = 0; j < kolumna; j++ )
        {
            cout << "Tab_c[" << i << "][" << j << "] = "; << tab_c[ i ][ j ] << endl;
        }
    }
   
}

błędy :


mingw32-g++.exe   -c "C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp" -o "C:\Users\zelos\Desktop\programowanie\zadanie tablice.o"
C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp:7:60: error: declaration of 'pierwsza' as multidimensional array must have bounds for all dimensions except the first
C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp:7:61: error: expected ')' before ',' token
C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp:7:63: error: expected unqualified-id before 'float'
C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp: In function 'void wypisz_tab(int, int)':
C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp:89:55: error: expected primary-expression before '<<' token
C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp:99:55: error: expected primary-expression before '<<' token
C:\Users\zelos\Desktop\programowanie\zadanie tablice.cpp:111:55: error: expected primary-expression before '<<' token
Process terminated with status 1 (0 minute(s), 0 second(s))
6 error(s), 0 warning(s) (0 minute(s), 0 second(s))
 
P-141286
Monika90
» 2015-12-02 14:50:24
Jeszcze nie miałem wskaźników, więc w zadaniu nie można ich użyć
To jak bez wskaźników zrobiłeś zadanie dla tablic jednowymiarowych?
P-141287
zelek52
Temat założony przez niniejszego użytkownika
Kod dla tablic jednowymiarowych
» 2015-12-02 14:53:49
Wszystko się kompiluje i prawidłowo działa, więc chyba jest dobrze
W taki sposób :

C/C++
#include <iostream>

using namespace std;

void wczytaj_tab( int n );
void wypisz_tab( int n );
float suma_tab( int n, float pier[], float dru[] );

float tab_a[ 20 ];
float tab_b[ 20 ];
float tab_c[ 20 ];

int main()
{
    int n;
   
    cout << "Ilu elementowe maja byc tablice? 1-20" << endl;
    cin >> n;
   
    if( n > 0 && n <= 20 )
    {
        wczytaj_tab( n );
        suma_tab( n, tab_a, tab_b );
        wypisz_tab( n );
       
    }
    else
    {
        cout << "Nieprawidlowy rozmiar !" << endl;
    }
   
}

void wczytaj_tab( int n )
{
    cout << "Wprowadzanie elementow do pierwszej tablicy" << endl;
    for( int i = 0; i < n; i++ )
    {
        cout << "Tab_a[" << i << "]= ";
        cin >> tab_a[ i ];
    }
    cout << endl;
    cout << "Wprowadzanie elementow do drugiej tablicy" << endl;
   
    for( int i = 0; i < n; i++ )
    {
        cout << "Tab_b[" << i << "]= ";
        cin >> tab_b[ i ];
    }
   
}



float suma_tab( int n, float pier[], float dru[] )
{
    int i;
    for( i = 0; i < n; i++ )
    {
        tab_c[ i ] = pier[ i ] + dru[ i ];
    }
   
}




void wypisz_tab( int n )
{
    int i;
    cout << "wydruk pierwszej tablicy :" << endl;
    for( i = 0; i < n; i++ )
    {
        cout << "Tab_a[" << i << "] = " << tab_a[ i ] << endl;
    }
   
    cout << endl;
    cout << "wydruk drugiej tablicy :" << endl;
   
    for( i = 0; i < n; i++ )
    {
        cout << "Tab_b[" << i << "] = " << tab_b[ i ] << endl;
    }
   
    cout << endl;
   
    cout << "Suma tablic :" << endl;
   
    for( i = 0; i < n; i++ )
    {
        cout << "Tab_c[" << i << "] = " << tab_c[ i ] << endl;
    }
   
}
P-141288
carlosmay
» 2015-12-02 14:58:58
C/C++
float suma_tab( int wiersz, int kolumna, float pierwsza[][], float druga[][] );
// pierwszego wymiaru nie podajesz, ale każdy nastepny musisz
 
C/C++
cout << "Tab_a[" << i << "][" << j << "] = "; << tab_a[ i ][ j ] << endl; // ????? [/cpp]
P-141290
Monika90
» 2015-12-02 14:58:58
Więc w tej deklaracji pier i dru to są wskaźniki, choć z pozoru nie wyglądają na wskaźniki.
C/C++
float suma_tab( int n, float pier[], float dru[] );


Dla tablic dwuwymiarowych możesz zrobić analogicznie, ale musisz podać drugi wymiar
C/C++
float suma_tab( int wiersz, int kolumna, float pierwsza[][ 100 ], float druga[][ 100 ] );
P-141291
zelek52
Temat założony przez niniejszego użytkownika
» 2015-12-02 15:05:23
więc użytkownik nie ma możliwości samemu podać wielkości drugiego i następnego wymiaru?

edit : dobra, już zrozumiałem, dziękuję bardzo za pomoc! :)
P-141292
carlosmay
» 2015-12-02 15:09:16
więc użytkownik nie ma możliwości samemu podać wielkości drugiego i następnego wymiaru?
 Musisz podać wszystkie wymiary jeśli chcesz pracować na takiej tablicy.
Pierwszy podajesz osobno, bo podany w deklaracji tablicy w nagłówku jest ignorowany,
a każdy następny musisz zamieścić w deklaracji tablicy.
P-141293
zelek52
Temat założony przez niniejszego użytkownika
» 2015-12-02 15:13:30
okej, już zrozumiałem : drugi i następny wymiar muszę podać, ale użytkownik wywołuje tylko tyle ile potrzebuje. Dziękuję za pomoc carlosmay, Monika90 ! :)
P-141294
« 1 » 2
  Strona 1 z 2 Następna strona