Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wylosowanie liczby x % większej lub mniejszej od niej
Forum PHP.pl > Forum > Przedszkole
Szunaj85
Chciałbym wylosować liczbę do 10% większą lub mniejszą od innej zmiennej, ale nie równą tej zmiennej.
Wylosowana liczba nie może też być ujemna.
Np. Jak moją zmienną jest 80 to musi być to liczba z zakresu 70 - 90, ale nie 80.
Wylosowanie liczby z pewnego zakresu nie jest problemem, ale nie wiem jak to rozwiązać z tymi procentami.
  1. $a = mt_rand(0, 100);
  2. $b = mt_rand(0, 100);
pablo89pl
  1. <?php
  2.  
  3.  
  4. function losuj($zmienna)
  5. {
  6. $ret = rand($zmienna - ($zmienna*0.1) ,$zmienna + ($zmienna*0.1) );
  7. if($ret == $zmienna) return losuj($zmienna);
  8. else return $ret;
  9. }
  10.  
  11. echo losuj(80)



Może coś takiego...

Efekt: tutaj, o ile bedzie dzialac:)
nospor
Cytat
Wylosowanie liczby z pewnego zakresu nie jest problemem, ale nie wiem jak to rozwiązać z tymi procentami.
Przepraszam ze zadam glupie pytanie: nie wiesz jak obliczyc liczbe o 10% mniejszą od zadanej?
Szunaj85
Cytat
Przepraszam ze zadam glupie pytanie: nie wiesz jak obliczyc liczbe o 10% mniejszą od zadanej?
Jasne, że wiem.
nospor
Cytat
ale nie wiem jak to rozwiązać z tymi procentami.
no to co mialo znaczyc to zdanie? To czego nie wiesz jak zroic z tymi procentami?
Szunaj85
Rozwiązanie nie jest złe, ale ja bym wolał nie używać funkcji tylko pętle. Którą do tego rozwiązania trzeba użyć?
nospor
chociazby WHILE lub DO WHILE
Szunaj85
Próbowałem z obiema pętlami, problem polega na tym, że wyświetla mi się czasem 1, a czasem kilka wyników.
  1. while($zmienna <> $zmienna_2)
  2. {
  3. echo($zmienna_2.' ');
  4. $zmienna_2 = mt_rand($zmienna - ($zmienna*0.1) ,$zmienna + ($zmienna*0.1) );
  5. }
MateuszS
Może tak

  1. <?
  2.  
  3. function booyakasha($liczba, $procent)
  4. {
  5. $gornaGranica = ($procent / 100) * $liczba + $liczba;
  6. $dolnaGranica = $liczba - ($procent / 100) * $liczba;
  7. $losuj = rand($dolnaGranica, $gornaGranica);
  8.  
  9. if($liczba == $losuj) {
  10. booyakasha($liczba, $procent);
  11. } else {
  12. return $losuj;
  13. }
  14. return false;
  15.  
  16. }
  17.  
  18. echo booyakasha(100, 16);
  19.  
  20.  
  21. ?>
Szunaj85
Już napisałem, że chcę to zrobić przy pomocy pętli. Tak żeby wyświetlał się jeden wynik inny niż pierwsza zmienna, a nie raz jeden a raz kilkanaście wyników. Tylko, że coś mi nie wychodzi. Proszę o naprowadzenie i wskazanie błędów.
MateuszS
Y? Dlaczego akurat musi być pętla? Czy mój skrypt nie działa tak jak powinien?
phpion
Zmodyfikowany twój kod:
  1. $zmienna = 80;
  2. $zmienna_2 = $zmienna;
  3.  
  4. while($zmienna == $zmienna_2)
  5. {
  6. $zmienna_2 = mt_rand($zmienna - ($zmienna*0.1) ,$zmienna + ($zmienna*0.1) );
  7. }
  8.  
  9. echo $zmienna_2;
Szunaj85
Cytat
Zmodyfikowany twój kod:
Ok, kod działa
I ostatnie pytanie. Jak zmodyfikować ten skrypt żeby wyświetlały się trzy wyniki, a wylosowane liczby nie powtarzały się i były inne niż pierwsza zmienna?
  1. $zmienna = 80;
  2. $zmienna_2 = $zmienna;
  3. while($zmienna == $zmienna_2)
  4. {
  5. $zmienna_2 = mt_rand($zmienna - ($zmienna*0.1) ,$zmienna + ($zmienna*0.1) );
  6. }
  7. echo $zmienna_2;
Fifi209
Cytat(Szunaj85 @ 18.03.2010, 16:30:48 ) *
I ostatnie pytanie. Jak zmodyfikować ten skrypt żeby wyświetlały się trzy wyniki, a wylosowane liczby nie powtarzały się i były inne niż pierwsza zmienna?


Poszukać ciężko? Tutaj
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.