#include <stdio.h>
#include <math.h>
enum { PUNKTE = 100 } ; /* Definieren einer Konstanten */
typedef struct /* Definieren der Struktur POLYGON */
{
int x; /* koordinate x */
int y; /* koordinate y */
} POLYGON;
/* Funktions-Prototypen */
int einlesen( POLYGON p[ PUNKTE] ) ;
void ausgabe ( int anzahlpunkte, POLYGON p[ PUNKTE] ) ;
double berechnung ( int anzahlpunkte, POLYGON p[ PUNKTE] ) ;
int main ( void )
{
POLYGON p[ PUNKTE] ;
int anzahlpunkte;
int menuezahl;
puts ( "Dies ist ein Programm zur Berechnung eines Polygonzuges" ) ; do
{
/* Eingabe menue */
printf ( "*********************************************************\n " ) ; printf ( "* Sie haben folgende Moeglichkeiten:\t \t \t *\n " ) ; printf ( "* 1: Eingabe von Werten zur Berechnung des Polygones\t *\n " ) ; printf ( "* 2: Ausgabe der eingegebenen Werte in Tabellenform\t *\n " ) ; printf ( "* 3: Berechnen des Polygonzuges\t \t \t *\n " ) ; printf ( "* 4: Beenden des Programmes\t \t \t \t *\n " ) ; printf ( "* Bitte geben sie eine Zahl ein!\t \t \t *\n " ) ; printf ( "*********************************************************\n " ) ;
switch ( menuezahl)
{
case 1 : /* Funktionsaufruf: Einlesen der Punktkoordinaten */
anzahlpunkte = einlesen( p ) ;
break ;
case 2 : /* Funktionsaufruf: Ausgabe der eingelesenen Werte */
ausgabe( anzahlpunkte, p) ;
break ;
case 3 : /* Funktionsaufruf: Berechnung des Polygonzuges */
printf ( "der eingegebene Polygonzug ist %f lang.\n \n " , berechnung
( anzahlpunkte
, p
) ) ; break ;
case 4 : /* Beenden der Funktion */
printf ( "Auf Wiedersehen, benutzen sie dieses Programm bald wieder!\n \n " ) ; break ;
default : /* bei falscher Eingabe */
puts ( "Ihrer Eingabe konnte kein Menüpunkt zugeordnet werden!\n " \
"Bitte versuchen sie es erneut." ) ;
}
}
while ( menuezahl!= 4 ) ; /* Ende der Schleife bei Eingabe der Zahl 4 */
return 0 ;
}
int einlesen( POLYGON p[ PUNKTE] )
{
int zeile;
int anzahlpunkte;
do
{
printf ( "Bitte geben sie die Anzahl der Punkte des Polygons ein.\n " \
"Bitte beachten sie, dass es min. 2 Punkte aber max. %i Punkte sein müssen!" , PUNKTE) ;
scanf ( "%d" ,& anzahlpunkte
) ;
if ( anzahlpunkte< 2 || anzahlpunkte> PUNKTE)
puts ( "falsche eingabe!" ) ;
}
while ( anzahlpunkte< 2 || anzahlpunkte> PUNKTE) ;
for ( zeile= 0 ; zeile< anzahlpunkte; zeile++ )
{
printf ( " wert %d fuer x eingeben:" , zeile
+ 1 ) ; printf ( " wert %d fuer y eingeben:" , zeile
+ 1 ) ; }
return anzahlpunkte;
}
/* Funktion zur Ausgabe der eingelesenen Punkte */
void ausgabe ( int anzahlpunkte, POLYGON p[ PUNKTE] )
{
int zeile;
puts ( "Anzahl\t | x werte \t | y werte\n " ) ; /* Schleife zum Auslesen der Struktur und Ausgabe der Tabelle */
for ( zeile= 0 ; zeile< anzahlpunkte; zeile++ )
{
printf ( " %5d\t |\t " , p
[ zeile
] .
x ) ; }
}
/* Funktion zum Berechnen des Polygons aus den eingelesenen Werten */
double berechnung ( int anzahlpunkte, POLYGON p[ PUNKTE] )
{
double ergebnis;
int zeile;
ergebnis= 0 ;
/* Schleife zum Auslesen und Berechnen der Punkte */
for ( zeile= 0 ; zeile< anzahlpunkte- 1 ; zeile++ )
{
/* pow(x,y) x^y */
ergebnis
+= sqrt ( pow ( p
[ zeile
] .
x - p
[ zeile
+ 1 ] .
x , 2 ) + pow ( p
[ zeile
+ 1 ] .
y - p
[ zeile
] .
y , 2 ) ) ; }
return ergebnis;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgplbnVtIHsgUFVOS1RFID0gMTAwIH07ICAvKiBEZWZpbmllcmVuIGVpbmVyIEtvbnN0YW50ZW4gKi8KCnR5cGVkZWYgc3RydWN0IC8qIERlZmluaWVyZW4gZGVyIFN0cnVrdHVyIFBPTFlHT04gKi8KewogICAgaW50ICB4OyAvKiBrb29yZGluYXRlIHggKi8KICAgIGludCAgeTsgLyoga29vcmRpbmF0ZSB5ICovCn0gUE9MWUdPTjsKCi8qIEZ1bmt0aW9ucy1Qcm90b3R5cGVuICovCmludCBlaW5sZXNlbiggUE9MWUdPTiBwW1BVTktURV0gKTsJCQp2b2lkIGF1c2dhYmUgKGludCBhbnphaGxwdW5rdGUsUE9MWUdPTiBwW1BVTktURV0pOwpkb3VibGUgYmVyZWNobnVuZyAoaW50IGFuemFobHB1bmt0ZSwgUE9MWUdPTiBwW1BVTktURV0gKTsKCmludCBtYWluICh2b2lkKQp7CiAgICBQT0xZR09OIHBbUFVOS1RFXTsKICAgIGludCBhbnphaGxwdW5rdGU7CiAgICBpbnQgbWVudWV6YWhsOwoJCiAgICBwdXRzKCJEaWVzIGlzdCBlaW4gUHJvZ3JhbW0genVyIEJlcmVjaG51bmcgZWluZXMgUG9seWdvbnp1Z2VzIik7CiAgICBkbwogICAgewogICAgICAgIC8qIEVpbmdhYmUgbWVudWUgKi8KICAgICAgICBwcmludGYoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CiAgICAgICAgcHJpbnRmKCIqICBTaWUgaGFiZW4gZm9sZ2VuZGUgTW9lZ2xpY2hrZWl0ZW46XHRcdFx0KlxuIik7CiAgICAgICAgcHJpbnRmKCIqICAxOiBFaW5nYWJlIHZvbiBXZXJ0ZW4genVyIEJlcmVjaG51bmcgZGVzIFBvbHlnb25lc1x0KlxuIik7CiAgICAgICAgcHJpbnRmKCIqICAyOiBBdXNnYWJlIGRlciBlaW5nZWdlYmVuZW4gV2VydGUgaW4gVGFiZWxsZW5mb3JtXHQqXG4iKTsKICAgICAgICBwcmludGYoIiogIDM6IEJlcmVjaG5lbiBkZXMgUG9seWdvbnp1Z2VzXHRcdFx0KlxuIik7CiAgICAgICAgcHJpbnRmKCIqICA0OiBCZWVuZGVuIGRlcyBQcm9ncmFtbWVzXHRcdFx0XHQqXG4iKTsKICAgICAgICBwcmludGYoIiogIEJpdHRlIGdlYmVuIHNpZSBlaW5lIFphaGwgZWluIVx0XHRcdCpcbiIpOwogICAgICAgIHByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKICAgICAgICBzY2FuZigiJWQiLCZtZW51ZXphaGwpOwoKICAgICAgICBzd2l0Y2gobWVudWV6YWhsKQogICAgICAgIHsKICAgICAgICBjYXNlIDE6CS8qIEZ1bmt0aW9uc2F1ZnJ1ZjogRWlubGVzZW4gZGVyIFB1bmt0a29vcmRpbmF0ZW4gICovCiAgICAgICAgICAgIGFuemFobHB1bmt0ZSA9IGVpbmxlc2VuKCBwICk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDI6CS8qIEZ1bmt0aW9uc2F1ZnJ1ZjogQXVzZ2FiZSBkZXIgZWluZ2VsZXNlbmVuIFdlcnRlICovCiAgICAgICAgICAgIGF1c2dhYmUoYW56YWhscHVua3RlLHApOwogICAgICAgICAgICBicmVhazsKCQkJCiAgICAgICAgY2FzZSAzOgkvKiBGdW5rdGlvbnNhdWZydWY6IEJlcmVjaG51bmcgZGVzIFBvbHlnb256dWdlcyAqLwoJCQogICAgICAgICAgICBwcmludGYoImRlciBlaW5nZWdlYmVuZSBQb2x5Z29uenVnIGlzdCAlZiBsYW5nLlxuXG4iLGJlcmVjaG51bmcgKGFuemFobHB1bmt0ZSxwKSk7CQkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgNDoJIC8qIEJlZW5kZW4gZGVyIEZ1bmt0aW9uICovCiAgICAgICAgICAgIHByaW50ZigiQXVmIFdpZWRlcnNlaGVuLCBiZW51dHplbiBzaWUgZGllc2VzIFByb2dyYW1tIGJhbGQgd2llZGVyIVxuXG4iKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6ICAvKiBiZWkgZmFsc2NoZXIgRWluZ2FiZSAqLwogICAgICAgICAgICBwdXRzKCJJaHJlciBFaW5nYWJlIGtvbm50ZSBrZWluIE1lbsO8cHVua3QgenVnZW9yZG5ldCB3ZXJkZW4hXG4iXAogICAgICAgICAgICAgICAgICJCaXR0ZSB2ZXJzdWNoZW4gc2llIGVzIGVybmV1dC4iKTsKCQkJCiAgICAgICAgfQogICAgfQogICAgd2hpbGUoIG1lbnVlemFobCE9NCApOyAvKiBFbmRlIGRlciBTY2hsZWlmZSBiZWkgRWluZ2FiZSBkZXIgWmFobCA0ICovCgkKICAgIHJldHVybiAwOwp9CgppbnQgZWlubGVzZW4oIFBPTFlHT04gcFtQVU5LVEVdICkKewogICAgaW50IHplaWxlOwogICAgaW50IGFuemFobHB1bmt0ZTsKCiAgICBkbwogICAgewogICAgICAgIHByaW50ZigiQml0dGUgZ2ViZW4gc2llIGRpZSBBbnphaGwgZGVyIFB1bmt0ZSBkZXMgUG9seWdvbnMgZWluLlxuIlwKICAgICAgICAgICAgICAgIkJpdHRlIGJlYWNodGVuIHNpZSwgZGFzcyBlcyBtaW4uIDIgUHVua3RlIGFiZXIgbWF4LiAlaSBQdW5rdGUgc2VpbiBtw7xzc2VuISIsUFVOS1RFKTsKICAgICAgICBzY2FuZigiJWQiLCZhbnphaGxwdW5rdGUpOwoJCQogICAgICAgIGlmIChhbnphaGxwdW5rdGU8MiB8fCBhbnphaGxwdW5rdGU+UFVOS1RFKQogICAgICAgICAgICBwdXRzKCJmYWxzY2hlIGVpbmdhYmUhIik7CgkJCiAgICB9CiAgICB3aGlsZShhbnphaGxwdW5rdGU8MiB8fCBhbnphaGxwdW5rdGU+UFVOS1RFKTsKCQogICAgZm9yICh6ZWlsZT0wO3plaWxlPGFuemFobHB1bmt0ZTt6ZWlsZSsrKQogICAgewogICAgICAgIHByaW50ZigiIHdlcnQgJWQgZnVlciB4IGVpbmdlYmVuOiIsemVpbGUrMSk7CiAgICAgICAgc2NhbmYoIiVkIiwmcFt6ZWlsZV0ueCk7CiAgICAgICAgcHJpbnRmKCAiIHdlcnQgJWQgZnVlciB5IGVpbmdlYmVuOiIsemVpbGUrMSk7CiAgICAgICAgc2NhbmYoIiVkIiwmcFt6ZWlsZV0ueSk7CiAgICB9CiAgICBwdXRzKCIiKTsKICAgIAogICAgcmV0dXJuIGFuemFobHB1bmt0ZTsKfQoKLyogRnVua3Rpb24genVyIEF1c2dhYmUgZGVyIGVpbmdlbGVzZW5lbiBQdW5rdGUgKi8Kdm9pZCBhdXNnYWJlIChpbnQgYW56YWhscHVua3RlLFBPTFlHT04gcFtQVU5LVEVdICkKewogICAgaW50IHplaWxlOwoJCiAgICBwdXRzKCJBbnphaGxcdHwgICB4IHdlcnRlIFx0fCAgIHkgd2VydGVcbiIpOwogICAgLyogU2NobGVpZmUgenVtIEF1c2xlc2VuIGRlciBTdHJ1a3R1ciB1bmQgQXVzZ2FiZSBkZXIgVGFiZWxsZSAqLwogICAgZm9yICh6ZWlsZT0wO3plaWxlPGFuemFobHB1bmt0ZTt6ZWlsZSsrKQkKICAgIHsKICAgICAgICBwcmludGYoIiAlNWRcdHxcdCIsemVpbGUrMSk7CiAgICAgICAgcHJpbnRmKCIgJTVkXHR8XHQiLHBbemVpbGVdLngpOwogICAgICAgIHByaW50ZigiICU1ZFxuIixwW3plaWxlXS55KTsKICAgIH0KICAgIHB1dHMoIiIpOwp9CgovKiBGdW5rdGlvbiB6dW0gQmVyZWNobmVuIGRlcyBQb2x5Z29ucyBhdXMgZGVuIGVpbmdlbGVzZW5lbiBXZXJ0ZW4gKi8KZG91YmxlIGJlcmVjaG51bmcgKGludCBhbnphaGxwdW5rdGUsIFBPTFlHT04gcFtQVU5LVEVdKQp7CiAgICBkb3VibGUgZXJnZWJuaXM7CiAgICBpbnQgemVpbGU7CgogICAgZXJnZWJuaXM9MDsKICAgIC8qIFNjaGxlaWZlIHp1bSBBdXNsZXNlbiB1bmQgQmVyZWNobmVuIGRlciBQdW5rdGUgKi8KICAgIGZvciAoemVpbGU9MDt6ZWlsZTxhbnphaGxwdW5rdGUtMTt6ZWlsZSsrKSAgCiAgICB7CiAgICAJLyogcG93KHgseSkgeF55ICovCiAgICAgICAgZXJnZWJuaXMgKz0gc3FydChwb3cocFt6ZWlsZV0ueCAtIHBbemVpbGUrMV0ueCwyKSArIHBvdyhwW3plaWxlKzFdLnkgLSBwW3plaWxlXS55LDIpKTsKICAgIH0KICAgIHJldHVybiBlcmdlYm5pczsJCn0=