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 |