Nie mogę znaleźć błędu :(
Ostatnio zmodyfikowano 2008-11-14 11:55
DejaVu |
» 2008-11-13 23:13:44 Hm... sprawdziłem. Myślałem, że jest mniej błędów w programie - przesyłam poprawną wersję: #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 nIlosc = b - a + 1; int nParz = nIlosc / 2; int nNieparz = nIlosc / 2; if( nIlosc % 2 != 0 ) { if( b % 2 == 0 ) { nParz++; } else { nNieparz++; } } cout << "Parzystych = " << nParz << endl; cout << "Nieparzystych = " << nNieparz << endl; int n1 = 0, n2 = 0, parz[ nParz + 1 ], nparz[ nNieparz + 1 ]; for( int i = a; i < b + 1; i++ ) { if( i % 2 == 0 ) { parz[ n1 ] = i; n1++; } else { nparz[ n2 ] = i; n2++; } } cout << "Liczby parzyste to:" << endl; for( int j = 0; j < n1; j++ ) { cout << parz[ j ] << " " << endl; } cout << "Liczby nieparzyste to:" << endl; for( int j = 0; j < n2; j++ ) { cout << nparz[ j ] << " " << endl; } getch(); return 0; }
|
|
DejaVu |
» 2008-11-14 12:48:54 Masz rację, mój błąd. Cieszę się, że mnie uświadomiłeś :) Szczerze mówiąc to nie wiem czemu tak to zapamiętałem... zapewne dawniej gdy więcej operowałem na modulo i liczbach ujemnych stosowałem zapis: if( wynikModulo < 0 ) wynikModulo += dzielnik; w celu uproszczenia dalszych warunków wykorzystujących wynik modulo. Z drugiej strony to rzadko kiedy natrafiamy na wynik ujemny modulo i najwyraźniej przyda się o tym jakaś szersza zmianka w kursie. Dzięki za informacje. |
|
Ush Temat założony przez niniejszego użytkownika |
» 2008-11-14 18:17:14 Bardzo wielkie dzięki :) |
|
manfred |
Ujemne modulo » 2008-11-14 11:55:22 Piotr Szawdyński 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; |
Ta, jasne. Modulo może być ujemne... Ot, skompiluj sobie taki przykład: #include <iostream>
int main( int argc, char * argv[] ) { std::cout << - 11 % 2; std::cin.get(); return 0; } I głośno przeczytaj co wypisze. Jeżeli -1 to się mooocno poducz C++, jeżeli 1 to wygrałeś. Chociaż i tak będzie to -1 (przynajmniej w Visualu 2008, GCC 3.4.2, C++ Builderze 2007 i Comeau C++ /nie wiem którą mam wersję ;P/) ;P. |
|
1 « 2 » |