Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obliczanie silni, Było: Działanie matematyczne
bela
post 16.10.2004, 15:24:33
Post #1


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


Jak obliczyć ile sto silnia ma zer?
Kiedyś miałem taki problem i nie mogłem go rozwiązać za pomocą kompa, musiałem ręcznie. Może wy znacie jakiś sposób smile.gif

[Edited: zmieniłem tytuł wątku, scanner]


--------------------
Go to the top of the page
+Quote Post
rogrog
post 16.10.2004, 17:15:02
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

Ostrzeżenie: (0%)
-----


a w jaki sposób zrobiłeś to ręcznie? jak się da zrobić na papierze to na pewno da się napisać algorytm...


--------------------
Go to the top of the page
+Quote Post
shpyo
post 16.10.2004, 17:33:50
Post #3





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


rekurencja + przeszukanie wyniku (ile zer)

  1. <?php
  2.  
  3. function silnia( $intLiczba )
  4. {
  5. if($intLiczba == 0)
  6. {
  7. return 1;
  8. }
  9. else
  10. {
  11. return $intLiczba*silnia( $intLiczba-);
  12. }
  13. }
  14.  
  15. $wynik = silnia(100);
  16. for($i=0, $ile=strlen($wynik);$i<$ile;$i++)
  17. {
  18. if( $wynik[$i] == 0 )
  19. {
  20. $licznik++;
  21. }
  22. }
  23.  
  24. echo 'jest '.$licznik.' zer<br />';
  25.  
  26. ?>


Ten post edytował shpyo 16.10.2004, 18:03:08


--------------------
Go to the top of the page
+Quote Post
bela
post 16.10.2004, 18:26:04
Post #4


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


shpyo: a testowałeś ten kod? bo mi się wydaje że są pewne ograniczenia co do długości liczby typu integer

a ręcznie te robiłem tak biggrin.gif
mój kalk oblicza maksymalnie 17 silnia czy coś takiego, później daje notacje wykładniczą, więc brałem końcówke i mnożyłem ją przez kolejne liczby a ilość zer zapisywałem na kartce smile.gif


--------------------
Go to the top of the page
+Quote Post
shpyo
post 16.10.2004, 20:52:11
Post #5





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


testowałem, wyszło mi 20 tongue.gif

ale nie mam pojęcia jak ta liczba wygląda tongue.gif


--------------------
Go to the top of the page
+Quote Post
rogrog
post 16.10.2004, 21:04:07
Post #6





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

Ostrzeżenie: (0%)
-----


jeśli chodzi o liczbby to integer ma ograniczenia ale zawsze zostaje float a większymi limitami biggrin.gif

mi się zdawało że kod bezpośrednio obliczający będzie się dosyć wolno uruchamiał i/lub powodował błędy, ale skoro działa to ok biggrin.gif

jak napiszesz algorytm to przerzucienie go do php to banal tongue.gif winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
shpyo
post 16.10.2004, 21:14:14
Post #7





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(bela_666 @ 2004-10-16 19:26:04)
a ręcznie te robiłem tak biggrin.gif
mój kalk oblicza maksymalnie 17 silnia czy coś takiego, później daje notacje wykładniczą, więc brałem końcówke i mnożyłem ją przez kolejne liczby a ilość zer zapisywałem na kartce smile.gif

hmmm, to z matematycznego punktu widzenia takie coś jest poprawne?
jak na mój rozum, to mnożenie części liczby (końcówki) nic nie da. A co jeżeli po pomnożeniu n*(n+1) gdzieś na początku pojawiło się zero (baaa, lub nawet zniknęło)? tongue.gif


--------------------
Go to the top of the page
+Quote Post
bela
post 16.10.2004, 21:58:49
Post #8


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


końcówka czyli jak miałem 3123178300 to zapisywałem zera i brałem 83 i dalej mnożyłem wyszło dobrze, lunter u ciebie wychodzi 17 wynik jest inny smile.gif


--------------------
Go to the top of the page
+Quote Post
shpyo
post 17.10.2004, 08:16:46
Post #9





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


właśnie sprawdzałem dla 1000, no i skrypcik Twój wymięka tongue.gif


--------------------
Go to the top of the page
+Quote Post
bela
post 17.10.2004, 13:05:32
Post #10


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


z tego co pamiętam to jest 24 albo 26 smile.gif


--------------------
Go to the top of the page
+Quote Post
Vengeance
post 17.10.2004, 17:08:42
Post #11





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


no to moze dasz zrodlo tego skryptu


--------------------
Go to the top of the page
+Quote Post
netzah
post 18.10.2004, 07:28:41
Post #12





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 19.03.2004

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. function silnia($l)
  4. {
  5. $s = '1';
  6.  
  7. for ($i=2; $i <= $l; $i++) {
  8. $s = bcmul($s, $i);
  9. }
  10.  
  11.  return $s;
  12. }
  13.  
  14. echo 'jest '. substr_count (silnia(100), &#092;"0\").' zer<br />';
  15.  
  16. ?>


bcmul nie ma zadnych ograniczen co do wielkosci smile.gif
Go to the top of the page
+Quote Post
shpyo
post 18.10.2004, 09:03:15
Post #13





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


to mój skrypt działa nawet dobrze... a teraz będzie jeszcze lepiej tongue.gif bo znam juz teraz tą funkcję bcmul tongue.gif

Ten post edytował shpyo 18.10.2004, 09:05:48


--------------------
Go to the top of the page
+Quote Post
netzah
post 19.10.2004, 08:52:36
Post #14





Grupa: Zarejestrowani
Postów: 109
Pomógł: 1
Dołączył: 19.03.2004

Ostrzeżenie: (0%)
-----


Hmm, sorri. Dla mnie szukanie i takich, i takich nie ma sensu. Tak czy inaczej - sadzialem, ze bardziej chodzi tu o poprawne obliczenie silni - a to jest OK.
Ale z ciekawosci - wyjasnij mi, jaki jest sens z punktu widzenia matematycznego szukanie zer za cyframi znaczacymi?

Ten post edytował netzah 19.10.2004, 09:14:39
Go to the top of the page
+Quote Post
bela
post 19.10.2004, 12:52:56
Post #15


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


chciałem wiedzieć jak to zrobić w php, bo na kartce to zrobię, ale kiedyś miałem z tym problem winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
tiraeth
post 19.10.2004, 19:54:31
Post #16





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Napisane na podstawie przykładu z książki "php 4. Tworzenie stron WWW. Ćwiczenia praktyczne" autorstwa Andrzeja Kierzkowskiego (wyd. Helion).

  1. <?
  2. // Tworzymy funkcję silnia
  3. function silnia($n)
  4. {
  5.  $silnia = 1;
  6.  // Wykorzystujemy pętlę for() do obliczenia silni
  7.  for($i=0; $o<=$n; $i++)
  8.  {
  9. $silnia *= $i;
  10.  }
  11.  
  12.  return $silnia;
  13. }
  14.  
  15. // Poniżej znajduje się przykład użycia
  16. $liczba = silnia(10);
  17. echo 'Silnia liczby 10 to: <b>'.$liczba.'</b>';
  18. ?>
Go to the top of the page
+Quote Post
shpyo
post 19.10.2004, 22:33:49
Post #17





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


mam jeszcze jedno pytanie (bo chyba przespałem tą część tongue.gif) co to są te liczby znaczące?

@Tiraeth: ja już podałem funkcję (baaa, nawet jest rekurencyjnie).


pozdro,
shpyo


--------------------
Go to the top of the page
+Quote Post
hawk
post 20.10.2004, 08:34:29
Post #18





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Cytat(Tiraeth @ 2004-10-19 19:54:31)
for($i=0; $o<=$n; $i++)

Jesteś pewny że ta książka jest godna polecenia?
biggrin.gif biggrin.gif biggrin.gif

A z tymi zerami i cyframi znaczącymi to was nie rozumiem... liczymy silnię czy szacujemy rząd wielkości? Bo jak szacujemy to może lepiej zacząc od jakiegoś przybliżenia silni?
Go to the top of the page
+Quote Post
Jabol
post 20.10.2004, 13:31:50
Post #19





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


ile silnia z x ma zer? Nic prostszego. Pomyśl, kiedy powstaje zero:
- gdy mnożysz razy coś z końcówką 0
- gdy mnożysz razy coś z końcuwką 5-1 (ew. 5+1, jeżeli robisz od tyłu) a zaraz potem coś z końcówką 5 (a to czemu?) Bo np. mnożenie x*5 *4= x *20, czyli mnożenie przez liczbe z końcówką 0.
Zauważ, że zara się nie cofają.
tak więc raraz po prostu policz ile razy będziesz mnożył razy liczbę z końcówką 0 i razy 5
Tak więc zer będzie:
5, 10, 15, 20, 25 (dwa zera, bo 24*25= 600), 30, 35, 40, 45, 50 (dwa zera, bo na końcu jest i 5 i 0), 55, 60, 65, 70, 75 (dwa zera, bo, 75*76=5700) 80, 85, 90, 95, 100 (dwa zera)
W sumie 24 zera!
Pamiętaj, żeby coś wyliczyć w php musisz wiedzieć jak to wyliczyć naprawdę
Czyli taki algorytm wyglądałby mniej więcej (nie chce mi się teraz robić dokładnego matematycznego wywodu) tak:
dla <100 -> 23 zera
dla >=100 i <1000 -> 23 + 10 na każdą setkę
dla >=1000 i <10000 -> 23 + 20 na każdą setkę
albo po prostu liczysz tak:
robisz pętlę od 5, potem + 5 i tak aż do liczby mniejsze lub równej tej, dla której liczysz silnie.
for(x=5;x<=TWOJALICZBA;x+=5){...};
Dla każdej liczby liczysz + 1 jeżeli końy się na 0 (dla każdego zera + 1), 5 (tylko raz +1, nawet jeżeli jest np licznik 5555) lub 5 (wtedy kilka razy +1, bo za każde 0 i za 5) jest ostatnią cyfrą przed zerem. A jeżeli ostatnimi cyframi (ew. ostatnimi przed zerem) są 75 lub 25 to doliczasz dwa zera (i oczywiście za każde 0 +1).
No, to by było na tyle.
I pamiętaj, rzeby coś zrobić na komputerze musisz to najpierw umieć zrobić ręcznie.
Go to the top of the page
+Quote Post
bela
post 20.10.2004, 18:27:45
Post #20


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


@Jabol: moja matematyczka w szkole liczyła tym sposobem i wyszło jej 22 biggrin.gif sądzę, że zapomniała o 25 i 75 dry.gif
A kto powiedział, że nie zrobiłem ręcznie biggrin.gif

Ten post edytował bela_666 20.10.2004, 18:29:51


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 01:54