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

Nie mogę znaleźć błędu :(

Ostatnio zmodyfikowano 2008-11-14 11:55
Autor Wiadomość
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ę:
C/C++
#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++;
        } //else
       
    } //if
   
    cout << "Parzystych = " << nParz << endl;
    cout << "Nieparzystych = " << nNieparz << endl;
    int n1 = 0, n2 = 0, parz[ nParz + 1 ], nparz[ nNieparz + 1 ]; //tablica musi posiadać minimum 1 element
   
    for( int i = a; i < b + 1; i++ )
    {
       
        if( i % 2 == 0 )
        {
            parz[ n1 ] = i;
            n1++;
        } else
        {
            nparz[ n2 ] = i;
            n2++;
        } //else
       
    } //for
   
   
    cout << "Liczby parzyste to:" << endl;
    for( int j = 0; j < n1; j++ )
    {
        cout << parz[ j ] << "  " << endl;
    } //for
   
    cout << "Liczby nieparzyste to:" << endl;
    for( int j = 0; j < n2; j++ )
    {
        cout << nparz[ j ] << "  " << endl;
    } //for  
   
    getch();
    return 0;
}
P-2534
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.
P-2535
Ush
Temat założony przez niniejszego użytkownika
» 2008-11-14 18:17:14
Bardzo wielkie dzięki :)
P-2536
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:
C/C++
#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.
P-18626
1 « 2 »
Poprzednia strona Strona 2 z 2