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

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

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

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

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

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

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

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

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

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

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

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

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

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

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

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2)

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

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

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

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

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

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

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

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

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

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

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

Φροντιστήριο 4 Σκελετοί Λύσεων

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

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

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

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

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

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου

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

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

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

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

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

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

Θεωρητικό Μέρος. 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); } }

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

Φροντιστήριο 4 Σκελετοί Λύσεων

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

FAIL PASS PASS οριακά

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

Διδάσκων: Παναγιώτης Ανδρέου

Εργαστηριακή Άσκηση 1

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

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

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

Αναδρομή. ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 6. Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

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

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΑΠΡΙΛΙΟΣ 2019 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

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

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

ΦΡΟΝΤΙΣΤΗΡΙΑ ΠΡΟΟΔΟΣ

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΑΠΡΙΛΙΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

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

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

γραπτή εξέταση στo μάθημα ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ' ΛΥΚΕΙΟΥ

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

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

Transcript:

Τομέας Υλικού και Αρχιτεκτονικής Υπολογιστών ΗΥ134 - Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 Εργαστήριο 5 Εαρινό Εξάμηνο 2012-2013 Στό χόι τόυ εργαστηρι όυ Χρήση στοίβας Αναδρομή Δομές δεδομένων Δυναμική δέσμευση μνήμης Σκοπός της 5 ης εργαστηριακής άσκησης είναι να εξοικειωθείτε με την χρήση της στοίβας. Αυτό θα σας επιτρέψει να υλοποιείτε καλύτερα συναρτήσεις οι οποίες θα μπορούν να καλέσουν με την σειρά τους άλλες συναρτήσεις ή ακόμα και τον εαυτό τους οπότε και λέγονται αναδρομικές. Ανατρέξτε στα παραδείγματα που κάνατε στην τάξη πάνω στην αναδρομή. Δόμε ς Δεδόμε νων Μία δομή δεδομένων είναι μια συλλογή δεδομένων με κάποιες ιδιότητες η οποία προσφέρει εύκολη πρόσβαση σε αυτά τα δεδομένα. Έχουμε δει ως τώρα μία στατική δομή δεδομένων, τον πίνακα. Τι κάνουμε όμως στην περίπτωση που θέλουμε να αποθηκεύουμε ένα συνεχώς μεταβαλλόμενο αριθμό από δεδομένα; Είναι δομές δεδομένων που μπορούν να αυξομειώνουν το μέγεθός τους, δηλαδή να αναπτύσσονται και να συρρικνώνονται στο χρόνο εκτέλεσης. Σε αυτό το εργαστήριο θα δούμε μία σημαντική δομή δεδομένων: την διασυνδεδεμένη λίστα Μία διασυνδεδεμένη λίστα είναι μια γραμμική συλλογή δομών, που ονομάζονται κόμβοι, και συνδέονται με δείκτες. Μία συνδεδεμένη λίστα προσπελαύνεται μέσω ενός δείκτη στον πρώτο κόμβο της λίστας (κεφαλή - head). Κατά σύμβαση, ο δείκτης σύνδεσης στον τελευταίο κόμβο της λίστας έχει μηδενική τιμή (NULL) για να σηματοδοτήσει το τέλος της λίστας. [1]

Κεφαλή - Ηead Για την περιγραφή της άσκησης θα χρησιμοποιήσουμε την εξής αναπαράσταση κόμβων: Κόμβος λίστας: typedef struct node { int data; struct node *next; } nodel; Δυναμικη Εκχωρηση Μνη μης (Dynamic Memory Allocation) Η άσκηση 2 θα ζητάει και θα παίρνει κόμβους από το λειτουργικό σύστημα «δυναμικά», την ώρα που τρέχει (σε run-time). Για το σκοπό αυτό θα χρησιμοποιήστε την κλήση συστήματος (system call) «sbrk» (set break). Η κλήση αυτή «σπρώχνει» πιο πέρα (προς αύξουσες διευθύνσεις μνήμης) το σημείο «break», το όριο πριν από το οποίο οι διευθύνσεις μνήμης που γεννά το πρόγραμμα είναι νόμιμες, ενώ μετά από το οποίο (και μέχρι την αρχή της στοίβας) οι διευθύνσεις είναι παράνομες. Η κλήση συστήματος «sbrk» (syscall 9) παίρνει σαν παράμετρο το πλήθος των νέων bytes που επιθυμείτε στον καταχωρητή $a0. Μετά την επιστροφή της κλήσης, ο καταχωρητής $v0 περιέχει την διεύθυνση του νέου block μνήμης, του ζητηθέντος μεγέθους, που το σύστημα δίνει στο πρόγραμμά σας (έναν pointer). Σε περίπτωση που η διεύθυνση είναι μηδενική τότε έχει γεμίσει όλη η μνήμη και σε τέτοια περίπτωση το πρόγραμμά σας θα πρέπει να τερματίσει. Για το επόμενο εργαστήριο έχετε να υλοποιήσετε τις 2 παρακάτω εργαστηριακές ασκήσεις. Την ώρα του εργαστηρίου θα εξετασθείτε προφορικά πάνω στους κώδικες που θα παραδώσετε. Άσκηση 1- Αναδρόμη (5 μόνα δες) Η ρωμαϊκή αρίθμηση χρησιμοποιεί τα παρακάτω ψηφία: M = 1000 D = 500 C = 100 L = 50 [2]

X = 10 V = 5 I = 1 Σε γενικές γραμμές, τα ρωμαϊκά ψηφία είναι γραμμένα σε φθίνουσα σειρά από αριστερά προς τα δεξιά, και προστίθενται διαδοχικά, για παράδειγμα MMVI (=2006) ερμηνεύεται ως 1000 + 1000 + 5 + 1. Ορισμένοι συνδυασμοί όμως τηρούν την αφαιρετική αρχή, η οποία ορίζει ότι όταν ένα σύμβολο μικρότερης αξίας προηγείται ένα σύμβολο μεγαλύτερης αξίας, η μικρότερη τιμή αφαιρείται από τη μεγαλύτερη τιμή, και το αποτέλεσμα προστίθεται στο σύνολο. Για παράδειγμα, MCMXLIV (=1944), τα σύμβολα C, X και Ι προηγούνται ένα σύμβολο μεγαλύτερης αξίας, και το αποτέλεσμα ερμηνεύεται ως εξής: 1000 + (1000-100) + (50-10) + (5-1). Να γραφτεί πρόγραμμα το οποίο θα διαβάζει από το πληκτρολόγιο μία συμβολοσειρά και θα καλέσει ανάλογα τις δύο παρακάτω αναδρομικές συναρτήσεις: α) (1 μονάδα) Αναδρομική συνάρτηση int check_roman(char *s) Η συνάρτηση αυτή επιστρέφει 1 όταν η συμβολοσειρά αποτελείται μόνο από ρωμαϊκά ψηφία, αλλιώς επιστρέφει 0. Μπορείτε να θεωρήσετε ότι δεχόμαστε μόνο τα κεφαλαία αντίστοιχα γράμματα: DCXI επιστρέφει 1, dcχi επιστρέφει 0, dcxi επιστρέφει 0. β) (4 μονάδες) Αναδρομική συνάρτηση int roman_to_decimal(char *s) Η συνάρτηση αυτή δέχεται μία συμβολοσειρά που αποτελείται μόνο από ρωμαϊκά ψηφία (δηλαδή η main θα την καλέσει μόνο εφόσον έχει επιστρέψει 1 η συνάρτηση check_roman). Θα υπολογίσει τον αντίστοιχο δεκαδικό αριθμό και θα τον επιστρέψει. Μπορείτε να θεωρήσετε ότι η συμβολοσειρά που θα δοθεί τηρεί τους κανονισμούς της αναπαράστασης ρωμαϊκών αριθμών και είναι έγκυρο αριθμό. Στην συνέχεια η main θα εκτυπώσει στην οθόνη το αποτέλεσμα της roman_to_decimal εφόσον η check_roman επέστρεψε 1, αλλιώς θα εμφανίσει [3]

κατάλληλο μήνυμα λάθους στην οθόνη και θα διαβάσει νέα συμβολοσειρά από το πληκτρολόγιο μέχρι που να δοθεί έγκυρη συμβολοσειρά. ΠΡΟΣΟΧΗ: Όταν διαβάζετε μία συμβολοσειρά από το πληκτρολόγιο, διαβάζεται και το \n όταν πατάτε enter. Μπορείτε να υλοποιήσετε μία βοηθητική συνάρτηση που θα αντικαταστήσει αυτό το \n με το \0 για να είναι κανονικό NULL-terminated string, και να μην έχετε να ασχοληθείτε με το newline. Επίσης σας συνιστούμε πρώτα να αναπτύξετε τις αναδρομικές συναρτήσεις σε ψευδοκώδικα ή σε κάποια γλώσσα τύπου C. Θα σας είναι πολύ πιο εύκολο αργότερα να μεταφέρετε τον κώδικα σε assembly. ΠΡΟΣΟΧΗ: Λύσεις που δεν χρησιμοποιούν αναδρομή ΔΕΝ θα γίνουν δεκτές! Άσκηση 2 Δυναμικη εκχωρηση μνη μης (5 μόνα δες) Στην δεύτερη άσκηση θα χρησιμοποιήσουμε μία δομή δεδομένων που θα αποτελεί ένα κόμβο μιας διασυνδεδεμένης λίστας (linked list). Κάθε κόμβος θα αποτελείται από δύο λέξεις (των 32 bits καθεμία): έναν ακέραιο «data» που θα περιέχει την «πληροφορία χρήστη», κι έναν δείκτη σύνδεσης (pointer) «next» που θα περιέχει τη διεύθυνση του επόμενου κόμβου στη λίστα. Στον τελευταίο κόμβο της λίστας, next=0. Τα δύο στοιχεία (λέξεις) του κόμβου μας θα βρίσκονται σε διαδοχικές θέσεις της μνήμης. Επομένως, κάθε κόμβος θα έχει μέγεθος 2 x 4 = 8 bytes. Διεύθυνση ενός κόμβου είναι η διεύθυνση του πρώτου στοιχείου του, δηλαδή του στοιχείου με «μηδενικό offset», που για μας είναι το «data». α) (0.5 μονάδες) Να γραφεί μία συνάρτηση nodel* insertelement(nodel *head, int data) όπου head είναι δείκτη στην αρχή της διασυνδεδεμένης λίστας και data είναι ο ακέραιος που θέλουμε να εισάγουμε στην λίστα. Η λίστα πρέπει να είναι ταξινομημένη κατά αύξουσα σειρά με βάση την τιμή του data. Η συνάρτηση επιστρέφει την κεφαλή της λίστας. Η main θα διαβάζει επαναληπτικά από το πληκτρολόγιο θετικούς αριθμούς (> 0) και θα τα εισάγει στην λίστα καλώντας την συνάρτηση insertelement. Ο χρήστης θα εισάγει τα δεδομένα με αύξουσα σειρά από την κονσόλα. Μόλις δοθεί το 0, τότε η main σταματάει να ζητάει στοιχεία και εκτυπώνει την λίστα (ερώτημα γ). Προσοχή: Η συνάρτηση πρέπει να ελέγχει την τιμή που επιστρέφει η κλήση συστήματος για την δυναμική δέσμευση μνήμης. Σε περίπτωση που αυτή είναι μηδέν, τότε εκτυπώνει κατάλληλο μήνυμα λάθους και το πρόγραμμα τερματίζει. Να προσέχετε τις ειδικές περιπτώσεις όπως την εισαγωγή σε κενή λίστα. β) (4 μονάδες) Να δημιουργηθεί μια συνάρτηση nodel * mergelists(nodel *head1, nodel *head2) που θα κάνει συγχώνευση των στοιχείων δύο ταξινομημένων λιστών σε μία ταξινομημένη λίστα. Όπου head1 είναι ο δείκτης στην αρχή της πρώτης διασυνδεδεμένης λίστας, και head2 είναι ο δείκτης στην αρχή της δεύτερης διασυνδεδεμένης λίστας. Η συνάρτηση επιστρέφει το head της νέας ταξινομημένης [4]

λίστας που περιέχει τα στοιχεία των δύο λιστών που περάσαμε ως ορίσματα συγχωνευμένα. Παράδειγμα συγχώνευσης λιστών: 1 η λίστα : 1 -> 3 -> 4 -> 6 -> 8 2 η λίστα: 2-> 3 -> 5 -> 10 Τελική λίστα: 1 -> 2 ->3 -> 3 -> 4 -> 5->6 ->8 ->10 γ) (0.5 μονάδες) Να γραφεί μία συνάρτηση void printlist (nodel *head) όπου head είναι δείκτης στην αρχή της διασυνδεδεμένης λίστας, η οποία θα εκτυπώνει το περιεχόμενο της λίστας στην οθόνη ως εξής: List: (1 2 2 3 6 12 15) To πρόγραμμα θα δημιουργεί αρχικά δύο ταξινομημένες λίστες, χρησιμοποιώντας την συνάρτηση insertelement για εισαγωγή στοιχείων στις λίστες. Μετά πραγματοποιείται η συγχώνευση των δύο λιστών με χρήση της συνάρτησης mergelists. Τέλος η main θα καλέσει την συνάρτηση printlist μόλις τελειώσει η διαδικασία συγχώνευσης των λιστών για να εκτυπώσει τη συγχωνευμένη λίστα. Σημει ωση Μία διευκρίνηση για την άσκηση αναδρομής του Lab5. Αναδρομή είναι ο ορισμός μίας συνάρτησης F χρησιμοποιώντας πάλι την ίδια συνάρτηση με διαφορετικές όμως παραμέτρους. Για παράδειγμα ο ορισμός του παραγοντικού ως F(n) = n*f(n-1), n>1 και F(0)=0 είναι μια αναδρομική σχέση, ενώ ο ορισμός F(n) = 1*2* *(n-1)*n, δεν είναι αναδρομική σχέση. Συνεπώς, στις ασκήσεις του Lab5 οι σωστές αναδρομικές λύσεις θα πρέπει να καλούν την ίδια συνάρτηση με διαφορετικές όμως τιμές στις παραμέτρους $a0, $a1 κοκ. για κάθε κλήση της F κατά την διάρκεια εκτέλεσης του προγράμματος. Λύσεις που δεν βασίζονται σε αυτήν την αρχή και που απλά κάνουν χρήση της εντολής κλήσης jal F σαν ένα απλό goto δεν θα γίνονται δεκτές. Είναι σημαντικό η υλοποίηση των ασκήσεων να γίνει με κλήση συναρτήσεων ακριβώς όπως περιγράφει η εκφώνηση. Κάθε συνάρτηση πρέπει να εξασφαλίζει ότι οι λεγόμενοι Saved Temporary καταχωρητές διατηρούν το περιεχόμενο που είχαν πριν την κλήση της. Μην κάνετε άσκοπα χρήση της στοίβας. Η χωρίς όρια δέσμευση περιττής μνήμης αποτελεί προγραμματιστικό λάθος. Θα πρέπει να στέλνετε με email τις λύσεις των εργαστηριακών ασκήσεων σας στους διδάσκοντες στο ce134lab@gmail.com. [5]

To email σας θα πρέπει να περιέχει ως attachment ένα zip file με τον κώδικα σας. Κάθε διαφορετική άσκηση στην εκφώνηση θα βρίσκεται και σε διαφορετικό asm file. Το όνομα των asm files θα ΠΡΕΠΕΙ να αρχίζει με το ΑΕΜ σας. Για παράδειγμα, τo lab2.zip θα περιέχει 3 asm files, ένα για κάθε μία από τις ασκήσεις του lab2, με ονόματα 999_lab2a.asm, 999_lab2b.asm, 999_lab2c.asm για τον φοιτητή με ΑΕΜ 999. Το email σας θα έχει Subject: CE134, lab N, Section Χ (N o αριθμός του lab, N=2..., και X=1 έως 7). Το email σας θα έχει body: το όνομα σας και το AEM σας. Θα πρέπει να στέλνετε το email σας πριν βγείτε από την εξέταση του εργαστηρίου. [6]