E
Vielleicht noch von Interesse:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct Dreieck
{
float a, b, c, aw, bw, cw;
} Dreieck;
Dreieck *get_Dreieck(float a, float b, float c)
{
float a2 = a * a, b2 = b * b, c2 = c * c;
Dreieck *d = malloc(sizeof(Dreieck));
d->a = a;
d->b = b;
d->c = c;
d->aw = acos((b2 + c2 - a2) / (2 * b * c)) * (180 / 3.14159265358979323846);
d->bw = acos((a2 + c2 - b2) / (2 * a * c)) * (180 / 3.14159265358979323846);
d->cw = acos((a2 + b2 - c2) / (2 * a * b)) * (180 / 3.14159265358979323846);
if (d->aw == 0 || d->bw == 0 || d->cw == 0)
{
printf("Unmögliches Dreieck angegeben!\n\n");
free(d);
return 0;
}
return d;
}
int is_equal(float a, float b)
{
return fabs(a - b) - 0.1 <= 0;
}
void print_Dreieck(Dreieck *d)
{
float s, A;
if (d == 0)
return;
printf("Dreieck: %f %f %f %f %f %f\n", d->a, d->b, d->c, d->aw, d->bw, d->cw);
if (is_equal(d->a, d->b) && is_equal(d->b, d->c))
printf("Das Dreieck ist gleichseitig\n");
else if (is_equal(d->a, d->b) || is_equal(d->a, d->c) || is_equal(d->b, d->c))
printf("Das Dreieck ist gleichschenklig\n");
else
printf("Das Dreieck ist beliebig\n");
if (is_equal(d->aw, 90) || is_equal(d->bw, 90) || is_equal(d->cw, 90))
printf("Das Dreieck ist rechtwinklig\n");
else if (d->aw >= 90 || d->bw >= 90 || d->cw >= 90)
printf("Das Dreieck ist stumpfwinklig\n");
else
printf("Das Dreieck ist spitzwinklig\n");
s = (d->a + d->b + d->c) * 0.5;
A = sqrt(s * (s - d->a) * (s - d->b) * (s - d->c));
printf("Der Flächeninhalt entspricht: %f\n\n", A);
}
void get_and_print_Dreieck(float a, float b, float c)
{
Dreieck *d = get_Dreieck(a, b, c);
if (d)
{
print_Dreieck(d);
free(d);
}
}
int main()
{
get_and_print_Dreieck(1, 2, 3);
get_and_print_Dreieck(2, 2, 3);
get_and_print_Dreieck(15, 20, 25);
get_and_print_Dreieck(3, 3, 3);
return 0;
}
(wieder mit -lm compilieren)
Jetzt müsste sich der Themenersteller noch einmal melden, ob er noch weitere "Sachen" im Dreieck berechnen möchte - oder, ob das so ok wäre...
Ich finde es btw nicht so schlimm, wenn die Attribute a,b,c,usw. heißen, denn bei einem Dreieck weiß man doch, dass damit die Seitenlängen gemeint sind.