Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wybranie najbliższej liczby
sannin
post
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Mam tablicę z takimi wartościami

Cytat
1.00
1.33
1.50
itd.


Do zmiennej trafia liczba 1.36, teraz jak najłatwiej sprawdzić do której wartości z tablicy jest najbliższa?
Go to the top of the page
+Quote Post
qwertyuiop1910
post
Post #2





Grupa: Zarejestrowani
Postów: 12
Pomógł: 4
Dołączył: 3.06.2007

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


  1. <?php
  2. $i=1.36;
  3.  
  4. $tab=array(1.00,1.70,1.33,1.50);
  5. sort($tab);
  6. $avgminmax=($tab[0]+$tab[count($tab)-1])/2;
  7.  
  8. if($avgminmax>$i) echo "BLIZEJ DO MIN";
  9. elseif($avgminmax<$i) echo "BLIZEJ DO MAX";
  10. else echo "THE SAME";
  11. ?>


to tak na szybko ale pewnie sa prostsze sposoby;)
generalnie pobieramy srednia z MIN i z MAX, a reszta chyba oczywista

Ten post edytował Ociu 15.08.2009, 16:30:48
Go to the top of the page
+Quote Post
Inti
post
Post #3





Grupa: Zarejestrowani
Postów: 67
Pomógł: 12
Dołączył: 20.01.2008
Skąd: Toruń

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


Witam,

W pierw zależy jak duża jest to tablica z wartościami. Jeśli jest ich niewiele to zrób to porównując pojedynczo każdy element - wyliczaj wartość bezwzględną danego elementu i porównuj aktualną z nowo obliczonymi, jeśli będzie mniejsza to podmieniasz jako bliższy element.

W przypadku większych tablic proponuję metodą rekurencyjną dzielić tablicę na połowę sprawdzając wartość ze środkowym jej elementem. Jeśli zmienna jest większa to idziesz w prawą stronę tablicy (w przeciwnym przypadku w lewą), aż dojdziesz do wyszukiwanego rezultatu.

Pozdrawiam,
Inti
Go to the top of the page
+Quote Post
Hectic
post
Post #4





Grupa: Zarejestrowani
Postów: 256
Pomógł: 7
Dołączył: 1.01.2005

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


  1. $i = 1.36;
  2.  
  3. $array = array(1.00,1.70,1.33,1.50);
  4. sort($array);
  5.  
  6. foreach($array as $k => $v) {
  7. $r1 = abs($i - $v);
  8. $r2 = abs($i - $array[$k + 1]);
  9.  
  10. if($r1 <= $r2) {
  11. $ratio = $array[$k];
  12. break;
  13. }
  14. }


Zakładam, że chodzi o ratio.
Go to the top of the page
+Quote Post
sannin
post
Post #5





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Cytat(Hectic @ 15.08.2009, 16:02:06 ) *
Zakładam, że chodzi o ratio.


Tak, dzięki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.12.2025 - 07:57