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

[C++] Problem w trakcie wprowadzania danych

Ostatnio zmodyfikowano 2013-01-25 14:04
Autor Wiadomość
eletele
Temat założony przez niniejszego użytkownika
[C++] Problem w trakcie wprowadzania danych
» 2013-01-24 23:03:15
Program przestaje działać gdy wprowadzam dane do macierzy kwadratowej, ogólnie problem musi leżeć gdzieś przy deklaracji tablicy A lub we fragmencie kodu odpowiedzialnym za wyliczenie wyznacznika (case 4), wcześniej działało wszystko poprawnie. Nie mam zielonego pojęcia co jest nie tak.

Dodam, że sprawa dosyć pilna, muszę to mieć na jutro poprawnie działające :/

C/C++
#include <cstdio>
#include <math.h>
#include <iomanip>    
#include <conio.h>
#include <cstdlib>
#include <iostream>
#include <time.h>

using namespace std;

int main( int argc, char * argv[] ) {
   
    int w;
    float det = 1.0;
    int n = 0, a = 0, b = 0, wm, tm;
    float ** A; //Macierz kwadratowa (2)
    A = new float *[ n ];
    float B[ 20 ][ 20 ]; //Macierz (1)
    time_t t;
    srand(( unsigned ) time( & t ) );
   
    do
    {
        cout << "------------------------------" << endl;
        cout << "----OPERACJE NA MACIERZACH----" << endl;
        cout << "------------------------------" << endl << endl << endl;
        cout << "1. Utworz macierz (1)." << endl;
        cout << "2. Utworz macierz kwadratowa (2)." << endl;
        cout << "3. Wyswietl macierz." << endl;
        cout << "4. Policz wyznacznik macierzy." << endl;
        cout << "5. Transponuj macierz." << endl;
        cout << "6. " << endl;
        cout << "7. " << endl;
        cout << "8. " << endl;
        cout << "9. " << endl;
        cout << "0. Zakoncz dzialanie programu." << endl << endl;
        cout << "Co chcesz zrobic? Podaj numer: ";
        cin >> w;
        cout << endl << endl << endl;
       
        switch( w )
        {
        case 1: cout << "Podaj liczbe wierszy (max 20): ";
            cin >> a;
           
            if( a > 20 ) {
                cout << "Program nie obsluguje tak duzych rozmiarow!" << endl << endl;
                break;
            }
           
            cout << "Podaj liczbe kolumn (max 20): ";
            cin >> b;
           
            if( b > 20 ) {
                cout << "Program nie obsluguje tak duzych rozmiarow!" << endl << endl;
                break;
            }
           
            cout << endl << endl;
           
            for( int i = 0; i < a; i++ )
            {
                for( int j = 0; j < b; j++ )
                {
                    cout << "Podaj wyraz z " << i + 1 << " wiersza, " << j + 1 << " kolumny: ";
                    cin >> B[ i ][ j ];
                }
            }
            cout << endl;
            break;
           
        case 2: cout << "Podaj rozmiar macierzy (max 10): ";
            cin >> n;
            cout << endl;
           
            if( n > 10 ) {
                cout << "Program nie obsluguje tak duzych rozmiarow!" << endl << endl << endl;
                break;
            }
           
           
            for( int i = 0; i < n; i++ )
            {
                for( int j = 0; j < n; j++ )
                {
                    cout << "Podaj wyraz z " << i + 1 << " wiersza, " << j + 1 << " kolumny: ";
                    cin >> A[ i ][ j ];
                }
            }
            cout << endl;
            break;
           
        case 3: do
            {
                cout << "1. Wyswietl macierz (1)." << endl;
                cout << "2. Wyswietl macierz kwadratowa (2)." << endl;
                cout << "0. Menu glowne." << endl << endl;
                cout << "Wybor: ";
                cin >> wm;
                cout << endl << endl << endl;
               
                if( wm == 1 ) {
                    if( a == 0 || b == 0 ) {
                        cout << "Najpierw utworz macierz (1)!" << endl << endl;
                        break;
                    }
                   
                    for( int i = 0; i < a; i++ )
                    {
                        for( int j = 0; j < b; j++ )
                        {
                            cout << setw( 3 ) << B[ i ][ j ];
                        }
                        cout << endl;
                    }
                    cout << endl;
                }
                else if( wm == 2 ) {
                    if( n == 0 ) {
                        cout << "Najpierw utworz macierz (2)!" << endl << endl;
                        break;
                    }
                    for( int i = 0; i < n; i++ )
                    {
                        for( int j = 0; j < n; j++ )
                        {
                            cout << setw( 3 ) << A[ i ][ j ];
                        }
                        cout << endl;
                    }
                    cout << endl;
                }
                else if( wm == 0 ) {
                    break;
                }
                else cout << "Nieprawidlowy znak!" << endl << endl << endl;
               
            } while( wm != 0 );
           
            break;
           
        case 4: if( n == 0 ) {
                cout << "Najpierw utworz macierz (2)!" << endl << endl;
                break;
            }
            for( int i = 0; i < n; i++ )
            {
                for( int j = 0; j < n; j++ )
                {
                    cout << setw( 3 ) << A[ i ][ j ];
                }
                cout << endl;
            }
            cout << endl;
            cout << endl;
            for( int k = 0; k < n - 1; k++ )
            {
                for( int i = k + 1; i < n; i++ )
                {
                    for( int j = n - 1; j >= k; j-- )
                    {
                        A[ i ][ j ] = A[ i ][ j ] - A[ i ][ k ] * A[ k ][ j ] / A[ k ][ k ];
                    }
                }
            }
           
            for( int i = 0; i < n; i++ ) det = det * A[ i ][ i ];
           
            cout << endl << "Wyznacznik wynosi: " << det << endl;
            break;
           
        case 5: do
            {
                cout << "1. Transponuj macierz (1)." << endl;
                cout << "2. Transponuj macierz kwadratowa (2)." << endl;
                cout << "0. Menu glowne." << endl << endl;
                cout << "Wybor: ";
                cin >> tm;
                cout << endl << endl << endl;
               
                if( tm == 1 ) {
                    if( a == 0 || b == 0 ) {
                        cout << "Najpierw utworz macierz (1)!" << endl << endl;
                        break;
                    }
                   
                    for( int i = 0; i < b; i++ )
                    {
                        for( int j = 0; j < a; j++ )
                        {
                            cout << setw( 3 ) << B[ j ][ i ];
                        }
                        cout << endl;
                    }
                   
                }
                else if( tm == 2 ) {
                    if( n == 0 ) {
                        cout << "Najpierw utworz macierz (2)!" << endl << endl;
                        break;
                    }
                    for( int i = 0; i < n; i++ )
                    {
                        for( int j = 0; j < n; j++ )
                        {
                            cout << setw( 3 ) << A[ j ][ i ];
                        }
                        cout << endl;
                    }
                }
                else if( tm == 0 ) {
                    break;
                }
                else cout << "Nieprawidlowy znak!" << endl << endl << endl;
               
            } while( tm != 0 );
           
            break;
           
        case 0: return 0;
           
        default: cout << "Nieprawidlowy znak!" << endl << endl << endl;
        }
    } while( w != 0 );
   
}
P-74947
eletele
Temat założony przez niniejszego użytkownika
» 2013-01-25 02:30:35
Poważnie? Nikt?
P-74954
DejaVu
» 2013-01-25 14:04:16
Przemyśl sens takiego kodu:
C/C++
int n = 0;
float ** A = new float *[ n ];
Taki kod właśnie masz w swoim programie.
P-74965
« 1 »
  Strona 1 z 1