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

Tablica losowych liczb i liczenie iloczynu jej przekątnych

Ostatnio zmodyfikowano 2017-03-05 22:33
Autor Wiadomość
nowawieza
Temat założony przez niniejszego użytkownika
Tablica losowych liczb i liczenie iloczynu jej przekątnych
» 2017-03-05 20:36:45
Witam,

jestem na początku pisania programu i już mi się program crashuje. Dziwna sprawa, bo za wiele w kodzie nie ma. Zwykła pętla i tyle :/
Zapewne będę miał jeszcze pare pytań i problemów ale zacznijmy od tego :)

C/C++
#include <iostream>
#include <string>
#include <math.h>
#include <cstdlib>
#include <ctime>
#include <ctype.h>
using namespace std;


int main()
{
    int m, n;
    int tab[ m ][ n ];
    srand( time( NULL ) );
   
   
    do {
        cout << "Podaj ilosc wierszy : \n ";
        cin >> m;
    } while( m > 9 && m < 1 );
   
    do {
        cout << "Podaj ilosc kolumn : \n ";
        cin >> n;
    } while( n > 9 && n < 1 );
   
   
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < n; j++ )
        {
            tab[ i ][ j ] = 1 + rand() %( 100 - 1 + 1 );
            cout << "[" << tab[ i ][ j ] << "]";
        }
       
    }
   
   
   
    return 0;
}

Program crashuje się po wypisaniu pierwszego wiersza tablicy. Tak jakby nie może przejść do kolejnego wiersza.
P-158602
carlosmay
» 2017-03-05 20:48:56
C/C++
int m, n;
int tab[ m ][ n ];
To jest źle.
n
 i
m
 mają przypadkową wartość (zapewne ujemną :) lub wykraczającą poza możliwości stosu).

edit: na przyszłość
Program crashuje się po wypisaniu pierwszego wiersza tablicy.
Podaj również treść błędów, wyjątku itd. Ułatwia szukanie podpowiedzi.
P-158603
mokrowski
» 2017-03-05 20:49:44
A właśnie dziś pisałem na ten temat .. http://cpp0x.pl/forum/temat/?id=24789&p=2
P-158604
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-03-05 21:58:44
Ok, poprawiłem to i dopisałem trochę kodu.

C/C++
#include <iostream>
#include <string>
#include <math.h>
#include <cstdlib>
#include <ctime>
#include <ctype.h>
using namespace std;


int main()
{
    int m = 9, n = 9;
    int tab[ m ][ n ];
    int x = 0, y = 0, i = 0, j = 0;
    long long int iloczyn = 1, temp = 1;
    srand( time( NULL ) );
    do {
        cout << "Podaj ilosc wierszy : \n ";
        cin >> m;
    } while( m > 9 && m < 1 );
   
    do {
        cout << "Podaj ilosc kolumn : \n ";
        cin >> n;
    } while( n > 9 && n < 1 );
   
   
    for( int i = 0; i < m; i++ )
    {
        for( int j = 0; j < n; j++ )
        {
            tab[ i ][ j ] = 1 + rand() %( 100 - 1 + 1 );
            cout << "[" << tab[ i ][ j ] << "]";
        }
        cout << endl;
    }
   
    do {
        cout << "Podaj numer wiersza sprawdzanego punktu : \n ";
        cin >> x;
    } while( x > 9 && x < 0 );
   
    do {
        cout << "Podaj numer kolumny sprawdzanego punktu : \n ";
        cin >> y;
    } while( y > 9 && y < 0 );
   
   
    i = x;
    j = y;
   
    do
    {
        iloczyn *= tab[ i ][ j ];
        j--;
        i--;
        cout << "iloczyn = " << iloczyn << endl;
       
    } while( i >= 0 );
   
    i = x;
    j = y;
    if( i != m || j != n ) {
       
        do
        {
            temp *= tab[ i + 1 ][ j + 1 ];
            j++;
            i++;
            cout << "temp = " << temp << endl;
           
        } while( i < m - 1 || i < n - 1 );
       
    }
    cout << "razem: " << iloczyn * temp << endl;
   
   
    return 1;
}


Jednak mam problem. Program póki co powinien liczyć iloczyn przekątnej w prawo skos (do prawego dołu :D). Działa to dla macierzy kwadratowej tylko jeśli jest to główna przekątna. Jednak jeśli wezmę przekątną nie dla punktu ze środka to program wychodzi poza tablicę gdzie znajduje 0 przez co wynik jest równy 0 albo w innych przypadkach znajduje śmieciową liczbę.

Mam złe warunki przy do while.
Liczba kolumn i wierszy w zadaniu to max 9 na 9.
Wiem, że to głupie błędy ale sprawdzałem wiele opcji i nadal nie mogę zauważyć tej właściwej. Może wam się uda coś na to poradzić.

Zliczanie z przekątnej w lewo skos zrobię zaraz :)
P-158611
carlosmay
» 2017-03-05 22:33:58
Rozpisz taką tablicę na kartce i pomyśl jakie indeksy bierzesz pod uwagę przy sprawdzaniu przekątnych,
linii ukośnych innych niż przekątna.
P-158613
« 1 »
  Strona 1 z 1