Θέματα εξετάσεων

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Εξεταστική περιόδος Φεβρουαρίου 1999

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων

Σχεδιασμός και Υλοποίηση Λογισμικού

Διδάσκων: Διομήδης Σπινέλλης

Εξεταστική περίοδος

Φεβρουαρίου 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 ώρες Καλή επιτυχία!

Πρόγραμμα για το θέμα 1: αντιστροφή τιμών

#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);
}

Πρόγραμμα για το θέμα 3: απόσταση σημείων

#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)));
	}
}

Πρόγραμμα για το θέμα 4: βαθμολογία

#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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων

Σχεδιασμός και Υλοποίηση Λογισμικού

Διδάσκων: Διομήδης Σπινέλλης

Εξεταστική περίοδος

Σεπτεμβρίου 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 ώρες

Καλή επιτυχία!

Πρόγραμμα για το θέμα 4: Morse

#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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων

Σχεδιασμός και Υλοποίηση Λογισμικού

Διδάσκων: Επικ. Καθηγητής Διομήδης Σπινέλλης

Πρόοδος

Νοεμβρίου 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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων

Σχεδιασμός και Υλοποίηση Λογισμικού

Διδάσκων: Επίκ. Καθηγητής Διομήδης Σπινέλλης

Εξεταστική περίοδος

Ιανουαρίου 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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Τμήμα Πληροφοριακών και Επικοινωνιακών Συστημάτων

Σχεδιασμός και Υλοποίηση Λογισμικού

Διδάσκων: Επίκ. Καθηγητής Διομήδης Σπινέλλης

Εξεταστική περίοδος

Σεπτεμβρίου 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>

Έξοδος:
Εισαγωγή Κείμενο της εισαγωγής

Το πρόγραμμα δε χρειάζεται να ελέγχει μη κανονικά σχηματισμένη HTML (π.χ. επισημειώσεις μέσα σε επισημειώσεις).

Θέμα 4ο: (3 βαθμοί)

Να γράψετε σε C ένα πρόγραμμα που να διαβάζει από την είσοδό του α) τον αριθμό των αθλητών που λαμβάνουν μέρος σε ένα άθλημα και β) για κάθε αθλητή το επώνυμό του (μέχρι 20 χαρακτήρες) και την επίδοσή του (ως αριθμό κινητής υποδιαστολής). Στο τέλος το πρόγραμμα να τυπώνει ξανά τους αθλητές και τις επιδόσεις τους εμφανίζοντας τρία αστεράκια πλάι στο όνομα του αθλητή με την καλύτερη (μικρότερη) επίδοση. Τα στοιχεία του κάθε αθλητή να φυλαχτούν σε μια δομή (struct) της C. Το πρόγραμμα πρέπει να μπορεί να χειριστεί θεωρητικά απεριόριστο αριθμό αθλητών με τη χρήση δυναμικής μνήμης. Το όνομα και η επίδοση του αθλητή μπορούν να διαβαστούν με τη συμβολοσειρά της scanf "%s %g".

Διάρκεια εξέτασης 2,5 ώρες

Καλή επιτυχία!