Tablica losowych liczb i liczenie iloczynu jej przekątnych
Ostatnio zmodyfikowano 2017-03-05 22:33
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 :) #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. |
|
carlosmay |
» 2017-03-05 20:48:56 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. |
|
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 |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-03-05 21:58:44 Ok, poprawiłem to i dopisałem trochę kodu. #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 :) |
|
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. |
|
« 1 » |