?
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
typedef struct poly Poly;
struct poly {
int x, y;
};
void cb() {
int c = 0;
while ( (c = getchar()) != '\n' && c != EOF ){}
}
int eingabe_punkte ( Poly* Feld, int n ) {
int i = 0;
for ( i = 0; i < n; i++ ) {
printf ( "Wert Punkt %d x eingeben: ", i+1 );
if ( 1 != scanf ( "%d", &Feld[i].x ))
return 1;
cb();
printf( "Wert Punkt %d y eingeben: ", i+1 );
if ( 1 != scanf ( "%d", &Feld[i].y ))
return 1;
cb();
}
return 0;
}
int eingabe_anzahl_punkte ( unsigned* n ) {
int ret = *n = 0;
printf ( "Anzahl der Punkte (mindestens 3): " );
ret = scanf ( "%u", n ), cb();
if ( ret != 1 ) {
puts ( "Fehler in der Eingabe!" );
return 1;
}
if ( *n < 3 ) {
puts ( "Fehler: Anzahl Punkte < 3" );
return 1;
}
return 0;
}
double polygonlaenge ( Poly* punkte, int n ) {
int strecke_x = 0, strecke_y = 0;
double polylang = 0.0;
int i = 0;
for ( i = 0; i < n-1; i++ ) {
strecke_x = abs ( punkte[i].x - punkte[i+1].x );
strecke_y = abs ( punkte[i].y - punkte[i+1].y );
polylang += sqrt ((strecke_x * strecke_x) + (strecke_y * strecke_y));
}
return polylang;
}
int main() {
Poly *punkte = NULL;
unsigned n = 0;
double plaenge = 0.0;
printf ( "Polygon\n\n" );
if ( eingabe_anzahl_punkte ( &n ))
return 1;
if ( NULL == ( punkte = malloc ( n * sizeof ( *punkte )))) {
puts ( "Speichermangel!" );
return 1;
}
if ( eingabe_punkte ( punkte, n ))
puts ( "Fehler in der Eingabe!" );
else
plaenge = polygonlaenge ( punkte, n );
printf ( "Polygonlaenge = %.3lf\n", plaenge );
free ( punkte );
return 0;
}