[C] Obliczanie silni liczb
-
- Użytkownik
- Posty: 8
- Rejestracja: 4 mar 2014, o 18:28
- Płeć: Kobieta
- Lokalizacja: Polska
- Podziękował: 2 razy
[C] Obliczanie silni liczb
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.
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.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
-
- Użytkownik
- Posty: 8
- Rejestracja: 4 mar 2014, o 18:28
- Płeć: Kobieta
- Lokalizacja: Polska
- Podziękował: 2 razy
[C] Obliczanie silni liczb
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.
Powód: Brak tagów code.
-
- 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
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)
- Althorion
- 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
Warto pamiętać, że nawet najdłuższy typ całkowity,
Można oczywiście skorzystać z biblioteki dużych liczb (np.), ale to pewnie wykracza poza zakres ćwiczenia.
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/
- Kacperdev
- 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
Właściwie ze swieca szukać co w tym kodzie jest ok . Wydaje mi się, że go w ogóle nie rozumiesz.
1.
tak niewolno. Jezli nie deklarujesz dynamicznej tablicy rozmiar musi byc jednoznacznie okreslony tzn.
np.
2.
zastanow sie nad senem warunku.
Na razie tyle.
1.
Kod: Zaznacz cały
int n=11;
int tab[n];
np.
Kod: Zaznacz cały
int tab[11];
Kod: Zaznacz cały
for (n=0;n<=tab[11];n++)
Na razie tyle.
- Althorion
- 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
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.
- Kacperdev
- 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
No proszę, dobrze wiedzieć. Chyba dlatego wolę matematykę. Tam zasady tak szybko sie nie zmieniają .
Chyba starczy offtopa.
Chyba starczy offtopa.
-
- Użytkownik
- Posty: 8
- Rejestracja: 4 mar 2014, o 18:28
- Płeć: Kobieta
- Lokalizacja: Polska
- Podziękował: 2 razy
[C] Obliczanie silni liczb
Wiem że ten kod który napisałam jest tragiczny ale dopiero się uczę więc proszę o wyrozumiałość i cierpliwość
- Althorion
- 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
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
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.- MichalPWr
- 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
Autor miał chyba na myśli dyrektywę preprocesora.Kacperdev pisze:tak niewolno. Jezli nie deklarujesz dynamicznej tablicy rozmiar musi byc jednoznacznie okreslony tzn.Kod: Zaznacz cały
int n=11; int tab[n];
Kod: Zaznacz cały
.
.
#define ROZMIAR_TABLICY 11
.
.
.
int tab[ ROZMIAR_TABLICY ];
.
.
.
- Kacperdev
- 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
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);
}