#include #include /* * Funktion zum Einlesen der Beispieldaten * Sie brauchen das nocht nicht verstehen... */ unsigned short int *read_file( const char *filename, unsigned short int *N, unsigned short int *solution ) { unsigned short int i; unsigned short int *power; FILE * INFILE; INFILE = fopen ( filename, "r" ); if (INFILE == NULL) { fprintf( stderr, "Kann Datei nicht oeffnen: %s!\n", filename ); return NULL; } //hole N if( fscanf(INFILE,"%hu", N) != 1 ) { fprintf( stderr, "An der ersten Position steht nicht 'N'!\n" ); return NULL; } //allokiere den Speicher fuer den Vektor power = (unsigned short int*) calloc( *N, sizeof(unsigned short int) ); if( power == NULL ) { fprintf(stderr, "Konnte keinen Speicher allozieren!\n"); return NULL; } //hole N Vektorwerte! for( i=0; i < *N; i++) { if( fscanf(INFILE, "%hu", &power[i]) != 1 ) { fprintf( stderr, "Konnte nicht alle Werte korrekt lesen!\n" ); return NULL; } } //hole das korrekte Ergebnis if( fscanf(INFILE,"%hu", solution) != 1 ) { fprintf( stderr, "Konnte die Loesung nicht einlesen!\n" ); return NULL; } fclose(INFILE); return power; } /* * gcc -Wall gotham.c -o gotham * Aufruf fuer Beispiel 1 mit "./gotham beispiel_1.dat" * */ int main( int argc, char **argv ) { unsigned short int i; unsigned short int N; unsigned short int solution; unsigned short int *power; //Ueberpruefe die Kommandozeilenoptionen if( argc != 2 ) { fprintf( stderr, "Aufruf: %s data_file\n", argv[0]); return 1; } //Einlesen der Datei if( (power = read_file(argv[1], &N, &solution)) == NULL ) { fprintf( stderr, "Konnte Datei %s nicht lesen!\n", argv[1]); return 1; } /* * Auf power kann wie fuer Vektoren ueblich zugegriffen werden. * Zulaessig sind Indizes von 0 bis Laenge-1 * VORSICHT: Bei C findet keine Index-Ueberpuefung statt! * Das Verhalten von power[Laenge] ist nicht definiert. * Dies kann zu Speicherverletzungsfehlern * oder zur Veraenderung anderer Variablen fuehren. */ for( i=0; i < N; i++) { printf("Macht von Wuerdentraeger '%hu' ist '%hu'.\n", i, power[i]); } //Die korrekte Loesung printf("Loesung: %hu\n", solution); /* * Ab hier koennen sie ihre loesung implementieren! */ return 0; }