Άσκηση 6

Download Report

Transcript Άσκηση 6

ΗΥ-100: Εισαγωγή στην Επιστήμη Υπολογιστών
6η σειρά ασκήσεων
Οδηγίες
Για τη μεταγλώττιση των προγραμμάτων που ζητούνται θα πρέπει να χρησιμοποιήσετε το gcc
με τις παρακάτω παραμέτρους:
gcc -ansi -pedantic -Werror
Για ευκολία, δημιουργήθηκε στα μηχανήματα του εργαστηρίου το script gcc100 που καλεί τον
gcc με αυτές τις παραμέτρους.
Για να παραδώσετε τα αρχεία με τις λύσεις στα ερωτήματα της άσκησης, ακολουθήστε
τις οδηγίες που βρίσκονται στη σελίδα http://www.csd.uoc.gr/~hy100/submit-howto-gr.
html.
1
Βάση δεδομένων
Γράψτε ένα πρόγραμμα (hw6a.c) που επεξεργάζεται μια απλή βάση δεδομένων με επαφές που
βρίσκεται στο αρχείο contacts.dat. Το δυαδικό αρχείο contacts.dat περιγράφει την κάθε
ταινία με μια εγγραφή της μορφής:
• Ένας ακέραιος (int) που περιέχει τον αριθμό χαρακτήρων του ονοματεπώνυμου (μαζί με
το ’\0’).
• Το ονοματεπώνυμο με μήκος τόσους χαρακτήρες όσο ο προηγούμενος ακέραιος αριθμός.
• Ένας ακέραιος (int) που περιέχει τον αριθμό τηλεφώνου (μέχρι 6 ψηφία).
Το αρχείο contacts.dat πρέπει να περιέχει εγγραφές αυτής της μορφής, και μόνο.
Το πρόγραμμα πρέπει αρχίζοντας να ανοίγει το δυαδικό αρχείο contacts.dat για ανάγνωση,
να διαβάζει όλες τις εγγραφές του και να δημιουργεί μια συνδεδεμένη λίστα με τα δεδομένα
των επαφών, μέχρι να συναντήσει το τέλος του αρχείου, οπότε και θα κλείνει το αρχείο.
Στη συνέχεια το πρόγραμμα θα εκτελεί μια απο τις παρακάτω λειτουργίες ανάλογα με τις
παραμέτρους της γραμμής εντολών που μπορεί να είναι:
• --reset : Σβήνει όλες τις καταχωρήσεις στο αρχείο contacts.dat.
• --insert <ονοματεπώνυμο> <τηλέφωνο> : Προσθέτει μια νέα καταχώρηση στο αρχείο
contacts.dat.
• --delete <ονοματεπώνυμο> : Αφαιρεί μια καταχώρηση από το αρχείο contacts.dat.
• --list-all : Τυπώνει όλες τις καταχωρημένες επαφές από το αρχείο contacts.dat
(ονοματεπώνυμο και τηλέφωνο).
• --search <όνομα ή επώνυμο> : Τυπώνει όλες τις καταχωρημένες επαφές από το αρχείο
contacts.dat που περιέχουν το δοθέν όνομα ή επώνυμο.
• --update <ονοματεπώνυμο> <τηλέφωνο> : Ενημερώνει το τηλέφωνο που αντιστοιχεί
στο δοθέν ονοματεπώνυμο.
Μετά την εκτέλεση της καθορισμένης λειτουργίας, το πρόγραμμα θα πρέπει να ανοίγει το
δυαδικό αρχείο contacts.dat για εγγραφή και να γράφει (με εγγραφές της ίδιας μορφής όπως
παραπάνω) τις επαφές.
Bonus: Για επιπλέον βαθμό στην άσκηση υλοποιήστε τη λειτουργία ταξινόμησης με την
ακόλουθη παράμετρο στη γραμμή εντολών:
• --sort : Ταξινομεί τις καταχωρημένες επαφές από το αρχείο contacts.dat με αλφαβητική
σειρά.
2
Διαμόρφωση κειμένου
Γράψτε ένα πρόγραμμα (hw6b.c) που παίρνει 2 παραμέτρους από τη γραμμή εντολών:
1. το όνομα ενός αρχείου κειμένου, και
2. τον αριθμό των χαρακτήρων ανά γραμμή.
Το πρόγραμμα πρέπει να ανοίγει το δεδομένο αρχείο, να διαβάζει το κείμενο, και να το τυπώνει
στην κύρια έξοδο στοιχισμένο δεξιά, σε γραμμές μήκους . Η τελευταία λέξη κάθε γραμμής
πρέπει να τελειώνει στο τελευταίο (-ιοστό) γράμμα της γραμμής, δηλαδή να μην υπάρχουν
κενά μετά την τελευταία λέξη κάθε γραμμής. Οι λέξεις πρέπει να χωρίζονται μεταξύ τους
με ένα κενό και οι προτάσεις με κενή γραμμή. Για κάθε λέξη της εισόδου, το πρόγραμμα
πρέπει να υπολογίζει αν χωράει η λέξη στην τρέχουσα γραμμή και αν ναι, να την προσθέτει.
Αν η επόμενη λέξη δεν χωράει στην τρέχουσα γραμμή πρέπει να μπεί σε νέα γραμμή. Τότε το
πρόγραμμα πρέπει να “γεμίσει” την αρχή της γραμμής με όσα κενά χρειάζονται για να πάρει
ακριβώς χαρακτήρες, και να την τυπώσει στην κύρια έξοδο.
Παράδειγμα χρήσης Έστω το αρχείο monologue.txt που περιέχει το κείμενο:
As you know, I’m quite keen of comic books, especially the
ones about superheroes. I find the whole mythology surrounding
superheroes fascinating. Take my favorite superhero; Superman, not a
great comic book, not particularly well-drawn, but the mythology;
the mythology is not only great, it’s unique.
Now, the staple of the superhero mythology is;
there is the superhero and there is the alter ego.
Batman is actually Bruce Wayne, Spiderman is actually Peter Parker;
when that character wakes up in the morning, he’s Peter Parker.
He has to put on a costume to become Spiderman and it is in that
characteristic, Superman stands alone.
Τότε η εντολή ./hw6b monologue.txt 60 θα πρέπει να παράγει την έξοδο:
As you know, I’m quite keen of comic books, especially the
ones about superheroes.
I find the whole mythology surrounding superheroes
fascinating.
Take my favorite superhero; Superman, not a great comic
book, not particularly well-drawn, but the mythology; the
mythology is not only great, it’s unique.
Now, the staple of the superhero mythology is; there is the
superhero and there is the alter ego.
Batman is actually Bruce Wayne, Spiderman is actually Peter
Parker; when that character wakes up in the morning, he’s
Peter Parker.
He has to put on a costume to become Spiderman and it is in
that characteristic, Superman stands alone.