Liczby parzyste - dzielenie
Ostatnio zmodyfikowano 2015-10-01 14:41
wojownik266 Temat założony przez niniejszego użytkownika |
Liczby parzyste - dzielenie » 2015-10-01 09:35:29 Zadaniem poniższego programu jest pobranie od użytkownika jakiejś liczby i podzielenie jej przez współczynniki zawarte w zmiennej num a następnie wyświetlenie wyników tej operacji na wyjściu. Program w stanie obecnym wykonuje te zadania w sposób połowiczny ponieważ jak np. wpiszę liczbę 12 to program wyświetli trzy cztery poprawne wyniki a reszta to bzdury. Nie wiem gdzie popełniłem błąd. Dlatego proszę o jego wskazanie w poniższym kodzie. Co zmienić co dopisać co usunąć itp. #include <iostream>
int main() { int liczba = 0; int cyfra = 0; int num[] = { 2, 4, 6, 8 }; std::cout << "Dzielenie liczb parzystych" << std::endl; std::cout << "--------------------------" << std::endl; std::cout << "Podaj liczbe:"; std::cin >> liczba; for( int i = 0; i < liczba; ++i ) { for( int k = 0; k < 5; ++k ) { if( liczba % num[ i ] == i ) { std::cout << "Podana liczba jest parzysta" << std::endl; std::cout << "Sprawdzenie: " << "\t"; std::cout << liczba << " = " << num[ k ] << " * " << liczba / num[ k ] << "\t"; continue; } else { std::cout << "Podana liczba jest nieparzysta" << " "; break; } } std::cout << std::endl; break; } std::cin.get(); std::cin.get(); return 0; }
|
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2015-10-01 09:56:50 Chyba już znalazłem rozwiązanie problemu. Przyczyną mojego nieszczęścia była ta instrukcja: if( liczba % num[ i ] == i ) Którą należało zmienić na taką: if( liczba % num[ k ] == i ) To chyba rozwiązuje problem ale tak dla pewności prosiłbym o sprawdzenie. Więc? |
|
carlosmay |
» 2015-10-01 09:58:46 Sprawdzenie parzystości uzyskasz przy dzieleniu modulo przez 2.
Jeśli liczby przez które dzielisz są parzyste ale inne niż dwa to musisz jeszcze sprawdzić czy reszta z dzielenia też jest parzysta.
4/2=2 re. 0 6/4=1 re. 2 -> 2/2=0 12/2=6 re. 0 12/4=3 re. 0 12/6=2 re. 0 12/8=1 re.4 -> 4/2=2re.0 wszystko parzyste
13/8=1 re.5 -> 5/2=2 re. 1 nieparzysta |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2015-10-01 12:17:57 Wydaje mi się że to co napisałeś o parzystości załatwia instrukcja else bo jak wpiszę np. 11 to wyświetlam komunikat że liczba jest nieparzysta i cześć pieśni. A do tego jest to program do dzielenia liczb parzystych. A liczby parzyste to takie liczby które są podzielne przez dwa i których cyfrą jedności są 0,2,4,6,8. Tak że pętle o których piszesz mam też z głowy. Ale zdaję sobie sprawę z tego że mogę się mylić. Tak czy tak bardzo Ci dziękuję za odpowiedź:) |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2015-10-01 12:20:29 Czy ktoś mógłby mi powiedzieć dlaczego kiedy wpiszę np. liczbę 12 to program wyświetla wyniki (to mnie nie dziwi) a potem jeszcze komunikat z pod instrukcji else? Co moim zdaniem nie powinno mieć miejsca? Więc jak to z tym jest w tym przypadku? |
|
carlosmay |
» 2015-10-01 13:49:04 Sprawdzenie parzystości uzyskasz przy dzieleniu modulo przez 2.
Jeśli liczby przez które dzielisz są parzyste ale inne niż dwa to musisz jeszcze sprawdzić czy reszta z dzielenia też jest parzysta.
4/2=2 re. 0 6/4=1 re. 2 -> 2/2=0 12/2=6 re. 0 12/4=3 re. 0 12/6=2 re. 0 12/8=1 re.4 -> 4/2=2re.0 wszystko parzyste
13/8=1 re.5 -> 5/2=2 re. 1 nieparzysta
|
poparte kodem: int main() { int t[] = { 2, 4, 6, 8 }; int liczba; cin >> liczba; for( int i = 0; i < 4; i++ ) { if( liczba % t[ i ] == 0 ) cout << t[ i ] << ": Liczba " << liczba << " jest parzysta" << endl; else { int reszta = liczba % 2; if( reszta ) cout << t[ i ] << ": Liczba " << liczba << " nie jest parzysta" << endl; else cout << t[ i ] << ": Liczba " << liczba << " jest parzysta" << endl; } } _getch(); }
jeśli taki miało to mieć sens. |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2015-10-01 14:41:55 Tak!!! Właśnie taki to miało mieć sens. Dziękuję!) |
|
« 1 » |