Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Średnia ważona w PHP :)
Forum PHP.pl > Forum > PHP
Babcia@Stefa
Witam, w szkole poproszono mnie abym napisał aplikację "Internetowy dzienniczek ucznia" dla szkoły...

Jednak nie mogę znaleźć rozwiązania w Google które pokaże mi jak obliczać średnią ocen z wagą.

Dziękuję, Babcia@Stefa
webdice
Przeczytaj sobie to i do boju.
maniekl2
tutaj mi było łatwiej zrozumieć niz na wiki :
http://www.matematyka.pisz.pl/strona/1026.html
Babcia@Stefa
Właśnie po napisaniu tematu zauważyłem to na wikipedii, ale nie rozumiem tego... tych liczb w kształcie litery ,,E" , ,,x" i innych...
Jak ktoś może to przetłumaczyć na język polski lub język PHP to będę bardzo wdzięczny.

Pozdrawiam, Babcia@Stefa
Cezar708
co to za problem:

  1. <?php
  2. $oceny = array(1,2,3,4,5);
  3. $wagi = array(5,4,3,2,1);
  4. $sumaWazona = 0;
  5. foreach( $oceny as $klucz => $ocena ){
  6. $sumaWazona += $ocena * $wagi[$klucz];
  7. $sumaWag += $wagi[$klucz];
  8. }
  9.  
  10. $wynik = $sumaWazona / $sumaWag;
  11. ?>


Pozdro
Babcia@Stefa
Wielkie dzięki Cezar, właśnie miałem z http://www.matematyka.pisz.pl/strona/1026.html napisać własne smile.gif

Dzięki za Twoje chęci smile.gif

Zaraz Ci dam "pomógł" tylko odpalę ten kod haha.gif

@edit
Ładnie działa, zaraz napiszę do tego klasę i ją udostępnie dla forum. smile.gif
Wszystkim powyżej należy się "pomógł".

@edit
Update klasy:

  1. <?php
  2. // Autor: Babcia@Stefa
  3. // Wielkie podziękowania dla Cezar708
  4. // Wersja: 1.1
  5. class MatchSW
  6. {
  7. // V = oceny (typ: array), W = wagi (typ: array)
  8. protected $V, $W; 
  9. // Result: wynik końcowy po wywołaniu funkcji GetResult zapisuje się do tej zmiennej, to znaczy nie trzeba ponownie wywoływać tej funkcji aby zdobyć wynik. Owner: Nazwa/identyfikator właściciela (typ: mixed)
  10. public $Owner, $Result;
  11.  
  12. public function SetOwner($_ATTR)
  13. {
  14. // ustawia właściciela ocen - tak na wszelki wypadek można wrzucać jakiś identyfikator
  15. return $this -> Owner = $_ATTR;
  16. }
  17.  
  18. public function ThrowNew($v, $w)
  19. {
  20. $w = (int)str_replace(',', '.', $w); // zamienia przecinki na kropki aby nie powstał string... i konwertuje do int
  21. $v = (int)str_replace(',', '.', $v); // to samo co u góry ^^,
  22. if(is_numeric($v) AND is_numeric($w))
  23. {
  24. // wrzuca elementy do tablic
  25. $this->V[] = $v;
  26. $this->W[] = $w;
  27. return true;
  28. }
  29. }
  30.  
  31. public function GetAll()
  32. {
  33. // jeśli brak wyniki :)
  34. if(!$this->Result)
  35. $this->GetResult();
  36.  
  37. foreach ($this->V as $key => $value)
  38. {
  39. // zapisuje do jednej tablicy
  40. $Ratings[] = array('rating' => $value, 'weight' => $this->W[$key]);
  41. }
  42.  
  43. // zwraca wyniki
  44. return array('result' => $this->Result, 'ratings' => $Ratings);
  45. }
  46.  
  47. public function GetResult()
  48. {
  49. // Wielkie dzięki dla Cezar708
  50.  
  51. // zabezpieczenie przed errorem wywalanym przez pętle
  52. if(count($this->V) > 0 AND count($this->W) > 0)
  53. {
  54. // zmienne
  55. $oceny = $this->V;
  56. $wagi = $this->W;
  57. $sumaWazona = 0;
  58.  
  59. // obliczenia
  60. foreach( $oceny as $klucz => $ocena ){
  61. $sumaWazona += $ocena * $wagi[$klucz];
  62. $sumaWag += $wagi[$klucz];
  63. }
  64.  
  65. $wynik = $sumaWazona / $sumaWag;
  66. return $this->Result = $wynik;
  67. }
  68. }
  69. }
  70.  
  71. $jan = new MatchSW();
  72. $jan -> SetOwner('Jan Kowalski'); // ustawia identyfikator/nazwę ucznia na "Jan Kowalski" bez "
  73. $jan -> ThrowNew(5, 5); // dodaje ocenę 5 z wagą 5
  74. $jan -> ThrowNew(5, 4); // dodaje ocenę 5 z wagą 4
  75. $jan -> ThrowNew(5, 4); // dodaje ocenę 5 z wagą 4
  76.  
  77. // pobiera wyniki i zapisuje tablicę wynikową do zmiennej
  78. $results = $jan->GetAll();
  79.  
  80. // tekst do wyświetlenia - tabelka
  81. $text = '<table border="1" cellpadding="0" cellspacing="0"><tr><td colspan="2">Oceny ucznia "' .$jan->Owner. '"</td></tr><tr><td>Ocena</td><td>Waga</td></tr>';
  82. foreach ($results['ratings'] as $key => $value)
  83. {
  84. // przegląda wyniki i generuje tabelkę
  85. $ratings++;
  86. $text .= '<tr><td>' .$value['rating']. '</td><td>' .$value['weight']. '</td></tr>';
  87. }
  88. // zakańcza tabelkę
  89. $text .= '<tr><td colspan="2">Razem ' .$ratings. ' ocen, z średnia ' .$results['result']. '</td></tr>';
  90. // wyświetla wynik
  91. echo $text;
  92. ?>


Dziękuję, Babcia@Stefa
MWL
wszystko bardzo pieknie, ja jdnak dodał bym jeszcze mały drobiazg, czyli zaokrąglanie wyniku sredniej do powiedzmy 2 po przecinku liczby...
Babcia@Stefa
Cytat(Mlodycompany @ 30.04.2008, 22:46:42 ) *
@Babcia@Stefa nie wiem w której jesteś klasie, ani co masz z matematyki ale chyba skoro sie bierzesz za php to powienienes wiedziec co to jest srednia wazona


1. Po ilości Twoich ostrzeżeń widzę iż nie dorosłeś do swojego wieku.
2. Średnia ważona to coś innego od średniej arytmetycznej.

Wiem co to średnia ważona, lecz nie umiem jej obliczać.
Piszesz bezsensowne posty które nic nie wnoszą.

Do moderatorów:
Zamknijcie temat, to bezsensowna dyskusja.

@edit
MWL, do tego służy funkcja round" title="Zobacz w manualu PHP" target="_manual.
Niema potrzeby wbudowywania zaokrąglania do klasy, myślę że zaokrąglić można sobię w łatwy sposób samemu.

Pozdrawiam, Babcia@Stefa
webdice
Na prośbę autora temat zamykam. Zbędne posty usuwam, a autorów informuje ze kolejnym razem otrzymają ostrzeżenia.
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.