lukas0420 Temat założony przez niniejszego użytkownika |
Liczby pierwsze i złożone » 2016-09-09 22:17:38 Napisałem program, który ma sprawdzać czy wprowadzona przez użytkownika liczba jest pierwsza czy złożona. Chce koniecznie oprzeć to na pętli do{...}while oraz na if, próbowałem zrobić to tak, że program szuka dzielnika, jeżeli znajdzie to pokaże że liczba jest złożona, przeciwnie że jest pierwsza. Niestety po kompilacji programu, wpisując obojętnie jaką liczbę, cały czas pokazuje, że liczba jest złożona. Szczerze powiem, zaczynam dopiero przygodę z c++ i nie bardzo wiem jaki błąd popełniłem. Byłbym wdzięczny za pomoc :D #include <iostream>
using namespace std;
int main( int argc, char ** argv ) { cout << "Podaj liczbe: "; int a, b; cin >> a; b = 2; do { b++; } while( b != a ); if( a % b != 0 ) { cout << "Liczba ta jest pierwsza"; } else { cout << "Liczba ta jest zlozona"; } return 0; }
|
|
Knayder |
» 2016-09-09 22:25:31 Polecam ci poczytać trochę o tym :) https://pl.wikipedia.org/wiki/Sito_Eratostenesa |
|
kistel66 |
» 2016-09-09 22:31:45 Najprostsza wersja chyba tak by wyglądała: #include <iostream> using namespace std;
int main( int argc, char ** argv ) { cout << "Podaj liczbe: "; int a, b; cin >> a; b = 2; do { b++; } while( b != a ); if( b % 2 == 0 ) { cout << "Liczba ta jest zlozona"; } else { cout << "Liczba ta jest pierwsza"; } return 0; }
|
|
mateczek |
» 2016-09-09 22:37:08 @up sprawdź swój kod dla liczby 15 #include <iostream> #include <cmath>
using namespace std;
int main( int argc, char ** argv ) { cout << "Podaj liczbe: "; bool pierwsza = true; int a, b; cin >> a; b = 2; do { if( a % b == 0 ) { pierwsza = false; break; } b++; } while( b < sqrt( a ) ); if( pierwsza ) { cout << "Liczba ta jest pierwsza"; } else { cout << "Liczba ta jest zlozona"; } return 0; } |
|
lukas0420 Temat założony przez niniejszego użytkownika |
» 2016-09-10 09:53:02 Dobry pomysł z wykorzystaniem zmiennej bool, program działa poprawnie. A gdyby teraz sobie utrudnić i spróbować pominąć tą zmienną? Jest możliwe stworzenie takiego programu? |
|
michal11 |
» 2016-09-10 11:10:34 Przenieś warunek z ifa do while i na koniec sprawdzaj czy b jest mniejsze od pierwiastka, jeżeli tak to znaczy, że liczba jest złożona, jeżeli b jest równe pierwiastkowi to znaczy, że liczba jest pierwsza. Generalnie pisanie wihile w sposób: while( warunek1 ) { if( warunek2 ) { break; } }
Jest raczej złą praktyką i pewnie w 95% przypadków warunek2 powinien być w while. A już najgorzej jak jest tam while( true ) . |
|
Garniturek |
» 2016-09-10 11:13:48 Można to zrobić za pomocą każdej innej zmiennej typu int, char itd. Można też pominąć wstawianie jakiejkolwiek zmiennej i jeśli zostanie spełniony warunek a % b == 0, tylko przerwać pętle, a w następnym if'ie (poza pętlą) wyświetlić napis w zależności od wartości zmiennej b |
|
mateczek |
» 2016-09-11 01:44:14 #include <iostream> #include <cmath>
using namespace std;
int main() { cout << "Podaj liczbe: "; int resztaZdzielenia; int a, b = 2; cin >> a; do { } while( b < sqrt( a ) &&( resztaZdzielenia = a % b++ ) ); if( resztaZdzielenia ) { cout << "Liczba ta jest pierwsza"; } else { cout << "Liczba ta jest zlozona"; } return 0; } |
|
« 1 » 2 |