Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Silnia z liczb całkowitych nieujemnych

Werpet 09 Wrz 2016 13:09 1203 8
  • #1 09 Wrz 2016 13:09
    Werpet
    Poziom 4  

    Witam, napisałem program, który oblicza silnię z liczb nieujemnych. Moje pytanie brzmi jak sprawdzić czy dana liczba jest całkowita? Program mi dobrze liczy silnię, ale np. przy wpisaniu 1.5 liczy z 1, a przy 2.5 liczy z 2. Poniżej zamieszczam kod do programu.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 8
  • #2 09 Wrz 2016 13:16
    EmbeddedProgramming
    Poziom 8  

    Silnia odnosi się, a raczej jest zdefiniowana dla liczb całkowitych nieujemnych. Do wyliczenia silni z liczby rzeczywistej musiał byś użyć funkcji Gamma Eulera, ale nie sądzę, żebyś dostał gdzie kol wiek takie zadanie.

    0
  • #3 09 Wrz 2016 13:23
    Werpet
    Poziom 4  

    Tak, ale 1.5 czy 2.5 to nie są liczby całkowite.

    0
  • #6 09 Wrz 2016 14:13
    EmbeddedProgramming
    Poziom 8  

    No możesz to zawsze napisać jakoś zgrabniej, w każdym razie w tej formie działa tak jak powinno.

    0
  • #7 09 Wrz 2016 14:20
    Werpet
    Poziom 4  

    Dzięki wielkie.

    0
  • #8 15 Wrz 2016 10:54
    Tomator.pl
    Poziom 10  

    O ile pamiętam, cin czyta do pierwszego znaku nadającego się do potraktowania jako część liczby całkowitej, gdy piszesz "int n << cin". Oznacza to, że po podaniu "1.5" cin zużyje "1", a ".5" pozostanie w buforze. Gdybyś próbował, bez wyczyszczenia bufora, odczytać kolejną liczbę całkowitą, otrzymałbyś zero, bo konwersja próbowałaby zacząć się od ".".

    Do sprawdzenia, czy podana liczba jest całkowita, musiałbyś wczytać ją do typu zmiennoprzecinkowego (float, double) i sprawdzić, czy x == floor(x).

    0
  • #9 21 Wrz 2016 19:26
    Rezystoreczek
    Poziom 20  

    no, dokładnie jak wyżej, spójrz na implementację:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    kod pisany na kolanie, ale on pyta do skutku dopóki nie podasz całkowitej, w razie czego sobie poprawisz... zakładam, że odrobinę pracy własnej musisz dać :)
    PS: printfa możesz zamienić na std::cout'a

    0