Strona Główna     FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy


Poprzedni temat :: Następny temat
C++ problem z programem
Autor Wiadomość
maniek910


Skąd: Kalisz
Wysłany: 2011-08-21, 11:46   C++ problem z programem

A więc chciałem napisać program który rozkłada mi na czynniki pierwsze wszystkie liczby w tablicy niestety program zamienia pierwszą i się zatrzymuję :

Kod:

#include <iostream>

using namespace std;

int const n=4;

int main()
{
    int liczba,p=2;
    int tab[n];

    for(int i=0;i<n;i++)cin >> tab[i];


    for(int i=0;i<n;i++){
    while(tab[i]!=1){
                     if(tab[i]%p==0){
                                     cout << p << endl;
                                     tab[i] = tab[i] / p;
                                     }
                                     else
                                     p++;
                                     }
    }



    system("PAUSE");
    return EXIT_SUCCESS;
}


jak by tu zaradzić żeby rozkładało też pozostało :) ?
_________________
 
   
ExeQtoR 
Moderator



Pomógł: 38 razy
Skąd: K.P.
Wysłany: 2011-08-22, 15:27   

"P" masz deklarowane globalnie - zły nawyk;-)))
wiec na bank po drugim przejściu pętli FOR będzie inne niż dla i=0 ;-) ))
algorytmu nie znam i nie kojarzę xD ale skoro te same operacje dla i=1 mają być to parametr P też powinien wynosić 2 a nie wiadomo do końca co tam siedzi po pierwszej interakcji pętli FOR ;-)

wiec na koniec pętli FOR już po tym jak pętla WHILE się skończy powinieneś ustawić p=2;
albo
zrezygnować z deklaracji globalnych i zadeklarować zmienną P zaraz na początku FOR

for(....)
{
int p=2;
....
}
_________________
Moderatora grzecznie się słuchamy,
nie spamujemy, nie bluzgamy...


 
 
   
maniek910


Skąd: Kalisz
Wysłany: 2011-08-22, 22:44   

Ty to jesteśakiego jednak mózg a ja pała xD że takiego czegoś nie zauważyłem ;/

Dla potomnych może komuś się kiedyś do czegoś przyda :)

Kod:
/*Program rozkłada liczby z tablicy na czynniki pierwsze ,
np dla 20 to 2,2,5 => 2*2*5 =20 wszystkie czynniki to liczby
pierwsze ,rozkład następuje wedle algorytmu :
56|2
28|2
14|2
 7|7
 1|
 */

#include <iostream>

using namespace std;

int const n=4;

int main()
{
    int liczba;
    int tab[n];

    for(int i=0;i<n;i++)cin >> tab[i];


    for(int i=0;i<n;i++){
        int p=2; // zmienna lokalna dla pętli
        cout <<"liczba " << tab[i] << endl;
    while(tab[i]!=1){
                     if(tab[i]%p==0){
                                     cout << p << endl;
                                     tab[i] = tab[i] / p;
                                     }
                                     else
                                     p++;
                                     }
    }



    system("PAUSE");

}
_________________
 
   
ExeQtoR 
Moderator



Pomógł: 38 razy
Skąd: K.P.
Wysłany: 2011-08-23, 15:46   

Kod:

...
int liczba;
...

masz sensowne wytłumaczenie potrzeby inicjalizowania zmiennej typu int o nazwie "liczba" ? ;-) ))

maniek910 napisał/a:
Ty to jesteśakiego jednak mózg a ja pała xD

mnie nakierowało Twoje stwierdzenie:
maniek910 napisał/a:
niestety program zamienia pierwszą i się zatrzymuję

Więc skoro 1 jest OK, to dlaczego następna jest błędna ?? a no bo tylko jedna zmienna była, która brała udział wszędzie a nie powinna ;-) )

edit///

ajjj.... i sprawdzałeś czy Ci się kompiluje ten kod ?

bo na mój gust to w tym przypadku funkcja główna(main) nie zwraca żadnego kodu błędu(w tym kodu zerowego - mówiącego o poprawnym zakończeniu programu)
_________________
Moderatora grzecznie się słuchamy,
nie spamujemy, nie bluzgamy...


 
 
   
maniek910


Skąd: Kalisz
Wysłany: 2011-08-23, 22:05   

Kod:
int liczba
sensowne nie xD zmienna została po tym jak program pisałem dla 1 liczby i zapomniałem usunąć . Tak program kąpiluje się elegancko luknij :)

_________________
 
   
ExeQtoR 
Moderator



Pomógł: 38 razy
Skąd: K.P.
Wysłany: 2011-08-24, 07:16   

hmmm... dziwnie....

a masz tam na końcu kodu:
Kod:
return 0;

albo:
Kod:
return EXIT_SUCCESS;

bo według mnie jeżeli tego nie masz to przeczy założeniu iż jeżeli funkcja ma coś zwrócić w tym wypadku funkcja główna o nazwie "main" zwraca typ liczbowy INT to kompilator nie powinien dopuścić aby ta wartość była nie ustalona, po zakończeniu tejże funkcji, chyba że ja czegoś nie wiem :?
_________________
Moderatora grzecznie się słuchamy,
nie spamujemy, nie bluzgamy...


 
 
   
maniek910


Skąd: Kalisz
Wysłany: 2011-08-24, 11:35   

Powiem Ci że zazwyczaj piszę "return EXIT_SUCCESS;" ale bez zazwyczaj działa ... kiedy nie działa ? Jak dla mnie kwestia kompilatora ,zarówno w DevC++(bardzo stare standardy) jak i codeblock(trochę nowsze standardy) i gdy piszę coś w g++ na ubuntu (najnowsze standardy kąpilacji) też działa a czasem nie :) dziwne prawda :D ale tak wynika z wielokrotnych prób :D
_________________
 
   
ExeQtoR 
Moderator



Pomógł: 38 razy
Skąd: K.P.
Wysłany: 2011-08-24, 17:44   

ale przyzwyczaj się do pisania tego ;-) czasami może Ci się program dziwnie wykrzaczyć i nie będziesz wiedział dlaczego ;-) )))
_________________
Moderatora grzecznie się słuchamy,
nie spamujemy, nie bluzgamy...


 
 
   
Wyświetl posty z ostatnich:   
Dodaj do: WypowiedÄ˝ dla Wykop  WypowiedÄ˝ dla Facebook  WypowiedÄ˝ dla Wyczaj.to  WypowiedÄ˝ dla Gwar  WypowiedÄ˝ dla Delicious  WypowiedÄ˝ dla Digg  WypowiedÄ˝ dla Furl  WypowiedÄ˝ dla Google  WypowiedÄ˝ dla Magnolia  WypowiedÄ˝ dla Reddit  WypowiedÄ˝ dla Simpy  WypowiedÄ˝ dla Slashdot  WypowiedÄ˝ dla Technorati  WypowiedÄ˝ dla YahooMyWeb
Odpowiedz do tematu
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group - manga
system walidacji dla gości opracował Petermechanic
Forum komputerowe
Strona wygenerowana w 0,1 sekundy. Zapytań do SQL: 11