Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Algorytm Potęgowania
Vengeance
post 13.08.2004, 01:29:55
Post #1





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

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


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()

Ten post edytował Vengeance 13.08.2004, 01:31:18


--------------------
Go to the top of the page
+Quote Post
TomASS
post 13.08.2004, 07:23:11
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


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:/


--------------------
Go to the top of the page
+Quote Post
orson
post 13.08.2004, 08:17:46
Post #3





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

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


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


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
DeyV
post 13.08.2004, 08:26:25
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
darkspirit
post 13.08.2004, 10:47:43
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 13.08.2004
Skąd: Łódź

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


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

Ten post edytował darkspirit 13.08.2004, 10:49:30


--------------------
Apache 1.3.31 PHP 4.3.10 && 5.0.3 Go to the top of the page
+Quote Post
DeyV
post 13.08.2004, 11:04:58
Post #6





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




to ja współczuje tworzącym takie zadania skrzywionej wyobraźni... smile.gif


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
Vengeance
post 13.08.2004, 11:05:40
Post #7





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

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


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


--------------------
Go to the top of the page
+Quote Post
DeyV
post 13.08.2004, 11:19:58
Post #8





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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)


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
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: 6.05.2025 - 05:36