Skocz do zawartości


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


3 odpowiedzi w tym temacie

#1 dj.drezyna

    Pomocna dłoń

  • Super użytkownicy
  • 154 Postów:

Napisano nie, 08 gru 2013 - 21:10

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.

#2 xevil21

    xevil

  • Super użytkownicy
  • 521 Postów:
  • Gadu-Gadu:11909981

Napisano nie, 08 gru 2013 - 23:38

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 :)

#3 dj.drezyna

    Pomocna dłoń

  • Super użytkownicy
  • 154 Postów:

Napisano pon, 09 gru 2013 - 18:12

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.

#4 Booleeks

    Bywalec

  • Użytkownicy
  • 31 Postów:

Napisano pon, 23 lis 2015 - 11:04

php
return $tab;


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