Τμήμα
Πληροφοριακών
και Επικοινωνιακών
Συστημάτων
Σχεδιασμός και Υλοποίηση Λογισμικού
Διδάσκων: Διομήδης Σπινέλλης | Εξεταστική περίοδος
Φεβρουαρίου 1999 |
Θέμα 1ο: (2 βαθμοί)
Γράψτε
σε C μια συνάρτηση
που να δέχεται
ως όρισμα
τρεις διαφορετικούς
δείκτες σε
ακεραίους
και μεταθέτει
κυκλικά δεξιόστροφα
τις τιμές
τους. Γράψτε
ένα πρόγραμμα
για τον έλεγχο
της λειτουργίας
της συνάρτησης
αυτής.
Θέμα 2ο: (2 βαθμοί)
Σχεδιάστε
το διάγραμμα
ροής δεδομένων
για μια ταμιακή
μηχανή. Να
λάβετε υπόψη
σας ότι οι
μηχανές αυτές
διαθέτουν
"φορολογική
μνήμη" στην
οποία αποθηκεύονται
τα στοιχεία
των συναλλαγών.
Θέμα 3ο: (3 βαθμοί)
Γράψτε
σε C ένα πρόγραμμα
το οποίο να
δέχεται για
είσοδο τις
συντεταγμένες
(x,y) 100 σημείων
ως αριθμούς
κινητής υποδιαστολής.
Στο τέλος, το
πρόγραμμα
πρέπει να τυπώνει
για κάθε ένα
από τα σημεία
τη θέση του
(x, y) καθώς
και την απόστασή
του από την
αρχή των αξόνων
(0,0). Οι συντεταγμένες
κάθε σημείου
πρέπει να φυλάσσονται
σε δομή (structure). Η
συνάρτηση
της C για την
τετραγωνική
ρίζα (sqrt) ορίζεται
στην επικεφαλίδα
math.h.
Θέμα 4ο: (3 βαθμοί)
Ο τελικός
βαθμός ενός
μαθήματος
είναι κατά
20\% ο βαθμός των
ασκήσεων
και κατά 80\% ο
βαθμός των
εξετάσεων
όταν και οι
δύο βαθμοί
είναι πάνω
από τη βάση,
αλλιώς είναι
ο κατώτερος
από τους δύο.
Σας ζητείται
να υλοποιήσετε
μια εφαρμογή
η οποία διαβάζει
συνέχεια
ζεύγη βαθμών
ασκήσεων
και εξετάσεων
και τυπώνει
λεκτικά (π.χ.
"δέκα") τον
ακέραιο τελικό
βαθμό. Όταν
εισαχθεί το
ζεύγος (-1, -1) η
εφαρμογή τυπώνει
λεκτικά τον
ακέραιο μέσο
όρο των τελικών
βαθμών και
τερματίζει
τη λειτουργία
της. Σχεδιάστε
το διάγραμμα
δομής και γράψτε
σε C το αντίστοιχο
πρόγραμμα.
Διάρκεια εξέτασης 2,5 ώρες | Καλή επιτυχία! |
#include <stdio.h> /* * Rotate variable values clockwise */ void rotate3(int *a, int *b, int *c) { int tmp; tmp = *c; *c = *b; *b = *a; *a = tmp; } main() { int v1, v2, v3; v1 = 1; v2 = 2; v3 = 3; rotate3(&v1, &v2, &v3); printf("Expect 3 1 2: [%d %d %d]\n", v1, v2, v3); }
#include <stdio.h> #include <math.h> /* * Return x squared */ double sqr(double x) { return (x * x); } main() { struct s_point { double x, y; /* Coordinates */ } points[100]; int i; for (i = 0; i < 100; i++) scanf("%lg %lg", &points[i].x, &points[i].y); for (i = 0; i < 100; i++) { printf("x=%lg y=%lg ", points[i].x, points[i].y); printf("d=%lg\n", sqrt(sqr(points[i].x) + sqr(points[i].y))); } }
#include <stdio.h> /* * Print a number 0-10 as a word */ void print_grade(int g) { switch (g) { case 0: printf("μηδέν\n"); break; case 1: printf("ένα\n"); /* ... */ case 10: printf("δέκα\n"); break; } } main() { int exercise, exam, grade; int count, sum; count = sum = 0; for (;;) { scanf("%d %d", &exercise, &exam); if (exercise == -1 && exam == -1) break; if (exercise >= 5 && exam >= 5) grade = 0.8 * exercise + 0.2 * grade; else if (exercise < exam) grade = exercise; else grade = exam; print_grade(grade); count++; sum = sum + grade; } printf("M.O. = "); print_grade(sum / grade); }
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ
Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων
Σχεδιασμός και Υλοποίηση Λογισμικού Διδάσκων: Διομήδης Σπινέλλης |
Εξεταστική περίοδος Σεπτεμβρίου 1999 |
Θέμα 1ο: (2.5 βαθμοί)
Γράψτε σε C τη συνάρτηση strrev που δέχεται ως όρισμα ένα δείκτη σε χαρακτήρες τερματισμένους με Σ\0Τ (συμβολοσειρά) και αντιστρέφει τη σειρά των χαρακτήρων της συμβολοσειράς. Αν για παράδειγμα η συμβολοσειρά πριν την κλήση τής strrev είναι "live" μετά την κλήση της πρέπει να είναι "evil". Γράψτε ένα απλό πρόγραμμα για τον έλεγχο της λειτουργίας της συνάρτησης αυτής.
Θέμα 2ο: (2.5 βαθμοί)
Προσδιορίστε, σε όχι περισσότερο από μια σελίδα, τις απαιτήσεις λογισμικού για ένα αυτόματα μηχάνημα τραπεζικών συναλλαγών.
Θέμα 3ο: (2.5 βαθμοί)
Να γράψετε ένα πρόγραμμα σε C που να διαβάζει χαρακτήρες από την είσοδό του μέχρι να τερματιστεί το αρχείο εισόδου. Στο τέλος το πρόγραμμα πρέπει να τυπώνει έναν πίνακα ο οποίος για κάθε χαρακτήρα που περιέχεται στο αρχείο θα εμφανίζει το χαρακτήρα αυτό καθώς και το ποσοστό εμφάνισής του σε σχέση με τον αριθμό των χαρακτήρων του αρχείου. Παράδειγμα:
a 12.2\%
e 9.3\%
k 7.3\%
Θέμα 4ο: (2.5 βαθμοί)
Ο παρακάτω κώδικας ορίζει έναν πίνακα αντιστοιχίας ανάμεσα σε χαρακτήρες του λατινικού αλφαβήτου και τον αντίστοιχο κώδικα Morse:
struct s_morse { char c; /* Character code */ char *morse; /* Morse code */ } morse_table[] = { 'A', ".-", 'B', "-...", 'C', "-.-.", /* [...] complete table follows */ };
Να γράψετε ένα πρόγραμμα σε C που να διαβάζει χαρακτήρες από την είσοδό του μέχρι να τερματιστεί το αρχείο εισόδου. Για κάθε χαρακτήρα να τυπώνει (με τη χρήση του morse_table) τον αντίστοιχο κώδικα Morse.
Διάρκεια εξέτασης 2,5 ώρες |
Καλή επιτυχία! |
#include <stdio.h> struct s_morse { char c; char *morse; } morsetable[] = { 'A', ".-", 'B', "-...", 'C', "-.-.", }; main() { int i, c; while ((c = getchar()) != EOF) { for (i = 0; i < sizeof(morsetable) / sizeof(struct s_morse); i++) if (c == morsetable[i].c) printf("%s\n", morsetable[i].morse); } }
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ
Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων
Σχεδιασμός και Υλοποίηση Λογισμικού Διδάσκων: Επικ. Καθηγητής Διομήδης Σπινέλλης |
Πρόοδος Νοεμβρίου 1999 |
Θέμα 1ο: (5 βαθμοί)
Γράψτε σε C ένα πρόγραμμα που διαβάζει από την είσοδό του ακέραιους βαθμούς από το 0 μέχρι το 10. Αφού διαβάσει ένα βαθμό να τυπώνει στην οθόνη του "Περνάει" αν ο βαθμός είναι μεγαλύτερος από 4 ή "Δεν περνάει" αν ο βαθμός είναι μικρότερος από 5. Όταν εισαχθεί ο βαθμός -1, το πρόγραμμα τερματίζει τη λειτουργία του και τυπώνει το μέσο όρο των βαθμών που διάβασε.
Θέμα 2ο: (2 βαθμοί)
Τι θα τυπώσει το παρακάτω πρόγραμμα;
#include <stdio.h> int a(int a, int b) { a++; return (a * b + 1); } main() { int i, f; f = 1; for (i = 0; i < 4; i++) { f = f + a(i, i + 1); printf("%d\n", f); } }
Θέμα 3ο: (3 βαθμοί)
Να ορίσετε σε C μια συνάρτηση που να δέχεται ως όρισμα την ταχύτητα ενός αυτοκινήτου σε km/h και την απόστασή του από τον προορισμό του σε km. Η συνάρτηση να επιστρέφει το χρόνο (σε s) που χρειάζεται το αυτοκίνητο για να φτάσει στον προορισμό του με τη συγκεκριμένη ταχύτητα. Όλα τα μεγέθη να οριστούν ως αριθμοί κινητής υποδιαστολής.
Διάρκεια εξέτασης 2 ώρες |
Καλή επιτυχία! |
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ
Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων
Σχεδιασμός και Υλοποίηση Λογισμικού Διδάσκων: Επίκ. Καθηγητής Διομήδης Σπινέλλης |
Εξεταστική περίοδος Ιανουαρίου 2000 |
Θέμα 1ο: (2.5 βαθμοί)
Γράψτε σε C τη συνάρτηση farraysum που δέχεται ως όρισμα έναν πίνακα αριθμών κινητής υποδιαστολής και έναν ακέραιο που ορίζει το μέγεθος του πίνακα. Η συνάρτηση επιστρέφει το άθροισμα των στοιχείων του πίνακα. Γράψτε ένα απλό πρόγραμμα για τον έλεγχο της λειτουργίας της συνάρτησης αυτής.
Θέμα 2ο: (2.5 βαθμοί)
Προσδιορίστε, σε όχι περισσότερο από μια σελίδα, τις απαιτήσεις λογισμικού για ένα σύστημα παρακολούθησης δανεισμού βιβλίων από τη βιβλιοθήκη.
Θέμα 3ο: (2 βαθμοί)
Να γράψετε ένα πρόγραμμα σε C που να διαβάζει χαρακτήρες από την είσοδό του μέχρι να τερματιστεί το αρχείο εισόδου. Στο τέλος το πρόγραμμα πρέπει να εμφανίζει ένα μήνυμα αν στο αρχείο εισόδου οι παρενθέσεις και οι αγκύλες που ανοίγουν δεν ταυτίζονται αριθμητικά με αυτές που κλείνουν σύμφωνα με το παρακάτω παράδειγμα:
Λάθος: στο αρχείο εμφανίζονται 5 Σ(Σ και 4 Σ)Τ.
Λάθος: στο αρχείο εμφανίζονται 12 Σ{Σ και 15 Σ}Τ.
Το πρόγραμμα δε χρειάζεται να ελέγχει τη σειρά με την οποία εμφανίζονται τα στοιχεία (π.χ. κλείσιμο πριν από άνοιγμα).
Θέμα 4ο: (3 βαθμοί)
Να γράψετε σε C ένα πρόγραμμα που να διαβάζει από την είσοδό του θετικούς ακέραιους αριθμούς μέχρι να συναντήσει το -1. Στο τέλος το πρόγραμμα να τυπώνει πόσες φορές εμφανίστηκε ο κάθε αριθμός. Ο κάθε αριθμός μαζί με τις φορές που έχει εμφανιστεί να φυλαχτεί σε μια δομή (struct) της C. Το πρόγραμμα πρέπει να μπορεί να χειριστεί θεωρητικά απεριόριστο αριθμό στοιχείων με τη χρήση δυναμικής μνήμης. Παράδειγμα:
Είσοδος: 545 79334 2 143 545 79334 79334 934744 934744 -1
Έξοδος:
545: 2
79334: 3
2: 1
143: 1
934744: 2
Διάρκεια εξέτασης 2,5 ώρες |
Καλή επιτυχία! |
ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ
Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων
Σχεδιασμός και Υλοποίηση Λογισμικού Διδάσκων: Επίκ. Καθηγητής Διομήδης Σπινέλλης |
Εξεταστική περίοδος Σεπτεμβρίου 2000 |
Θέμα 1ο: (2.5 βαθμοί)
Γράψτε σε C μια συνάρτηση που να δέχεται ως όρισμα δύο χρονικές στιγμές t1, t2 με t1 < t2 εκφρασμένες ως ώρες, λεπτά, δευτερόλεπτα και να επιστρέφει το χρόνο σε δευτερόλεπτα που μεσολαβεί ανάμεσα στα t1, t2. Γράψτε ένα απλό πρόγραμμα για τον έλεγχο της λειτουργίας της συνάρτησης αυτής. Να ορίσετε και να χρησιμοποιήσετε βοηθητικές συναρτήσεις για να αποφύγετε την επανάληψη κώδικα.
Θέμα 2ο: (2.5 βαθμοί)
Προσδιορίστε, σε όχι περισσότερο από μια σελίδα, τις απαιτήσεις λογισμικού για έναν απλό επεξεργαστή κειμένου.
Θέμα 3ο: (2 βαθμοί)
Η γλώσσα επισημείωσης HTML χρησιμοποιεί την ακολουθία "<tag ...>" για να προσδιορίσει χαρακτηριστικά του κειμένου. Να γράψετε ένα πρόγραμμα σε C που να διαβάζει HTML ως χαρακτήρες από την είσοδό του μέχρι να τερματιστεί το αρχείο εισόδου. Το πρόγραμμα θα εμφανίζει στην έξοδό του το κείμενο της εισόδου χωρίς τις ακολουθίες επισημείωσης. Παράδειγμα:<html><body><h1>Εισαγωγή</h1> Κείμενο της εισαγωγής</body></html>
Εισαγωγή Κείμενο της εισαγωγής
Θέμα 4ο: (3 βαθμοί)
Να γράψετε σε C ένα πρόγραμμα που να διαβάζει από την είσοδό του α) τον αριθμό των αθλητών που λαμβάνουν μέρος σε ένα άθλημα και β) για κάθε αθλητή το επώνυμό του (μέχρι 20 χαρακτήρες) και την επίδοσή του (ως αριθμό κινητής υποδιαστολής). Στο τέλος το πρόγραμμα να τυπώνει ξανά τους αθλητές και τις επιδόσεις τους εμφανίζοντας τρία αστεράκια πλάι στο όνομα του αθλητή με την καλύτερη (μικρότερη) επίδοση. Τα στοιχεία του κάθε αθλητή να φυλαχτούν σε μια δομή (struct) της C. Το πρόγραμμα πρέπει να μπορεί να χειριστεί θεωρητικά απεριόριστο αριθμό αθλητών με τη χρήση δυναμικής μνήμης. Το όνομα και η επίδοση του αθλητή μπορούν να διαβαστούν με τη συμβολοσειρά της scanf "%s %g".
Διάρκεια εξέτασης 2,5 ώρες |
Καλή επιτυχία! |