Send a PR on GitHub

progintro @ dit


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

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

1. Αφαίρεση Μη Λατινικών Χαρακτήρων (25 Μονάδες)

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

Γράψτε ένα πρόγραμμα το οποίο διαβάζει κείμενο από την πρότυπη είσοδο (stdin) και το τυπώνει στην πρότυπη έξοδο (stdout) με τους εξής περιορισμούς:

  1. Οι αλλαγές γραμμής πρέπει να διατηρούνται.
  2. Πρέπει να μετατρέψει κάθε μη λατινικό χαρακτήρα (A-Za-z) σε κενό (space) χαρακτήρα ‘ ‘.
  3. Η πρώτη λέξη σε κάθε γραμμή θέλουμε να φαίνεται bold.

Παράδειγμα εκτέλεσης ακολουθεί:

bold substitution

2. Ασημένιο Κλάσμα (25 Μονάδες)

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

Ένας τρόπος να προσεγγίσουμε την τιμή του $\sqrt{2}$ είναι μέσω της παράστασης:

\[1 + \sqrt{2} = 2 + \frac{1}{2 + \frac{1}{2 + \frac{1}{2 + \cdots}}}\]

Όπου η προσθήκη του κάθε όρου $\frac{1}{2 + \cdots}$ βελτιώνει την προσέγγιση. Γράψτε ένα πρόγραμμα το οποίο παίρνει ως όρισμα έναν θετικό ακέραιο που αναπαριστά τον αριθμό των όρων $\frac{1}{2 + \cdots}$ που θέλουμε να χρησιμοποιηθούν και τυπώνει την προσέγγιση του $\sqrt{2}$ με 20 δεκαδικά ψηφία ακριβείας. Παραδείγματα εκτέλεσης ακολουθούν:

$ ./silver 1
sqrt(2) = 1.00000000000000000000
$ ./silver 2
sqrt(2) = 1.50000000000000000000
$ ./silver 3
sqrt(2) = 1.39999999999999991118
$ ./silver 4
sqrt(2) = 1.41666666666666651864
$ ./silver 5
sqrt(2) = 1.41379310344827580082
$ ./silver 1000
sqrt(2) = 1.41421356237309492343

Για έναν όρο η δεξιά παράσταση είναι (2 + 0) -> sqrt(2) = 1, για 2 όρους η δεξιά παράσταση είναι (2 + 1 / 2) -> sqrt(2) = 1.5, κοκ.

3. Κρυμμένο Μήνυμα (25 Μονάδες)

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

Γράψτε ένα πρόγραμμα που παίρνει ως όρισμα το όνομα ενός αρχείου που περιέχει ένα κείμενο με λέξεις που αποτελούνται από λατινικούς χαρακτήρες (a-zA-Z) και θετικούς ακεραίους που αντιστοιχούν στην θέση της κάθε λέξης μέσα στο κείμενο και τυπώνει αυτές τις λέξεις με την σειρά που δίνονται ως ορίσματα στο πρόγραμμα. Παραδείγματα εκτέλεσης ακολουθούν:

$ gcc -o hidden hidden.c
$ cat message.txt
In the quiet glade, where whispers of the past weave,
Beneath the vault of heaven, a secret to conceive.
The oak, ancient and large, guards a mystery so deep,
Within its shadowed roots, a treasure lies asleep.
Hidden by time's embrace, under earth's tender keep,
Near the tree, love's promise, forever to reap
$ ./hidden message.txt 19 34 35 42 1 23 20 49
The treasure lies under the large oak tree
$ ./hidden message.txt 19 34 35 29
The treasure lies Within

Παρατηρούμε ότι η λέξη “The” τυπώνεται πρώτη καθώς είναι η 20η λέξη στο κείμενο, δηλαδή βρίσκεται στην θέση 19 και αυτός είναι ο πρώτος ακέραιος που δόθηκε ως όρισμα στην γραμμή εντολών μετά το αρχείο. Αντίστοιχα τυπώνονται και οι υπόλοιπες λέξεις.

4. Πλησιάζοντας στον Στόχο (25 Μονάδες)

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

Γράψτε ένα πρόγραμμα το οποίο παίρνει ως ορίσματα από την γραμμή εντολών μια συντεταγμένη στόχο (goal) και στην συνέχεια ένα σύνολο άλλων συντεταγμένων (starting points) και τυπώνει όλες τις συντεταγμένες ταξινομημένες σε αύξουσα σειρά με βάση την απόστασή τους από τον στόχο. Όλοι οι αριθμοί κινητής υποδιαστολής θέλουμε να τυπώνονται με ακρίβεια με δύο δεκαδικών ψηφίων. Όλες οι συντεταγμένες είναι της μορφής x,y όπου x,y είναι αριθμοί κινητής υποδιαστολής. Η απόσταση δύο σημείων x1,y1 και x2,y2 δίνεται από την έκφραση:

\[\sqrt{(x2 - x1)^2 + (y2 - y1)^2}\]

Παράδειγμα εκτέλεσης ακολουθεί:

$ gcc -o treasure treasure.c -lm
$ ./treasure 17,42 3.01,50.5 27.27,7 32,65.1 25,4 77,42.42 50,50 30.30,12
1. Point 3.01,50.50 is 16.37 steps away from the goal
2. Point 32.00,65.10 is 27.54 steps away from the goal
3. Point 30.30,12.00 is 32.82 steps away from the goal
4. Point 50.00,50.00 is 33.96 steps away from the goal
5. Point 27.27,7.00 is 36.48 steps away from the goal
6. Point 25.00,4.00 is 38.83 steps away from the goal
7. Point 77.00,42.42 is 60.00 steps away from the goal