Silnia w C za pomocą for

0

Hej, mam pytanie

Próbowałam napisać program liczący silnię za pomocą pętli for:

#include <stdio.h>
 
int main()
{
    
    int silnia = 1;
    int n;
    
    printf("Podaj liczbe:");
    scanf("%d", &n);
    for (int i = n; i>1; i--)
    {
    	n= n*i;
	}
	silnia = n;
	printf("silnia = %d", silnia);
    return 0;
}

Niestety, nie bardzo wiem, co nie działa.
Jakieś rady?

5

My też nie wiemy co nie działa. A dokładniej, opisz w jaki sposób stwierdzasz, że nie działa.

7

Pierwsza iteracja Twojej pętli zaczyna się dla i = n; - czyli zamiast liczyć np. 4 * 3 * 2, liczysz 4 * 4 * 3 * 2 (tj. zawsze masz n * n * (n - 1) * (n - 2) * ...).

0

@Samhain: Czemu w każdym obiegu pętli zwiększasz n?

2

Zacznij w pętli od i = n - 1
W ogóle to jak dostajesz output to byś napisał, że dostajesz zły wynik. Bo tak to nawet nie wiadomo czy się nie kompiluje czy co.
Jak już dostajesz zły wynik to na podstawie testowania samego idzie zgadnąć co robisz źle. Przecież początkowe wartości silni zna większość osób.
Jak nie umiesz debuggować to sobie wypisz w pętli aktualną wartość i oraz n po każdym przebiegu pętli itd. Jest to najprostszy sposób na dojście do tego co się dzieje.
W ogóle moje rozwiązanie z zaczęciem od n - 1 rozwiąże problem ale nie zmieni tego głupiego kodu w dobry kod. Weź to najlepiej usuń i napisz na spokojnie tak żeby być pewnym każdego kroku.
Jaki jest sens deklarować zmienną silnia i przypisywać 1, skoro jej nie używasz. Na końcu nadpisujesz i wypisujesz wartość. To nie tak powinno wyglądać.

Edit:
Widzę że już ludzie odpowiedzieli.
W każdym razie pewnie po to deklarowałeś na początku silnia = 1 żeby odpowiednio obsłużyć przypadek obliczania silni dla 0. Obecny kod po poprawieniu iteracji nadal nie będzie działał dla zera.

2
#include <stdio.h>

int main()
{
    int silnia = 1;
    int n;
    printf("Podaj liczbe:");
    scanf("%d", &n);
    for (int i=1;i<=n;i++) silnia*=i;    
    printf("silnia = %d", silnia);
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1