Jump to content

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


dj.drezyna

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

  • 1 year later...

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...