Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Algorytm Potęgowania
Forum PHP.pl > Forum > PHP
Vengeance
Kod
<?php
echo potega();
function potega()
{
  global $zmienna;
  static $wynik=1;
  static $x = 4;
  static $k = 10;
  if($k<>0)
  {
     if(is_int($k/2))
     {
        $k /= 2;
        $x *= $x;
     }
     else
     {
        $wynik *= $x;
        $k--;
     }
     potega();
  }
  else
     return (string)$wynik;
}
?>


Jest to rekurencyjna funkcja do potęgowania napisana wg. jakiegoś tam algorytmu (było takie zadanie na jakieś olimpiadzie czy coś aby taką napisać).

Teraz pytanie. Jak to przerobić abym mógł przekazać podstawe i wykładnik jako parametry funkcji ? Bo przy:
Kod
static $x = $param1;


php robi error o zły T_VARIABLE.

PS> do nabijaczy postów ;] wiem, że istnieje funkcja pow()
TomASS
A nie da rady po prostu:

  1. <?php
  2.  
  3. function potega($x, $k)
  4. {
  5. //......
  6. }
  7.  
  8. ?>


może ja czegoś nie trybie tak z rana:/
orson
witam ...

Cytat
A nie da rady po prostu:

gdybys przeczytal co napisal to bys wiedzial ze sie nie da ...

@Vengeance: z tego co mi sie wydaje musisz usunac slowo kluczowe static przed nazwa zmiennej ... static oznacza ze zmienna jest stala [winksmiley.jpg] i nie da jej sie zmieniac w zaden sposob ... jak wywalisz static to chyba bedzie gut ...

pozdrawiam
DeyV
a dokładniej mówiąc, np. tak? (bez żadnej rekurencji...)
  1. <?php
  2.  
  3. function potega( $fPodstawa , $iWykladnik )
  4. {
  5. if( $iWykladnik == 0 )
  6. {
  7. return 1;
  8. }
  9. if( $iWykladnik < 0 )
  10. {
  11. $bObroc = true;
  12. $iWykladnik *= -1; // wartość bezwzględna;) 
  13. }
  14.  
  15. $fWynik = $fPodstawa;
  16. for( $i=1; $i < $iWykladnik; $i++ )
  17. {
  18. $fWynik *= $fPodstawa;
  19. }
  20.  
  21. if( isset( $bObroc ) )
  22. {
  23. return 1/$fWynik ;
  24. }
  25. return $fWynik; 
  26. }
  27.  
  28. echo potega( 2, -);
  29. ?>


@Orson: zazwyczaj na olimpiadach nie ma podanego z góry algorytmu, tak więc wszystko zależy od piszącego, chyba że... podany jest sposób przesyłania parametrów do funkcji. Ale nawet wtedy można próbować to ominąć, szczególnie w przypadku takim jak ten, gdzie założenie jest całkowicie absurdalne.
darkspirit
Cytat(DeyV @ 2004-08-13 07:26:25)
a dokładniej mówiąc, np. tak? (bez żadnej rekurencji...)
[...]
@Orson: zazwyczaj na olimpiadach nie ma podanego z góry algorytmu, tak więc wszystko zależy od piszącego, chyba że... podany jest sposób przesyłania parametrów do funkcji.


To nie olimpiada tylko Matura z infy tongue.gif

# znak `nalezy` zostal zastapiony e
[...]
Specyfikacja problemu:
Dane a - podstawa potęgi,n - wykładnik potęgi dla neN+(n nalezy do naturalnych dod.),aeR\{0}
Wyniki: wynik - wartosc potegi o podstawie a i wykładnikun, wynik eR
Zmienne pomocnicze: x,k

krok 1. nadaj wartosci zmiennym: zmiennej wynik 1,zmiennej x wartosc a zmiennej k wartosc n
krok2. dopóki k!=0,powtarzaj krok 3
krok3. jesli k jest liczba nieparzystą, to wynik pomnóź przez x, zaś k zmiejsz o 1, w przeciwnym przypadku k podziel przez 2, zaś x pomnóż przez x
krok4. wypisz wartosc wynik

Wykonaj polecenia:
a) Zapisz rekurencyjną funkcję obliczania potęgi aN(a do entej) w wybranym przez siebie języku(pseudojęzyku) programowanie.
[...]

bye
DeyV
to ja współczuje tworzącym takie zadania skrzywionej wyobraźni... smile.gif
Vengeance
No właśnie gdy usunę 'static' to cały kod szlak trafia ;]
A to czasem nic nie wyświetla lub wyświeli taka strona nie istnieje blink.gif

Co do funkcji to zależy mi na funckji rekurencyjnej (poprostu chce się czegoś nauczyć) smile.gif
DeyV
w takim razie powinno to wyglądać tak:
  1. <?php
  2. function potega( $x , $k, $wynik )
  3. {
  4. if( $k == 0 )
  5. {
  6. return $wynik ;
  7. }
  8.  
  9. if( $k%2 )
  10. { //nieparzysta
  11. $wynik *= $x;
  12. $k--;
  13. }
  14. else
  15. {
  16. $k /=2;
  17. $x *= $x;
  18. }
  19.  
  20. return potega( $x , $k, $wynik );
  21. }
  22.  
  23.  
  24. $a = 2; 
  25. $n = 3;
  26. $wynik = 1;
  27.  
  28. echo potega( $a, $n, $wynik );
  29. ?>


(ale i tak uważam że zadanie jest głupie, a sposób jego przekazania jeszcze głupszy)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.