#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double PI = 3.141592653589793238463;
enum Figur {DREIECK, RECHTECK, KREIS};
struct Geo {
mutable Figur figur;
mutable double a, b, c;
};
Geo createGeo(Figur f, double a, double b, double c)
{
Geo d;
d.figur = f;
d.a = a;
d.b = b;
d.c = c;
return d;
}
Geo getGeo() {
double a=0.0, b=0.0, c=0.0;
n:
cout << "Please insert which geometrical object you want to create:" << endl;
cout << "0 for triangle" << endl << "1 for rectangle" << endl << "2 for circle" << endl;
Figur f;
int p = 3;
cin >> p;
if (p == 0)
{
f = DREIECK;
cout << "Please insert the length: ";
cin >> a;
cout << endl << "Please insert the width: ";
cin >> b;
{ m:
cout << endl << "Please set the angle >0 and <180°: ";
cin >> c;
if (c <= 0 || c >= 180)
{
cout << endl << "Invalid value! Please try again" << endl;
goto m;
}
}
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a, b, c);
return geo;
}
else if (p == 1)
{
f = RECHTECK;
cout << "Please insert the length: ";
cin >> a;
cout << endl << "Please insert the width: ";
cin >> b;
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a, b ,0);
return geo;
}
else if (p == 2)
{
f = KREIS;
cout << "Please insert the radius: ";
cin >> a;
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a,0,0);
return geo;
}
else
{
cout << "Invalid value. Please try again." << endl;
goto n;
}
}
double flaeche(Geo const &g)
{
double flaeche;
if (g.figur = DREIECK)
{
flaeche = 0.5 * g.a*g.b;
}
else if (g.figur = RECHTECK)
{
flaeche = g.a*g.b;
}
else if (g.figur = KREIS)
{
flaeche = PI * pow(g.a, 2);
}
return flaeche;
}
void putGeo(double a, Geo &g)
{
string typ;
if (g.figur == DREIECK) typ = "triangle";
else if (g.figur == RECHTECK) typ = "rectangle";
else typ = "circle";
cout << "Type of figure: " << typ << endl;
if (g.figur == DREIECK) {
cout << "Length: " << g.a << endl;
cout << "Height: " << g.b << endl;
cout << "Angle: " << g.a << endl;
cout << "Area: " << a << endl;
}
else if (g.figur == RECHTECK) {
cout << "Length: " << g.a << endl;
cout << "Width: " << g.b << endl;
cout << "Area: " << a << endl;
}
else if (g.figur == KREIS){
cout << "Radius: " << g.a << endl;
cout << "Area: " << a << endl;
}
}
int main()
{
Geo g1 = getGeo();
double a = flaeche(g1);
putGeo(a, g1);
return 0;
}
Привет,
Надеюсь, вам будет легко понять этот пример кода. Я хотел создать программу, в которой пользователь должен создать геометрический объект через консоль.
Прямоугольник и треугольник пока работают неплохо, но с кругом есть небольшая проблема.
Каждый раз, когда я создаю круг и вызываю метод putGeo (), ширина будет напечатана, а площадь рассчитана с нулем.
Может быть, кто-нибудь знает, почему это так?
Это упражнение из моего курса, и прямо сейчас я понятия не имею.
Программа была полностью на немецком языке, но я перевел ее. Для перечисления DREIECK - треугольник, RECHTECK - прямоугольник, а KREIS - круг.
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ ПРОБЛЕМУ С ВЫХОДОМ
Если я создам круг с радиусом 5
Я хочу напечатать через putGeo ()
Радиус: 5 Площадь: 78.5398163397
Но я действительно получаю
Радиус: 5 Ширина: 0 Площадь: 0
Например, если я ввожу радиус 5 для круга, я хочу получить 5 ^ 2 * PI для площади. поэтому площадь должна быть 78,5398163397. С помощью putGeo () я просто хочу получить тип, радиус и площадь, напечатанные так: Тип: радиус круга: 5 Площадь: 78,5398163397
И в чем проблема? Опять же, покажите результат, который вы получаете, и то, что вы ожидаете получить, и опубликуйте его в самом вопросе.
хорошо, изменилось - надеюсь, теперь стало более ясно





Смотри сюда:
if (g.figur = DREIECK)
Вы намеревались использовать контрольная работа,, но это назначение.. Это устанавливает значение g.figur в DREIECK. После этого площадь будет рассчитана некорректно.
Хороший компилятор предупредит вас, когда вы используете присваивание таким образом. (Если вы подавляете или игнорируете предупреждения компилятора, вы создаете себе проблемы.)
Правильная форма
if (g.figur == DREIECK)
Огромное спасибо. Я все время следил за этим. Задача решена
Какой точный результат вы получаете и чего ожидаете?