#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define NeueZeile printf("\n");
#define PUFFER fflush(stdin);
char geo_art_tast;
char uebergabe_gauss;
char uebergabe_geo;
char umrechnungsart;
char ausgabe_geo;
char ausgabe_geo_dezi;
char ausgabe_art;
char ausgabe_geo_art;
Ausgabe_Datei(double x,double y,FILE *neu) {
fprintf(neu,"%.3lf\t%.3lf\n",x,y);
}
void Berechnung_aus_Datei_Gauss() {
FILE *input;
FILE *neu;
char inputLine[23];
int anzahl=0,zeilenanzahl;
double *speicher;
short int a=0;
double rechtswert[zeilenanzahl], hochwert[zeilenanzahl];
double laenge_geo, breite_geo;
char delimiter[] = " "; // Leerzeichen ist Trennung
char delimiter2[] = "\n";
char *ptr;
char string[250];
int j=0;
input = fopen("Gauss.txt", "r");
if(input != NULL) {
while(fgets(inputLine,sizeof(inputLine),input)) {
anzahl++;
}
printf("Anzahl der Koordinaten: %i\n", anzahl);
fclose(input);
}
else{
printf("Fehler beim oeffnen.\n");
}
zeilenanzahl = anzahl;
speicher = (double*) calloc ((zeilenanzahl*2), sizeof(double));
input = fopen( "Gauss.txt", "r");
if ((input != NULL) && (zeilenanzahl > 0)) {
while(!feof(input)) {
while(fgets(string,sizeof(string),input)) {
ptr = strtok(string, delimiter);
sscanf(ptr,"%lf",&rechtswert[j]);
rechtswert[j] = atof(ptr);
ptr = strtok(NULL, delimiter2);
sscanf(ptr,"%lf",&hochwert[j]);
hochwert[j] = atof(ptr);
Gauss_Geo(&laenge_geo, &breite_geo, rechtswert[j], hochwert[j]);
j++;
}
}
fclose( input );
}
while(a==0) {
printf("Wie sollen die Koordinaten ausgegeben werden?\n");
printf("(A) : Zur Laufzeit\n");
printf("(B) : In eine Textdatei\n");
printf("(E) : Programm beenden.\n\n");
printf("Wahl: ");
fflush(stdin);
scanf("%c",&ausgabe_geo);
switch(toupper(ausgabe_geo)){
case 'A':
for (j=0;j<zeilenanzahl;j++) {
printf("Punkt %i:\tGeographische Laenge = %f\n", j+1,laenge_geo);
printf("\t\tGeographische Breite = %f\n", breite_geo);
NeueZeile;
}
a=1;
break;
case 'B':
neu = fopen("BerechneteKoordinaten.txt","w");
if(neu != NULL) {
for(j=0;j<zeilenanzahl;j++) {
//Ausgabe_Datei(rechtswert,hochwert,neu);
}
printf("Datei BerechneteKoordinaten.txt erfolgreich erstellt.\n");
}
fclose(neu);
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe.\n");
break;
}
}
}
void Eingabe_Geokoord() {
short int a=0;
while(a==0){
printf("Wie sollen die Koordinaten uebergeben werden?\n\n");
printf("(A) : Tastatureingabe\n");
printf("(B) : ASCII-Datei\n");
printf("(E) : Programm beenden.\n\n");
printf("Wahl: ");
fflush(stdin);
scanf("%c",&uebergabe_geo);
switch(toupper(uebergabe_geo)){
case 'A':
NeueZeile;
Eingabe_Geo_Tastatur();
a=1;
break;
case 'B':
NeueZeile;
Berechnung_aus_Datei_Geo();
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe.\n");
break;
}
}
}
Eingabe_Geo_Tastatur() {
int anz_punkte_geo;
printf("Wieviele Punkte werden eingegeben?\n\n");
printf("Anzahl: ");
scanf("%i",&anz_punkte_geo);
NeueZeile;
short int a=0;
while (a==0) {
printf("Wie werden die Koordinaten eingegeben?\n\n");
printf("(A) : hexagesimal\n");
printf("(B) : dezimal\n");
printf("(E) : Programm beenden.\n\n");
printf("Wahl: ");
fflush(stdin);
scanf("%c",&geo_art_tast);
switch (toupper(geo_art_tast)) {
case 'A':
NeueZeile;
Eingabe_Geo_hexa(anz_punkte_geo);
a=1;
break;
case 'B':
NeueZeile;
Eingabe_Geo_dezi(anz_punkte_geo);
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe\n");
break;
}
}
}
Berechnung_aus_Datei_Geo() {
FILE *input;
char inputLine[23];
int anzahl=0,zeilenanzahl;
double *speicher;
short int a=0;
double rechtswert[zeilenanzahl], hochwert[zeilenanzahl];
double laenge_geo, breite_geo;
char delimiter[] = " "; // Leerzeichen ist Trennung
char delimiter2[] = "\n";
char *ptr;
char string[250];
int j=0;
printf("Baustelle");
}
Eingabe_Geo_hexa(int anz_punkte_geo) {
int i=0;
short int a=0;
double hochwert, rechtswert;
double laenge_hexa_grad[anz_punkte_geo-1], laenge_hexa_min[anz_punkte_geo-1], laenge_hexa_sek[anz_punkte_geo-1];
double breite_hexa_grad[anz_punkte_geo-1], breite_hexa_min[anz_punkte_geo-1], breite_hexa_sek[anz_punkte_geo-1];
double breite_geo[anz_punkte_geo-1], laenge_geo[anz_punkte_geo-1];
FILE *neu;
for (i=0; i<anz_punkte_geo; i++) { //Eingabe der Koordinaten in hexagesimal schreibweise.
gehe_zu_5:
printf("Punkt %i: ", i+1);
printf("\tGeographische Laenge: Grad: ");
scanf("%lf",&laenge_hexa_grad[i]);
printf("\t\t\t\t Minute: ");
scanf("%lf",&laenge_hexa_min[i]);
printf("\t\t\t\t Sekunde: ");
scanf("%lf",&laenge_hexa_sek[i]);
printf("\t\tGeographische Breite: Grad: ");
scanf("%lf",&breite_hexa_grad[i]);
printf("\t\t\t\t Minute: ");
scanf("%lf",&breite_hexa_min[i]);
printf("\t\t\t\t Sekunde: ");
scanf("%lf",&breite_hexa_sek[i]);
}
for (i=0; i<anz_punkte_geo; i++) { //Berechnung der eingegeben Koordinaten in dezimale Koordinaten
laenge_geo[i] = laenge_hexa_grad[i]+(laenge_hexa_min[i]/60)+(laenge_hexa_sek[i]/3600);
breite_geo[i] = breite_hexa_grad[i]+(breite_hexa_min[i]/60)+(breite_hexa_sek[i]/3600);
Geo_Gauss(&rechtswert, &hochwert, laenge_geo[i], breite_geo[i]);
}
NeueZeile;
while(a==0) {
printf("Wie sollen die Koordinaten ausgegeben werden?\n");
printf("(A) : Zur Laufzeit\n");
printf("(B) : In einer Datei\n");
printf("(E) : Programm beenden.\n\n");
printf("WAhl: ");
fflush(stdin);
scanf("%c\n",&ausgabe_geo_art);
switch(toupper(ausgabe_geo_art)) {
case 'A':
for (i=0; i<anz_punkte_geo; i++) {
printf("Punkt %i:\tRechtswert = %.4f\n", i+1, rechtswert);
printf("\t\tHochwert = %.4f\n", hochwert);
}
a=1;
break;
case 'B':
neu = fopen("BerechneteKoordinaten.txt","w");
if(neu != NULL) {
for(i=0;i<anz_punkte_geo;i++) {
Ausgabe_Datei(rechtswert,hochwert,neu);
}
}
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe.\n\n");
break;
}
}
}
Eingabe_Geo_dezi(int anz_punkte_geo) {
double breite_geo[anz_punkte_geo-1], laenge_geo[anz_punkte_geo-1];
double hochwert, rechtswert;
int i=0;
short int a=0;
FILE *neu;
for (i=0; i<anz_punkte_geo; i++) { //Eingabe in dezimal + Kontrolle
printf("Punkt %i: ",i+1);
printf("\tGeographische Laenge: ");
scanf("%lf",&laenge_geo[i]);
printf("\t\tGeographische Breite: ");
scanf("%lf",&breite_geo[i]);
Geo_Gauss(&rechtswert, &hochwert, laenge_geo[i], breite_geo[i]);
}
while(a==0) {
printf("Wie sollen die Koordinaten ausgegeben werden?\n");
printf("(A) : Zur Laufzeit\n");
printf("(B) : In einer Datei\n");
printf("(E) : Programm beenden.\n\n");
printf("Wahl: ");
fflush(stdin);
scanf("%c\n",&ausgabe_geo_dezi);
NeueZeile;
switch(toupper(ausgabe_geo_dezi)) {
case 'A':
for (i=0; i<anz_punkte_geo; i++) {
printf("Punkt %i:\tRechtswert = %.3f\n",i+1, rechtswert);
printf("\t\tHochwert = %.4f\n", hochwert);
}
a=1;
break;
case 'B':
neu = fopen("BerechneteKoordinaten.txt","w");
if(neu!=NULL) {
for (i=0; i<anz_punkte_geo; i++) {
Ausgabe_Datei(rechtswert,hochwert,neu);
}
printf("Datei BerechneteKoordinaten.txt erfolgreich erstellt.\n");
}
fclose(neu);
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe.\n\n");
break;
}
}
}
void Eingabe_Gausskoord() {
short int a=0;
while (a==0) {
printf("Wie sollen die Koordinaten uebergeben werden?\n\n");
printf("(A) : ueber Tastatur\n");
printf("(B) : ueber ASCII-Datei\n");
printf("(E) : Programm beenden.\n\n");
printf("Wahl: ");
fflush(stdin);
scanf("%c",&uebergabe_gauss);
switch (toupper(uebergabe_gauss)) {
case 'A':
NeueZeile;
Eingabe_Gauss_Tastatur();
a=1;
break;
case 'B':
NeueZeile;
Berechnung_aus_Datei_Gauss();
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe.\n\n");
break;
}
}
}
Eingabe_Gauss_Tastatur() {
int i=0;
short int a=0;
long int anz_punkte_gauss;
double breite_geo, laenge_geo;
FILE *neu;
printf("Wieviele Punkte werden eingegeben?\n\n");
printf("Anzahl: ");
scanf("%i",&anz_punkte_gauss);
NeueZeile;
double hochwert[anz_punkte_gauss-1], rechtswert[anz_punkte_gauss-1];
for(i=0;i<anz_punkte_gauss;i++) {
printf("Punkt %i: ",i+1);
printf("\tRechtswert = ");
scanf("%lf",&rechtswert[i]);
printf("\t\tHochwert = ");
scanf("%lf",&hochwert[i]);
Gauss_Geo(&laenge_geo, &breite_geo, rechtswert[i], hochwert[i]);
}
while(a==0) {
printf("Wie sollen die Koordinaten ausgegeben werden?\n");
printf("(A) : Zur Laufzeit\n");
printf("(B) : In einer Datei\n");
printf("(E) : Programm beenden.\n\n");
printf("Wahl: ");
fflush(stdin);
scanf("%c",&ausgabe_art);
NeueZeile;
switch(toupper(ausgabe_art)) {
case 'A':
for (i=0; i<anz_punkte_gauss; i++) {
printf("Punkt %i:\tGeographische Laenge = %.4f\n",i+1, laenge_geo);
printf("\t\tGeographische Breite = %.4f\n", breite_geo);
}
a=1;
break;
case 'B':
neu = fopen("BerechneteKoordinaten.txt","w");
if(neu!=NULL) {
for (i=0; i<anz_punkte_gauss; i++) {
Ausgabe_Datei(laenge_geo,breite_geo,neu);
}
printf("Datei BerechneteKoordinaten.txt erfolgreich erstellt.\n");
}
fclose(neu);
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe.\n\n");
break;
}
}
}
int main() {
short int a=0;
while (a==0) {
printf("Bitte waehlen Sie eine Umrechnung aus: \n\n");
printf("(A) : Geographische Koordinaten in Gauss-Krueger-Koordinaten\n");
printf("(B) : Gauss-Krueger-Koordinaten in Geographische Koordinaten\n");
printf("(E) : Programm beenden.\n\n");
printf("Wahl: ");
fflush(stdin);
scanf("%c",&umrechnungsart);
switch (toupper(umrechnungsart)) {
case 'A':
NeueZeile;
Eingabe_Geokoord(); //Auswahl A wird weitergegeben an Eingabe_Geokoord
a=1;
break;
case 'B':
NeueZeile;
Eingabe_Gausskoord(); //Auswahl B wird weitergegeben an Eingabe_Gausskoord
a=2;
break;
case 'E':
printf("Programm wurde beendet.");
a=3;
break;
default:
printf("Ungueltige Eingabe.\n\n");
break;
}
}
}