Skocz do zawartości

[php] Liczba filarów proste zad. mat. i błąd do wykrycia


dj.drezyna

Polecane posty

Mam oto taki kod:

class Filary {

 private $wys;
 private $dl;
 private $coile;

 public function __construct($wys,$dl,$coile) {//Pobiera wysokość, długość i odległość między filarami w mm
   $this->wys = (int)$wys;
   $this->dl = (int)$dl;
   $this->coile = (int)$coile;
 }

 private function wezIle() {//Oblicza ile filarów
   $wynik = floor($this->dl/$this->coile);
   if ($this->dl%$this->coile != 0) {
     $wynik++;
   }
   return $wynik;
 }

 private function wezStNachylenia() {//Oblicza stopień nachylenia korzystając że 1 to 45st.
   return ($this->wys/$this->dl)*45;
 }

 public function wezWys($filar) {//Oblicza wysokość z zależności że tg(a) = L/odległość od początku drogi z filarami
   return round(tan(deg2rad($this->wezStNachylenia()))*($this->coile*$filar),2);
 }

 public function wezSlupy($szer,$warstw) {//Zwraca tabelę z powierzchnią słupa filarowego, jego wysokością oraz szerokością i liczbą wartstw (do obliczenia całkowitej powierzchni materiału pod filar)
   $tab = array();
   for ($i=1;$i<=$this->wezIle();$i++) {
     $wys = $this->wezWys($i);
     $tab[$i] = array('S'=>$wys*$szer,'wys'=>$wys,'szer'=>$szer,'ile'=>$warstw);
   }
   return $tab;
 }

}
$f = new Filary(65,1700,100);
print_r($f->wezSlupy(18,5));
echo $f->wezWys(18);

No i gdzieś tu jest błąd, bo filar 18 ma wysokość 51.07 a nie zbliża się do wartości 65mm i co tu jest źle, bardzo byłbym wdzięczny za wskazówki,

 

pozdrawiam,

Marek

 

P.S. A i nie pytajcie po co to jest. Mogę zapewnić, że nie jest to ze szkoły czy studiów ale zamiast liczyć na kalkulatorze postanowiłem by policzyło php napisałem i po chwili okazało się, że nie działa bo przecież ostatni filar powinien mieć wysokość równą podanej także jeszcze raz dzięki za info gdzież to ja źle zrobiłem.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

Nie wnikam w kod, ale widze, że zmienne rzutujesz na typ int a później wykonujesz operacje dzielenia i mnożenia.

 

Poczytaj o tym, jaki to może mieć wpływ na końcowy wynik.

 

Mówię to z doświadczenia w innych językach, może w php nie ma z tym problemu.

 

Pozdrawiam :)

Link do komentarza
Udostępnij na innych stronach

Dzięki z odp.

Otóż rzutowanie na int dodałem w ostatniej chwili ale chyba nie powinno to mieć znaczenia, bo przecież podaję wymiary w mm, bez dziesiętnych.

Co do mnożenia i dzielenia to nie wiem o co chodzi. Bo jak się mnoży 2*4/3 to kompilator chyba pomyśli, żeby jak to jest return zwrócić floata no nie?

Mylę się? No to jak to zrobić poprawnie. Zauważyć trzeba, że przecież round() robię dopiero na końcu.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

  • 1 year later...

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...