Skip to content

Commit 2421951

Browse files
committed
Add past exams.
1 parent 2768d65 commit 2421951

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1815
-0
lines changed

Diff for: README.md

+4
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ TBD
100100
* [Προηγούμενα έτη](https://cgi.di.uoa.gr/~ip/)
101101
* [Σημειώσεις](/assets/pdf/K04.pdf) από τον καθηγητή [Παναγιώτη Σταματόπουλο](https://cgi.di.uoa.gr/~takis/)
102102

103+
## Προηγούμενα Διαγωνίσματα
104+
105+
# [Χειμερινή Εξεταστική 2023 (Online)](/exams/2023/fall/README.md)
106+
103107

104108
### Ευχαριστίες
105109

Diff for: exams/2023/fall/README.md

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
## Διαγωνίσματα
2+
3+
1. [ex0](/exams/2023/fall/ex0/README.md)
4+
1. [ex1](/exams/2023/fall/ex1/README.md)
5+
1. [ex2](/exams/2023/fall/ex2/README.md)
6+
1. [ex3](/exams/2023/fall/ex3/README.md)
7+
1. [ex4](/exams/2023/fall/ex4/README.md)
8+
1. [ex5](/exams/2023/fall/ex5/README.md)
9+
1. [ex6](/exams/2023/fall/ex6/README.md)
10+
1. [ex7](/exams/2023/fall/ex7/README.md)
11+
1. [ex8](/exams/2023/fall/ex8/README.md)
12+
1. [ex9](/exams/2023/fall/ex9/README.md)
13+
1. [ex10](/exams/2023/fall/ex10/README.md)
14+
1. [ex11](/exams/2023/fall/ex11/README.md)
15+
1. [ex12](/exams/2023/fall/ex12/README.md)
16+
1. [ex13](/exams/2023/fall/ex13/README.md)
17+
1. [ex14](/exams/2023/fall/ex14/README.md)
18+
1. [ex15](/exams/2023/fall/ex15/README.md)

Diff for: exams/2023/fall/ex0/README.md

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Τελική Εξέταση #0 - Valentine's Themed
2+
3+
Σημαντικό: φροντίζουμε τα προγράμματά μας αν είναι ευανάγνωστα, αποδοτικά (σε χώρο και χρόνο) και να έχουν έξοδο όμοια με τα παραδείγματα εκτέλεσης καθώς αυτό είναι μέρος της βαθμολόγησης. Για οποιαδήποτε είσοδο εκτός προδιαγραφών το πρόγραμμα πρέπει να τερματίζει με exit code 1 και αντίστοιχο μήνυμα σφάλματος.
4+
5+
6+
## 1. Ραβασάκι (25 Μονάδες)
7+
8+
### Πρόγραμμα: ravasaki.c
9+
10+
Γράψτε ένα πρόγραμμα που διαβάζει το κείμενο που δίνεται από την πρότυπη είσοδο (stdin) και το τυπώνει στην πρότυπη έξοδο (stdout) προσθέτοντας μια κόκκινη καρδιά στο τέλος κάθε γραμμής. Παράδειγμα εκτέλεσης:
11+
12+
![Παράδειγμα](./images/ravasaki.png)
13+
14+
## 2. Ταιριαστές Καρδιές (25 Μονάδες)
15+
16+
### Πρόγραμμα: hearts.c
17+
18+
Γράψτε ένα πρόγραμμα που για κάθε όρισμα από την γραμμή εντολών ελέγχει αν η συμβολοακολουθία του ορίσματος περιέχει μόνο *ταιριαστές* καρδιές. Οι ταιριαστές καρδιές ορίζονται ως εξής:
19+
20+
1. Μπορούν να περιέχουν μόνο χαρακτήρες '<' και '3'.
21+
1. Κάθε καρδιά που κλείνει ('3') πρέπει πρώτα να έχει ανοίξει ('<').
22+
1. Όλες οι καρδιές που άνοιξαν κλείνουν.
23+
24+
Παράδειγμα εκτέλεσης:
25+
26+
```bash
27+
$ gcc -o hearts hearts.c
28+
$ ./hearts '<3' '<.3>' '<<33' '<<<3' '<333' '<<33<3<<<<3<<33333'
29+
<3: yes
30+
<.3>: no
31+
<<33: yes
32+
<<<3: no
33+
<333: no
34+
<<33<3<<<<3<<33333: yes
35+
```
36+
37+
## 3. Καλύτερο Ταίριασμα (25 Μονάδες)
38+
39+
### Πρόγραμμα: bestmatch.c
40+
41+
Γράψτε ένα πρόγραμμα που διαβάζει ένα σύνολο από ονόματα ακολουθούμενα από έναν αριθμό που δηλώνει πόσο καλά μας ταιριάζει αυτό το άτομο και τυπώνει τα ονόματα από το μεγαλύτερο στο μικρότερο ταξινομημένα. Τα δεδομένα περιέχονται σε αρχείο που δίνεται ως πρώτο όρισμα. Το αρχείο θα περιέχει κάθε όνομα σε μια γραμμή της μορφής "όνομα,σκορ". Ένα παράδειγμα εκτέλεσης ακολουθεί:
42+
43+
```bash
44+
$ cat names.txt
45+
Alex,3.4
46+
Casey,9.1
47+
Jordan,2
48+
Taylor,5.3
49+
Morgan,1.7
50+
Riley Avery,6.16
51+
Jamie,0
52+
Quinn,-1.1
53+
Skyler,5.88
54+
$ gcc -o bestmatch bestmatch.c
55+
$ ./bestmatch names.txt
56+
Casey,9.1
57+
Riley Avery,6.16
58+
Skyler,5.88
59+
Taylor,5.3
60+
Alex,3.4
61+
Morgan,1.7
62+
Jordan,2
63+
Jamie,0
64+
Quinn,-1.1
65+
```
66+
67+
## 4. Αγαπήσιμοι Αριθμοί (25 Μονάδες)
68+
69+
### Πρόγραμμα: lovable.c
70+
71+
Γράψτε ένα πρόγραμμα που διαβάζει ένα εύρος αριθμών από την κονσόλα (το εύρος είναι κλειστό, δηλαδή περιέχει τα όρια) και τυπώνει όλους τους αγαπήσιμους (lovable) αριθμούς. Ένας αριθμός είναι lovable αν είναι τέλειος κύβος (δηλαδή ένας άλλος ακέραιος υψωμένος στην 3η δύναμη) και ταυτόχρονα παλινδρομικός (δηλαδή διαβάζεται το ίδιο από αριστερά προς τα δεξιά και από δεξιά προς τα αριστερά). Ένα παράδειγμα εκτέλεσης ακολουθεί:
72+
73+
```bash
74+
$ gcc -o lovable lovable.c -lm
75+
$ ./lovable 100000 100000000
76+
1030301
77+
1367631
78+
```
79+
80+
Ο 1030301 είναι lovable καθώς είναι παλινδρομικός και ταυτόχρονα τέλειος κύβος (= 101^3). Το πρόγραμμά σας πρέπει να βγάζει σωστά αποτελέσματα για όρια μέχρι 10^18.

Diff for: exams/2023/fall/ex0/images/ravasaki.png

117 KB
Loading

Diff for: exams/2023/fall/ex1/README.md

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Τελική Εξέταση #1 - Coreutils Themed
2+
3+
Σημαντικό: φροντίζουμε τα προγράμματά μας αν είναι ευανάγνωστα, αποδοτικά (σε χώρο και χρόνο) και να έχουν έξοδο όμοια με τα παραδείγματα εκτέλεσης καθώς αυτό είναι μέρος της βαθμολόγησης. Για οποιαδήποτε είσοδο εκτός προδιαγραφών το πρόγραμμα πρέπει να τερματίζει με exit code 1 και αντίστοιχο μήνυμα σφάλματος.
4+
5+
6+
## 1. Δεκαεξαδικοί (25 Μονάδες)
7+
8+
### Πρόγραμμα: hex.c
9+
10+
Γράψτε ένα πρόγραμμα που διαβάζει το κείμενο που δίνεται από την πρότυπη είσοδο (stdin) και τυπώνει τον κάθε χαρακτήρα στην πρότυπη έξοδο (stdout) σε δεκαεξαδική μορφή χωρίζοντάς το σε γραμμές. Σε κάθε γραμμή πρέπει να τυπώνονται μέχρι 16 χαρακτήρες σε δεκαεξαδική μορφή και πρέπει να υπάρχει ένας κενός χαρακτήρας (' ') ανάμεσα σε κάθε χαρακτήρα στην ίδια γραμμή. Παράδειγμα εκτέλεσης:
11+
12+
```
13+
$ cat domo.txt
14+
どうもありがと Mr. Roboto�
15+
You're wondering who I am (secret, secret, I've got a secret)
16+
Machine or mannequin? (Secret, secret, I've got a secret)
17+
$ gcc -o hex hex.c
18+
$ ./hex < domo.txt
19+
e3 81 a9 e3 81 86 e3 82 82 e3 81 82 e3 82 8a e3
20+
81 8c e3 81 a8 20 4d 72 2e 20 52 6f 62 6f 74 6f
21+
ff 0a 59 6f 75 27 72 65 20 77 6f 6e 64 65 72 69
22+
6e 67 20 77 68 6f 20 49 20 61 6d 20 28 73 65 63
23+
72 65 74 2c 20 73 65 63 72 65 74 2c 20 49 27 76
24+
65 20 67 6f 74 20 61 20 73 65 63 72 65 74 29 0a
25+
4d 61 63 68 69 6e 65 20 6f 72 20 6d 61 6e 6e 65
26+
71 75 69 6e 3f 20 28 53 65 63 72 65 74 2c 20 73
27+
65 63 72 65 74 2c 20 49 27 76 65 20 67 6f 74 20
28+
61 20 73 65 63 72 65 74 29 0a
29+
```
30+
31+
## 2. Εντοπισμός Διπλών Ορισμάτων (25 Μονάδες)
32+
33+
### Πρόγραμμα: duplicate.c
34+
35+
Γράψτε ένα πρόγραμμα που για κάθε όρισμα από την γραμμή εντολών που επαναλαμβάνεται δύο ή περισσότερες φορές τυπώνεται ως πολλαπλό ("dup") μία φορά στην πρότυπη έξοδο (stdout). Παράδειγμα εκτέλεσης ακολουθεί:
36+
37+
```bash
38+
$ gcc -o duplicate duplicate.c
39+
$ ./duplicate foo bar foo baz bank zonk bazinga foo zonk
40+
dup: foo
41+
dup: zonk
42+
```
43+
44+
## 3. Περιστροφή Πίνακα (25 Μονάδες)
45+
46+
### Πρόγραμμα: rotate.c
47+
48+
Γράψτε ένα πρόγραμμα που διαβάζει ένα πίνακα ακεραίων και τον περιστρέφει αντίστροφα από την φορά των δεικτών του ρολογιού. Τα δεδομένα περιέχονται σε αρχείο που δίνεται ως πρώτο όρισμα. Το αρχείο θα περιέχει τον αριθμό των γραμμών και τις στηλών του πίνακα και θα ακολουθούν τα στοιχεία του πίνακα. Παράδειγμα εκτέλεσης ακολουθεί:
49+
50+
```bash
51+
$ cat array.txt
52+
3 5
53+
2 9 8 3 2
54+
2 8 1 0 8
55+
7 1 2 4 3
56+
$ gcc -o rotate rotate.c
57+
$ ./rotate array.txt
58+
2 8 3
59+
3 0 4
60+
8 1 2
61+
9 8 1
62+
2 2 7
63+
```
64+
65+
## 4. Debugging (25 Μονάδες)
66+
67+
### Πρόγραμμα: broken.c
68+
69+
Το πρόγραμμα [broken.c](broken.c) δεν λειτουργεί για κάποιον λόγο - όταν το τρέχουμε κρασάρει. Βρείτε όποιο σφάλμα υπάρχει και διορθώστε το χωρίς να εισάγετε καινούρια σφάλματα στο πρόγραμμα. Παράδειγμα επιτυχούς εκτέλεσης ακολουθεί:
70+
71+
```bash
72+
$ gcc -o broken broken.c
73+
$ ./broken
74+
yesss! -> yee -> bruh -> NULL
75+
listdelete: 1
76+
yesss! -> yee -> NULL
77+
```
78+

Diff for: exams/2023/fall/ex1/array.txt

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
3 5
2+
2 9 8 3 2
3+
2 8 1 0 8
4+
7 1 2 4 3

Diff for: exams/2023/fall/ex1/broken.c

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
5+
typedef struct node {
6+
char value[128];
7+
struct node * next;
8+
} Elem;
9+
10+
int listdelete(char value[], Elem ** head) {
11+
Elem * tmp;
12+
13+
while (*head && strcmp((*head)->value, value)) {
14+
head = &((*head)->next);
15+
}
16+
17+
if (*head) {
18+
tmp=*head;
19+
*head = tmp->next;
20+
free(tmp);
21+
return 1;
22+
}
23+
return -1;
24+
}
25+
26+
int listadd(char value[], Elem ** head) {
27+
Elem * new = malloc(sizeof(Elem));
28+
if (new == NULL) {
29+
return 0;
30+
}
31+
Elem * tmp;
32+
tmp=*head;
33+
*head=new;
34+
new->next=tmp;
35+
strncpy(new->value, value, 127);
36+
return 1;
37+
}
38+
39+
void listprint(Elem * list) {
40+
while(list) {
41+
printf("%s -> ", list->value);
42+
list = list->next;
43+
}
44+
printf("NULL\n");
45+
}
46+
47+
int main() {
48+
49+
Elem elem1 = {"bruh", NULL};
50+
Elem * head = &elem1;
51+
52+
listadd("yee", &head);
53+
listadd("yesss!", &head);
54+
listprint(head);
55+
printf("listdelete: %d\n", listdelete("bruh", &head));
56+
listprint(head);
57+
return 0;
58+
}
59+

Diff for: exams/2023/fall/ex1/domo.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
どうもありがと Mr. Roboto�
2+
You're wondering who I am (secret, secret, I've got a secret)
3+
Machine or mannequin? (Secret, secret, I've got a secret)

Diff for: exams/2023/fall/ex10/README.md

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Τελική Εξέταση #10 - Pirate Themed
2+
3+
Σημαντικό: φροντίζουμε τα προγράμματά μας να είναι ευανάγνωστα, αποδοτικά (σε χώρο και χρόνο) και να έχουν έξοδο όμοια με τα παραδείγματα εκτέλεσης καθώς αυτό είναι μέρος της βαθμολόγησης. Για οποιαδήποτε είσοδο εκτός προδιαγραφών το πρόγραμμα πρέπει να τερματίζει με exit code 1 και αντίστοιχο μήνυμα σφάλματος.
4+
5+
## 1. Αφαίρεση Μη Λατινικών Χαρακτήρων (25 Μονάδες)
6+
7+
### Πρόγραμμα: bold.c
8+
9+
Γράψτε ένα πρόγραμμα το οποίο διαβάζει κείμενο από την πρότυπη είσοδο (stdin) και το τυπώνει στην πρότυπη έξοδο (stdout) με τους εξής περιορισμούς:
10+
1. Οι αλλαγές γραμμής πρέπει να διατηρούνται.
11+
1. Πρέπει να μετατρέψει κάθε μη λατινικό χαρακτήρα (A-Za-z) σε κενό (space) χαρακτήρα ' '.
12+
1. Η πρώτη λέξη σε κάθε γραμμή θέλουμε να φαίνεται **bold**.
13+
14+
Παράδειγμα εκτέλεσης ακολουθεί:
15+
16+
![bold substitution](images/bold.png)
17+
18+
## 2. Ασημένιο Κλάσμα (25 Μονάδες)
19+
20+
### Πρόγραμμα: silver.c
21+
22+
Ένας τρόπος να προσεγγίσουμε την τιμή του $\sqrt{2}$ είναι μέσω της παράστασης:
23+
24+
$$ 1 + \sqrt{2} = 2 + \frac{1}{2 + \frac{1}{2 + \frac{1}{2 + \cdots}}} $$
25+
26+
Όπου η προσθήκη του κάθε όρου $\frac{1}{2 + \cdots}$ βελτιώνει την προσέγγιση. Γράψτε ένα πρόγραμμα το οποίο παίρνει ως όρισμα έναν θετικό ακέραιο που αναπαριστά τον αριθμό των όρων $\frac{1}{2 + \cdots}$ που θέλουμε να χρησιμοποιηθούν και τυπώνει την προσέγγιση του $\sqrt{2}$ με 20 δεκαδικά ψηφία ακριβείας. Παραδείγματα εκτέλεσης ακολουθούν:
27+
28+
```
29+
$ ./silver 1
30+
sqrt(2) = 1.00000000000000000000
31+
$ ./silver 2
32+
sqrt(2) = 1.50000000000000000000
33+
$ ./silver 3
34+
sqrt(2) = 1.39999999999999991118
35+
$ ./silver 4
36+
sqrt(2) = 1.41666666666666651864
37+
$ ./silver 5
38+
sqrt(2) = 1.41379310344827580082
39+
$ ./silver 1000
40+
sqrt(2) = 1.41421356237309492343
41+
```
42+
43+
Για έναν όρο η δεξιά παράσταση είναι (2 + 0) -> sqrt(2) = 1, για 2 όρους η δεξιά παράσταση είναι (2 + 1 / 2) -> sqrt(2) = 1.5, κοκ.
44+
45+
## 3. Κρυμμένο Μήνυμα (25 Μονάδες)
46+
47+
### Πρόγραμμα: hidden.c
48+
49+
Γράψτε ένα πρόγραμμα που παίρνει ως όρισμα το όνομα ενός αρχείου που περιέχει ένα κείμενο με λέξεις που αποτελούνται από λατινικούς χαρακτήρες (a-zA-Z) και θετικούς ακεραίους που αντιστοιχούν στην θέση της κάθε λέξης μέσα στο κείμενο και τυπώνει αυτές τις λέξεις με την σειρά που δίνονται ως ορίσματα στο πρόγραμμα. Παραδείγματα εκτέλεσης ακολουθούν:
50+
51+
```
52+
$ gcc -o hidden hidden.c
53+
$ cat message.txt
54+
In the quiet glade, where whispers of the past weave,
55+
Beneath the vault of heaven, a secret to conceive.
56+
The oak, ancient and large, guards a mystery so deep,
57+
Within its shadowed roots, a treasure lies asleep.
58+
Hidden by time's embrace, under earth's tender keep,
59+
Near the tree, love's promise, forever to reap
60+
$ ./hidden message.txt 19 34 35 42 1 23 20 49
61+
The treasure lies under the large oak tree
62+
$ ./hidden message.txt 19 34 35 29
63+
The treasure lies Within
64+
```
65+
66+
Παρατηρούμε ότι η λέξη "The" τυπώνεται πρώτη καθώς είναι η 20η λέξη στο κείμενο, δηλαδή βρίσκεται στην θέση 19 και αυτός είναι ο πρώτος ακέραιος που δόθηκε ως όρισμα στην γραμμή εντολών μετά το αρχείο. Αντίστοιχα τυπώνονται και οι υπόλοιπες λέξεις.
67+
68+
## 4. Πλησιάζοντας στον Στόχο (25 Μονάδες)
69+
70+
### Πρόγραμμα: treasure.c
71+
72+
Γράψτε ένα πρόγραμμα το οποίο παίρνει ως ορίσματα από την γραμμή εντολών μια συντεταγμένη στόχο (goal) και στην συνέχεια ένα σύνολο άλλων συντεταγμένων (starting points) και τυπώνει όλες τις συντεταγμένες ταξινομημένες σε αύξουσα σειρά με βάση την απόστασή τους από τον στόχο. Όλοι οι αριθμοί κινητής υποδιαστολής θέλουμε να τυπώνονται με ακρίβεια με δύο δεκαδικών ψηφίων. Όλες οι συντεταγμένες είναι της μορφής x,y όπου x,y είναι αριθμοί κινητής υποδιαστολής. Η απόσταση δύο σημείων x1,y1 και x2,y2 δίνεται από την έκφραση:
73+
74+
$$ \sqrt{(x2 - x1)^2 + (y2 - y1)^2} $$
75+
76+
Παράδειγμα εκτέλεσης ακολουθεί:
77+
78+
```
79+
$ gcc -o treasure treasure.c -lm
80+
$ ./treasure 17,42 3.01,50.5 27.27,7 32,65.1 25,4 77,42.42 50,50 30.30,12
81+
1. Point 3.01,50.50 is 16.37 steps away from the goal
82+
2. Point 32.00,65.10 is 27.54 steps away from the goal
83+
3. Point 30.30,12.00 is 32.82 steps away from the goal
84+
4. Point 50.00,50.00 is 33.96 steps away from the goal
85+
5. Point 27.27,7.00 is 36.48 steps away from the goal
86+
6. Point 25.00,4.00 is 38.83 steps away from the goal
87+
7. Point 77.00,42.42 is 60.00 steps away from the goal
88+
```

Diff for: exams/2023/fall/ex10/images/bold.png

100 KB
Loading

Diff for: exams/2023/fall/ex10/island.txt

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Fifteen men on the Dead Man's Chest Yo-ho-ho,
2+
and a bottle of rum!
3+
Drink and the devil had done for the rest Yo-ho-ho,
4+
and a bottle of rum!

Diff for: exams/2023/fall/ex10/message.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
In the quiet glade, where whispers of the past weave,
2+
Beneath the vault of heaven, a secret to conceive.
3+
The oak, ancient and large, guards a mystery so deep,
4+
Within its shadowed roots, a treasure lies asleep.
5+
Hidden by time's embrace, under earth's tender keep,
6+
Near the tree, love's promise, forever to reap

0 commit comments

Comments
 (0)