[C] Obliczanie silni liczb

kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Obliczanie silni liczb

Post autor: kuna12345 »

Program ma wyświetlać 11 liczb naturalnych liczący ich silnie i wyświetlać wynik na konsoli. Zrobiłam (źle) za pomocą pętli, czy ktoś wie jak zrobić to poprawnie ?
Należy stworzyć program, który pobierze od użytkownika 11 liczb naturalnych i zapisze je w tablicy. Następnie dla każdej z tych liczb należy obliczyć wartość silni. Obliczanie silni ma być zaimplementowane z użyciem funkcji. Oblicz one wartości silni mają zostać wyświetlone na konsoli.
Jeżeli temat się powtarza to najmocniej przepraszam.
Ostatnio zmieniony 19 mar 2014, o 23:25 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Awatar użytkownika
Kacperdev
Użytkownik
Użytkownik
Posty: 3260
Rejestracja: 23 mar 2010, o 19:19
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 17 razy
Pomógł: 686 razy

[C] Obliczanie silni liczb

Post autor: Kacperdev »

Pokaż co zrobiłaś.
kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Obliczanie silni liczb

Post autor: kuna12345 »

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
    int main ()
    {
        int n=11;
        int tab[n];
        int silnia;
        printf ("Podaj 11 liczb naturalnych:
");
        scanf ("%d",&n);
    for (n=0;n<=tab[11];n++)
    {
        silnia=silnia*n;
    }
    printf ("Silnia liczby %d wynosi %d:
",n,silnia);
    return 0;
}
Ostatnio zmieniony 19 mar 2014, o 11:48 przez Afish, łącznie zmieniany 1 raz.
Powód: Brak tagów code.
matinf
Użytkownik
Użytkownik
Posty: 1922
Rejestracja: 26 mar 2012, o 18:52
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 695 razy
Pomógł: 4 razy

[C] Obliczanie silni liczb

Post autor: matinf »

Pomijając masę błędów w kodzie, domyślam się pewnie, że chodzi o rekurencyjną funkcję silni. Acz wydajniejsze pamięciowo jest iteracyjne;

Kod: Zaznacz cały

int silnia(int n)
   if(i==1)   return 1;
   else return n * slinia(n-1)
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Obliczanie silni liczb

Post autor: Althorion »

Warto pamiętać, że nawet najdłuższy typ całkowity, unsigned long long int, gwarantuje tylko 64-bitową zmienną, a już \(\displaystyle{ 21! > 2^{64}-1}\). Jeśli musisz pisać w standardzie C sprzed 1999 roku (bo wtedy ten typ został wprowadzony), to najdłuższym typem całkowitym będzie co najmniej 32-bitowy unsigned long int, gdzie limit jest jeszcze ostrzejszy: \(\displaystyle{ 13! > 2^{32}-1}\).

Można oczywiście skorzystać z biblioteki dużych liczb (np.

Kod: Zaznacz cały

https://gmplib.org/
), ale to pewnie wykracza poza zakres ćwiczenia.
Awatar użytkownika
Kacperdev
Użytkownik
Użytkownik
Posty: 3260
Rejestracja: 23 mar 2010, o 19:19
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 17 razy
Pomógł: 686 razy

[C] Obliczanie silni liczb

Post autor: Kacperdev »

Właściwie ze swieca szukać co w tym kodzie jest ok . Wydaje mi się, że go w ogóle nie rozumiesz.
1.

Kod: Zaznacz cały

int n=11;
int tab[n];
tak niewolno. Jezli nie deklarujesz dynamicznej tablicy rozmiar musi byc jednoznacznie okreslony tzn.

np.

Kod: Zaznacz cały

int tab[11];
2.

Kod: Zaznacz cały

for (n=0;n<=tab[11];n++)
zastanow sie nad senem warunku.

Na razie tyle.
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Obliczanie silni liczb

Post autor: Althorion »

Kacperdev, od 1999 roku już można deklarować tablice o rozmiarze zadanym zmienną. To rozszerzenie nosi nazwę .
Awatar użytkownika
Kacperdev
Użytkownik
Użytkownik
Posty: 3260
Rejestracja: 23 mar 2010, o 19:19
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 17 razy
Pomógł: 686 razy

[C] Obliczanie silni liczb

Post autor: Kacperdev »

Hm... dziwne, bo uczono mnie inaczej i VS 2012 krzyczy jak tak próbuje.
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Obliczanie silni liczb

Post autor: Althorion »

Bo VS 2012 . Ot, nie zauważyli pewnie, mało czasu minęło . Stąd i w poprzedniej wiadomości (tej o zakresie zmiennych) podkreślałem konieczność zgodności kompilatora, bo to w przypadku dzieła Microsoftu niestety nie chce być oczywiste. Dopiero w wersji 2013 to poprawili. Wikipedia ma , jeśli to kogoś interesuje.
Awatar użytkownika
Kacperdev
Użytkownik
Użytkownik
Posty: 3260
Rejestracja: 23 mar 2010, o 19:19
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 17 razy
Pomógł: 686 razy

[C] Obliczanie silni liczb

Post autor: Kacperdev »

No proszę, dobrze wiedzieć. Chyba dlatego wolę matematykę. Tam zasady tak szybko sie nie zmieniają .
Chyba starczy offtopa.
kuna12345
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 4 mar 2014, o 18:28
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 2 razy

[C] Obliczanie silni liczb

Post autor: kuna12345 »

Wiem że ten kod który napisałam jest tragiczny ale dopiero się uczę więc proszę o wyrozumiałość i cierpliwość
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Obliczanie silni liczb

Post autor: Althorion »

Program ten powinien składać się z trzech części:
1. Pobierania danych od użytkownika i zapisywania ich w tablicy.
2. Obliczania silni dla danych z tablicy.
3. Wyświetlania elementów tablicy.

Zacznijmy od pierwszego punktu. Spróbuj napisać go, przy użyciu pętli for. Sprawdzimy Ci to i poprawimy ewentualne błędy.
Awatar użytkownika
MichalPWr
Użytkownik
Użytkownik
Posty: 1625
Rejestracja: 29 wrz 2010, o 15:55
Płeć: Mężczyzna
Lokalizacja: Leszno
Podziękował: 7 razy
Pomógł: 387 razy

[C] Obliczanie silni liczb

Post autor: MichalPWr »

Kacperdev pisze:

Kod: Zaznacz cały

int n=11;
int tab[n];
tak niewolno. Jezli nie deklarujesz dynamicznej tablicy rozmiar musi byc jednoznacznie okreslony tzn.
Autor miał chyba na myśli dyrektywę preprocesora.

Kod: Zaznacz cały

.
.
#define ROZMIAR_TABLICY 11
.
.
.
int tab[ ROZMIAR_TABLICY ];
.
.
.
Awatar użytkownika
Kacperdev
Użytkownik
Użytkownik
Posty: 3260
Rejestracja: 23 mar 2010, o 19:19
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 17 razy
Pomógł: 686 razy

[C] Obliczanie silni liczb

Post autor: Kacperdev »

Przykładowy kod:

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>

#define TABLICA 11

long silnia(int a);


int main()
{
	int tab[TABLICA];
	
	for(int i=0;i<TABLICA;++i) scanf("%d",&tab[i]);
	for(int i=0;i<TABLICA;++i) printf("Silnia z %d wynosi: %d 
",tab[i],silnia(tab[i]));

	getch();
	return 0;
}


long silnia(int a)
{
	if (a==0) return 1;
	else return a*silnia(a-1);
}
Gouranga
Użytkownik
Użytkownik
Posty: 1591
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C] Obliczanie silni liczb

Post autor: Gouranga »

Kacperdev, niepotrzebnie mieszasz oddzielając nagłówek funkcji od ciała
ODPOWIEDZ