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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

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

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

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

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

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

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

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

lab2 -Στην printf να βάζεις \n έτσι ώστε να αλλάζει γραµµή όποτε σου εµφανίζει κάποιο µήνυµα.

ΑΕΜ ή username. Sheet2

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

επιµέλεια Θοδωρής Πιερράτος

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

lab2grades - Στη scanf υπολογίζετε τουλάχιστον 5 χαρακτήρες %5.2f προδιαγραφές που ζητούνται στην εκφώνηση. -

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

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

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

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

lab6grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ Διαδικαστικά: Όλα οκ.

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

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

Sheet3_2. Τα literals (3.0, 1.5, κτλ) πρέπει να ορίζονται ως σταθερές.

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

Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων Kεφάλαιο 13 Ανάλυση δεδομένων...

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

Παραδείγματα Χρήσης του DrJava

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ. Πρόγραμμα Διαχείρισης Α.Π.Δ.

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

Μεθόδων Επίλυσης Προβλημάτων

Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

Βαθμός Σχόλια. lab6 PASS PASS. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string.

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

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

FAIL PASS PASS οριακά

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

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

ΕΡΓΑΣΤΗΡΙΟ ΠΛΗΡΟΦΟΡΙΚΗ I. 3o ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑ ΜΕ ΤΟ WORD

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

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

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

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

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

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

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

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

Γ7.8 Εγγραφές (Structures) Γ Λυκείου Κατεύθυνσης

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

CE 120. Φροντιστήριο 14/10/2011

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

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

lab7grades -Σωστή χρήση της sprintf -Σωστά ανιχνεύετε τον χαρακτήρα που πρέπει να αφαιρέσετε. -Σωστή µεταφορά στοιχείων µια θέση αριστερά.

Transcript:

ΣΕΤ ΑΣΚΗΣΕΩΝ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2015-2016 Προθεσµία: Πέµπτη 17/12/2015, 22:00 Διαβάστε πριν ξεκινήσετε Διαβάστε την εκφώνηση προσεκτικά και σχεδιάστε το πρόγραµµά σας πριν ξεκινήσετε να γράφετε κώδικα. Ολοκληρώστε κάθε ένα στάδιο πριν προχωρήσετε στο επόµενο, κι αποθηκεύστε σε ξεχωριστά αρχεία ενδιάµεσες σωστές µορφές του προγράµµατός σας ώστε να µπορείτε να επανέλθετε σε αυτές αν κάνετε κάποιο λάθος. Μη διστάζετε να ζητήσετε βοήθεια! Χρησιµοποιήστε κατά προτίµηση το forum προγραµµατισµού (http://courses.inf.uth.gr/codingforums/) ή, αν είναι απαραίτητο, email (π.χ. αν πραγµατικά επιβάλλεται να στείλετε κάποιο κοµµάτι κώδικα µαζί µε το µήνυµά σας). Η εργασία αυτή µπορεί να γίνει σε οµάδες µέχρι 2 ατόµων. Δε χρειάζεται να είστε οµάδα µε το ίδιο άτοµο που είστε στο εργαστήριο. Μπορείτε να συζητάτε τις ασκήσεις µε συµφοιτητές σας αλλά δεν επιτρέπεται η ανταλλαγή κώδικα µε οποιονδήποτε τρόπο. Ξεκινήστε νωρίς! Ο προγραµµατισµός είναι πάντα ΠΟΛΥ πιο χρονοβόρος από ότι περιµένετε. Εκπρόθεσµες ασκήσεις δε γίνονται δεκτές. Οι ασκήσεις σας θα βαθµολογηθούν στα παρακάτω (χωρίς ιδιαίτερη σειρά): Ορθότητα Γενική µορφοποίηση προγράµµατος (στοίχιση, ονόµατα µεταβλητών, κτλ.) Σχεδιασµός προγράµµατος και αποτελεσµατική χρήση κατάλληλων δοµών, µεταβλητών, σταθερών, συναρτήσεων κτλ. Συµµόρφωση µε τις προδιαγραφές Αποτελεσµατικά σχόλια, σύµφωνα µε τους κανόνες σχολιασµού του σχετικού φυλλαδίου. Προσέξτε ιδιαίτερα: Τα όρια των loops όταν κάνετε προσπέλαση πινάκων. Μην επαναλαµβάνετε µεγάλα κοµµάτια κώδικα (π.χ. αν έχετε ίδιες εντολές και στα δύο σκέλη µιας if/else, βγάλτε τις απέξω)

Άσκηση 1: Διαχείριση συµβολοσειρών Θα γράψετε ένα πρόγραµµα το οποίο αποθηκεύει τα στοιχεία και τους βαθµούς ενός αριθµού φοιτητών σε πίνακα και υπολογίζει κάποια στατιστικά. Κύριοι στόχοι της άσκησης είναι να γίνει αποτελεσµατική χρήση των συναρτήσεων που σας παρέχει η γλώσσα, καθώς και να δουλέψετε µε δείκτες. Αρχείο δεδοµένων Τα στοιχεία των φοιτητών θα διαβαστούν µε ανακατεύθυνση από ένα αρχείο, στο οποίο είναι γραµµένα ως εξής: Σε κάθε γραµµή βρίσκονται τα στοιχεία ακριβώς ενός φοιτητή. Μια γραµµή περιέχει τα παρακάτω: Αριθµός µητρώου στη µορφή CCCCC. Μέγιστο πλάτος 5 χαρακτήρες. Ο αριθµός δεν είναι στοιχισµένος µε κάποιο τρόπο. Μπορεί κάποιοι χαρακτήρες στην αρχή ή το τέλος να είναι κενά και όχι ψηφία, αν ο αριθµός είναι µικρότερος από πενταψήφιο. Ένα κενό (' ') που διαχωρίζει αυτή την πληροφορία από την επόµενη. Ονοµατεπώνυµο, στη µορφή Επώνυµο,Μικρό. Μέγιστο πλάτος 25 χαρακτήρες. Αν το ονοµατεπώνυµο είναι µικρότερο από 25 χαρακτήρες, οι υπόλοιποι είναι κενά. Το όνοµα είναι πάντα στοιχισµένο αριστερά. Παρατηρήστε πως δεν υπάρχει κενό γύρω από το κόµµα. Ένα κενό (' ') που διαχωρίζει αυτή την πληροφορία από την επόµενη. Βαθµός, στη µορφή CC.C. Μέγιστο πλάτος 4 χαρακτήρες. Οι βαθµοί είναι από 0 µέχρι και 10. Χαρακτήρας αλλαγής γραµµής ('\n'). Η τελευταία γραµµή περιέχει έναν αρνητικό αριθµό µητρώου, ο οποίος σηµατοδοτεί τέλος των δεδοµένων. Μελετήστε τα ενδεικτικά αρχεία εισόδου που θα σας δώσουµε. Μπορείτε να υποθέσετε ότι ο µέγιστος αριθµός φοιτητών τα στοιχεία των οποίων είναι στο αρχείο είναι 100, αλλά το πρόγραµµά σας πρέπει να είναι γραµµένο έτσι ώστε να µπορεί να αλλαχθεί εύκολα αυτή η ποσότητα. Στάδιο 1: Είσοδος δεδοµένων Δηµιουργήστε ένα πίνακα δύο διαστάσεων. Το πλήθος γραµµών είναι ο µέγιστος αριθµός φοιτητών ενώ το πλήθος στηλών είναι ακριβώς όσο χρειάζεται για να χωρέσουν τα δεδοµένα που περιγράφονται πιο πάνω. Κάθε γραµµή του πίνακα πρέπει να περιέχει µια γραµµή του αρχείου, µε τα επιπλέον χαρακτηριστικά: Δεν υπάρχει '\n' στο τέλος της γραµµής, αλλά µόνο το '\0' που θα βάλει αυτόµατα η fgets. Το κενό που διαχωρίζει το ονοµατεπώνυµο από το βαθµό αντικαθίσταται από '\0'. Αυτό το κάνουµε για να διευκολυνθούµε στη χρήση συναρτήσεων για strings αναφορικά µε το ονοµατεπώνυµο. Γράψτε κώδικα που διαβάζει τα δεδοµένα µια γραµµή τη φορά (µε χρήση fgets) και τα αποθηκεύει στον πίνακα κάνοντας τις παραπάνω αλλαγές. Λάβετε υπόψη ότι πρέπει να σταµατήσετε να διαβάζετε δεδοµένα αν γεµίσει ο πίνακας ή αν διαβαστεί αρνητικός αριθµός µητρώου. Αφού αποθηκεύσετε τα περιεχόµενα στον πίνακα, γράψτε κώδικα που για κάθε φοιτητή εκτυπώνει: Το πρώτο γράµµα του µικρού του ονόµατος Μια τελεία κι ένα κενό. Το επώνυµό του κι ένα κενό Τον αριθµό µητρώου του κι ένα κενό Το βαθµό του µε ένα δεκαδικό ψηφίο και χαρακτήρα αλλαγής γραµµής

Για να αποσπάσετε και να εκτυπώσετε αυτές τις τιµές κάντε έξυπνη χρήση συναρτήσεων σχετικών µε strings, όπως στο lab8. Για παράδειγµα, µπορείτε να βρείτε πού ξεκινά το µικρό όνοµα αν βρείτε πού είναι το κόµµα. Επίσης, για να µπορεί να αλλαχθεί εύκολα το πρόγραµµά σας αν αλλάξει το µέγεθος των δεδοµένων, ορίστε κατάλληλες σταθερές που σας λένε σε ποια θέση του πίνακα ξεκινά κάθε "πεδίο" (αρ. µητρώου, ονοµατεπώνυµο, βαθµός) και τι µέγιστο µέγεθος έχει. Στάδιο 2: Δηµιουργία ιστογράµµατος και υπολογισµός µέσου όρου. Δηµιουργήστε ένα πίνακα µεγέθους 11. Σε κάθε κελί αυτού του πίνακα θα αποθηκευτεί πλήθος φοιτητών που πήραν συγκεκριµένους βαθµούς. Για την ακρίβεια, στο κελί 0 θα αποθηκευτεί το πλήθος των φοιτητών που πήραν 0. Στο κελί 1 θα αποθηκευτεί το πλήθος των φοιτητών που πήραν βαθµούς µεγαλύτερους από 0 και το πολύ ίσους µε 1. Στο κελί 2 θα αποθηκευτεί το πλήθος των φοιτητών που πήραν βαθµούς µεγαλύτερους από 1 και το πολύ ίσους µε 2. Οµοίως για τα υπόλοιπα κελιά του πίνακα. Γράψτε κώδικα που διατρέχει τον διδάστατο πίνακα δεδοµένων, εξετάζει τους βαθµούς και γεµίζει κατάλληλα τον πίνακα µε τα πλήθη βαθµών. Παράλληλα, το πρόγραµµά σας πρέπει να υπολογίζει και το µέσο όρο όλων των βαθµών. Γράψτε κώδικα που εκτυπώνει ένα ιστόγραµµα στην οθόνη, το οποίο δείχνει µε "γραφικό" τρόπο πόσοι φοιτητές πήραν βαθµούς σε κάθε εύρος. Για την ακρίβεια, για κάθε κελί του πίνακα το πρόγραµµα εκτυπώνει αριστερή παρένθεση, εκτός από την περίπτωση του 0, που εκτυπώνεται αριστερό bracket. το κάτω όριο του εύρους (µη-συµπεριλαµβανοµένου) που αντιστοιχεί σε αυτό το κελί (πλάτος 2) κόµµα ένα κενό το πάνω όριο του εύρους (συµπεριλαµβανοµένου) που αντιστοιχεί σε αυτό το κελί (πλάτος 2) δεξί bracket (]) άνω-κάτω τελεία ένα κενό τόσα αστεράκια (*) όσες οι δεκάδες των φοιτητών που πήραν βαθµούς σε αυτό το εύρος τόσες παύλες (-) όσες οι µονάδες των φοιτητών που πήραν βαθµούς σε αυτό το εύρος. χαρακτήρα αλλαγής γραµµής. Για παράδειγµα, αν υπήρχαν 23 φοιτητές που πήραν βαθµούς µεταξύ 4 και 5, τότε γι αυτό το εύρος το πρόγραµµα θα εκτυπώσει: (4, 5]: **--- Ειδικά για το πρώτο κελί του πίνακα, το κάτω και το πάνω όριο είναι µηδέν, εφόσον περιέχει το πλήθος των βαθµών που είναι µηδέν. Αν δε βαθµολογήθηκε κανείς σε κάποιο εύρος, απλά δεν εµφανίζονται αστεράκια και παύλες µετά την άνωκάτω τελεία. Χρήσιµη συνάρτηση από τη µαθηµατική βιβλιοθήκη: ceil Τέλος, το πρόγραµµά σας πρέπει να εκτυπώνει χαρακτήρα αλλαγής γραµµής, το µήνυµα AVERAGE: X, όπου Χ ο µέσος όρος των βαθµών µε δύο δεκαδικά ψηφία, και έναν ακόµη χαρακτήρα αλλαγής γραµµής. Σηµείωση: Αν θέλετε, µπορείτε να χρησιµοποιήσετε και δικές σας συναρτήσεις σε αυτή την άσκηση, πχ. για την εκτύπωση αποτελεσµάτων, ή για τη δηµιουργία του πίνακα µε τα πλήθη φοιτητών, κτλ. αλλά δεν είναι υποχρεωτικό. ΑΠΟΘΗΚΕΥΣΤΕ ΤΟ ΠΡΟΓΡΑΜΜΑ ΣΑΣ ΣΕ ΑΡΧΕΙΟ ΜΕ ΟΝΟΜΑ hw3a.c

Άσκηση 2: Δοµές Σε αυτή την άσκηση θα γράψετε ένα πρόγραµµα παρόµοιο µε το προηγούµενο, το οποίο όµως χρησιµοποιεί structs για την αναπαράσταση των δεδοµένων. Στάδιο 1: Είσοδος δεδοµένων Κατασκευάστε ένα struct µε όνοµα studentdata και τα εξής πεδία: Αριθµός µητρώου, ακέραιος. Ονοµατεπώνυµο, πίνακας χαρακτήρων µεγέθους 26 (25 το όνοµα συν µία το \0) Βαθµός, πραγµατικός αριθµός. Κατασκευάστε ένα πίνακα από studentdata.το µέγεθός του πρέπει να είναι όσο το µέγιστο δυνατό πλήθος φοιτητών. Γράψτε µια συνάρτηση η οποία παίρνει ως παράµετρο τον πίνακα, διαβάζει τα δεδοµένα όπως αυτά περιγράφονται στην άσκηση 1, τα αποθηκεύει µε κατάλληλο τρόπο στον πίνακα (προσοχή: τα ονόµατα αποθηκεύονται χωρίς κενά!) κι επιστρέφει το πλήθος των φοιτητών (το οποίο θυµίζουµε δεν είναι απαραίτητα όσο και το µέγεθος του πίνακα). Τις θέσεις του πίνακα που δεν αντιστοιχούν σε φοιτητές µπορείτε να τις αρχικοποιήσετε µε κάποιο κατάλληλο τρόπο που "σηµαίνει" ότι είναι άκυρες, για παράδειγµα µε αρνητικούς αριθµούς και κενό ονοµατεπώνυµο. Γράψτε µια συνάρτηση η οποία παίρνει ως παράµετρο τον πίνακα και το πλήθος φοιτητών και εκτυπώνει τα περιεχόµενά του όπως και στην άσκηση 1. Καλέστε τις συναρτήσεις σας στη main για να αρχικοποιήσετε και µετά να εκτυπώσετε τον πίνακα. Στάδιο 2: Ταξινόµηση Γράψτε κώδικα στη main που εκτυπώνει χαρακτήρα αλλαγής γραµµής, 20 παύλες και πάλι χαρακτήρα αλλαγής γραµµής (αυτό θα µπορούσε να γίνει και µέσω συνάρτησης). Γράψτε µια συνάρτηση µε όνοµα selection_sort η οποία παίρνει ως παράµετρο τον πίνακα και το πλήθος φοιτητών και ταξινοµεί τον πίνακα σε αύξουσα σειρά (για την ακρίβεια το µέρος του πίνακα που περιέχει έγκυρα δεδοµένα) µε βάση το ονοµατεπώνυµο, κι αν υπάρχουν συνωνυµίες µε βάση τον αριθµό µητρώου, χρησιµοποιώντας τον αλγόριθµο selection sort. Γράψτε µια συνάρτηση µε όνοµα insertion_sort η οποία παίρνει ως παράµετρο τον πίνακα και το πλήθος φοιτητών και ταξινοµεί τον πίνακα σε αύξουσα σειρά (για την ακρίβεια το µέρος του πίνακα που περιέχει έγκυρα δεδοµένα) µε βάση το ονοµατεπώνυµο, κι αν υπάρχουν συνωνυµίες µε βάση τον αριθµό µητρώου, χρησιµοποιώντας τον αλγόριθµο insertion sort. Μπορείτε να βρείτε πληροφορίες για τους παραπάνω αλγορίθµους σε φυλλάδιο που θα σας διαθέσουµε. Καλέστε στη main τη συνάρτηση selection_sort για να ταξινοµήσετε τον πίνακα, και κατόπιν τη συνάρτηση που εκτυπώνει τα περιεχόµενά του. Αφού βεβαιωθείτε ότι λειτουργεί σωστά η selection_sort, βάλτε την κλήση της σε σχόλιο, και καλέστε στο ίδιο σηµείο τη insertion_sort. Βεβαιωθείτε ότι και αυτή ταξινοµεί σωστά τον πίνακα. Μη σβήσετε το σχόλιο. Στάδιο 3: Αναζήτηση Γράψτε κώδικα στη main που εκτυπώνει χαρακτήρα αλλαγής γραµµής, 20 παύλες και πάλι χαρακτήρα αλλαγής γραµµής. Γράψτε µια συνάρτηση µε όνοµα find_name_aem η οποία παίρνει ως παράµετρο µια συµβολοσειρά που θα περιέχει ονοµατεπώνυµο, έναν ακέραιο που αναπαριστά αριθµό µητρώου κι ότι άλλο χρειάζεται και χρησιµοποιεί δυαδική αναζήτηση (binary search) για να βρει αν υπάρχει στον πίνακα φοιτητής µε αυτό το όνοµα και αριθµό µητρώου. Αν τον βρει, επιστρέφει τη θέση του στον πίνακα, διαφορετικά -1.

Γράψτε κώδικα στη main που Εκτυπώνει το µήνυµα "Enter name: " Διαβάζει ένα ονοµατεπώνυµο. Θεωρήστε ότι θα δοθεί µε την ίδια µορφή που είναι αποθηκευµένο (επώνυµο, κόµµα, µικρό). Εκτυπώνει το µήνυµα "Enter ID: " Διαβάζει ένα αριθµό µητρώου. Εκτυπώνει χαρακτήρα αλλαγής γραµµής και µετά καλεί τη συνάρτηση find_name_aem για να βρει φοιτητή µε αυτό το όνοµα και αριθµό µητρώου. Αν υπάρχει, εκτυπώνει το βαθµό του µε ένα δεκαδικό ψηφίο και χαρακτήρα αλλαγής γραµµής. Αν δεν υπάρχει, εκτυπώνει το µήνυµα "N, I Not found" όπου Ν το όνοµα και Ι ο αριθµός µητρώου, και χαρακτήρα αλλαγής γραµµής. Γράψτε µια συνάρτηση µε όνοµα find_all_records η οποία παίρνει ως παράµετρο µια συµβολοσειρά που θα περιέχει ονοµατεπώνυµο κι ότι άλλο χρειάζεται και ψάχνει στον πίνακα όλους τους φοιτητές µε αυτό το ονοµατεπώνυµο. Για κάθε φοιτητή που βρίσκει, εκτυπώνει τον αριθµό µητρώου του, κόµµα, ένα κενό, το βαθµό του µε ένα δεκαδικό ψηφίο και χαρακτήρα αλλαγής γραµµής. Γράψτε κώδικα στη main που Εκτυπώνει το µήνυµα "Enter name: " Διαβάζει ένα ονοµατεπώνυµο. Θεωρήστε ότι θα δοθεί µε την ίδια µορφή που είναι αποθηκευµένο (επώνυµο, κόµµα, µικρό). Εκτυπώνει χαρακτήρα αλλαγής γραµµής και µετά καλεί τη συνάρτηση find_all_records για να βρει όλους τους φοιτητές µε αυτό το ονοµατεπώνυµο. Εκτυπώνει χαρακτήρα αλλαγής γραµµής. Στάδιο 4: Ανάλυση αλγορίθµων ταξινόµησης Αφού ολοκληρώσετε την άσκηση και λειτουργεί σωστά, θα προσθέσετε κώδικα στις υλοποιήσεις σας των αλγορίθµων ταξινόµησης που θα σας βοηθήσει να αναλύσετε την απόδοσή τους. Για να αναλύσουµε την απόδοση ενός αλγορίθµου αναζήτησης µετράµε πόσες συγκρίσεις κάνει στην προσπάθειά του να ταξινοµήσει τα δεδοµένα. Φτιάξτε στο Kate ένα απλό αρχείο κειµένου µε όνοµα notesx_y.txt όπου X, Y τα ΑΕΜ των δύο µελών της οµάδας. ΠΡΟΣΟΧΗ: Θέλουµε απλό αρχείο κειµένου, όχι doc κτλ. Προσθέστε κατάλληλους µετρητές στις συναρτήσεις insertion_sort και selection_sort οι οποίοι µετρούν τον αριθµό συγκρίσεων της κάθε µίας. Εκτυπώστε αυτόν τον αριθµό στο τέλος της κάθε συνάρτησης. Τρέξτε το πρόγραµµά σας για όλα τα ενδεικτικά αρχεία εισόδου χρησιµοποιώντας τον ένα αλγόριθµο και σηµειώστε στο notesx_y.txt τα αποτελέσµατά σας: όνοµα αλγορίθµου, όνοµα αρχείου εισόδου, αριθµό συγκρίσεων. Τρέξτε το πρόγραµµά σας για όλα τα ενδεικτικά αρχεία εισόδου χρησιµοποιώντας τον δεύτερο αλγόριθµο και σηµειώστε στο notesx_y.txt και τα νέα αποτελέσµατα. Θα δείτε κάποιες αποκλίσεις. Μελετήστε τα αρχεία εισόδου. Έχουν τα δεδοµένα κάποια χαρακτηριστικά που κάνουν τον ένα αλγόριθµο καλύτερο ή χειρότερο από τον άλλο σε µερικές περιπτώσεις? Γράψτε τις παρατηρήσεις στο notesx_y.txt. Αφού ολοκληρώσετε την ανάλυσή σας, βάλτε σε σχόλια τον κώδικα που προσθέσατε σε αυτό το στάδιο για να κάνετε τις µετρήσεις σας (µετρητές, εκτύπωση αριθµού συγκρίσεων). ΑΠΟΘΗΚΕΥΣΤΕ ΤΟ ΠΡΟΓΡΑΜΜΑ ΣΑΣ ΣΕ ΑΡΧΕΙΟ ΜΕ ΟΝΟΜΑ hw3b.c

Πώς να παραδώσετε τη δουλειά σας Πριν παραδώσετε τα προγράµµατά σας, προσθέστε σε σχόλια στην αρχή του κάθε αρχείου C τα πλήρη ονόµατα και ΑΕΜ των µελών της οµάδας. Παρακαλούµε να γράφετε τα σχόλια ΜΟΝΟ µε λατινικούς χαρακτήρες. Κατασκευάστε ένα φάκελο µε όνοµα hw3_epwnumo1_aem1_epwnumo3_aem2 και αντιγράψτε µέσα σε αυτόν τα hw3a.c, hw3b.c, notesx_y.txt Πηγαίνετε στο φάκελο µέσα στον οποίο βρίσκεται το hw3_epwnumo1_aem1_epwnumo2_aem2 που κατασκευάσατε και γράψτε την παρακάτω εντολή: tar czvf hw3_epwnumo1_aem1_epwnumo2_aem2.tgz hw3_epwnumo1_aem1_epwnumo2_aem2 Στείλτε email: στη διεύθυνση ce120lab@gmail.com αντίγραφο (CC) στον άλλο µέλος της οµάδας σας θέµα (subject) CE120 hw3 και συνηµµένο αρχείο το hw3_epwnumo1_aem1_epwnumo2_aem2.tgz