Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jaka pętla?
3miel
post 30.09.2005, 20:41:41
Post #1





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


Witam,

mam taką funkcję:

php:
  1. <? 
  2. function losuj($tresc, $nrjezyk){ 
  3. srand((float) microtime() * 10000000); 
  4. global $slowko; 
  5. global $losowa_liczba; 
  6. global $slowkonr; 
  7. $losowa_liczba = array_rand ($tresc, 1); 
  8. $losowa_liczba+1; 
  9. $slowko0 = explode("|", $tresc[$losowa_liczba]); 
  10. $slowko = $slowko0[$nrjezyk]; 
  11. $slowkonr = $slowko0[3]; 
  12. } 
  13.  
  14. losuj($tresc, $_GET['nrjezyk']); 
  15. ?>


i teraz jeżeli wylosuje liczbe ($slowkonr=='1') to chce zrobić, żeby na nowo losowało (powtarzała się funkcja losuj).

Jak to zrobić?


--------------------
Go to the top of the page
+Quote Post
s_w_ir
post 30.09.2005, 20:46:11
Post #2





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


Rekurencja.
  1. <?php
  2. function losuj($tresc, $nrjezyk){ 
  3. srand((float) microtime() * 10000000); 
  4. global $slowko; 
  5. global $losowa_liczba; 
  6. global $slowkonr; 
  7. $losowa_liczba = array_rand ($tresc, 1); 
  8. $losowa_liczba+1; 
  9. $slowko0 = explode("|", $tresc[$losowa_liczba]); 
  10. $slowko = $slowko0[$nrjezyk]; 
  11. $slowkonr = $slowko0[3]; 
  12. if($slowkonr=='1') function($tresc, $nrjezyk);
  13. }
  14. losuj($tresc, $_GET['nrjezyk']); 
  15. ?>
Nie gwarantuje ze sie nie zapetli ale przeanalizuj to sobie.
Go to the top of the page
+Quote Post
3miel
post 30.09.2005, 20:53:52
Post #3





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


Parse error: parse error, unexpected T_FUNCTION in /home/3/m/i/3miel/www/english/index.php on line 128

chyba jednak to nie zadziała sad.gif

Macie inne pomysły?


--------------------
Go to the top of the page
+Quote Post
sendi16
post 30.09.2005, 21:06:14
Post #4





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 29.03.2003
Skąd: Kraków

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


  1. <?
  2. function losuj($tresc, $nrjezyk){
  3. srand((float) microtime() * 10000000);
  4. global $slowko;
  5. global $losowa_liczba;
  6. global $slowkonr;
  7. $losowa_liczba = array_rand ($tresc, 1);
  8. $losowa_liczba+1;
  9. $slowko0 = explode("|", $tresc[$losowa_liczba]);
  10. $slowko = $slowko0[$nrjezyk];
  11. $slowkonr = $slowko0[3];
  12.  
  13. return $slowkonr;
  14. }
  15.  
  16. $slowkonr = 1;
  17.  
  18. while($slowkonr == 1)
  19. {
  20. $slowkonr = losuj($tresc, $_GET['nrjezyk']);
  21. }
  22. ?>


sprobuj tego
Go to the top of the page
+Quote Post
s_w_ir
post 1.10.2005, 00:23:48
Post #5





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


Cytat(3miel @ 2005-09-30 21:53:52)
Parse error: parse error, unexpected T_FUNCTION in /home/3/m/i/3miel/www/english/index.php on line 128

chyba jednak to nie zadziała sad.gif

Znowu sie walnołem w kodzie. Nie spodziewałem sie że nie znasz działania rekurencji, i nawet nie przeanalizowałeś kodu. Zamiast function powinno byc losuj:
  1. <?php
  2. function losuj($tresc, $nrjezyk){ 
  3. srand((float) microtime() * 10000000); 
  4. global $slowko; 
  5. global $losowa_liczba; 
  6. global $slowkonr; 
  7. $losowa_liczba = array_rand ($tresc, 1); 
  8. $losowa_liczba+1; 
  9. $slowko0 = explode("|", $tresc[$losowa_liczba]); 
  10. $slowko = $slowko0[$nrjezyk]; 
  11. $slowkonr = $slowko0[3]; 
  12. if($slowkonr=='1') losuj($tresc, $nrjezyk);
  13. ?>
blink.gif
Go to the top of the page
+Quote Post
3miel
post 1.10.2005, 12:54:54
Post #6





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


Pierwszy raz spotkałem się z rekurencją, a kod analizowałem, ale jak nie znam sie na tym zagadanieniu to skąd mogłem wiedzieć smile.gif

Ale teraz mam inny problem (i nawet nie moge sprawdzić czy ten spsoó działa), ponieważ mam cos takeigo:

  1. <?
  2.     for($i=0  ;  $i<$ile  ;  $i++){
  3.         echo $tresc[$i].'<br>';
  4.     }
  5.     echo '<br><br>';
  6.  
  7.     function losuj($tresc, $nrjezyk){
  8.         global $slowko;
  9.         global $losowa_liczba;
  10.         global $slowkonr;
  11.         $losowa_liczba = array_rand ($tresc, 1);
  12.         $losowa_liczba+1;
  13.         $slowko0 = explode("|", $tresc[$losowa_liczba]);
  14.         $slowko = $slowko0[$nrjezyk];
  15.         $slowkonr = $slowko0[3];    
  16.         if($slowkonr == 1) losuj($tresc, $nrjezyk);
  17.     }
  18.  
  19.     losuj($tresc, $_GET['nrjezyk']);
  20.  
  21.     echo 'L. losowa:'.$losowa_liczba.'<br />
  22.     Slowo nr: '.$slowkonr.'<br /><br />';
  23. ?>


i wyświetla się coś takiego:

Kod
1|lesson|lekcja|0
2|topic|temat|0
3|know|wiedzieć|0
4|happy|szczęsliwy|0
5|holiday|wakacje|0
6|phone|telefon|0
7|english|angielski|0


L. losowa:12
Slowo nr: 0


Jakim cudem losuje liczbe 12, jezeli jest tylko 7 wersów (słówek)?

Ten post edytował 3miel 1.10.2005, 13:46:28


--------------------
Go to the top of the page
+Quote Post
s_w_ir
post 1.10.2005, 17:24:00
Post #7





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


  1. <?php
  2.  function losuj($tresc, $nrjezyk){
  3. global $slowko;
  4. global $losowa_liczba;
  5. global $slowkonr;
  6. $losowa_liczba = array_rand ($tresc, 1); //tresc= tablica, wybieramy 1 element z 7
  7. $losowa_liczba+1; //moze byc rowne od 1 do 7
  8. $slowko0 = explode("|", $tresc[$losowa_liczba]); // tablica 4 elementowa o max indeksie = 3
  9. $slowko = $slowko0[$nrjezyk];//rozumiem ze nrjezyk 1 lub 2
  10. $slowkonr = $slowko0[3]; //slowkonr moze byc tylko rowne 0 jak wynika z tablicy ktora podales
  11. if($slowkonr == 1) losuj($tresc, $nrjezyk);
  12. }
  13. ?>
Powiedz mi czy dobrze to okomentowałem, bo jeśli tak to 'if'
  1. <?php
  2. if($slowkonr == 1) losuj($tresc, $nrjezyk);
  3. ?>
nigdy nie bedzie mial wartości true
Go to the top of the page
+Quote Post
3miel
post 1.10.2005, 18:48:11
Post #8





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


dobrze, ta rekurencja ma zachodzic tylko w tedy gdy bedzie jeden, bo jak ja stopniowo bede zgadywał słwoka, to ostatnia cyfra ma sie zmeinic na 1, i nie moze byc tak zeby słowko sie powtarzało wiec bedzie rekurencja.

Ale dlaczeog ta liczba jest taka wysoka? (losowa)


--------------------
Go to the top of the page
+Quote Post
s_w_ir
post 1.10.2005, 19:21:14
Post #9





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


Dwie sprawy:
sprawdź czy wcześniej w skrypcie nie masz użytej zmiennej
  1. <?php
  2. $losowa_liczba 
  3. ?>

Po drugie wstaw w kod funkcji funkcje echo aby sprawdzac co sie dzieje:
  1. <?php
  2.  
  3. echo("Przed przypisaniem: " . $losowa_liczba);
  4. $losowa_liczba = array_rand ($tresc, 1);
  5. echo("Po przypisaniem: " . $losowa_liczba);
  6. $losowa_liczba+1;
  7. echo("Po inkrementacji: " . $losowa_liczba);
  8.  
  9. ?>
Go to the top of the page
+Quote Post
3miel
post 1.10.2005, 21:01:47
Post #10





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


nie ma bo jak dam: echo 'przed przypisaniem: '.$losowa_liczba.'<br />';to nic sie nei wyswietla, a pozatym w argumentach funkcji nie jest przekazywana wartość losowej liczby.

a wyswietla sie cos takiego:

Kod
przed przypisaniem:
po przypisaniem: 12
po inkrementracji: 12
L. losowa:12


Dziwna sprawa. A tak na marginesie to w jaki sposó wylosowac l. całkowitą z zakresu od 1 do $ile?


--------------------
Go to the top of the page
+Quote Post
s_w_ir
post 1.10.2005, 23:20:57
Post #11





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


rand()
A co do sprawy, to zawsze Ci zwraca 12? Bo u mnie zmontowałem cos podobnego i zwraca mi rózne liczby. Druga sprawa spójrz na to:
  1. <?php
  2. $losowa_liczba = array_rand ($tresc, 1);
  3. $losowa_liczba+1;// to kompletnie nic nie robi, nie zmienia wartosci zmiennej
  4.  
  5. ?>

Daj mi tablice na której operujesz to może coś sie wymyśli.
Go to the top of the page
+Quote Post
3miel
post 2.10.2005, 08:58:49
Post #12





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


Nie zawsze sie wyswietla 12, lecz losowe liczby, które czasmi sa wieksze od liczby rekordów w tablicy (7).

tablica to tak jak juz wspomniałem:
Kod
1|lesson|lekcja|0
2|topic|temat|0
3|know|wiedzieć|0
4|happy|szczęsliwy|0
5|holiday|wakacje|0
6|phone|telefon|0
7|english|angielski|0


i odczytuje to z pliku poprzez:

  1. <?
  2.     $filename='lekcje/'.$katalog.'/'.$plik.'.txt';
  3.     $file = file($filename); 
  4.     for( $i=0  ;  $i<count($file)  ;  $i++){
  5.         $tresc[] = chop($file[$i]);
  6.     }
  7. ?>


----------EDIT----------
Jaki głupi błąd tongue.gif,

miałem w kodzie 2 razy tworzoną tablicę $tresc[] smile.gif Już jest wszystko w pożądku.

Ten post edytował 3miel 2.10.2005, 10:20:10


--------------------
Go to the top of the page
+Quote Post
s_w_ir
post 2.10.2005, 10:40:30
Post #13





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


  1. <?php
  2. $tresc=array("1|lesson|lekcja|0",
  3. "2|topic|temat|0",
  4. "3|know|wiedzieć|0",
  5. "4|happy|szczęsliwy|0",
  6. "5|holiday|wakacje|0",
  7. "6|phone|telefon|0",
  8. "7|english|angielski|0");
  9.  
  10. function losuj($tresc, $nrjezyk){
  11. global $slowko;
  12. global $losowa_liczba;
  13. global $slowkonr;
  14. $losowa_liczba = array_rand ($tresc, 1);
  15. $slowko0 = explode("|", $tresc[$losowa_liczba]);
  16. $slowko = $slowko0[$nrjezyk];
  17. $slowkonr = $slowko0[3];
  18. $losowa_liczba++; //inkrementacja przenisioan na koniec żebybyły dostępne liczby od 1 do 7
  19. if($slowkonr == 1) losuj($tresc, $nrjezyk);
  20. }
  21. losuj($tresc, 2);
  22.  
  23. echo 'L. losowa:'.$losowa_liczba.'<br />
  24. Slowo nr: '.$slowkonr.'<br /><br />';
  25. echo $slowko; //wyświetlenie wyrazu
  26.  
  27. ?>


Nie da rady żeby wyświetliło inne liczby niż od 1 do 7. Podejżewam że chodzi o plik, pewnie masz tam dodatkowe puste wiersze. Dodaj do swojego skryptu wyświetlenie wyrazu i zobacz czy jak masz większą liczbe niz przewidziana to czy masz jakiś wyraz.

Potem spróbuj zmodyfikować pętle:
  1. <?
  2. $filename='lekcje/'.$katalog.'/'.$plik.'.txt';
  3. $file = file($filename); 
  4. for( $i=0 ; $i<count($file) ; $i++){
  5. if($file[$i] == "" OR $file[$i]==" ") continue; 
  6. $tresc[] = chop($file[$i]);
  7. }
  8. ?>
Go to the top of the page
+Quote Post
3miel
post 2.10.2005, 13:18:50
Post #14





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


Już gra, odpowiedz w poscie wyżej smile.gif.

Ale mam jeszcze jeden problem, otórz jak zgadne słowo i pisze Dobrze smile.gif to czasmi znowu losuje ten sam wyraz, tak jakby stronka albo skrypt chashowało tablice $tresc[], jak to naprawić? Czy nalerzy usunac tablice i na nowa ją stworzyć?

cały skrypt:
  1. <?
  2.     //--- WRZUCENIE PLIKU DO TABLICY ---
  3.     $filename='lekcje/'.$katalog.'/'.$plik.'.txt';
  4.     $file = file($filename); 
  5.     for( $i=0  ;  $i<(count($file)-2)  ;  $i++){
  6.         $tresc[] = chop($file[$i+2]);
  7.     }
  8.     $ile=count($tresc);
  9.  
  10.     //--- PRZGOTOWANIE PLIKU DO TESTU ---
  11.     if($_GET['akcja2'] == 'poczatek'){
  12.         for($i=0  ;  $i<$ile  ;  $i++){
  13.             $filename='lekcje/'.$katalog.'/'.$plik.'.txt';
  14.             $file = file($filename); 
  15.             $co = explode("|", $tresc[$i]);
  16.             $nowy = $co[0].'|'.$co[1].'|'.$co[2].'|0'; 
  17.             $file[$i+2] = $nowy."rn";
  18.             $file = implode("",$file); 
  19.             $fp = fopen($filename , "w");flock($fp,2); 
  20.             fputs( $fp , $file); 
  21.             flock($fp,3);fclose($fp); 
  22.         }
  23.     }
  24.     //--- TYTUŁ ---
  25.     $filename='lekcje/'.$katalog.'/'.$plik.'.txt';
  26.     $file = file($filename); 
  27.     $title = chop($file[0]); 
  28.     echo '<span class="title">'.$title.'</span>';
  29.  
  30.     //--- USTALENIE JEZYKA (EN->PL, PL->EN) ---    
  31.     if($_GET['jezyk'] == 'English -> Polski'){ $_GET['nrjezyk'] = 1; $_GET['nrjezyk2'] = 2;}
  32.     elseif($_GET['jezyk'] == 'Polski -> English'){ $_GET['nrjezyk'] = 2; $_GET['nrjezyk2'] = 1;}
  33.  
  34.     //--- FORMULARZ I HIDDEN ---
  35.     echo '
  36.     <form method="get" action="index.php">
  37.     <input type="hidden" name="katalog" value="'.$katalog.'" />
  38.     <input type="hidden" name="plik" value="'.$plik.'" />
  39.     <input type="hidden" name="akcja" value="dyktando" />
  40.     <input type="hidden" name="nrjezyk" value="'.$_GET['nrjezyk'].'" />
  41.     <input type="hidden" name="nrjezyk2" value="'.$_GET['nrjezyk2'].'" />
  42.     ';
  43.  
  44.  
  45.  
  46.     $slowko2 = explode("|", $tresc[$_GET['nr']]);
  47.     $slowko2 = $slowko2[$_GET['nrjezyk2']];
  48.     if($_GET['akcja2'] != 'poczatek'){
  49.     if($_GET['slowko2'] == $slowko2){
  50.         echo '<font color="green">Dobrze! :)</font><input type="hidden" name="bledne" value="'.$_GET['bledne'].'" /><input type="hidden" name="poprawne" value="'.++$_GET['poprawne'].'" /><br /><br /><br />';
  51.         $filename='lekcje/'.$katalog.'/'.$plik.'.txt';
  52.         $file = file($filename); 
  53.         $co = explode("|", $tresc[$_GET['nr']]);
  54.         $nowy = $co[0].'|'.$co[1].'|'.$co[2].'|1'; 
  55.         $file[$_GET['nr']+2] = $nowy."rn";
  56.         $file = implode("",$file); 
  57.         $fp = fopen($filename , "w");flock($fp,2); 
  58.         fputs( $fp , $file); 
  59.         flock($fp,3);fclose($fp); 
  60.  
  61.     }else{
  62.         echo '<font color="red">Zle! :(</font><input type="hidden" name="bledne" value="'.++$_GET['bledne'].'" /><input type="hidden" name="poprawne" value="'.$_GET['poprawne'].'" /><br /><br /><br />';
  63.     }
  64.     }
  65.     echo 'Pytanie ['.$_GET['poprawne'].'/'.$ile.'] [Poprawne: '.$_GET['poprawne'].' Błędne: '.$_GET['bledne'].']<br />
  66.     <br /><br />';
  67.  
  68.     if($_GET['poprawne'] != $ile){
  69.  
  70.     function losuj($tresc, $nrjezyk){
  71.         srand((float) microtime() * 10000000); 
  72.         global $slowko;
  73.         global $losowa_liczba;
  74.         global $slowkonr;
  75.      [b]   $losowa_liczba = array_rand ($tresc, 1);[/b] //PRZEZ TEN WERS SIE WIESZA
  76.         $slowko0 = explode("|", $tresc[$losowa_liczba]);
  77.         $slowko = $slowko0[$nrjezyk];
  78.         $slowkonr = $slowko0[3];    
  79.         if($slowkonr == 1) losuj($tresc, $nrjezyk);
  80.     }
  81.  
  82.     losuj($tresc, $_GET['nrjezyk']);
  83.  
  84.     echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<big><b>'.$slowko.'</b><big><br><br>
  85.     <input type="text" name="slowko2"><br><br>
  86.     <input type="hidden" name="nr" value="'.$losowa_liczba.'">
  87.     <input type="hidden" name="slowko" value="'.$slowko.'">
  88.     <input type="submit" value="Dalej">';
  89.  
  90.     }else{
  91.         echo 'Koniec testu!';
  92.     }
  93. ?>


Aha, nie iwem czememu ale cos znowu nei działa: http://3miel.ovh.org/english/index.php?kat...ish+-%3E+Polski spróbujcie czy jak dobrze odpowiecie, czy mozna dalej odpowiadac, bo u mnei sie wiesza :/

-EDIT--------
doszedłem do wniosku, że skrypt sie wiesza przy losowaniu liczby losowej.
Co moze byc przyczyną?

Ten post edytował 3miel 3.10.2005, 20:36:32


--------------------
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: 19.07.2025 - 17:09