[TP] silnia

Odpowiedz Nowy wątek
2002-11-13 16:39
tomex
0

Witam !
Czy ktos moglby mi pomoc w napisaniu programu obliczajacego wartosc funkcji silnia dla zadanego argumentu ?
Program powinien pytac uzytkownika o liczbe dla jakiej pragniemy obliczyc funkcje silnia, a nastepnie wyswietlac wynik ...--
pozdro_4_all

Pozostało 580 znaków

2002-11-13 16:43
werw0e
0

wynik:=1;
For i:=1 to liczba then
wynik:=wynik*i;

Ale przy kilkunastu juz padnie ;]
Poza zakres..--Pamietaj że święto zmarłych stanie się także twoim świętem.

Pozostało 580 znaków

2002-11-13 16:52
pq
0

werw0e napisał:
wynik:=1;
&gtFor i:=1 to liczba then
&gt wynik:=wynik*i;
&gt
&gtAle przy kilkunastu juz padnie ;]
&gtPoza zakres..

po pierwsze: for i:=2 to liczba (zawsze jeden obrot petli mniej)

po drugie: trzeba uzyc duzego zmiennoprzecinkowego typu (w Delphi Int64 wywala sie powyzej 20, a double dopiero powyzej 170).

--
Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

Pozostało 580 znaków

2002-11-13 17:09
tomex
0

Witam !
[hurra] Dziekuje bardzo za odpowiedz !
Dodam jeszcze ze nalezy sprawdzac, czy wprowadzona liczba jest poprawna (wartosc funkcji silnia jest okreslona dla zbioru liczb naturalnych). Nalezy przetestowac zachowanie programu dla roznych typow danych, w ramach ktorych moze byc obliczny wynik, tj. dla ShortInt, Integer, LongInt, Byte, Word.
LOL Nie spodziewalem sie tak szybkiej reakcji

pozdro_4_all--
pozdro_4_all

Pozostało 580 znaków

2002-11-13 18:37
werw0e
0

pq napisał:
&gtpo pierwsze: for i:=2 to liczba (zawsze jeden obrot petli mniej)
Tak??
A mi jakos nie chce dzialac jak wprowadze liczbe naturalna 1 ;P

&gtpo drugie: trzeba uzyc duzego zmiennoprzecinkowego typu (w Delphi Int64 wywala sie powyzej 20, a double dopiero powyzej 170).

TP=Turbo Pascal (tak mysle)
jak tak to przyklad z Delphi jest nie trafiony :)--Pamietaj że święto zmarłych stanie się także twoim świętem.

Pozostało 580 znaków

2002-11-13 19:14
pq
0

werw0e napisał:
pq napisał:
&gt&gtpo pierwsze: for i:=2 to liczba (zawsze jeden obrot petli mniej)
&gtTak??
&gtA mi jakos nie chce dzialac jak wprowadze liczbe naturalna 1 ;P
&gt
Racja [wstyd]

&gt&gtpo drugie: trzeba uzyc duzego zmiennoprzecinkowego typu (w Delphi Int64 wywala sie powyzej 20, a double dopiero powyzej 170).
&gt
&gtTP=Turbo Pascal (tak mysle)
&gtjak tak to przyklad z Delphi jest nie trafiony :)

Pewnie bedzie Real w TP, ale nie poniewaz nie znam dokladnie zmiennoprzecinkowych typow w TP dalem przyklad z Delphi. Przyklad jest trafiony, bo pokazuje jak szybko wywalaja sie typy staloprzecinkowy i zmiennoprzecinkowy o tym samym rozmiarze 8 bajtow.--Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

Pozostało 580 znaków

2002-11-13 22:12
Vogel
0

tomex napisał:
wartosc funkcji silnia jest okreslona dla zbioru liczb naturalnych

Gdzieś widziałem wzór na wersję silni dla liczb rzeczywistych (of koz standardowa definicja wtedy odpada).--Vogel [Delphi 6 PE]

Life is just a dream, you know...
[Cowboy Bebop]

Pozostało 580 znaków

2002-11-14 03:08
tomex
0

Vogel napisał:
&gtGdzieś widziałem wzór na wersję silni dla liczb rzeczywistych (of koz standardowa &gtdefinicja wtedy odpada).

Witam !
Na wstepie; wielkie dzieki !
Funkcja silnia jest zdefiniowana w postaci nastepujacej zaleznosci rekurencyjnej:
0!=0
1!=0!1=1
2!=1!
2=2
...
n!=(n-1)!*n (n&gt0)

Cala zaleznosc mozna tez zapisac jako (wersja iteracyjna):

n!=1234...(n-1)n

btw
Dla kazdego typu nalezy sprawdzic, dla jakiej najwiekszej liczby wejsciowej program wyswietla poprawny wynik i jakie wyniki sa wyswietlane dla liczb wiekszych. Swoje wnioski zawrzec w postaci komentarzy w pliku z rozwiazaniem.
Otrzymane wyniki nalezy wykorzystac do zabezpieczenia programu przed obliczaniem niepoprawnych wartosci. W tej sytuacji, po wpisaniu zbyt duzej liczby wejsciowej, program powinien wyswietlic odpowiedni komunikat, informujacy o niemozliwosci wykonania obliczen (nalezy dobrac typ danych umozliwiajacy nam obliczanie najwiekszej wartosci funkcji silnia).

pozdro_4_all--
pozdro_4_all

Pozostało 580 znaków

2002-11-14 11:14
werw0e
0

tomex napisał:
&gtFunkcja silnia jest zdefiniowana w postaci nastepujacej zaleznosci rekurencyjnej:
&gt0!=0
&gt1!=0!*1=1

Co ty za gupoty opowiadasz??
0!=0 tak wiec
1!=01
0
1 to jest 0 (chcialem uzyc wykrzyknika ale wiadomo)
0!=1 --Pamietaj że święto zmarłych stanie się także twoim świętem.

Pozostało 580 znaków

2002-11-14 16:35
0

Wiem jak zrobić progsa (chociażby w TP7 ), który liczy silnie bardzo dużych argumentów np.1000 :)


Pozostało 580 znaków

2002-11-14 18:10
0

Vogel napisał:
Gdzieś widziałem wzór na wersję silni dla liczb rzeczywistych (of koz standardowa definicja wtedy odpada).

Tylko, że wówczas nazywa się to funkcją gamma:
lim(przy n-&gtNieskończoność) (n!n^(x-1))/(x(x+1)(x+2)...*(x+n-1))

To oczywiście tylko jeden z możliwych opisów (są też inne równoważne, jednak mniej wygodne do napisania na forum :) )

a jeżeli chodzi o obliczanie silnii to najprostsze (ale niekoniecznie najlepsze) jest:

function Silnia(n: Byte): Int64; // można zmienić zakresy
begin
if n &lt 2 then
Silnia := 1
else
Silnia := n*Silnia(n-1);
end;--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], [PHP] itp.


Jest jeszcze jeden błąd :)
Unix is user friendly. It's just very particular about who it's friends are.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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