Skocz do zawartości
Zaloguj się, aby obserwować  
dj.drezyna

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

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.

Udostępnij ten post


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

Udostępnij ten post


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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
return $tab;

 

myślę ze w tej kolumnie jest jakiś bład weź to sprawdź bo mi się wydaje że dlatego się nie kompiluje

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×