Silnia w C


(Szala90) #1

Witam. Proszę o poprawienie mojego programiku. Jestem początkujący więc proszę o wyrozumiałość. Chodzi o program który wczytuje podaną wartość przez użytkownika i podaje jego silnie. Napisałem coś takiego:

#include 

#include 

#include 


using namespace std;


int main()

{

    int silnia(int n);

    int w;

    printf("Podaj liczbe calkowita dodatnia: ");

    scanf("%d",&n);

    if(n==1|n==0)

    {

    printf("Wynik wynosi 1");

}

    if(n<0)

    {

    printf("podales zla liczbe");

}

    else

    for(n=1;n
    {

                                        w=n*silnia(n-1);

                                        printf("%d",w);

                                        }

    getch();

}

Pokazuje błąd przy scanf


(Kubarek) #2

Deklarujesz funkcję silnia, a gdzie jej definicja?

for(n=1;silnia*=n;n++)

W tej linijce mnożysz adres ( miejsce gdzie w pamięci się funkcja znajduje ) funkcji przez wartość ze zmiennej n. To sensu nie ma, szczególnie w tym przypadku :stuck_out_tongue: Ostatnie linijki programu powinny wyglądać tak:

if(n<0)

{

  printf("podales zla liczbe");

} else {

  printf("%d\n", silnia(n));

}

Funkcję silnia zdefinuj pod funkcją main i będzie w miarę git :slight_smile:


(Fiołek) #3

To jest C++(iostream, przestrzenie nazw), nie C.

C++ nie pozwala definiować funkcji w funkcji.

|_ to nie logiczne tylko bitowe _or.

Używasz funkcji jako zmiennej(n=1;n

Zapoznaj się z jakimś kursem C lub C++, tam będziesz miał opisane jak napisać poprawny program(pewnie przykład z silnią też gdzieś znajdziesz :wink:.


(Nkamil1555) #4

Rozrysuj sobie silnie w schemacie blokowym moze być ci łatwiej :slight_smile:


([alex]) #5

Błąd pokazuje nie przy scanf zaś przy zmiennej n użytej w scanf. Zmienna n nie zadeklarowana wcześniej.


(Bolkowice10) #6

Ja bym to zrobił tak:

#include 

#include 


int main(int argc, char *argv[])

{int i=1,n=0,d[10000],p=0,m;


for (n=0;n<10001;n++)

d[n]=0;

d[0]=1;

printf("Z jakiej liczby chcesz policzyc silnie:");

scanf("%d",&m);

while (i
{

for (n=0;n<10000;n++)

     {d[n]=d[n]*i;}

for (n=0;n<10000;n++)

{

     if (d[n]>9)

{

           p=(d[n]-d[n]%10)/10;

           d[n]=d[n]%10;

           d[n+1]=d[n+1]+p;}}

i++;}

printf("%d!=",m);

for (n=10000;n>-1;n--)

{ if (d[n]!=0)

    break;}

for(n;n>-1;n--)

printf("%d",d[n]);

printf("\n");

  system("PAUSE");   

  return 0;

}

([alex]) #7

Kaczor_90 , bardziej bez sensu nie udało się wymyślić?

Nie sądzę by ktoś chciał liczyć silnie z 200.

Nie mówiąc o tym że masz błędy spowodowane brakiem podstaw.

Jeżeli masz zadeklarowaną tablicę A[3] to oznacza że ma ona trzy elementy A[0],A[1],A[2].


(Cinek Cnx) #8

Funkcja licząca silnie może wyglądać np tak (dodaj ją przed funkcją main):

int silnia(int n)

{

    int wynik = 1;

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

        wynik *= i;

    return wynik;

}

i wywołaj w programie dając przed wywołaniem if'a żeby wykluczyć podanie błędnych parametrów (n musi być większe od 0)


([alex]) #9

Albo tak:

unsigned silnia(unsigned n)