Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ΜΑΡΙΟΣ ΤΡΙΑΝΤΑΦΥΛΛΟΣ ΚΑΡΝΑΒΑΣ 1115201900232
ΚΩΣΤΑΝΤΊΝΟΣ ΜΕΡΚΟΎΡΗΣ 1115201800319


Compilation Commands

    g++ -c classes/vehicle/vehicle-implementation.cpp
    g++ -c classes/highway/highway-implementation.cpp
    g++ -c classes/highway/segment/segment-implementation.cpp
    g++ -c classes/highway/toll-booth/toll-booth-implementation.cpp
    g++ -c classes/highway/segment/entrance/entrance-implementation.cpp
    g++ -c classes/factories/vehicle-factory/vehicle-factory-implementation.cpp
    g++ -c classes/controller/controller-implementation.cpp
    g++ -c project.cpp
    g++ project.o vehicle-factory-implementation.o toll-booth-implementation.o highway-implementation.o segment-implementation.o 
    entrance-implementation.o vehicle-implementation.o controller-implementation.o -o project5.exe

Sample Runs:

./project5.exe 10 5 20 50
./project5.exe 5 10 20 20
./project5.exe 5 5 20 20
./project5.exe 2 5 1 20

Αιτιολόγηση σχετικα με σχεδιαστηκές επιλογές:
-Η υλοποίηση όλων των κλάσεων σχεδιάστηκε σχεδόν κατά γράμμα, όσο μπορούσα, βάση της εκφώνησης.
-Η κλάση VehicleFactory και η κλάση controller θα μπορουσαν να υλοποιηθουν και ως namespaces.
Ο λόγος που η κλάση VehicleFactory δεν υλοποιήθηκε έτσι θα γίνει εμφανής σε λίγο.
-Η κλάση VehicleFactory έχει μια μέθοδο, την rangedRand, η οποία δεν είναι κατα ανάγκη συμπεριφορά
που χρειάζεται μόνο αυτή ή που είναι αναγκαία για την υλοποίησή της. Αρχικά αυτή η μέθοδος ήταν
κομμάτι μίας υλοποίησης της parent κλάσης της VehicleFactory, η οποία θεωρήσαμε οτι τελικά 
δεν χρειαζόταν την στιγμή που καταλάβαμε ότι θα χρειαζομασταν factory μόνο για τα αυτοκίνητα, άρα
απλά φέραμε τις μεθόδους που χρειαζόμασταν απο εκείνη την κλάση στην VehicleFactory και την διαγράψαμε.
Για να αποφύγουμε άσκοπες αλλαγές στον κώδικα, κρατήσαμε την υλοποίησή της ως κλάση.
-Οι κόμβοι δεν υλοποιήθηκαν ως κλάση, καθώς η λογική τους μπορεί απλα να υλοποιηθεί επιτρέποντας στα
αυτοκίνητα να μπαίνουν σε και να βγαίνουν απο κάθε τμήμα ανάλογα με την κατάστασή τους. Αν είναι έτοιμα
να φύγουν, φευγουν απο τον κόμβο στο τέλος του τμήματος που είναι. Αλλιώς πηγαίνουν στο επόμενο τμήμα.
Για τον ίδιο λόγο και επειδη οι κόμβοι που ελέγχονται για είσοδο και για έξοδο είναι ίδιου πλήθους (ΝSegs), 
η απαρίθμηση των κόμβων κάθε κατηγορίας αρχίζει απο το 0.

Παραδοχές:
-Το K αναφέρεται στον συνολικό αριθμό αυτοκινήτων που μπορεί να μπει απο τα επανδρωμένα διόδια στο τμήμα 
σε κάθε αλλαγή κατάστασης, και όχι στον αριθμό που μπορεί να μπεί απο κάθε διόδιο. Ομοίως για τα
ηλεκτρονικά διόδια με 2Κ.
-Κάθε είδοδος έχει από 1 μέχρι 8 διόδια κάθε είδους.
-Κάθε διόδιο ξεκινάει με 1 μέχρι 6 αυτοκίνητα.
-Κάθε αλλαγή κατάστασης, κάθε διόδιο δέχεται απο 0 έως 2 καινούρια αυτοκίνητα.

Σημειώσεις:
-Χρησιμοποιήθηκε το standard C++11
-Δεν έχει υλοποιηθεί κανενός είδους εντοπισμός λαθών ούτε στα command line arguments
ούτε στις τιμές που δίνονται απο το cin. Αν δεν δωθούν τιμές που είναι θετικοί ακέραιοι,
το πρόγραμμα θα εμφανίζει περίεργει συμπεριφορά ή μπορεί και να πετάξει exception.
-Προτίμησα δυναμική καταχώρηση μνήμης γιατί μου δίνει παραπάνω έλεγχο στο πρόγραμμα, εκτός
απο περιπτώσεις container όπως το vector.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages