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

[C++] Tablica dynamiczna - problem

Ostatnio zmodyfikowano 2013-04-18 17:51
Autor Wiadomość
kys
Temat założony przez niniejszego użytkownika
[C++] Tablica dynamiczna - problem
» 2013-04-18 08:49:54
Mam pewien problem z tablicami - skompilowałem poniższy kod i wszystko działa do czasu, gdy wpisuję przykładowo 6 dostawców i 1 kryterium. Wtedy 3 pierwsze wyniki są dobre, a pozostałe złe - po wpisaniu w wagach i ocenie 4 trzech pierwszych dostawców ma ocenę 16, a reszta odpowiednio 20, 80 i 80 (wszyscy powinni mieć 16). Co robię źle? :(
C/C++
# include <iostream.h>
# include <dos.h>

int main()
{
    int i, j, wagi, dostawcy;
    double * tabw, * tabk, ** tabs, a, b;
    cout << "Ilu jest dostawcow?" << endl;
    cin >> dostawcy;
    cin.clear();
    cin.sync();
    cout << "Ile jest kryteriow" << endl;
    cin >> wagi;
    cin.clear();
    cin.sync();
    for( i = 0; i < wagi; i++ )
    {
        cout << "Podaj wage " << i + 1 << " kryterium" << endl;
        cin >> a;
        cin.clear();
        cin.sync();
        tabk[ i ] = a;
    }
    for( j = 0; j < dostawcy; j++ )
    {
        cout << "Podaj oceny dla " << j + 1 << " dostawcy" << endl;
        for( i = 0; i < wagi; i++ )
        {
            cin >> b;
            cin.clear();
            cin.sync();
            tabs[ j ][ i ] = b;
        }
    }
    for( j = 0; j < dostawcy; j++ )
    {
        for( i = 0; i < wagi; i++ )
        {
            cin.clear();
            cin.sync();
            tabw[ j ] = tabw[ j ] + tabk[ i ] * tabs[ j ][ i ];
        }
        cout << "Dostawca nr " << j + 1 << " otrzymal " << tabw[ j ] << " punktow." << endl;
    }
}
P-80780
sajmon
» 2013-04-18 10:43:51
Chyba źle tworzysz te tablice
http://tutorialeit.pl/tutoriale/cpp /tworzenie-tablic-dynamicznych/32/
i na końcu każdą musisz usunąć
delete[] tablica
P-80782
kys
Temat założony przez niniejszego użytkownika
» 2013-04-18 16:52:32
Wielkie dzięki :)
P-80791
kys
Temat założony przez niniejszego użytkownika
» 2013-04-18 17:41:57
Poprawiłem kod i nadal ten sam problem (źle wychodzą wyniki od 2/3 dostawcy w górę). Suma wag działa dobrze, więc tabele powinny być prawidłowo zainicjowane (a przynajmniej *tabk).

C/C++
int dostawy()
{
    int n;
    do
    {
        int i, j, wagi, dostawcy;
        double a, b;
        cout << "Ilu jest dostawcow?" << endl;
        cin >> dostawcy;
        double * tabw = new double[ dostawcy ];
        double ** tabs = new double *[ dostawcy ];
        for( i = 0; i < dostawcy; i++ )
        {
            tabs[ i ] = new double[ dostawcy ];
        }
        cin.clear();
        cin.sync();
        cout << "Ile jest kryteriow?" << endl;
        cin >> wagi;
        double * tabk = new double[ wagi ];
        cin.clear();
        cin.sync();
        for( i = 0; i < wagi; i++ )
        {
            cout << "Podaj wage " << i + 1 << " kryterium" << endl;
            cin >> a;
            cin.clear();
            cin.sync();
            tabk[ i ] = a;
        }
        double sumawagi = 0;
        for( i = 0; i < wagi; i++ )
        {
            sumawagi = sumawagi + tabk[ i ];
        }
        if( sumawagi != 1 )
        {
            system( "cls" );
            cout << "Suma wag musi wynosic 1!" << endl;
            dostawy();
        }
        for( j = 0; j < dostawcy; j++ )
        {
            cout << "Podaj oceny dla " << j + 1 << " dostawcy" << endl;
            for( i = 0; i < wagi; i++ )
            {
                cin >> b;
                cin.clear();
                cin.sync();
                tabs[ j ][ i ] = b;
            }
        }
        for( j = 0; j < dostawcy; j++ )
        {
            for( i = 0; i < wagi; i++ )
            {
                tabw[ j ] = tabw[ j ] + tabk[ i ] * tabs[ j ][ i ];
            }
            cout << "Dostawca nr " << j + 1 << " otrzymal " << tabw[ j ] << " punktow." << endl;
        }
        delete[] tabw, tabk, tabs;
    }
P-80795
pekfos
» 2013-04-18 17:44:38
Wyzeruj tablice tabw.
P-80796
kys
Temat założony przez niniejszego użytkownika
» 2013-04-18 17:51:55
Faktycznie, wielkie dzięki
P-80797
« 1 »
  Strona 1 z 1