#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define BOOLEAN int
#define TRUE 1
#define FALSE 0
#define N 6
#define SLEN 12
/* char-ARRAY, indem die Stadt-Namen abgelegt werden ! */
char stadtnam[ N ][ SLEN ]
= { "Wien", "Linz", "Graz",
"Salzburg", "Innsbruck", "Klagenfurt" };
/* Quadratisches ARRAY enthaelt die konstanten Strecken
der Entfernungstabelle der N Staedte */
int e[ N ][ N ] = {
{ 0, 188, 204, 302, 468, 310 },
{ 188, 0, 276, 125, 291, 274 },
{ 204, 276, 0, 278, 444, 152 },
{ 302, 125, 278, 0, 166, 242 },
{ 468, 291, 444, 166, 0, 326 },
{ 310, 274, 152, 242, 326, 0 }
};
int main( void )
{
int i, k,n=1, L, m;
int von, neuvon,ges=0,ag=0,bis, next;
char abfrage;
char temp[2];
char tempeingabe[10];
BOOLEAN ok,eingabe=FALSE, notok ;
printf("\n Programm < kmTafel > greift auf eine Entfernungs-");
printf("\n tabelle in Form einer quadratischen Matrix zu -- hier");
printf("\n realisiert als zwei-dimensionales ARRAY -- und gibt");
printf("\n die einfache Strecke zwischen zwei Staedten innerhalb");
printf("\n Oesterreichs aus. ");
printf("\n Es koennen alle gegenseitigen Entfernungen der sechs");
printf("\n nachfolgenden Staedte abgerufen werden: ");
printf("\n");
printf("\n");
printf("\n Stadt-Nummer: Name der Stadt:");
printf("\n ------------- ---------------");
for ( i=0; i < N; i++ )
printf("\n %d %s", i, stadtnam[ i ]);
printf("\n \n");
printf("\n Entfernungstabelle -- ist hier eine 6 x 6 -- Matrix ");
printf("\n ---------------------------------------------------- ");
for (i = 0; i < N; i++)
{ printf("\n");
for ( k=0; k < N; k++ ) printf(" %5d ", e[ i ][ k ]);
};
printf("\n \n");
do
{
printf("\n Stadt-Nummer: Name der Stadt:");
printf("\n ------------- ---------------");
for ( i=0; i < N; i++ )
printf("\n %d %s", i, stadtnam[ i ]);
printf("\n -----------------------------------------------------");
printf("\n \n");
printf("\n Geben Sie die Nummer der jeweiligen Stadt ein: ");
printf("\n \n");
printf("\n -- Ausgangsort ? -----> von [ Stadt-Nr. ] = ");/*Abfrage des Ausgangsortes*/
temp[1] = '\0';
tempeingabe[0] = '\0';
while((temp[0] = getch()) != 13)
{
if(temp[0] >= '0' && temp[0] <= '9')
{
printf("%c", temp[0]);
strcat(tempeingabe, temp);
}
}
temp[0] = '\0';
von = atoi(tempeingabe);
printf("\n");
Zielpunkt: /*Definition für den Sprung zum Zielort*/
printf("\n ----- Zielort ? -----> nach [ Stadt-Nr. ] = ");/*Abfrage des Zielortes*/
temp[1] = '\0';
tempeingabe[0] = '\0';
while((temp[0] = getch()) != 13)
{
if(temp[0] >= '0' && temp[0] <= '9')
{
printf("%c", temp[0]);
strcat(tempeingabe, temp);
}
}
temp[0] = '\0';
bis = atoi(tempeingabe);
printf("\n\n");
if (von==bis) /*Abfrage ob Anfangspunkt auch Zielpunkt ist*/
{printf("\n Sie befinden sich schon in %s ", stadtnam [von]);
goto Zielpunkt;
}
else
ok = ((von >= 0) && (von <= 5)) &&(von!=bis)&& ((bis >= 0) && (bis <= 5 ));
notok = !ok;
if (notok)
{ printf("\n\n Diese Route kann nicht berechnet werden:");
printf("\n Geben Sie einen anderen Wert ein!");
printf(" \n\n\n\n\n\n ");
}
}
while ( notok );
printf("\n\n Die Entfernung von %s nach %s",
stadtnam[ von ], stadtnam[ bis ] );
printf("\n\n betraegt %3i km.", e[ von ][ bis ] );
ag=e[ von ][ bis ];
anfang: /*Definition für den Sprung zum Anfang*/
while (eingabe==FALSE)
{printf("\n\n --------------------------------------------------");
printf("\n Wollen sie ihre Reise fortsetzen?(j/n) ? ");
scanf("%s", &abfrage);
if ((abfrage=='J')||(abfrage=='j')||(abfrage=='n')||(abfrage=='N'))
eingabe = TRUE;}
eingabe=FALSE;
if ((abfrage=='n')||(abfrage=='N'))
goto Schluss;
printf("\n Stadt-Nummer: Name der Stadt:");
printf("\n ------------- ---------------");
for ( i=0; i < N; i++ )
printf("\n %d %s", i, stadtnam[ i ]);
while ((abfrage=='J')||(abfrage=='j'))
{
n++;
neuvon=bis;
neueingabe:
printf("\n\n----- Zielort ? -----> nach [ Stadt-Nr. ] = ");
scanf("%i", &bis);
printf("\n\n");
ok = ((von >= 0) && (von <= 5))&&(neuvon!=bis) && ((bis >= 0) && (bis <= 5 ));
notok = !ok;
if (notok)
{ printf("\n\n Diese Route kann nicht berechnet werden:");
printf("\n Geben Sie einen anderen Wert ein!");
printf(" \n\n\n\n ");
printf("\n Stadt-Nummer: Name der Stadt:");
printf("\n ------------- ---------------");
for ( i=0; i < N; i++ )
printf("\n %d %s", i, stadtnam[ i ]);
goto neueingabe;
};
while ( notok );
printf("\n\n Die Entfernung von %s nach %s",
stadtnam[ neuvon ], stadtnam[ bis ] );
printf("\n\n betraegt %3i km.", e[ neuvon ][ bis ] );
printf("\n\n --------------------------------------------------");
ges= ges +e[ neuvon ][ bis ];/*Berechnung für n-Etappen*/
printf("\n\n --------------------------------------------------");
goto anfang;
} Schluss: /*Defintion für den Sprung zum Schluss*/
printf("\n\n Sie haben %3i km zurueckgelegt.", ges+ag );
printf("\n\n Sie sind %i Etappen gefahren",n);
if (von==bis)
printf("\n\n\n Sie haben eine Rundreise gemacht !");
printf("\n\n Sie sind von %s nach %s gefahren",stadtnam[von],stadtnam[bis]);
printf("\n\n\n Wir danken Ihnen fuer die Benutzung");
printf("\n unseres Info-Systems !");
printf("\n \n \n");
system("PAUSE");
return 0;
}