final commit
This commit is contained in:
@ -19,18 +19,22 @@ Der Quelltext der Library ist im Ordner "lib/advanced_C_standard_library" oder
|
||||
Das Programm erhält als Argumente eine beliebige Anzahl Dateipfade zu Eingabedateien.
|
||||
Mit einer for-Schleife wird über die Dateipfade iteriert. In der Schleife wird die
|
||||
Eingabedatei ausgelesen. Die Anzahl der Hotels und die Gesamtfahrzeit werden jeweils
|
||||
in einer Variable abgespeichert. Anschließend wird ein Array mit Strukturen die Hotels
|
||||
darstellen befüllt. In einer do-while-Schleife wird mit einer Bewertung von
|
||||
5.0, 4.9, ..., 0.1 eine Route zu bilden. Wenn dies bei einer Bewertung erfolgreich
|
||||
ist wird die Schleife beendet. In dieser Schleife ist wiederum eine for-Schleife
|
||||
in einer Variable abgespeichert. Anschließend wird ein Array mit Strukturen, die Hotels
|
||||
darstellen, befüllt. In einer do-while-Schleife wird mit einer Bewertung von
|
||||
5.0, 4.9, ..., 0.1 versucht eine Route zu bilden.
|
||||
Im Programm werden die Bewertungen als Integer dargestellt, wobei die Bewertung der
|
||||
Eingabedatei mit 10 multipliziert wird. Die Ausgabe ist wiederum im ursprünglichen
|
||||
Format. Wenn dies bei einer Bewertung erfolgreich ist, wird die Schleife beendet.
|
||||
In dieser Schleife ist wiederum eine for-Schleife,
|
||||
die über die Hotels iteriert, worin das letzte Hotel gespeichert wird, das
|
||||
mindestens die angestrebte Bewertung hat.
|
||||
Ist das Hotel allerdings mehr als 6 Stunden vom letzten Haltepunkt entfernt,
|
||||
muss das letzte Hotel verwendet werden an dem das Halten möglich ist, falls dieses
|
||||
vorhanden ist und höchtens an drei Hotels schon gehalten wurde,
|
||||
ansonsten muss mit der nächsten Bewertung fortgefahren werden.
|
||||
Nachdem eine Route gefunden wurde, wird diese ausgeben und eventuell mit der
|
||||
näcshten Eingabedatei fortgefahren.
|
||||
muss das letzte Hotel verwendet werden, an dem das Halten möglich ist. Es sei
|
||||
denn es gibt kein Hotel mit der entsprechenden Bewertung
|
||||
oder es wurde bereits an mehr als drei Hotels gehalten. Dann
|
||||
muss mit der nächsten Bewertung fortgefahren werden.
|
||||
Nachdem eine Route gefunden wurde, wird diese ausgegeben und eventuell mit der
|
||||
nächten Eingabedatei fortgefahren.
|
||||
|
||||
## Beispiele
|
||||
|
||||
@ -63,45 +67,3 @@ Entfernung vom Start: 636 Minuten, Bewertung: 5.0
|
||||
Entfernung vom Start: 987 Minuten, Bewertung: 5.0
|
||||
Entfernung vom Start: 1286 Minuten, Bewertung: 5.0
|
||||
```
|
||||
|
||||
## Quelltext
|
||||
|
||||
```
|
||||
int main() {
|
||||
uint_least8_t rating = 50;
|
||||
do {
|
||||
// Minuten die das letzte Hotel, bei dem angehalten wurde, vom Start entfertn ist
|
||||
uint_least16_t lastHotelMinutes = 0;
|
||||
// Zeiger zum letzten Hotel, dessen Bewertung mindestens "rating" ist.
|
||||
struct hotel *possibleStop = NULL;
|
||||
stoppedHotels = 0; // setzt Anzahl der Stops zurück
|
||||
|
||||
// iteriert über die Hotels
|
||||
for(struct hotel *currentHotel = hotels; currentHotel - hotels < numberHotels; ++currentHotel) {
|
||||
|
||||
/* Wenn das aktuelle Hotel mehr als 360 Minuten vom letzten Hotel entfernt ist,
|
||||
* muss das letzte Hotel verwendet werden an dem das Halten möglich war.*/
|
||||
if(currentHotel->minutes - lastHotelMinutes > 360) {
|
||||
/* Wenn das Halten nicht möglich ist oder bereits schon viermal
|
||||
* gehalten wurde, muss es mit einer niedrigeren Bewertung versucht
|
||||
* werden.*/
|
||||
if(possibleStop == NULL || stoppedHotels >= 4) break;
|
||||
// hängt das Hotel der Route an
|
||||
hotelRoute[stoppedHotels] = *possibleStop;
|
||||
lastHotelMinutes = possibleStop->minutes;
|
||||
// springt in der Schleife zurück zum Hotel, an dem gestoppt wurde
|
||||
currentHotel = possibleStop;
|
||||
++stoppedHotels;
|
||||
}
|
||||
// Wenn die Bewertung hoch genug ist, kann gestoppt werden.
|
||||
if(currentHotel->rating >= rating) possibleStop = currentHotel;
|
||||
}
|
||||
--rating;
|
||||
/* Schleife läuft solange "rating" mindestens Eins ist, da es keine niedrigeren Bewertungen
|
||||
* gibt. Wenn das letzte Hotel höchtens 360 Minuten vom Zielort entfernt ist, wurde
|
||||
* erfolgreich eine Route gefunden und die Schleife wird beendet. Allerdings wird dies nur
|
||||
* überprüft, wenn überhaupt an einem Hotel gehalten wurde, um den Zugriff auf nicht
|
||||
* definierten Speicher zu vermeiden.*/
|
||||
} while(rating && (!stoppedHotels || totalMinutes - hotelRoute[stoppedHotels - 1].minutes > 360));
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user