Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α9.16 · Το Πρόβλημα του Τρόλεϊ (trolley)

Εργασία 0 (2024-25), Άσκηση 3 · Δυσκολία ★★☆ · programming · Κεφάλαια: 9, 2, 6

Το Πρόβλημα του Τρόλεϊ (trolley - 50 Μονάδες)

Τα αυτοκινούμενα οχήματα (self-driving cars) πρέπει κάποια στιγμή να λύσουν μια εκδοχή του Προβλήματος του Τρόλεϊ, του ηθικού διλήμματος που πρότεινε η Philippa Foot το 1967: το όχημα φτάνει σε μια διασταύρωση, τα φρένα δεν λειτουργούν, και πρέπει να στρίψει αριστερά ή δεξιά, με κάθε επιλογή να έχει κάποιο κόστος.

Για τις ανάγκες αυτής της άσκησης, θα γράψετε ένα πρόγραμμα το οποίο λύνει επαναλαμβανόμενες εκδοχές του προβλήματος του τρόλεϊ όπως θα χρειαζόταν να τις λύσει και ένας αυτόματος πιλότος σε ένα αυτοκινούμενο όχημα. Επειδή η άσκηση μας είναι κυρίως προγραμματιστική, δεν θα αποπειραθούμε να λύσουμε τα ηθικά διλήμματα και θα ζητάμε από τον χρήστη να μας ενημερώσει για το κόστος της κάθε επιλογής μας αν πάμε αριστερά ή δεξιά.

Τεχνικές Προδιαγραφές

Παρακάτω παραθέτουμε αλληλεπιδράσεις με μια ενδεικτική λύση:

thanassis@linux14:~$ hostname
linux14
thanassis@linux14:~$ gcc -O0 -m32 -Wall -Wextra -Werror -pedantic -o trolley trolley.c
thanassis@linux14:~$ ./trolley
Please enter the cost of going left: 10
Please enter the cost of going right: 100
Go left.
Please enter the cost of going left: 41
Please enter the cost of going right: 42
Go left.
Please enter the cost of going left: 42
Please enter the cost of going right: 41
Go right.
Please enter the cost of going left: 1000000
Please enter the cost of going right: 1000000
Go left.
Please enter the cost of going left: Terminating.
thanassis@linux14:~$ echo $?
0
thanassis@linux14:~$ ./trolley
Please enter the cost of going left: 42
Please enter the cost of going right: No right cost provided.
thanassis@linux14:~$ echo $?
1
thanassis@linux14:~$ ./trolley
Please enter the cost of going left: 10000000000000
Please enter the cost of going right: 4
Go right.
Please enter the cost of going left: -4
Please enter the cost of going right: -4
Go left.
Please enter the cost of going left: 10000000000000
Please enter the cost of going right: 4000000000000
Go right.
Please enter the cost of going left: Terminating.
thanassis@linux14:~$ echo $?
0

Στο αρχείο README.md πρέπει να προσθέσετε οποιεσδήποτε παρατηρήσεις σας κατά την διεκπεραίωση της άσκησης. Ο κώδικας απαιτείται να είναι καλά τεκμηριωμένος με σχόλια καθώς αυτό θα είναι μέρος της βαθμολόγησης.

Υπόδειξη

Με -m32 ο long έχει 32 bits, άρα για κόστη έως \(10^{18}\) χρειάζεστε τύπο 64 bits και τον αντίστοιχο προσδιοριστή μορφής στη scanf. Η τιμή επιστροφής της scanf ξεχωρίζει τις τρεις περιπτώσεις που σας ενδιαφέρουν: διαβάστηκε αριθμός, ήρθε EOF, ή ήρθε κάτι που δεν είναι αριθμός. Προσέξτε ότι το EOF πριν από το αριστερό κόστος είναι κανονικός τερματισμός, ενώ πριν από το δεξί είναι σφάλμα.

Δείτε επίσης

Αριθμός στον οδηγό: Α9.16 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: hw-2024-hw0-trolley · Σύνδεσμος: https://progintro.github.io/study/questions/homework/hw-2024-hw0-trolley.html · Markdown (GitHub)