Program obliczający objętośc i pole bryły

Witam, mam za zadanie napisać program który liczy pole i objętość graniastosłupa o podstawie sześciokąta foremnego.

Wzorki oczywiście znam, ale już zatrzymałem się na samym liczeniu pola podstawy. Wiadomo sześciokąt składa się z 6 trójkątów równobocznych które mają swój wzór na pole. P= a^2 (pierwiastków z 3)/4/

Przy próbie w ogóle odpalenia czy to działa całość już leży…

 

Tutaj mój kod z C++

http://wklej.org/id/2929538/

Po co Ci linijka 10?

Czemu jako drugi argument funkcji pow dajesz 1/2 zamiast od razu wpisać 0.5.

Fakt faktem trochę nie bardzo zrozumiałem wzór który podałeś w poście, ale na moje oko nie pokrywa się z tym zapisanym w kodzie.

Bez wnikania w szczegóły, jesli chcesz użyć liczb zmienno przecinkowych musisz jawnie rzutować albo uzyć literałów z miejscem dziesiętnym.

 

Czyli “1.0 / 2.0” lub “(double)1 / (double)2”, a nie “1 / 2”.

 

1 / 2 to liczby całkowite i po zaokrągleniu bedzie równe 0. Podobnie zresztą jak 3 / 5.

wzór masz opisany np. tutaj http://matematyka.pisz.pl/strona/856.html

w linijce 9 z tym pow chodziło o to żeby dać “pierwiastek liczby 3”, dlatego jest 3 do potęgi 1/2(jednej drugiej)

 

dzięki, słuszna uwaga.

 

Może inaczej, problemem dla mnie jest zapisanie liczby “pierwiastek z trzech” w kodzie c++.

#include <cmath>

 

(…)

 

double x = sqrt(3.0);

Właśnie miałem to napisać, ale był jakiś błąd na forum.

 

 

Nie lepiej użyć wzoru na pole sześciokąta foremnego, zamiast trójkąta równobocznego i potem z tym coś jeszcze robić?

Jak coś wzór na pole sześciokąta foremnego to: (3 * pow((double) a) * sqrt(3.0)) / 2, ale sprawdź jeszcze dla pewności bo mogłem wzór jednak pomylić.

okej zapis biblioteki rozumiem, ale double x = sqrt(3.0);

sqrt - zapis pierwiastka drugiego stopnia, zgadza się? Czyli analogicznie pierwiastek z pięciu pisze się sqrt(4.0);?

dobule x - oznacza, że pierwiastki mam zapisywać zawsze w zmiennej double?

 

Sorki za głupie pytania, ale zaczynam dopiero, a wszelkie wątpliwości najlepiej rozwiać od razu :slight_smile:

 

wzór który ty napisałeś to jest ten sam wzór, tylko że jest skrócony przez 2 :slight_smile:

 

Nie, nie musisz zapisywać w zmiennej, możesz zwrócić wynik funkcji bezpośrednio jako argument innej. SQRT to funkcja która liczy pierwiastek drugiego stopnia z podaje liczby.

 

 

Jeśli już to nie skrócony a podzielony i to nie jest ten sam wzór do którego link dałeś i próbujesz zakodować.

 

EDIT:

Może jestem ślepy, ale moim zdaniem to:

6/4 * (a*a)*pow(3, 1 / 2)

zupełnie nie przypomina tego:

(3 * pow((double) a) * sqrt(3.0)) / 2

pow(3, 1/2) oznacza że 3 jest podniesiona do potęgi 1/2. A liczba “pierwiastek z 3” to inaczej liczba “3 do potęgi 1/2” https://www.matematyka.pl/248273.htm

 

kwestia podzielić czy skrócić to akurat głupi spór…

Chyba pozostawię to bez komentarza. Jedyne na co Ci zwrócę uwagę to to że ten fragment kodu nie jest równoznaczny z tym o czym piszesz, ale nawet po domyśleniu (już wcześniej) o co Ci tutaj chodziło to nadal nie są te same wzory.

bez komentarza…