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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

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

char name[5]; /* define a string of characters */

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Sheet1_2. - Δεν απελευθερώνεις τη δυναµικά δεσµευµένη µνήµη. - Η έξοδος του προγράµµατός σου δεν είναι ακριβώς όπως ζητούσε η άσκηση.

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

lab6grades - Δεν έχετε δηλώσει το βαθµό βάσης ως σταθερά. - Το µήνυµα εισόδου θέλει χαρακτήρα κενού ' ' στο τέλος και όχι TAB '\t'.

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

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

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

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

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

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

Εγχειρίδιο Χρήστη - Μαθητή

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

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

lab9grades Άσκηση 1 - Σωστοί τύποι (παραµέτρων και επιστρεφόµενης τιµής) της series_cosh.

lab10grades - Το αποτέλεσµα της τοµής θα έπρεπε να εµφανίζετε µέσα σε εισαγωγικά "Helo".

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

ΑΣΚΗΣΗ 1. Structural Programming

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

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

lab14grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ

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

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Transcript:

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

Άσκηση: Συµµετοχή σε εργαστήρια Εισαγωγή Σε αυτό το σετ ασκήσεων θα υλοποιήσετε µια δοµή στην οποία αποθηκεύονται τα στοιχεία των φοιτητών που συµµετέχουν στα εργαστήρια ενός µαθήµατος. Οι φοιτητές είναι χωρισµένοι σε πολλαπλά τµήµατα ανάλογα µε το πλήθος των φοιτητών και τον αριθµό υπολογιστών σε κάθε εργαστήριο. Ένα τµήµα αναπαρίσταται ως µια µη-κυκλική, διπλά διασυνδεδεµένη λίστα χωρίς τερµατικό, κάθε κόµβος της οποίας αντιστοιχεί σε ένα φοιτητή. Επιπλέον, κάθε µία λίστα είναι ταξινοµηµένη σε αύξουσα σειρά µε βάση τα ονόµατα των φοιτητών που περιέχονται σε αυτή τη λίστα (συµµετέχουν σε αυτό το εργαστήριο.) Η δοµή που αναπαριστά το σύνολο των φοιτητών είναι ένας πίνακας από struct όπου κάθε κελί αντιστοιχεί σε ένα εργαστηριακό τµήµα. Για την ακρίβεια, κάθε κελί του πίνακα περιέχει τη διεύθυνση της κεφαλής µιας λίστας όπως αυτή περιγράφεται πιο πάνω, καθώς και την ώρα που ξεκινά το εργαστήριο. Το πρόγραµµά σας θα παρέχει δυο λειτουργίες: Αµοιβαία ανταλλαγή φοιτητών που ανήκουν σε διαφορετικά τµήµατα και οριστική αφαίρεση ενός φοιτητή από το τµήµα στο οποίο ανήκει. Επιπλέον, θα είναι δυνατό για το χρήστη να τρέξει το πρόγραµµα µε δύο τρόπους: είτε κανονικά είτε µε επιπρόσθετα διαγνωστικά µηνύµατα. Στην παρακάτω περιγραφή, τα διαγνωστικά µηνύµατα θα γράφονται µε κόκκινο χρώµα και τα "κανονικά" µε µπλε. Τα κανονικά µηνύµατα εκτυπώνονται σε κάθε περίπτωση. Στάδιο 0: Κατασκευή δοµών και χειρισµός παραµέτρων προγράµµατος ( ) Κατασκευάστε ένα struct το οποίο περιγράφει ένα φοιτητή (κόµβο λίστας), κι έχει τα πεδία: όνοµα (δείκτης σε χαρακτήρα) τµήµα (ακέραιος αριθµός, αύξων αριθµός τµήµατος) δείκτες προς τον επόµενο και προηγούµενο κόµβο Κατασκευάστε ένα τύπο enum που αναπαριστά εργάσιµη ηµέρα. Μεταβλητές αυτού του τύπου θα παίρνουν τιµές από Δευτέρα έως και Παρασκευή. Κατασκευάστε ένα struct το οποίο περιγράφει ένα τµήµα εργαστηρίου, κι έχει τα πεδία: διεύθυνση κεφαλής λίστας φοιτητών ώρα που ξεκινά το εργαστήριο (ακέραιος αριθµός). ηµέρα που γίνεται το εργαστήριο (enum που κατασκευάσατε στο προηγούµενο βήµα) Κατασκευάστε ένα τύπο enum που θα παίρνει τις τιµές ON, OFF. Δηλώστε µια καθολική 1 µεταβλητή τύπου enum (που κατασκευάσατε στο προηγούµενο βήµα) µε όνοµα debug. Η debug θα παίρνει την τιµή ON ή OFF ανάλογα µε τις παραµέτρους του προγράµµατος. Όταν είναι ΟΝ θέλουµε το πρόγραµµα να εκτυπώνει και διαγνωστικά µηνύµατα (πέρα των κανονικών) ενώ όταν είναι OFF το πρόγραµµα εκτυπώνει µόνο τα "κανονικά" µηνύµατα. 1 Αυτή είναι η µοναδική καθολική µεταβλητή που επιτρέπεται να έχει το πρόγραµµα.

Κατασκευάστε µια συνάρτηση main στην οποία ελέγχετε τις παραµέτρους προγράµµατος που δίνονται από τη γραµµή εντολών και αρχικοποιείτε αναλόγως τη µεταβλητή debug.. Αν δεν έχει δοθεί κάποια παράµετρος, τότε το πρόγραµµα δε θα εκτυπώνει διαγνωστικά µηνύµατα. Αν έχει δοθεί η παράµετρος -d ή -debug τότε το πρόγραµµα θα εκτυπώνει διαγνωστικά µηνύµατα. Αν έχει δοθεί οποιαδήποτε άλλη παράµετρος, τότε το πρόγραµµα εκτυπώνει το µήνυµα: X: illegal option -- Y Usage: X [-d] όπου Χ το όνοµα του εκτελέσιµου και Υ η παράµετρος που δόθηκε, χωρίς την αρχική παύλα (αν υπάρχει). Ακολούθως, το πρόγραµµα τερµατίζει. Αν δοθεί λάθος πλήθος παραµέτρων, το πρόγραµµα εκτυπώνει το µήνυµα: X: wrong number of arguments Y όπου Χ το όνοµα του εκτελέσιµου και Υ το πλήθος των παραµέτρων. Ακολούθως, το πρόγραµµα τερµατίζει. Στάδιο 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), να διαβάζει το όνοµα του φοιτητή και να καλεί την παραπάνω συνάρτηση για να τον αφαιρέσει.

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