[C++] Jak obliczyć silnię?


(Lord218) #1

Jak zrobić takie zadanie?

  1. pobiera od użytkownika liczbę całkowitą n i oblicza wartość n!.

Będę bardzo wdzięczny za odpowiedź.


(Kamil321) #2
#include 

#include 

#include 


main()

{

int x;

int y;

int z;

poczatek:

std::cout << "\nPodaj liczbe\n";

std::cin >> x;

y=x;

z=x;


petla:


if (y>1)

{

y=y-1;

z=z*y;    

goto petla;

}

else

{

goto dalej;

}

dalej:

std::cout << "Wynik to "<
goto poczatek;


}

Pisałem na szybko, ale działa :lol: I chyba chodziło o liczbę naturalną, bo w przypadku ujemnych całkowitych byłby problem :wink:


(Lord218) #3

Dzięki a jak to zrobić za pomocą pętli for?


(Sawyer47) #4

Na tym forum nie odrabia się zadań. Zobacz tutaj: http://pl.wikipedia.org/wiki/Silnia


(somekind) #5

Działa, ale jest najgorszym z możliwych sposobów napisania tego. Powinni Cię za to powiesić. No, chyba że nie lubisz założyciela wątku i zwyczajnie chcesz, aby to skopiował i nie zaliczył :smiley:

A to istnieje coś takiego jak silnia liczby ujemnej? :expressionless:

A jaki miałoby to mieć sens matematyczny?


(Kamil321) #6

Spytał jak zrobić taki program, napisałem to w ten sposób, żeby mógł wyciągnąć z tego metodę liczenia, gdyż na forum nie można podawać odpowiedzi do zadań.

No właśnie to nie ma sensu, a WNHacker napisał "całkowitej" czyli dodatniej lub ujemnej, a to jest niemożliwe. Właśnie dlatego napisałem, że silnia może być tylko z liczby naturalnej (czyli dodatniej).


(somekind) #7

Całkiem słusznie.

Tylko pewno on i tak nie da rady nic z tego wyciągnąć, bo ten kod jest zagmatwany, a sama metoda jest przecież banalna.

Faktycznie, to słowa autora.

Ale z tą dodatniością liczb naturalnych uważaj, matematycy sami nie wiedzą, czy zero jest w końcu naturalne, czy nie :slight_smile:


(Oliwier2) #8

Myślę, że tutaj znajdziesz interesujący Cię program, który liczy silnie.

http://www.technikum-informatyczne.info/programowanie/82-c-silnia


(system) #9

Wiem, że nie wolno dawać rozwiązań na forum, ale masz, w drodze wyjątku:

#include 


using namespace std;


int main()

{


    unsigned int n;

    unsigned int silnia = 1;

    unsigned int wynik;


    cin >> n;


    for(int i = 1; i<=n; i++)

    {


            silnia = silnia * i;


    }


    wynik = silnia % 10;

    cout << wynik;


}

(Zulowski) #10

Masz jeszcze rekurencyjną :wink:

#include 

using namespace std;

int silnia(int n)

{

	if(n==0) return 1;

	else return n*silnia(n-1);

}

void main()

{

	cout << "silnia od 5 = "<
}

@gates22, twoj przyklad nie dziala, sprawdzilem dla 5 :stuck_out_tongue:


(Lord218) #11

Dzięki śliczne. Jestem wam bardzo wdzięczny za pomoc.