Początki C++ - mały program (float to int)
KariiO
12.09.2012
Witam, mam pewien problem a mianowicie chciałbym się dowiedzieć czy zmienna a ma coś po przecinku czy jednak nie...a sposób miałem taki:
#include <iostream> #include <cstdlib> using namespace std; int ilosc_przedmiotow; float a; //int result = (int)floor(a); //float f = 12.345; int b = (int)a; int main() { system("COLOR 2"); // Wiem, dziala tylko w Windowsie cout << "*************************************************\n" << "* *\n" << "* Witaj w programie obliczajacym Twoja srednia! *\n" << "* *\n" << "*************************************************\n\n\n"; cout << "Podaj swoja ilosc przedmiotow ktore masz w szkole: "; cin >> a; if (a-b==0) cout <<"a jest calncalnieie jest calkowita\n";kowita\n"; else if (a-b!=0) cout <<"a nie jest calkowita\n"; system("PAUSE"); // Wiem, dziala tylko w Windowsie return 0; }jakieś pomysły dlaczego nie śmiga ?
speedkill
12.09.2012
#include <iostream> using namespace std; main(){ float g_Fl; cin>>g_Fl; int g_Int = int(g_Fl); if(g_Int == g_Fl){ cout<<"Jest calkowita <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' />\n"; } else{ cout<<"Nie jest calkowita.\n"; } system("pause"); }Stworzyłeś zmienną b i przypisałeś jej wartość int(a), czyli uznajmy, że float a = 0; b = int(a); b = 0;
Potem wpisałeś a, uznajmy 25 więc wykonywało się obliczenie 25 - 0 == 0, jest to fałszywe stwierdzenie, zmienną int trzeba stworzyć po wpisaniu liczby, lub odwołać się do niej po wpisaniu tej liczby. W moim przypadku stworzyłem zmienną int po wpisaniu liczby
KariiO
12.09.2012
Dzięki za kod +
Okej u siebie przypisywałem b do a ale skoro a bym podał jako 2,5 to b powinno być chyba tylko 2, tak ? Czy źle myśle ?
Okej u siebie przypisywałem b do a ale skoro a bym podał jako 2,5 to b powinno być chyba tylko 2, tak ? Czy źle myśle ?
speedkill
12.09.2012
Tak, ale musiałbyś przypisać zmiennej a wartość 2.5, aby zmienna b była równa 2, czyli taki mały przykład Ci dam :
#include <iostream> using namespace std; main(){ float a = 2.5; int b = int(a); cout<<a<<" | "<<b<<"\n"; system("pause"); }Teraz zmienna b, ma wartość 2, ponieważ zmienna float miała wartość 2.5
KariiO
12.09.2012
Okej dzięki wielkie za wszystko
Ostatnia sprawa bo dopiero zaczynam z C++, jak chcę podać 3,5 to normalnie w aplikacji muszę dać 3.5 ? . to nie to samo co , ?
Ostatnia sprawa bo dopiero zaczynam z C++, jak chcę podać 3,5 to normalnie w aplikacji muszę dać 3.5 ? . to nie to samo co , ?
MarWit
12.09.2012
Przecinek to separator wyliczeniowy, a kropka to znak używany przy zapisywaniu liczb rzeczywistych ( oraz jako operator wyłuskania ), takie standardy.
KariiO
13.09.2012
Stworzyłem coś takiego:
#include <iostream> #include <cstdlib> using namespace std; int ilosc_przedmiotow; float a; //int result = (int)floor(a); //float f = 12.345; int b = (int)a; bool calkowitaczynie; float wynik; main(){ float g_Fl; cin>>g_Fl; int g_Int = int(g_Fl); if(g_Int == g_Fl){ cout<<"Jest calkowita <img src='https://amxx.pl/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' />\n"; } else{ cout<<"Nie jest calkowita.\n"; } for(int x = 1; x <g_Fl; x++) { wynik = g_Fl/x; int x = int(wynik); if(x == wynik && g_Fl!=x) { cout << g_Fl << "|" << wynik << "\n" ; } g_Fl = wynik ; x=0; } system("pause"); }prosty programik który miał liczyć w słupku tzn :
64|2 32|2 16|2 8|2 4|2 2|2 1|ale coś nie wychodzi, wie ktoś gdzie może być problem ?
KariiO
13.09.2012
Jestem początkowym, sorry
Ale powiedz mi co źle zrobiłem prócz tego że można optymalniej itd. itd...
Ale powiedz mi co źle zrobiłem prócz tego że można optymalniej itd. itd...
speedkill
13.09.2012
Teraz ten kod powinien być poprawny, tutaj aby poznać dzielniki liczby trzeba było dzielić liczbę modułowo, i jeśli reszta nie jest równa 0 dodawać do dzielnika + 1. W Twoim przypadku nie jest potrzebne float, wystraczy int, oraz potem double. Tą pętlą nie podzelisz tego musisz dzielić modułowo liczbę wpisaną, przez wartość pętli.
https://www.google.p...iw=1680&bih=959
#include <iostream> #include <math.h> using namespace std; int g_First, g_Value = 2; main(){ cin>>g_First; if(g_First > 1){ while(g_Value <= sqrt(double(g_First))){ while(!(g_First % g_Value)){ g_First /= g_Value; cout<<g_Value<<"\n"; } if(g_First == 1){ break; } g_Value++; } if(g_First > 1){ cout<<g_First<<"\n"; } } system("pause"); }
https://www.google.p...iw=1680&bih=959
speedkill
14.09.2012
2 * 3 * 3 * 7 = 126, obok g_Value wyświetlaj sobie także g_First i zobaczysz wtedy dlaczego tak się dzieje
A jeśli chcesz zobaczyć tak jakby w belce to podmień sobie tego while i sprawdź wtedy
while(!(g_First % g_Value)){ cout<<g_First<<" | "<<g_Value<<"\n"; g_First /= g_Value; }
speedkill
14.09.2012
Poprawiłem algorytm generowania, teraz wszystko działa. Program nie ma już problemu z liczbą pierwszą lub z liczbą nieparzystą, także poprawiłem wygląd wyświetlania się tych czynników pierwszych liczby są teraz one w belce
#include <iostream> using namespace std; int g_First, g_Value = 2; main(){ cin>>g_First; if(g_First > 1){ while(g_Value <= g_First){ while(!(g_First % g_Value)){ cout<<g_First<<" | "<<g_Value<<"\n"; g_First /= g_Value; } g_Value++; } } cout<<"1\n"; system("pause"); }