Witam !
Mam poważny problem z zadaniem o wielokątach foremnych z C++. Program ma liczyć pole n-kąta, długość najkrótszej przekątnej oraz najdłużej i promień okręgu opisanego i wpisanego w ten wielokąt o boku długości a oraz podawać wynik z dokładnością do k miejsc po przecinku oraz poprawnie zaokrąglać wyniki. Problem w tym że dla kilku przykładów program działa idealnie i wypisuje poprawne dane ale dla niektórych wyniki są odchylone i jak mi się wydaje jest to spowodowane zaokrąglaniem liczb które nie są zaokrąglane poprawnie. Tutaj jest kod może znalazła by się jakaś osoba, która pomogła by to rozwiązać bardzo ważna sprawa.
#include <iostream>
#include <bits/stdc++.h>
#include <iomanip>
#include <math.h>
using namespace std;
long double polyarea(double n, double a)
{
if (a < 0 && n < 0)
return -1;
return (a * a * n) / (4 * tan((180 / n) * M_PI / 180));
}
long double polyDiagonalShortest(double n, double a)
{
if (a < 0 && n < 0)
return -1;
return 2 * a * sin((((n - 2) * 180) / (2 * n)) * M_PI / 180);
}
long double polyDiagonalLongest(int n, double a, double r)
{
if(n%2 != 0)
return 2*r * cos(M_PI/n);
else
return 2*r;
}
long double polyRadius(float n, double a)
{
return a/(2*sin(M_PI/n));
}
long double triangleHeight(float n, double a)
{
return (a/2)*1/tan(M_PI/n);
}
long double roundNum(float number, float k)
{
//return (number * (10*(10*k)))/(10*(10*k));
return ((long double)(number*(10*(10*k))))/(10.0*(10*k));
}
int main()
{
int n, k;
double a;
cin >> n;
cin >> k;
cin >> a;
cout << fixed << setprecision(k) << roundNum(polyarea(n,a), k) << " ";
cout << fixed << setprecision(k) << roundNum(polyRadius(n,a), k) << " ";
cout << fixed << setprecision(k) << roundNum(triangleHeight(n,a), k) << " ";
cout << fixed << setprecision(k) << roundNum(polyDiagonalShortest(n,a), k) << " ";
cout << fixed << setprecision(k) << roundNum(polyDiagonalLongest(n,a,polyRadius(n,a)), k);
return 0;
}
Byłbym bardzo bardzo wdzięczny gdyby kotś szybko odpowiedział. Z góry dziękuje za pomoc i pozdrawiam wszystkich :)))))))))
Oto przykłady dla których program nie działa poprawnie:
Wejście: 17 5 1
Wyjście: 22.73549 2.72110 2.67476 1.96595 5.34953
Oczekiwane wyjście: 22.73549 2.72110 2.67476 1.96595 5.41898