Send a PR on GitHub

progintro @ dit


Τελική Εξέταση #1 - Coreutils Themed

Σημαντικό: φροντίζουμε τα προγράμματά μας αν είναι ευανάγνωστα, αποδοτικά (σε χώρο και χρόνο) και να έχουν έξοδο όμοια με τα παραδείγματα εκτέλεσης καθώς αυτό είναι μέρος της βαθμολόγησης. Για οποιαδήποτε είσοδο εκτός προδιαγραφών το πρόγραμμα πρέπει να τερματίζει με exit code 1 και αντίστοιχο μήνυμα σφάλματος.

1. Δεκαεξαδικοί (25 Μονάδες)

Πρόγραμμα: hex.c

Γράψτε ένα πρόγραμμα που διαβάζει το κείμενο που δίνεται από την πρότυπη είσοδο (stdin) και τυπώνει τον κάθε χαρακτήρα στην πρότυπη έξοδο (stdout) σε δεκαεξαδική μορφή χωρίζοντάς το σε γραμμές. Σε κάθε γραμμή πρέπει να τυπώνονται μέχρι 16 χαρακτήρες σε δεκαεξαδική μορφή και πρέπει να υπάρχει ένας κενός χαρακτήρας (‘ ‘) ανάμεσα σε κάθε χαρακτήρα στην ίδια γραμμή. Παράδειγμα εκτέλεσης:

$ cat domo.txt
どうもありがと Mr. Roboto�
You're wondering who I am (secret, secret, I've got a secret)
Machine or mannequin? (Secret, secret, I've got a secret)
$ gcc -o hex hex.c
$ ./hex < domo.txt
 e3 81 a9 e3 81 86 e3 82 82 e3 81 82 e3 82 8a e3
 81 8c e3 81 a8 20 4d 72 2e 20 52 6f 62 6f 74 6f
 ff 0a 59 6f 75 27 72 65 20 77 6f 6e 64 65 72 69
 6e 67 20 77 68 6f 20 49 20 61 6d 20 28 73 65 63
 72 65 74 2c 20 73 65 63 72 65 74 2c 20 49 27 76
 65 20 67 6f 74 20 61 20 73 65 63 72 65 74 29 0a
 4d 61 63 68 69 6e 65 20 6f 72 20 6d 61 6e 6e 65
 71 75 69 6e 3f 20 28 53 65 63 72 65 74 2c 20 73
 65 63 72 65 74 2c 20 49 27 76 65 20 67 6f 74 20
 61 20 73 65 63 72 65 74 29 0a

2. Εντοπισμός Διπλών Ορισμάτων (25 Μονάδες)

Πρόγραμμα: duplicate.c

Γράψτε ένα πρόγραμμα που για κάθε όρισμα από την γραμμή εντολών που επαναλαμβάνεται δύο ή περισσότερες φορές τυπώνεται ως πολλαπλό (“dup”) μία φορά στην πρότυπη έξοδο (stdout). Παράδειγμα εκτέλεσης ακολουθεί:

$ gcc -o duplicate duplicate.c
$ ./duplicate foo bar foo baz bank zonk bazinga foo zonk
dup: foo
dup: zonk

3. Περιστροφή Πίνακα (25 Μονάδες)

Πρόγραμμα: rotate.c

Γράψτε ένα πρόγραμμα που διαβάζει ένα πίνακα ακεραίων και τον περιστρέφει αντίστροφα από την φορά των δεικτών του ρολογιού. Τα δεδομένα περιέχονται σε αρχείο που δίνεται ως πρώτο όρισμα. Το αρχείο θα περιέχει τον αριθμό των γραμμών και τις στηλών του πίνακα και θα ακολουθούν τα στοιχεία του πίνακα. Παράδειγμα εκτέλεσης ακολουθεί:

$ cat array.txt
3 5
2 9 8 3 2
2 8 1 0 8
7 1 2 4 3
$ gcc -o rotate rotate.c
$ ./rotate array.txt
2 8 3
3 0 4
8 1 2
9 8 1
2 2 7

4. Debugging (25 Μονάδες)

Πρόγραμμα: broken.c

Το πρόγραμμα broken.c δεν λειτουργεί για κάποιον λόγο - όταν το τρέχουμε κρασάρει. Βρείτε όποιο σφάλμα υπάρχει και διορθώστε το χωρίς να εισάγετε καινούρια σφάλματα στο πρόγραμμα. Παράδειγμα επιτυχούς εκτέλεσης ακολουθεί:

$ gcc -o broken broken.c
$ ./broken
yesss! -> yee -> bruh -> NULL
listdelete: 1
yesss! -> yee -> NULL