Jump to content
Sign in to follow this  
dj.drezyna

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

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.

Share this post


Link to post
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 :)

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...