Wilga Temat założony przez niniejszego użytkownika |
[C++] pętla z dodawaniem » 2017-02-13 23:29:31 Treść polecenia: Napisz program sumujący liczby parzyste – liczba (-50) kończy wprowadzanie danych. Mój kod: #include <iostream> #include <cstdlib> using namespace std;
int main() { int a, b; int c = a % 2; int d = b % 2; cout << "Oto program sumujacy liczby parzyste. Zakonczy prace, gdy podasz liczbe -50. \n"; cout << "Podaj pierwsza liczbe:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; do { if( c == 0 || d == 0 ) { cout << "Ich suma to:" << a + b << endl; cout << "Podaj pierwsza liczbe:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; } else cout << "Podales liczbe nieparzysta. Podaj parzysta."; } while( a != - 50 || b != - 50 ); cout << "Wpisales liczbe -50. Program konczy prace."; system( "pause" ); return 0; }
Kompiluje się prawidłowo, jednak nie reaguje na nieprawidłowe wpisanie - "łyka" zarówno wpisanie liczby nieparzystej, jak i -50. Czy ma ktoś z Was pomysł, co jest nie tak? |
|
latajacaryba |
» 2017-02-14 00:21:12 Po pierwsze bład masz tu: int a, b; int c = a % 2; int d = b % 2; cout << "Oto program sumujacy liczby parzyste. Zakonczy prace, gdy podasz liczbe -50. \n"; cout << "Podaj pierwsza liczbe:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; do { if( c == 0 || d == 0 )
Na początku w zmiennych a i b masz śmieci (pozostałości w pamięci - losowe liczby), zrób tak int a = 0, b = 0; Po drugie int c = a % 2; int d = b % 2; Nie oznacza to, że po wpisaniu liczby będzie to aktualne. Przykład: int a = 5; int modulo = a % 2 cout << "modulo: " << modulo << endl; a = 4; cout << "modulo teraz " << modulo << endl;
Rezultat: modulo: 1 modulo teraz: 1 Jeśli chcesz to naprawić to po każdej zmianie liczby a musisz jeszcze raz podstawić tą liczbę, w sensie: int a = 5 int modulo = a % 2 cout << "modulo: " << modulo << endl; a = 4; modulo = a % 2 cout << "modulo teraz " << modulo << endl;
Dlatego właśnie łyka nieparzyste :) int a = 0, b = 0; cout << "Oto program sumujacy liczby parzyste. Zakonczy prace, gdy podasz liczbe -50. \n"; cout << "Podaj pierwsza liczbe:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; int c = a % 2; int d = b % 2; do { if( c == 0 || d == 0 ) {
to samo tu: if( c == 0 || d == 0 ) { cout << "Ich suma to:" << a + b << endl; cout << "Podaj pierwsza liczbe:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; c = a % 2; d = b % 2; }
|
|
michal11 |
» 2017-02-14 10:04:05 Z tego jak ja rozumiem treść zadania to w tym programie wystarczą dwie zmienne, jedna pętla i jeden if. Moim zdaniem przekombinowałeś. |
|
Wilga Temat założony przez niniejszego użytkownika |
» 2017-02-14 11:51:33 Latajacaryba, dzięki za odpowiedź, powoli czyszczę. Na razie znalazłam jeszcze inny błąd - w while powinny być && zamiast ||, inaczej kończy program dopiero wtedy, gdy obie podane liczby to -50. |
|
latajacaryba |
» 2017-02-14 13:28:19 while (x == 0 && y == 0) - wykonuj pętle dopóki x równa się 0 ORAZ/I y = 0 - muszą być spełnione 2 warunki while (x == 0 || y == 0) - wykonuj pętle dopóki x równa się 0 LUB y = 0 - musi być spełniony jeden z warunków do { } while( a != - 50 || b != - 50 );
Wykonuj dopóki a jest inne od -50 LUB b jest inne od -50. Dlatego jeśli a = -50, b = 4 program dalej wykonuje pętle - w końcu warunek się zgadza, jedna ze zmiennych jest inna niż -50 - jest to zmienna 'b' o wartości 4 |
|
Wilga Temat założony przez niniejszego użytkownika |
» 2017-02-14 20:51:02 Wiem, że tak, jak piszesz, jest logicznie i powinno być, co nie zmienia faktu, że z koniunkcją wychodzi, a alternatywą nie. Ale ogólnie nie wychodzi nadal, może wynika to z innego błędu.
Michal11 - jak w takim razie zrobić, żeby były dodawane wyłącznie parzyste? |
|
michal11 |
» 2017-02-14 22:44:25 jedna zmienna na sumę druga na wczytywaną liczbę. Wczytujesz liczbę w pętli do while, po wczytaniu sprawdzasz czy jest parzysta i czy nie jest równa -50, jeżeli warunki są spełnione to dodajesz ją do sumy, po wyjściu z pętli jeszcze tylko wypisujesz sumę i tyle. jak napisałeś treść zadania Napisz program sumujący liczby parzyste – liczba (-50) kończy wprowadzanie danych |
rozumiem to tak, że masz wczytywać liczby dopóki nie natrafisz na -50 (czyli nie wczytywać po dwie) i sumować z tych wczytanych tylko parzyste. |
|
Wilga Temat założony przez niniejszego użytkownika |
» 2017-02-16 09:15:39 Próbuję i wiele z tego nie wychodzi. Po zmianach wygląda tak: #include <iostream> #include <cstdlib> using namespace std;
int main() { int a = 0; int b = 0; cout << "Oto program sumujacy liczby parzyste. Zakonczy prace, gdy podasz liczbe -50. \n"; cout << "Podaj pierwsza liczbe:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; int c = a % 2; int d = b % 2; do { if( c == 0 && d == 0 ) { cout << "Ich suma to:" << a + b << endl; cout << "Podaj pierwsza liczbe:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; int c = a % 2; int d = b % 2; } else { cout << "Podales liczbe nieparzysta, podaj parzysta. Pierwsza liczba:"; cin >> a; cout << "Podaj druga liczbe:"; cin >> b; int c = a % 2; int d = b % 2; } } while( a !=( - 50 ) && b !=( - 50 ) ); cout << "Wpisales liczbe -50. Program konczy prace."; system( "pause" ); return 0; }
Kończy pracę przy -50, ale nic sobie nie robi z nieparzystych. Próbowałam już różnych rozwiązań, ale, jak widać, nic nie dały. |
|
« 1 » 2 |