C++, Program po uruchomieniu zawiesza się i nie wykonuje dalej. Proszę o pomoc.
Ostatnio zmodyfikowano 2012-10-18 10:58
sparkymen Temat założony przez niniejszego użytkownika |
C++, Program po uruchomieniu zawiesza się i nie wykonuje dalej. Proszę o pomoc. » 2012-10-17 00:36:25 Witam, pisałem program który wypisuje dzielniki podanej liczby. Kompiluje się, lecz zawiesza się po podaniu kilku dzielników. Wygląda on tak: int main() { int liczba; cout << "Podaj liczbe" << endl; cin >> liczba; int dzielnik; bool czyparzysta; if( liczba < 0 ) liczba = liczba *- 1; if( liczba % 2 == 0 && liczba > 2 ) czyparzysta = true; else czyparzysta = false; cout << "Dzielniki liczby " << liczba << " to: "; if( liczba != 0 ) cout << "1 "; if( czyparzysta == true ) { dzielnik = 2; do { if( liczba % dzielnik == 0 ) { cout << dzielnik << " "; dzielnik++; } } while( dzielnik < liczba ); } if( czyparzysta == false ) { dzielnik = 3; do { if( dzielnik % liczba == 0 ) { cout << dzielnik << " "; dzielnik = dzielnik + 2; } } while( dzielnik < liczba ); } cout << liczba; }
Czy ktoś mógłby sprawdzić to u siebie czy też się zawiesza, a najlepiej podać przyczynę? Będę bardzo wdzięczny. Pozdrawiam. |
|
OSA_PL |
» 2012-10-17 07:54:49 dzielnik++; i dzielnik = dzielnik + 2; daj poza if. Kod daj w [cpp] ... [/cpp] |
|
sparkymen Temat założony przez niniejszego użytkownika |
» 2012-10-17 15:54:38 Okej, zrobię co kazałeś i sprawdzę czy działa. |
|
sparkymen Temat założony przez niniejszego użytkownika |
» 2012-10-17 16:06:35 Zrobiłem tak jak kazałeś i owszem nie zawiesza się, ale nie działa dla liczb nieparzystych. Pokazuje tylko że dzielniki liczby to 1 i dana liczba, tak jakby pomijał pętle. Kod po przerobieniu według Twoich uwag wygląda tak: #include <cstdlib> #include <iostream> #include <math.h>
using namespace std;
int main() { int liczba; cout << "Podaj liczbe" << endl; cin >> liczba; int dzielnik; bool czyparzysta; if( liczba < 0 ) liczba = liczba *- 1; if( liczba % 2 == 0 && liczba > 2 ) czyparzysta = true; else czyparzysta = false; cout << "Dzielniki liczby " << liczba << " to: "; if( liczba != 0 ) cout << "1 "; if( czyparzysta == true ) { dzielnik = 2; do { if( liczba % dzielnik == 0 ) { cout << dzielnik << " "; } dzielnik++; } while( dzielnik < liczba ); } if( czyparzysta == false ) { dzielnik = 3; do { if( dzielnik % liczba == 0 ) { cout << dzielnik << " "; } dzielnik = dzielnik + 2; } while( dzielnik < liczba ); } cout << liczba << endl; system( "PAUSE" ); return EXIT_SUCCESS; }
|
|
OSA_PL |
» 2012-10-17 17:06:35 Popatrz sobie na warunek w if'ie dla liczb nieparzystych. |
|
crash |
» 2012-10-17 18:29:31 Mała sugestia. Jeśli szukasz dzielników liczby X, to nie ma sensu jechać z pętlą aż do liczby X - wystarczy do X/2. Dzieląc X przez liczbę z przedziału 1..X/2 można otrzymać liczbę całkowitą mogącą być dzielnikiem, natomiast z przedziału od połowy aż do X tylko i wyłącznie ułamki z przedziału 1..2, malejąco |
|
sparkymen Temat założony przez niniejszego użytkownika |
» 2012-10-17 21:32:56 Okej dzięki, wszystko działa. Dziękuję również za sugestie że wystarczy sprawdzać do x/2 :). |
|
sparkymen Temat założony przez niniejszego użytkownika |
» 2012-10-17 21:37:52 Napisałem kolejny program i znowu się zapętla... #include <cstdlib> #include <iostream> #include <math.h>
using namespace std;
int main() { int liczba; cin >> liczba; int dzielnik; dzielnik = 2; cout << "Czynniki pierwsze tej liczby to: " << endl; do { if( liczba % dzielnik == 0 ) { liczba = liczba / dzielnik; cout << dzielnik; dzielnik = 3; } else while( liczba % dzielnik != 0 ) { if( liczba % dzielnik == 0 ) { liczba = liczba / dzielnik; cout << dzielnik; } else dzielnik = dzielnik + 2; } dzielnik = 2; } while( liczba != 0 ); system( "PAUSE" ); return EXIT_SUCCESS; }
|
|
« 1 » 2 |