Der Flugzeugpositionierungstest ist ein Test, der beim DLR bei den Aufnahmetests bei der Bewerbung zum Fluglotsen verwendet wird.
Erklärung:
Wie jeder weiß gibt es vier Himmelsrichtungen. Die Gradangaben dafür sind 90,180,270 und 360 (bzw. 0). Ein Beispiel kann wie folgt aussehen:
Der Rechenvorgang für diese Beispiel ist daher wie folgt:
270+270+180+0+90+270=1080
Dividiert man 1080 durch 360 erhält man in unserem Beispiel den Wert 0. Was heißen soll, dass das Flugzeug nun auf Kurs 0 ist, daher ist die Antwort für dieses Beispiel auch 0.
Ein weiteres Beispiel:
900/360=2, Rest: 180
Anwort: 180
Anmerkung: Der Pfeil nach oben repräsentiert eine Richtungsangabe nach Norden. Sprich eine Gradangabe von 0 oder 360. Einfachheitshalber benutzt man 0. Löst man dieses Beispiel im Kopf kann man eine solche Angabe einfach ignorieren.
Nun zur Programmieraufgabe:
Per Zufall sollen 10 solcher Beispielaufgaben generiert werden. Es erscheint ein Beispiel, der User hat eine Antwort einzugeben, nächstes Beispiel, nächste Antwort usw.
Anschließend soll eine Übersicht aller 10 Lösungen dargestellt werden, wobei eine zusätzliche Ausgabe ob die Antwort falsch oder richtig ist, nicht fehlen sollte.
Zuletzt sollte noch die Summe der richtigen Antworten bzw. die Zeitspannie die für das Lösen der 10 Aufgaben benötigt wurde ausgegeben werden.
Das folgende Programm wurde in der Programmiersprache C erstellt und unter Linux mit GCC erfolgreich getestet:
Erläuterungen zum Code:
Zeile 3,4: Angabe der benötigten Header-Dateien.
Zeile 6: Funktion zufall() wird initialisiert.
Zeile 8,9: Start der Main-Funktion
Zeile 11: Wir deklarieren 10 Variabeln:
i --> Durchlaufvariabel für die for-Schleife, welche für die fünf Richtungswechsel pro Beispiel nötig ist.
z --> Rückgabewert der Funktion zufall()
summe[10] --> Array, summiert die Richtungsangaben pro Beispiel und speichert am Ende jedes Beispieles den Rest der Division durch 360
erg[10] --> speichert die Antworteingaben des Users
sum_richtig --> Anzahl der vom User richtig beantworteten Aufgaben
start --> Timestamp des Programmstartes
ende --> Timestamp nach Antworteingabe der letzten Aufgabe
dauer --> ende - start
Zeile 13: Initialisierung des Zufallsgenerators
Zeile 16-19 --> unnötige Programmbeschreibung
Zeile 22: for-schleife für die jeweils 10 Beispielaufgaben
Zeile 24: Ausgangsposition ausgeben
Zeile 25: Gradangabe der Ausgangsposition speichern
Zeile 26: for-schleife für die 5 Richtungswechsel pro Aufgabe
Zeile 28: Aufruf der Funktion zufall(). Wählt eine zufällige Richtungsangabe
Zeile 29: summiert die neue Richtungsangabe zu den vorhergehenden
Zeile 30-37: Ausgabe der Richtungsangaben in Form von Pfeilen
Zeile 39: Dividiert die Summe der Richtungsangaben durch 360 und speichert den Rest der Division in der Summenvariabel = Lösung der Aufgabe
Zeile 40-41: Eingabe der Lösung die vom User berechnet wurde.
Zeile 43-44: Die Dauer zum lösen der zehn Aufgaben wird berechnet
Zeile 47-58: Wir geben die richtigen Lösungen aus und überprüfen in Zeile 51 ob die User-Eingabe richtig war. Sollte dies der Fall sein, wird dies auch ausgegeben. Zusätzlich wird bei einer richtigen Antwort die Variabel sum_richtig inkrementiert.
Zeile 61: Ausgabe der Anzahl der richtigen Antworten
Zeile 62: Ausgabe der Dauer in Sekunden.
Zeile 63: Programmende
Zeile 67: Start der Funktion zufall()
Zeile 71: Hier wird eine Zufallszahl mit einem Wert zwischen 1 und 4 gewählt, welche in der Zeile 71 mit dem Wert 90 multipliziert wird und anschließend an main() zurückgegeben. Soll bedeuten: Hier wird eine genaue Richtungsangabe erstellt.
Erklärung:
Wie jeder weiß gibt es vier Himmelsrichtungen. Die Gradangaben dafür sind 90,180,270 und 360 (bzw. 0). Ein Beispiel kann wie folgt aussehen:
Das Beispiel geht aus von der Richtungsangabe "270". Das soll heißen, dass sich das Flugzeug auf den Kurs 270 befindet. Anschließend folgen 5 Richtungsangaben, die entweder nach Norden, Osten, Süden oder Westen zeigen. Man addiert nun ganz einfach ausgehend von der ersten Richtungsangabe, in diesem Beispiel 270, die restlichen fünf Gradangaben hinzu.270 < v ^ > <
Der Rechenvorgang für diese Beispiel ist daher wie folgt:
270+270+180+0+90+270=1080
Dividiert man 1080 durch 360 erhält man in unserem Beispiel den Wert 0. Was heißen soll, dass das Flugzeug nun auf Kurs 0 ist, daher ist die Antwort für dieses Beispiel auch 0.
Ein weiteres Beispiel:
90 + 270 + 270 + 180 + 0 + 90 = 90090 < < v ^ >
900/360=2, Rest: 180
Anwort: 180
Anmerkung: Der Pfeil nach oben repräsentiert eine Richtungsangabe nach Norden. Sprich eine Gradangabe von 0 oder 360. Einfachheitshalber benutzt man 0. Löst man dieses Beispiel im Kopf kann man eine solche Angabe einfach ignorieren.
Nun zur Programmieraufgabe:
Per Zufall sollen 10 solcher Beispielaufgaben generiert werden. Es erscheint ein Beispiel, der User hat eine Antwort einzugeben, nächstes Beispiel, nächste Antwort usw.
Anschließend soll eine Übersicht aller 10 Lösungen dargestellt werden, wobei eine zusätzliche Ausgabe ob die Antwort falsch oder richtig ist, nicht fehlen sollte.
Zuletzt sollte noch die Summe der richtigen Antworten bzw. die Zeitspannie die für das Lösen der 10 Aufgaben benötigt wurde ausgegeben werden.
Das folgende Programm wurde in der Programmiersprache C erstellt und unter Linux mit GCC erfolgreich getestet:
Code:
// programmed by indi@hackerboard.de
#include <stdio.h>
#include <stdlib.h>
int zufall();
main()
{
// Initialisierung
int i,z,summe[10],erg[10],reihe,sum_richtig=0;
int start=time(),dauer,ende;
srand(time(0));
// Header
printf("\nFlugzeugpositionierungstest");
printf("\nDieses Testprogramm kann zur Vorbereitung zu ");
printf("den Aufnahmetest zum Beruf des Fluglotsen verwendet werden.");
printf("\nprogrammiert von indi@hackerboard.de\n");
// Beispiele
for (reihe=0;reihe<10;reihe++)
{
printf("\n%i\t",z=zufall());
summe[reihe]=z;
for (i=0;i<5;i++)
{
z=zufall();
summe[reihe]=summe[reihe]+z;
if (z == 90)
printf("%c\t",62);
else if (z == 180)
printf("%c\t",118);
else if (z == 270)
printf("%c\t",60);
else
printf("%c\t",94);
}
summe[reihe]=summe[reihe]%360;
printf("\tErg: ",summe[reihe]);
scanf("%i",&erg[reihe]);
}
ende=time();
dauer=ende-start;
// Auswertung
printf("\n\nAuswertung:\n");
for (reihe=0;reihe<10;reihe++)
{
printf("Bsp. Nr. %i: Loesung: %i",reihe+1, summe[reihe]);
if (summe[reihe] == erg[reihe])
{
printf("\tAntwort richtig!\n");
sum_richtig++;
}
else
printf("\tAntwort falsch!\n");
}
// Anzahl richtiger Antworten und Zeitdauer
printf("\nAnzahl richtiger Antworten: %i",sum_richtig);
printf("\nZeitdauer: %i Sekunden",dauer);
printf("\n\n");
return 0;
}
zufall()
{
// Zufallsgenerator
int zufall;
zufall=(abs(rand())%4)+1;
return zufall*90;
}
Erläuterungen zum Code:
Zeile 3,4: Angabe der benötigten Header-Dateien.
Zeile 6: Funktion zufall() wird initialisiert.
Zeile 8,9: Start der Main-Funktion
Zeile 11: Wir deklarieren 10 Variabeln:
i --> Durchlaufvariabel für die for-Schleife, welche für die fünf Richtungswechsel pro Beispiel nötig ist.
z --> Rückgabewert der Funktion zufall()
summe[10] --> Array, summiert die Richtungsangaben pro Beispiel und speichert am Ende jedes Beispieles den Rest der Division durch 360
erg[10] --> speichert die Antworteingaben des Users
sum_richtig --> Anzahl der vom User richtig beantworteten Aufgaben
start --> Timestamp des Programmstartes
ende --> Timestamp nach Antworteingabe der letzten Aufgabe
dauer --> ende - start
Zeile 13: Initialisierung des Zufallsgenerators
Zeile 16-19 --> unnötige Programmbeschreibung

Zeile 22: for-schleife für die jeweils 10 Beispielaufgaben
Zeile 24: Ausgangsposition ausgeben
Zeile 25: Gradangabe der Ausgangsposition speichern
Zeile 26: for-schleife für die 5 Richtungswechsel pro Aufgabe
Zeile 28: Aufruf der Funktion zufall(). Wählt eine zufällige Richtungsangabe
Zeile 29: summiert die neue Richtungsangabe zu den vorhergehenden
Zeile 30-37: Ausgabe der Richtungsangaben in Form von Pfeilen
Zeile 39: Dividiert die Summe der Richtungsangaben durch 360 und speichert den Rest der Division in der Summenvariabel = Lösung der Aufgabe
Zeile 40-41: Eingabe der Lösung die vom User berechnet wurde.
Zeile 43-44: Die Dauer zum lösen der zehn Aufgaben wird berechnet
Zeile 47-58: Wir geben die richtigen Lösungen aus und überprüfen in Zeile 51 ob die User-Eingabe richtig war. Sollte dies der Fall sein, wird dies auch ausgegeben. Zusätzlich wird bei einer richtigen Antwort die Variabel sum_richtig inkrementiert.
Zeile 61: Ausgabe der Anzahl der richtigen Antworten
Zeile 62: Ausgabe der Dauer in Sekunden.
Zeile 63: Programmende
Zeile 67: Start der Funktion zufall()
Zeile 71: Hier wird eine Zufallszahl mit einem Wert zwischen 1 und 4 gewählt, welche in der Zeile 71 mit dem Wert 90 multipliziert wird und anschließend an main() zurückgegeben. Soll bedeuten: Hier wird eine genaue Richtungsangabe erstellt.