| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Flugzeugpositionierungstest (Tutorial) im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Der Flugzeugpositionierungstest ist ein Test, der beim DLR bei den Aufnahmetests bei der Bewerbung zum Fluglotsen verwendet wird. Erklärung: ...
![]() |
| | #1 (permalink) | ||
| Member of Honour ![]() Registriert seit: 02.10.01 ![]() Likes: 0 | Anzeige 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: Zitat:
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: Zitat:
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;
} 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. | ||
| | |
| | #2 (permalink) |
| Registriert seit: 16.12.03 ![]() Likes: 0 | Hi! Ich hab's auch in C geschrieben. Code: //Flugzeugpositiniorungstest
//by Blackvirus
//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:
//270 < v ^ > <
//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.
//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.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <conio.h>
void main()
{
int richtungen[]={90,180,270,0};
char zeichen[]={62,118,60,94};
int ergebnis[10];
int loesungen[10];
int aufgabe[10][6], erg=0;
int iwz[6];
int zwischen;
clock_t zeit;
int richtig=0, falsch=0;
clock_t start,ende;
char weiter;
srand(time(0));
do
{
system("cls");
printf("\t\tF L U G Z E U G P O S I T I O N I E R U N G S T E S T\n\n");
printf("Sie m%cssen 10 Aufgaben l%csen!\n",129,148);
printf("Die Aufl%csung der Fragen erfolgt am Ende des Tests!\n",148);
start=clock();
for(int i=0;i<10;i++)
{
aufgabe[i][0]=rand()%4;
aufgabe[i][1]=rand()%4;
aufgabe[i][2]=rand()%4;
aufgabe[i][3]=rand()%4;
aufgabe[i][4]=rand()%4;
aufgabe[i][5]=rand()%4;
iwz[0]=aufgabe[i][0];
iwz[1]=aufgabe[i][1];
iwz[2]=aufgabe[i][2];
iwz[3]=aufgabe[i][3];
iwz[4]=aufgabe[i][4];
iwz[5]=aufgabe[i][5];
for(int k=0;k<6;k++)
{
(int)erg+=richtungen[iwz[k]];
}
loesungen[i]=erg%360;
erg=0;
printf("\nAufgabe %i: %i %c %c %c %c %c\t",i+1,richtungen[aufgabe[i][0]],zeichen[aufgabe[i][1]],
zeichen[aufgabe[i][2]],zeichen[aufgabe[i][3]],zeichen[aufgabe[i][4]],
zeichen[aufgabe[i][5]]);
if(aufgabe[i][0]==3 || aufgabe[i][0]==0) printf("\t");
fflush(stdin);
scanf("%i",&zwischen);
ergebnis[i]=zwischen;
}
ende=clock();
zeit=ende-start;
printf("\n\n\t\tA U F L %c S U N G\n\n",153);
for(i=0;i<10;i++)
{
if(ergebnis[i]==loesungen[i])
{
printf("Aufgabe %i ist richtig!\n",i+1);
richtig+=1;
}
else
{
printf("Aufgabe %i ist falsch!\n",i+1);
falsch+=1;
}
printf("Ihre Eingabe: %i\nL%csung: %i\nZum Fortfahren Taste dr%ccken!\n\n\n",ergebnis[i],148,loesungen[i],-127);
getch();
}
printf("\n\nBen%ctigte Zeit: %u Sekunden",148,zeit/1000);
printf("\nSie haben %i von 10 Fragen richtig beantwortet!\n",richtig);
printf("\nDas sind %d Prozent!",10*richtig);
printf("\n\nWenn Sie den Test wiederholen m%cchten dr%ccken Sie die RETURN-Taste!",148,-127);
weiter=getch();
}while(weiter==13);
} MfG Blackvirus |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 28.08.06 ![]() Likes: 0 | Ist zwar schon was länger her, trotzdem hier noch eine Lösung in Python. Code: #!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Klip, Aug 2008
# License: GNU GPLv2
# http://www.hackerboard.de/thread.php?threadid=9999
import random
number_of_exercises = range(10)
charactermap = {'<':270, '>':90, '^':0, 'v':180}
characters = '<>v^'
exercises = [] # empty list, store exercises in here
def create_exercises(number_of_exercises):
"""Create a list with all 'n' exercises."""
exercise_list = []
for i in number_of_exercises:
for x in range(6):
char = random.choice(characters) # pick a random char
exercise_list.append(char) # append it to the list
# print the number (instead of char) of every first element later:
exercise_list[i*6] = charactermap[exercise_list[i*6]]
return exercise_list
def do_it(number_of_exercises, exercises):
"""Print the exercises on the screen and interact with the input
of the user."""
show = [] # show is used to print the tasks on the screen
calc = [] # calc is used to get the correct result and compare it to
# the users solution
key = 0
for i in number_of_exercises:
for x in range(key, key+6):
show.append(exercises[x])
if x == key:
calc.append(exercises[x])
if x != key:
calc.append(charactermap[exercises[x]])
solution = int(raw_input(show)) # ask for the users solution
result = check(calc)
if solution == result:
print "True!"
else:
print "False! The right solution is %i." % (result)
show, calc = [], [] # clear for the next round!
key += 6
def check(number_list):
"""Check if the user told the truth."""
x = 0
for i in number_list:
x += i
return x % 360
def main():
print charactermap
print '--------------------------------------'
exercises = create_exercises(number_of_exercises)
do_it(number_of_exercises, exercises)
if __name__ == '__main__':
main() |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| VB Tutorial | Arca | Code Kitchen | 1 | 04.01.06 01:48 |
| RO Tutorial | nasir | Network · LAN, WAN, Firewalls | 2 | 17.09.05 19:23 |
| Tutorial | silenced | Fun Section | 4 | 30.08.05 23:33 |
| c++ tutorial | Sebastian_1 | Downloads | 4 | 19.04.05 17:49 |