ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

Σχετικά έγγραφα
ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/2016, 21:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 18/12/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/10, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 25/11/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 5/12/10, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Προθεσµία: 9/1/2015, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 27/11/11, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσμία: Τετάρτη 9/11/2016, 21:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/10, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: Τρίτη 10/11/2015, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 25/11/13, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: Τρίτη 4/11/2014, 22:00

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Τετάρτη 7/12/2016, 21:00

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραμματισμός Ι Εργαστήριο 5ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραμματισμός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 2 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Προθεσµία: 10/12/2014, 22:00

lab7: Συμβολοσειρές Συμβολοσειρές Ασφάλεια εισόδου Αναγνωσιμότητα κώδικα (σχόλια, στοίχιση, περιγραφικά ονόματα μεταβλητών, κτλ.)

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 3/12/2018, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 10/11/12, 22:00

Προγραμματισμός Ι Εργαστήριο 8ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 8 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 6/11/11, 22:00

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Προγραμματισμός Ι Εργαστήριο 8ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 8 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 3ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

Εργαστήριο 5. Εαρινό Εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

abistarakis PASS - Σωστή κατασκευή tgz και ονοµασία αρχείων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

Λύσεις για τις ασκήσεις του lab5

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Βαθμός Σχόλια. lab PASS 1194 PASS 1238 PASS 1239 PASS

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Λειτουργικά Συστήματα

Εργαστήριο 2. Εαρινό Εξάμηνο Εντολές για είσοδο ακεραίων αριθμών από την κονσόλα:

Προγραμματισμός Διαδικτύου Ασκήσεις Εργαστηρίου

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διαδικασιακός Προγραμματισμός

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Προγραμματιστικό Περιβάλλον

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

Τομέας Υλικού και Αρχιτεκτονικής Υπολογιστών ΗΥ134 - Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1. Εργαστήριο 6. Εαρινό Εξάμηνο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

- Το πρόγραµµα σας δίνει τα αναµενόµενα αποτελέσµατα.

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: Τετάρτη 25/11/2015, 22:00

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

Δείτε τώρα και πώς θα έπρεπε να ήταν το παραπάνω: Page 1

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Διαδικασιακός Προγραμματισμός

ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ

Ανάπτυξη και Σχεδίαση Λογισμικού

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Α2. Να γράψετε στο τετράδιο απαντήσεών σας το κατάλληλο τμήμα κώδικα, κάνοντας τις απαραίτητες αλλαγές σύμφωνα με την εκάστοτε εκφώνηση:

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στην Python και στο IDLE

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών. Μανόλης Γ.Η.

3. Γράψτε μία εντολή που να εμφανίζει π.χ. «Πόσα είναι τα κορίτσια του;» και μία που να εμφανίζει: «Τα κορίτσια του Τζειμς Μποντ είναι 4»

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Προγραµµατιστική Εργασία 1 ο Μέρος

Transcript:

ΣΕΤ ΑΣΚΗΣΕΩΝ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2013-2014 Προθεσμία: 17/1/14, 22:00 Περιεχόμενα Διαδικαστικά Οδηγίες Αποστολής Εκφώνηση άσκησης (Στάδιο 0, Στάδιο 1, Στάδιο 2, Στάδιο 3, Στάδιο 4) Διαδικαστικά Η εργασία αυτή μπορεί να γίνει σε ομάδες μέχρι 2 ατόμων. Δεν είναι απαραίτητο να συνεργαστείτε με το ίδιο άτομο που κάνατε τα εβδομαδιαία εργαστήρια ή τα τρία πρώτα σετ ασκήσεων. Μπορείτε να συζητάτε τις ασκήσεις με συμφοιτητές σας αλλά δεν επιτρέπεται να δίνεται ή να παίρνετε κώδικα με οποιοδήποτε τρόπο. Ξεκινήστε νωρίς! Ο προγραμματισμός είναι πάντα ΠΟΛΥ πιο χρονοβόρος από ό,τι περιμένετε. Μη διστάζετε να ζητήσετε βοήθεια! Μπορείτε να χρησιμοποιήσετε το forum προγραμματισμού (http://courses.inf.uth.gr/coding/?page_id=143). Αποθηκεύστε το πρόγραμμα σε αρχείο με όνομα hw4.c. Προσθέστε σε σχόλια στην αρχή του κάθε αρχείου με κώδικα τα πλήρη ονόματα και ΑΜ των μελών της ομάδας. Παρακαλούμε να γράφετε τα σχόλια ΜΟΝΟ με λατινικούς χαρακτήρες. Για να παραδώσετε τη δουλειά σας: Κατασκευάστε ένα φάκελο με όνομα hw4_epwnumo1_am1_epwnumo2_am2 και αντιγράψτε μέσα σε αυτόν το hw4.c. Μην ξεχάσετε να προσθέσετε τα ονόματά σας στο αρχείο, σε σχόλια. Πηγαίνετε στο φάκελο μέσα στον οποίο βρίσκεται το hw4_epwnumo1_am1_epwnumo2_am2 που κατασκευάσατε και πακετάρετε και συμπιέστε τον με την παρακάτω εντολή: tar czvf epwnumo1_am1_epwnumo2_am2.tgz Στείλτε email: στη διεύθυνση ce120lab@gmail.com αντίγραφο (CC) στο άλλο μέλος της ομάδας σας, αν υπάρχει θέμα (subject) CE120 hw4 epwnumo1_am1_epwnumo2_am2 και επικολλημένο αρχείο το hw4_epwnumo1_am1_epwnumo2_am2.tgz Εκπρόθεσμες ασκήσεις δε γίνονται δεκτές.

Άσκηση: Συμμετοχή σε εργαστήρια Εισαγωγή Σε αυτό το σετ ασκήσεων θα υλοποιήσετε μια δομή στην οποία αποθηκεύονται τα στοιχεία των φοιτητών που συμμετέχουν στα εργαστήρια ενός μαθήματος. Οι φοιτητές είναι χωρισμένοι σε πολλαπλά τμήματα ανάλογα με το πλήθος των φοιτητών και τον αριθμό υπολογιστών σε κάθε εργαστήριο. Ένα τμήμα αναπαρίσταται ως μια μη-κυκλική, απλά διασυνδεδεμένη λίστα χωρίς τερματικό, κάθε κόμβος της οποίας αντιστοιχεί σε ένα φοιτητή. Η δομή που αναπαριστά το σύνολο των φοιτητών είναι ένας πίνακας από struct όπου κάθε κελί αντιστοιχεί σε ένα εργαστηριακό τμήμα. Για την ακρίβεια, κάθε κελί του πίνακα περιέχει τη διεύθυνση της κεφαλής μιας λίστας όπως αυτή περιγράφεται πιο πάνω, καθώς και την ώρα που ξεκινά το εργαστήριο. Το πρόγραμμά σας θα παρέχει δυο λειτουργίες: Αμοιβαία ανταλλαγή φοιτητών που ανήκουν σε διαφορετικά τμήματα και οριστική αφαίρεση ενός φοιτητή από το τμήμα στο οποίο ανήκει. Επιπλέον, θα είναι δυνατό για το χρήστη να τρέξει το πρόγραμμα με δύο τρόπους: είτε κανονικά είτε με επιπρόσθετα διαγνωστικά μηνύματα. Στην παρακάτω περιγραφή, τα διαγνωστικά μηνύματα θα γράφονται με κόκκινο χρώμα και τα "κανονικά" με μπλε. Τα κανονικά μηνύματα εκτυπώνονται σε κάθε περίπτωση. Μορφή κώδικα και άλλες απαιτήσεις Το πρόγραμμά σας πρέπει να λειτουργεί σωστά και να εκτυπώνει όλα τα μηνύματα και αποτελέσματα με τον τρόπο που σας περιγράφουμε στις επόμενες ενότητες. Φροντίστε να ελέγχετε αν οι συναρτήσεις επιστρέφουν άκυρες τιμές (NULL) γιατί σε αυτές τις περιπτώσεις το πρόγραμμα πρέπει να τερματίζει, αφού αποδεσμεύσει όλη τη δυναμικά δεσμευμένη μνήμη. Κάθε φορά που αποτυγχάνει η δέσμευση μνήμης, πρέπει να απελευθερώνετε όλη τη δυναμικά δεσμευμένη μνήμη του προγράμματος πριν κάνετε οτιδήποτε άλλο ζητά η εκφώνηση. Παρατηρήστε ότι αρκετές από τις συναρτήσεις που θα γράψετε χρησιμοποιούνται σε περισσότερα από ένα σημεία του προγράμματος. Είναι επιθυμητό να υπάρχει μια συνάρτηση για κάθε λειτουργία του προγράμματος που γίνεται συχνά ώστε να καλείτε αυτή τη συνάρτηση όποτε χρειάζεται. Αν "πιάσετε" τον εαυτό σας να κάνει copy+paste κώδικα μέσα στο πρόγραμμά σας, τότε κατά πάσα πιθανότητα αυτό που γράφετε θα μπορούσε να μπει σε μια συνάρτηση. Πέρα από τις συναρτήσεις που σας ζητάμε στην εκφώνηση, είναι αναμενόμενο ότι θα γράψετε και δικές σας για να βελτιώσετε την ποιότητα του κώδικά σας. Για παράδειγμα, θα μπορούσατε να γράψετε μια συνάρτηση η οποία παίρνει ως παραμέτρους τα argc, argv και κάνει τους αρχικούς ελέγχους, ή μια συνάρτηση που αναλαμβάνει την υλοποίηση της βασικής επανάληψης στη main. Χρησιμοποιήστε συναρτήσεις από τη string.h σε όσα σημεία κάνετε διαχείριση συμβολοσειρών. Θα σας δώσουμε ενδεικτικά αρχεία εισόδου και εξόδου. Χρησιμοποιήστε ανακατεύθυνση εισόδου/εξόδου και την εντολή diff όπως κάνατε και στα προηγούμενα σετ ασκήσεων για να επιβεβαιώσετε ότι το πρόγραμμά σας βγάζει ακριβώς την αναμενόμενη έξοδο. Όπως πάντα, φροντίστε να έχετε καλογραμμένο κώδικα που ακολουθεί τις αρχές που περιγράφονται σε αυτά τα φυλλάδια.

Στάδιο 0: Κατασκευή δομών και χειρισμός παραμέτρων προγράμματος (*) Ορίστε ένα struct το οποίο περιγράφει ένα φοιτητή (κόμβο λίστας), κι έχει τα πεδία: όνομα (δείκτης σε χαρακτήρα) τμήμα (ακέραιος αριθμός, αύξων αριθμός τμήματος ξεκινώντας από το 1) δείκτη προς τον επόμενο κόμβο Ορίστε ένα τύπο enum που αναπαριστά εργάσιμη ημέρα. Μεταβλητές αυτού του τύπου θα παίρνουν τιμές από Δευτέρα έως και Παρασκευή. Ορίστε ένα struct το οποίο περιγράφει ένα τμήμα εργαστηρίου, κι έχει τα πεδία: διεύθυνση κεφαλής λίστας φοιτητών ώρα που ξεκινά το εργαστήριο (ακέραιος αριθμός). ημέρα που γίνεται το εργαστήριο (enum που κατασκευάσατε στο προηγούμενο βήμα) Ορίστε ένα τύπο enum που θα παίρνει τις τιμές ON, OFF. Δηλώστε μια καθολική 1 μεταβλητή τύπου enum (που ορίσατε στο προηγούμενο βήμα) με όνομα debug. Η debug θα παίρνει την τιμή ON ή OFF ανάλογα με τις παραμέτρους του προγράμματος. Όταν είναι ΟΝ θέλουμε το πρόγραμμα να εκτυπώνει και διαγνωστικά μηνύματα (πέρα των κανονικών) ενώ όταν είναι OFF το πρόγραμμα εκτυπώνει μόνο τα "κανονικά" μηνύματα. Γράψτε μια συνάρτηση main στην οποία ελέγχετε τις παραμέτρους προγράμματος που δίνονται από τη γραμμή εντολών και αρχικοποιείτε αναλόγως τη μεταβλητή debug. Αν δεν έχει δοθεί κάποια παράμετρος, τότε το πρόγραμμα δε θα εκτυπώνει διαγνωστικά μηνύματα. Αν έχει δοθεί η παράμετρος -d ή -debug τότε το πρόγραμμα θα εκτυπώνει διαγνωστικά μηνύματα. Αν έχει δοθεί οποιαδήποτε άλλη παράμετρος, τότε το πρόγραμμα εκτυπώνει το μήνυμα: X: illegal option -- Y Usage: X [-d] όπου Χ το όνομα του εκτελέσιμου και Υ η παράμετρος που δόθηκε, χωρίς την αρχική παύλα (αν αυτή υπάρχει). Ακολούθως, το πρόγραμμα τερματίζει. Αν δοθεί λάθος πλήθος παραμέτρων, το πρόγραμμα εκτυπώνει το μήνυμα: X: wrong number of arguments Y όπου Χ το όνομα του εκτελέσιμου και Υ το πλήθος των παραμέτρων. Ακολούθως, το πρόγραμμα τερματίζει. 1 Αυτή είναι η μοναδική καθολική μεταβλητή που επιτρέπεται να έχει το πρόγραμμα.

Στάδιο 1: Εισαγωγή δεδομένων(***) Γράψτε μια συνάρτηση εισαγωγής δεδομένων και αρχικοποίησης δομών η οποία Εκτυπώνει το μήνυμα Enter number of students: ακολουθούμενο από ένα κενό (space) και διαβάζει το πλήθος των φοιτητών Εκτυπώνει το μήνυμα Enter maximum lab size: ακολουθούμενο από ένα κενό (space) και διαβάζει το πλήθος των υπολογιστών στο εργαστήριο. Υπολογίζει πόσα τμήματα χρειάζεται να υπάρχουν (πλήθος φοιτητών ανά πλήθος υπολογιστών) και δεσμεύει δυναμικά μνήμη για τον πίνακα τμημάτων. Αρχικά, όλα τα τμήματα είναι άδεια (κενές λίστες). Η ώρα και η μέρα κάθε τμήματος αποφασίζονται ως εξής: Εργαστήρια γίνονται από Δευτέρα έως και Παρασκευή, μεταξύ 8:00 και 22:00 και έχουν διάρκεια από μία ώρα. Το πρώτο τμήμα ξεκινά Δευτέρα στις 8:00, και κάθε επόμενο τμήμα γίνεται την ίδια μέρα, μια ώρα μετά. Το τελευταίο τμήμα της κάθε ημέρας ξεκινά στις 21:00 και το επόμενο τμήμα, αν υπάρχει, ξεκινά στις 8:00 την επόμενη μέρα. Εκτυπώνει το διαγνωστικό μήνυμα >>Created X sections<< όπου X το πλήθος των τμημάτων, με ένα χαρακτήρα αλλαγής γραμμής πριν και μετά. Για κάθε ένα φοιτητή, εκτυπώνει το μήνυμα Enter student name: ακολουθούμενο από ένα κενό (space), και μετά διαβάζει το όνομά του. Τα ονόματα έχουν μήκος το πολύ 30, συμπεριλαμβανομένου του '\0', αλλά όταν τα αποθηκεύετε σε κόμβο πρέπει να δεσμεύετε ακριβώς όση μνήμη χρειάζεται. Κατασκευάζει ένα νέο κόμβο λίστας για αυτόν τον φοιτητή, βρίσκει σε ποιο τμήμα θα ανήκει αρχικά ο φοιτητής και τον προσθέτει σε αυτό χρησιμοποιώντας τη συνάρτηση που περιγράφεται παρακάτω. Σε αυτό το στάδιο οι φοιτητές εισάγονται κυκλικά στα τμήματα. Για παράδειγμα, αν υπάρχουν 3 τμήματα, ο πρώτος φοιτητής μπαίνει στο πρώτο, ο δεύτερος στο δεύτερο, ο τρίτος στο τρίτο, ο τέταρτος στο πρώτο, ο πέμπτος στο δεύτερο κ.ο.κ. Η συνάρτηση στο τέλος επιστρέφει τη διεύθυνση που είναι αποθηκευμένος ο πίνακας. Επιπλέον, μέσω της λίστας παραμέτρων επιστρέφει το πλήθος των τμημάτων. Αν έχει παρουσιαστεί οποιοδήποτε πρόβλημα στη δέσμευση μνήμης, η συνάρτηση πρέπει να εκτυπώνει κατάλληλο μήνυμα, να απελευθερώνει όλη τη δυναμικά δεσμευμένη μνήμη και να επιστρέφει NULL. Γράψτε μια συνάρτηση η οποία παίρνει ως παραμέτρους τη διεύθυνση του πίνακα τμημάτων, ένα κόμβο λίστας που αναπαριστά ένα φοιτητή και το τμήμα στο οποίο πρέπει να μπει ο φοιτητής, και Εκτυπώνει το διαγνωστικό μήνυμα >>Adding student "X" in section Y<<, όπου Χ το όνομα του φοιτητή και Υ το τμήμα, με ένα χαρακτήρα αλλαγής γραμμής πριν και μετά. Προσθέτει το φοιτητή στο κατάλληλο τμήμα, στην αρχή της λίστας. Καλέστε τη συνάρτηση αρχικοποίησης από τη main για να διαβάσετε τα στοιχεία των φοιτητών και να τα αποθηκεύσετε στον δυναμικό πίνακα λιστών. Ολοκληρώστε αυτό το στάδιο και βεβαιωθείτε ότι λειτουργεί σωστά πριν προχωρήσετε στο επόμενο.

Στάδιο 2: Εκτύπωση τμημάτων (*) Γράψτε μια συνάρτηση η οποία παίρνει ως παραμέτρους τη διεύθυνση που είναι αποθηκευμένος ο πίνακας τμημάτων και το πλήθος τμημάτων, και : Εκτυπώνει χαρακτήρα αλλαγής γραμμής, το μήνυμα ==========LABS========== (10 '=' σε κάθε πλευρά) και χαρακτήρα αλλαγής γραμμής. Για κάθε τμήμα εκτυπώνει χαρακτήρα αλλαγής γραμμής, το μήνυμα *Section Χ, Υ Ζ:00* όπου Χ ο αύξων αριθμός του τμήματος, Υ η ημέρα που γίνεται το τμήμα και Z η ώρα που ξεκινά, και χαρακτήρα αλλαγής γραμμής. Οι ημέρες πρέπει να εμφανίζονται ως Monday, Tuesday, Wednesday, Thursday ή Friday. Για κάθε φοιτητή μέσα σε ένα τμήμα εκτυπώνει ένα χαρακτήρα tab ακολουθούμενο από το όνομα του φοιτητή. Αφού εκτυπωθούν όλα τα τμήματα, εκτυπώνει χαρακτήρα αλλαγής γραμμής, το μήνυμα ======================== (24 '=' για να είναι ίσου μήκους με το προηγούμενο) και χαρακτήρα αλλαγής γραμμής Καλέστε τη συνάρτηση από τη main, αμέσως μετά την αρχικοποίηση. Ολοκληρώστε αυτό το στάδιο και βεβαιωθείτε ότι λειτουργεί σωστά πριν προχωρήσετε στο επόμενο. Στάδιο 3: Υλοποίηση αμοιβαίας ανταλλαγής (**) Γράψτε μια συνάρτηση η οποία παίρνει ως παραμέτρους το όνομα ενός φοιτητή και ότι άλλο χρειάζεται και: Αναζητά το φοιτητή στον πίνακα τμημάτων, κι αν τον βρει, αφαιρεί από την αντίστοιχη λίστα τον κόμβο που αντιστοιχεί στο φοιτητή και τον επιστρέφει. Αν δεν τον βρει, επιστρέφει NULL. Όταν αρχίζει την αναζήτηση σε κάποιο τμήμα η συνάρτηση πρέπει να εκτυπώνει το διαγνωστικό μήνυμα >>Searching section X...<< με ένα χαρακτήρα αλλαγής γραμμής πριν και μετά, όπου Χ ο αύξων αριθμός του τμήματος και μετά για ένα-ένα φοιτητή που ελέγχει, Y... όπου Υ το όνομά του. Εκτυπώνεται και το όνομα του φοιτητή που ψάχνουμε, αν αυτό βρεθεί. Γράψτε μια συνάρτηση η οποία παίρνει ως παραμέτρους τα ονόματα δύο φοιτητών και ότι άλλο χρειάζεται και: Χρησιμοποιεί την παραπάνω συνάρτηση για να αφαιρέσει και τους δύο φοιτητές από τα τμήματά τους. Αν κάποιος από τους φοιτητές δεν υπάρχει σε κανένα τμήμα, η συνάρτηση πρέπει να εκτυπώνει το μήνυμα Student "X" not in lab. Swap canceled. όπου Χ το όνομα του φοιτητή, ένα χαρακτήρα αλλαγής γραμμής, να εισάγει τον άλλο πίσω στο τμήμα του και να τερματίζει. Ελέγξτε τους με τη σειρά που δόθηκαν αρχικά τα ονόματα, για να βγάλετε ίδια αποτελέσματα με τα αρχεία ελέγχου. Αν και οι δύο φοιτητές είναι στο ίδιο τμήμα, η συνάρτηση πρέπει να εκτυπώνει το μήνυμα Students "X" and "Y" are in the same section. Swap canceled. όπου Χ και Υ τα ονόματα των δύο φοιτητών, ένα χαρακτήρα αλλαγής γραμμής και να τερματίζει. Μπορείτε να υποθέσετε ότι δεν υπάρχουν συνωνυμίες και δε θα ζητηθεί ποτέ να αλλάξει κάποιος με τον εαυτό του. Χρησιμοποιεί τη συνάρτηση προσθήκης φοιτητών για να τους προσθέσει στα νέα τους τμήματα.

Στη main προσθέστε κώδικα ο οποίος: Εκτυπώνει το μήνυμα "Enter action: " ακολουθούμενο από ένα κενό (space) και διαβάζει μια εντολή από το χρήστη. Η εντολή είναι μια λέξη μεγέθους το πολύ 20 (συμπεριλαμβανομένου του χαρακτήρα '\0') Αν η εντολή είναι SWAP τότε εκτυπώνει το μήνυμα Enter first name: ακολουθούμενο από ένα κενό (space), διαβάζει το όνομα του πρώτου φοιτητή, εκτυπώνει το μήνυμα Enter second name: ακολουθούμενο από ένα κενό (space), διαβάζει το όνομα του δεύτερου φοιτητή και μετά καλεί τη συνάρτηση που γράψατε σε αυτό το στάδιο για να τους αλλάξει τμήματα. Αν η εντολή είναι PRINT, καλεί τη συνάρτηση εκτύπωσης τμημάτων. Αν η εντολή είναι EXIT, τερματίζει αφού αποδεσμεύσει όλη τη δυναμικά δεσμευμένη μνήμη. Για οποιαδήποτε άλλη εντολή εκτυπώνει το μήνυμα Invalid action. Valid actions are SWAP, REMOVE, PRINT, EXIT. ακολουθούμενο από χαρακτήρα αλλαγής γραμμής. Σε κάθε περίπτωση εκτός της EXIT, τα παραπάνω βήματα επαναλαμβάνονται. Ολοκληρώστε αυτό το στάδιο και βεβαιωθείτε ότι λειτουργεί σωστά πριν προχωρήσετε στο επόμενο. Στάδιο 4: Αφαίρεση φοιτητή από εργαστήριο (*) Γράψτε μια συνάρτηση η οποία παίρνει ως παραμέτρους το όνομα ενός φοιτητή και ότι άλλο χρειάζεται και τον αφαιρεί οριστικά από το εργαστήριο στο οποίο αυτός βρίσκεται. Μετά την αφαίρεση, εκτυπώνει το διαγνωστικό μήνυμα >>Removed student "X" from section Y<< όπου Χ το όνομα του φοιτητή και Υ το τμήμα του, με χαρακτήρα αλλαγής γραμμής πριν και μετά. Αν ο φοιτητής δε βρίσκεται σε κανένα τμήμα, τότε εκτυπώνει το μήνυμα Student "X" not in lab. Remove canceled. που Χ το όνομα του φοιτητή και Υ το τμήμα του, ακολουθούμενο από χαρακτήρα αλλαγής γραμμής. Χρησιμοποιήστε τη συνάρτηση που γράψατε στο βήμα 3. Στη main προσθέστε κώδικα στην επανάληψη που γράψατε στο βήμα 3 ώστε: Αν ο χρήστης έδωσε την εντολή REMOVE, το πρόγραμμα να εκτυπώνει το μήνυμα Enter name: ακολουθούμενο από ένα κενό (space), να διαβάζει το όνομα του φοιτητή και να καλεί την παραπάνω συνάρτηση για να τον αφαιρέσει. Σημείωση: Υπάρχει περίπτωση ένα τμήμα να μείνει χωρίς φοιτητές μετά από πολλαπλές αφαιρέσεις. Δε χρειάζεται να κάνετε κάτι ιδιαίτερο. Απλά στην επιλογή PRINT δε θα εμφανίζονται ονόματα φοιτητών για το συγκεκριμένο τμήμα. Αρχείο προς παράδοση: hw4.c