Nie mogę znaleźć błędu :(
Ostatnio zmodyfikowano 2008-11-14 11:55
Ush Temat założony przez niniejszego użytkownika |
Nie mogę znaleźć błędu :( » 2008-11-12 17:59:52 Po skompilowaniu program się uruchamia a potem wyskakuje błąd :( Pomocy #include <iostream> #include <conio.h>
using namespace std;
int main() { cout << "Program dzieli elementy zbioru liczb calkowitych na liczby parzyste i nieparzyste" << endl << endl; cout << "Podaj dolna granice zbioru:" << endl; int a; cin >> a; cout << "Podaj gorna granice zbioru:" << endl; int b; cin >> b; int n, parz[ b - a ], nparz[ b - a ]; for( int i = a; i < b + 1; i++ ) { if(( i % 2 ) == 0 ) parz[ n ] = i; if((( i % 2 ) == - 1 ) ||(( i % 2 ) == 1 ) ) nparz[ n ] = i; n++; } cout << "Liczby parzyste to:" << endl; for( int j = 0; j < n + 1; j++ ) { cout << parz[ j ] << " " << endl; } cout << "Liczby nieparzyste to:" << endl; for( int j = 0; j < n + 1; j++ ) { cout << nparz[ j ] << " " << endl; } getch(); } |
|
DeBugger |
» 2008-11-12 20:34:01 Błąd jest gdzieś w tej linice. Nie mam zbytnio czasu żeby to oglądać. for( int i = a; i < b + 1; i++ ) { if(( i % 2 ) == 0 ) parz[ n ] = i; if((( i % 2 ) == - 1 ) ||(( i % 2 ) == 1 ) ) nparz[ n ] = i; n++; } |
|
lynx |
» 2008-11-12 20:46:06 Ja bym proponował zamienić ten kod: if (((i % 2)== -1)||((i % 2)== 1)) nparz[n] = i; na ten: if ((i%2)!=0) npatrz[n] = i; Nie wiem wprawdzie czy to coś zmieni w działaniu twojego programu, ale napewno kod będzie łatwiejszy do zrozumienia. ;) /edit: Powiedz w której części programu kod się rozwala, będzie łatwiej znaleźć błąd. :) |
|
DejaVu |
» 2008-11-12 22:02:36 Podam Ci prosty przykład dla którego program się wywali: a=1 b=1
Co dalej się stanie: int parz[ b - a ]; Dokładniej sprawę rozpatrując: Moim zdaniem rozwiązaniem będzie: int parz[ b - a + 1 ]; Tak samo trzeba postąpić z drugą tablicą. Nie przyglądałem się reszcie kodu, jednak proszę o stwierdzenie, czy problem występuje czy też nie po wykonaniu powyższej operacji dla dwóch tablic. /edit: Dodatkowa informacja: reszta z dzielenia nie może być ujemna. |
|
Ush Temat założony przez niniejszego użytkownika |
» 2008-11-13 17:51:07 Niestety, problem wciąż występuje ;(
PS: Reszta z dzielenia może być ujemna ;) Przyjmuje zawsze znak dzielnika. Chyba, że chodzi o jakieś normy w C++... |
|
DejaVu |
» 2008-11-13 17:59:57 Jeśli mówię, że nie może być ujemna to znaczy, że nie może być ujemna. Wklej wiersze które poprawiłeś. /edit: Rozpatrujemy tylko i wyłącznie C++. Matematyka rządzi się własnymi prawami i jest znacznie bardziej rozwinięta niż to co warto używać w programowaniu. Jeśli chcesz uzyskać ujemną wartość modulo musisz wykonać operację: int wynikUjemnyModulo =( liczba % wartosc ) - wartosc; /edit2: Hm... faktycznie reszta z dzielenia może być ujemna... |
|
Ush Temat założony przez niniejszego użytkownika |
» 2008-11-13 18:42:58 int n, parz[ b - a + 1 ], nparz[ b - a + 1 ]; for( int i = a; i < b + 1; i++ ) { if(( i % 2 ) == 0 ) parz[ n ] = i; if(( i % 2 ) != 0 ) nparz[ n ] = i; n++; }
|
|
lynx |
» 2008-11-13 22:42:07 Ja chyba jeszcze znalazłem jeden błąd. int n, int npatrz... Deklarując zmienne w 'środku' programu, czyli zmienne nie globalne, nie są zapisywane zerem. Zawierają jakieś tam śmieci. Więc powinieneś zrobić: int n = 0;... Powiedz, jak teraz działa program. :) |
|
« 1 » 2 |