You are on page 1of 18

ΓΛΩΣΣΑ C-ΨΕΥΤΟΚΩΔΙΚΑΣ

ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΕΞΕΤΑΣΕΙΣ 2000-2001


Ερώτημα 2.1.
Να δημιουργηθούν τρεις αλγόριθμοι με χρήση ψευδοκώδικα που να υπολογίζουν το μέσο όρο
των άρτιων αριθμών από το 1 μέχρι το 100 με χρήση των εντολών ΓΙΑ … ΕΠΑΝΕΛΑΒΕ (for),
ΕΝΟΣΩ … ΕΠΑΝΕΛΑΒΕ (while) και ΕΠΑΝΕΛΑΒΕ … ΜΕΧΡΙ (repeat).
Ερώτημα 2.3.
Ένα έτος είναι δίσεκτο αν διαιρείται από το 4 αλλά όχι και από το 100, εκτός από τα έτη που
διαιρούνται από το 400 τα οποία είναι δίσεκτα. Γράψτε τη συνάρτηση is_disekto(year) που θα
επιστρέφει, είτε την τιμή TRUE εάν το έτος που περιγράφεται από τη μεταβλητή year είναι
δίσεκτο, είτε την τιμή FALSE εάν δεν είναι δίσεκτο (να μην γίνει έλεγχος για είσοδο αρνητικής
χρονιάς).

Ερώτημα 2.4.
Τι θα εμφανίσει το παρακάτω Πρόγραμμα μετά την εκτέλεσή του; Αιτιολογήστε την απάντησή
σας.
#include <stdio.h>
main()
{int i, a=2,b=3, c[2]={7,8};
printf(“%d\n”,a==b);
printf(“%d\n”,a==b-1);
a=b;
printf(“%d %d\n”,a,b);
c[a==b]=12;
printf("%d %d\n",c[0],c[1]);
}

ΘΕΜΑ 3 a) Eξηγήστε τον τρόπο με τον οποίο δουλεύει ο αλγόριθμος ταξινόμησης Bubble
Sort (ταξινόμηση φυσαλίδας) χρησιμοποιώντας ως παράδειγμα τους αριθμούς 8, 12, 7, 23,
17.
b) Να γραφεί αλγόριθμος σε ψευδοκώδικα και πρόγραμμα σε γλώσσα C, το οποίο να:
b1) διαβάζει τα στοιχεία ενός πίνακα ακεραίων εκατό θέσεων
b2) ταξινομεί τα στοιχεία του πίνακα χρησιμοποιώντας τον αλγόριθμο ταξινόμησης
φυσαλίδας (Bubble Sort)
b3) εμφανίζει τα στοιχεία του ταξινομημένου πίνακα

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


Enter the 0 element of the table: 20
Enter the 1 element of the table: 40
Enter the 2 element of the table: 60
Enter the 3 element of the table: 80
Enter the 4 element of the table: 100
Enter the 5 element of the table: 10
Enter the 6 element of the table: 30
Enter the 7 element of the table: 50
Enter the 8 element of the table: 70
Enter the 9 element of the table: 90
………(κ.λ.π.)

Sorted Table: 10 20 30 40 50 60 70 80 90 100 κ.λ.π.

ΤΕΛΙΚΕΣ ΕΞΕΤΑΣΕΙΣ 2000-2001


Ερώτημα 1.4. Απαντήστε σωστό ή λάθος
a) Οι εντολές: int i, *p; i=5; p=&i; δίνουν στο p την τιμή 5 ???
b) Ο τελεστής “+=” είναι μοναδιαίος
c) Οι προτάσεις “i=i+1;” και “i+=1;” είναι ισοδύναμες
d) Η εντολή printf("%d",a!=b?a:b); (όπου τα a και b είναι ακέραιοι) εμφανίζει σε κάθε
περίπτωση την τιμή του a.
e) Η εντολή “for (i=0;i<=10;i++); printf(“%d”,i)” εμφανίζει τον αριθμό 11
Ερώτημα 2.3.
Αν σε πρόγραμμα της C υπάρχουν οι δηλώσεις:
int x=8;
int y=12;

σημειώστε δίπλα σε καθεμία από τις ακόλουθες εκφράσεις αν το αποτέλεσμα είναι αληθές ή ψευδές,
αιτιολογώντας συνοπτικά την απάντησή σας.
a) (x<y) && (x>y/2)
b) x=y
c) !(x!=y)
d) (++x<--y) && (++x+1<=--y-1)

Ερώτημα 2.4.
Κατασκευάστε ένα πρόγραμμα που να:
a) δηλώνει ένα πίνακα ακεραίων με το όνομα a (που να αποτελείται από 4 γραμμές και 3 στήλες) και
δίνει τις ακόλουθες αρχικές τιμές στον πίνακα
1 2 3
4 5 6
7 8 9
10 11 12
b) ορίζει ένα δείκτη σε ακέραιο a_ptr
c) δίνει στο δείκτη τη διεύθυνση του πίνακα
d) εμφανίζει το στοιχείο 8 (της 3ης γραμμής, 2ης στήλης) του πίνακα χρησιμοποιώντας το δείκτη.
ΤΕΛΙΚΕΣ ΕΞΕΤΑΣΕΙΣ 2001-2002
Ερώτημα 3.2.
Γράψτε αλγόριθμο ο οποίος θα διαβάζει ένα ακέραιο αριθμό και θα υπολογίζει τον αντίστοιχο δυαδικό
αριθμό. Ο ακέραιος θα πρέπει να είναι θετικός και μικρότερος του 1024. Ο αλγόριθμος θα ελέγχει αν ο
αριθμός είναι κατάλληλος (δηλαδή θετικός και μικρότερος του 1024) και σε αντίθετη περίπτωση θα δίνει
μήνυμα λάθους και θα επαναλαμβάνει την ανάγνωση. Μετά την επιτυχή ανάγνωση του ακέραιου
αριθμού, θα τον μετατρέπει σε δυαδικό αριθμό που θα τον καταχωρεί σε ένα πίνακα και θα τυπώνει το
αποτέλεσμα της μετατροπής.
Χρησιμοποιείστε το παρακάτω λεξικό δεδομένων (στο οποίο μπορείτε να προσθέσετε και όποιες άλλες
μεταβλητές χρειάζεστε):
DYADIKOS: ARRAY[1..10] OF INTEGER; {Ο δυαδικός αριθμός}

AKERAIOS: INTEGER; {Ο ακέραιος αριθμός}

I: INTEGER; {Δείκτης για την προσπέλαση του πίνακα DYADIKOS}

Ερώτημα 3.3.
Γράψτε πρόγραμμα στη γλώσσα προγραμματισμού C που να υλοποιεί τον αντίστοιχο αλγόριθμο. Το
πρόγραμμα θα διαβάζει ένα ακέραιο αριθμό και θα υπολογίζει τον αντίστοιχο δυαδικό αριθμό.
Χρησιμοποιήστε σχόλια για να εξηγήσετε τι κάνετε σε κάθε εντολή που δεν είναι προφανής (π.χ. μη
σχολιάσετε μία εντολή εκτύπωσης, αλλά σχολιάστε οπωσδήποτε τι γίνεται σε μία εντολή επανάληψης).
Μια ενδεικτική εμφάνιση αποτελέσματος για τον αριθμό 121 είναι: «Ο ακέραιος αριθμός: 121 αντιστοιχεί
στο δυαδικό αριθμό: 1111001»

Ερώτημα 1.2.
Γράψτε σε ψευδοκώδικα αλγόριθμο που να υπολογίζει το Μέσο Όρο των στοιχείων ενός πίνακα 3
διαστάσεων (Κ x Μ x N). Η απάντησή σας θα πρέπει να ξεκινά ως εξής:

ΑΛΓΟΡΙΘΜΟΣ MO_PINAKA_ΚxΜxN;
ΣΤΑΘΕΡΕΣ
Κ = 10;
M = 10;
Ν = 20;
ΔΕΔΟΜΕΝΑ
P : ARRAY[1..Κ,1..M,1..Ν] OF INTEGER;
. . .
Ερώτημα 1.4.
Το σύμβολο Σ συμβολίζει το άθροισμα ακεραίων αριθμών. Δηλαδή, Σ(1..5) = 1+2+3+4+5 = 15.
Αντίστοιχα το σύμβολο Π συμβολίζει το γινόμενο ακεραίων αριθμών. Δηλαδή, Π(1..5) = 1*2*3*4*5 =
120.
α. Να γραφεί πρόγραμμα σε C που να διαβάζει ένα θετικό ακέραιο αριθμό (π.χ. num) και να υπολογίζει
τα Σ(1..num) και Π(1..num).
β. Να γίνει χρήση αμυντικού προγραμματισμού και να σχολιαστούν (σχόλια στον κώδικα) οι
περιπτώσεις λάθους που ελέγχονται / προβλέπονται κάθε φορά.

Ερώτημα 2.2.
α. Διατυπώστε μια αναδρομική (recursive) συνάρτηση σε ψευδοκώδικα για τον υπολογισμό του
παραγοντικού ενός ακεραίου αριθμού Ν.
β. Εξηγήστε με λεπτομέρεια πώς δουλεύει η συνάρτηση σας εάν δοθεί για υπολογισμό το παραγοντικό
του αριθμού 5 (Σημείωση: 5! (δηλ. 5 παραγοντικό) = 1*2*3*4*5 = 120).

Ερώτημα 2.3.
Δίνεται ο παρακάτω πίνακας Α με Ι = {1, 2, ..., 10}:
2 5 8 9 11 16 20 27 32 40
I=1 I=2 I=3 I=4 I=5 I=6 I=7 I=8 I=9 I=10
α. Να εφαρμόσετε τη μέθοδο δυαδικής αναζήτησης για την περίπτωση που αναζητούμε το στοιχείο
(τιμή) ‘16’. Περιγράψτε τα βήματα της διαδικασίας αναζήτησης (τους υπολογισμούς της επόμενης
προς εξέταση θέσης και τις συγκρίσεις). Δεν χρειάζεται να γράψετε τον αλγόριθμο.
β. Αν χρησιμοποιούσαμε γραμμική αναζήτηση, θα βρίσκαμε γρηγορότερα ή αργότερα το ζητούμενο
στοιχείο; Εξηγήστε πώς δουλεύει η γραμμική αναζήτηση και γιατί θα βρίσκαμε το στοιχείο
γρηγορότερα ή αργότερα.

Ερώτημα 2.4.
Απαντήστε σωστό ή λάθος για κάθε μια από τις 8 παρακάτω προτάσεις. (Δεν είναι απαραίτητη η
αιτιολόγηση των απαντήσεων):
α. Η εντολή s *= a + 1; ισοδυναμεί με την εντολή s = s * a + 1;
β. Η εντολή if (a=b) then printf (“hello”); εμφανίζει πάντα hello εκτός αν το b έχει την τιμή 0.
γ. Η εντολή printf(“%d”,5/2); εμφανίζει τον αριθμό 2.
δ. Η λογική έκφραση !(a!=b) ισοδυναμεί με την a = b.
ε. Η λογική έκφραση (a > 0 || a < 0) είναι αληθής για όλους τους αριθμούς a.
στ. Η εντολές α=2; printf(“%d”, a++); εμφανίζουν τον αριθμό 2.
ζ. Η εντολή a++; είναι ισοδύναμη με την εντολή a= a+2;.
η. Εάν s ορίζεται ως char s[10] τότε το s[3] ισοδυναμεί με *(s+3).

ΘΕΜΑ 3 (3,0 μονάδες)


Απαντήστε ΚΑΙ ΣΤΑ 3 ερωτήματα (3.1, 3.2, 3.2) που ακολουθούν:
Σε αγώνες καλλιτεχνικού πατινάζ, η κριτική επιτροπή αποτελείται από 11 κριτές-βαθμολογητές. Κάθε
κριτής-βαθμολογητής βαθμολογεί με ένα ακέραιο βαθμό που κυμαίνεται από 0 έως 6. Κάθε
διαγωνιζόμενος βαθμολογείται τελικά από τον μέσο όρο των βαθμών που απομένουν αφού από τους 11
απορριφθούν οι δύο μικρότεροι και οι δύο μεγαλύτεροι βαθμοί των κριτών-βαθμολογητών.
Ζητείται να υπολογιστεί η τελική βαθμολογία ενός διαγωνιζόμενου και να τυπωθεί (το αποτέλεσμα είναι
πραγματικός αριθμός, π.χ. 5,63).
3.1. Να σχεδιαστεί το Διάγραμμα Ροής.
3.2. Να γραφεί ο αντίστοιχος ψευδοκώδικας χρησιμοποιώντας αρθρωτό προγραμματισμό.
3.3. Να γραφεί το αντίστοιχο πρόγραμμα σε C, και να πλαισιωθεί από τα απαραίτητα σχόλια. Η
εισαγωγή των βαθμών να γίνεται από το πληκτρολόγιο. Το αποτέλεσμα να εμφανίζεται στην οθόνη.
Να γίνει χρήση αμυντικού προγραμματισμού τουλάχιστον σε μια περίπτωση.

ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΑΥΓΟΥΣΤΟΣ 2002


Η δήλωση: int ch, Ch, cH; στην C είναι επιτρεπτή και δηλώνει τρεις διαφορετικές μεταβλητές.
Ερώτημα 1.3.
Να δημιουργηθεί αλγόριθμος σε ψευδοκώδικα που θα παίρνει ως είσοδο έναν δισδιάστατο πίνακα Α
μεγέθους n x n (τετραγωνικός) και θα μεταφέρει τα στοιχεία από το δισδιάστατο πίνακα σε έναν
μονοδιάστατο πίνακα Β (ικανού μεγέθους) με τη σειρά που φαίνεται στο σχήμα όπου υπάρχει
παράδειγμα για πίνακα 3 x 3.
Α11 Α12 Α13
Α21 Α22 Α23

Α31 Α32 Α33

Β1=Α31, Β2=Α32, Β3=Α33, Β4=Α23, Β5=Α22, Β6=Α21, Β7=Α11, Β8=Α12, Β9=Α13

Ερώτημα 1.4.
Αναπτύξτε πρόγραμμα σε γλώσσα C, το οποίο θα ζητά από το χρήστη ένα πεζό Αγγλικό γράμμα και θα
εμφανίζει σε μία γραμμή της οθόνης όλα τα Αγγλικά γράμματα από αυτό που διάβασε μέχρι και το z. Σε
περίπτωση που ο χαρακτήρας που δίνει ο χρήστης δεν είναι πεζό Αγγλικό γράμμα, να επαναλαμβάνεται η
ανάγνωση νέου χαρακτήρα.

ΘΕΜΑ 2 (3,5 μονάδες)


Απαντήστε ΜΟΝΟ σε 3 από τα 4 ερωτήματα που ακολουθούν:

Ερώτημα 2.1.
α) Εξηγήστε σε δύο το πολύ γραμμές τι αποτέλεσμα έχει η διαδικασία ΕΠΕΞΕΡΓΑΣΙΑ-ΔΕΔΟΜΕΝΩΝ
στον πίνακα Ρ.

ΔΙΑΔΙΚΑΣΙΑ ΕΠΕΞΕΡΓΑΣΙΑ-ΔΕΔΟΜΕΝΩΝ (Ρ, Μ)


ΔΙΕΠΑΦΗ
ΕΙΣΟΔΟΣ
Μ: INTEGER;
P: ARRAY[1…M] OF INTEGER;
ΕΞΟΔΟΣ
P: ARRAY[1..M] OF INTEGER
ΔΕΔΟΜΕΝΑ
Κ, J, T: INTEGER;
ΑΡΧΗ
ΓΙΑ Κ:=1 ΕΩΣ M-1 ΕΠΑΝΕΛΑΒΕ
ΓΙΑ J:= 1 ΕΩΣ M-Κ ΕΠΑΝΕΛΑΒΕ
ΕΑΝ (Ρ[J] > Ρ[J+1]) ΤΟΤΕ
Τ := Ρ[J+1];
Ρ[J+1] := Ρ[J];
Ρ[J] := T;
ΕΑΝ-ΤΕΛΟΣ
ΓΙΑ-ΤΕΛΟΣ
ΓΙΑ-ΤΕΛΟΣ
ΤΕΛΟΣ

β) Πόσες φορές θα εκτελεστεί η ομάδα εντολών ΕΑΝ (Ρ[J] > P[J+1]) TOTE …….. EAN-ΤΕΛΟΣ;

Ερώτημα 2.2.
Δίνεται μια συνδεδεμένη λίστα. Τα πεδία που έχει κάθε στοιχείο της λίστας (εκτός δηλαδή από το πεδίο
next το οποίο ως γνωστόν είναι ένας δείκτης στο επόμενο στοιχείο της λίστας) δεν έχουν σημασία στο
συγκεκριμένο ερώτημα. Γράψτε σε ψευδοκώδικα ένα υποπρόγραμμα το οποίο να αντιστρέφει τη λίστα,
δηλαδή να αλλάζει κατάλληλα τους δείκτες έτσι ώστε το τελευταίο στοιχείο να γίνει πρώτο, το
προτελευταίο να γίνει δεύτερο, κοκ.

Ερώτημα 2.4.
Τι θα εμφανίσει η εκτέλεση των παρακάτω προγραμμάτων (γράψτε ακριβώς τι θα εμφανιστεί στην οθόνη
ως αποτέλεσμα της εκτέλεσης των παρακάτω προγραμμάτων):
α) main ()
{
int a=10, b=11;
if (a=b) printf(“True”);
else printf (“False”);
}

β) main()
{
int num;
num= - 8;
while (num>0)
{
printf(“Hello…”);
printf(“..again.”);
num=num+2;
}
printf(“and….Goodbye”);
}

γ) main ()
{
int a=10, b=20, i;
for (i=1; i<3; i++)
printf(“%d ”, b-(a+i));
}

ΘΕΜΑ 3 (3,0 μονάδες) Απαντήστε ΚΑΙ ΣΤΑ 2 ερωτήματα που ακολουθούν:


Από ένα δείγμα πληθυσμού 30 ατόμων καταγράφονται τα στοιχεία του ύψους και της ηλικίας σε πίνακες.
Ζητείται να προσδιοριστούν το μέσο ύψος και η μέση ηλικία του δείγματος. Επίσης η ελάχιστη και η
μέγιστη τιμή του κάθε μεγέθους.
Ειδικότερα:

3.1. Να γραφεί ο αντίστοιχος ψευδοκώδικας.


3.2. Να γραφεί το αντίστοιχο πρόγραμμα σε C, και να πλαισιωθεί από τα απαραίτητα σχόλια.

Και στα δύο ερωτήματα η εισαγωγή των δεδομένων θα γίνεται από το πληκτρολόγιο. Τα αποτελέσματα
θα εμφανίζονται στην οθόνη. Χρησιμοποιήστε διαδικασίες (ψευδοκώδικας) και συναρτήσεις (C) για την
εύρεση μέσων, μεγίστων και ελαχίστων, που έχουν ως παράμετρο έναν πίνακα. Να γίνει χρήση
αμυντικού προγραμματισμού τουλάχιστον σε μια περίπτωση (να γραφούν οι εντολές μέσα στον κώδικα –
όχι χωριστά- με σχόλια που να επισημαίνουν ότι γίνεται χρήση αμυντικού προγραμματισμού).

ΤΕΛΙΚΕΣ ΕΞΕΤΑΣΕΙΣ - ΙΟΥΝΙΟΣ 2003


ΘΕΜΑ 1 (3,5 μονάδες)

Απαντήστε στο ερώτημα 1.1 και ΜΟΝΟ σε 2 από τα υπόλοιπα 3 ερωτήματα:

Ερώτημα 1.1. (ΥΠΟΧΡΕΩΤΙΚΟ)


Γράψτε πρόγραμμα σε γλώσσα C το οποίο διαβάζει από το πληκτρολόγιο τις τιμές δύο πινάκων
ακεραίων Α και Β, μεγέθους Ν ο καθένας, και δημιουργεί έναν νέο πίνακα ακεραίων D,
μεγέθους Ν, όπου Di = max(Ai, Bi) (δηλαδή κάθε στοιχείο του D είναι ίσο με το μεγαλύτερο από
τα δύο αντίστοιχα στοιχεία των πινάκων Α και Β). Θεωρήστε ότι το Ν είναι ορισμένο στο
πρόγραμμα ως σταθερά.

Ερώτημα 1.2.
Δίνεται ο πίνακας Α με τα εξής στοιχεία:

41 23 6 21 75 32 94 28
Δείξτε τις διαδοχικές φάσεις του πίνακα Α κατά τη διαδικασία ταξινόμησης των στοιχείων του
σε αύξουσα διάταξη με τον αλγόριθμο ταξινόμηση φυσαλίδας (bubble sort). Σχεδιάστε για το
λόγο αυτό στην κόλα σας έναν πίνακα σαν τον παρακάτω (με όσες γραμμές χρειάζεται) και
συμπληρώστε τις μεταβολές στον πίνακα βήμα προς βήμα, συμπληρώνοντας για κάθε
ανταλλαγή στοιχείων στον μικρό πίνακα δεξιά τα στοιχεία που αλλάζουν θέση.

1 2 3 4 5 6 7 8
23 41 6 21 75 32 94 28 4 2
1 3

Υπόδειξη: Η τελευταία γραμμή του πίνακα θα πρέπει να είναι ως εξής:

6 21 23 28 32 41 75 94

1. Στα παρακάτω σχήματα, το Διάγραμμα Ροής Προγράμματος - flowchart (α) είναι


ισοδύναμο με τον αλγόριθμο σε ψευδοκώδικα (β).
(α) (β)

ΓΙΑ Κ = 3 ΕΩΣ 10 ΕΠΑΝΑΛΑΒΕ


ΕΚΤΥΠΩΣΕ (Κ)
ΓΙΑ-ΤΕΛΟΣ

2. Ένα δέντρο - σωρός είναι πάντα πλήρες δυαδικό δέντρο.


3. Στη γλώσσα C η εντολή k - = 3; ισοδυναμεί με την εντολή k = k - 3;
4. Το πρόγραμμα:
#include <stdio.h>

void set_b_to_a(int a, int b){

b = a;

void main() {

int a, b;

a = 1;

b = 15;

set_b_to_a(a, b);
print("%d", b);

τυπώνει στην οθόνη τον αριθμό 1.

Ερώτημα 1.4.
α) Σχεδιάστε το λογικό κύκλωμα που υλοποιεί τη λογική συνάρτηση:
F = (A XOR B) OR ((NOT(B)) AND (A NAND C))
β) Δώστε τον πίνακα αληθείας της παραπάνω λογικής συνάρτησης F.
ΘΕΜΑ 2 (3,5 μονάδες)

Απαντήστε στο ερώτημα 2.1 και ΜΟΝΟ σε 2 από τα υπόλοιπα 3 ερωτήματα:

Ερώτημα 2.1. (ΥΠΟΧΡΕΩΤΙΚΟ)


Γράψτε τον αλγόριθμο που βρίσκει την ενδιάμεση τιμή από τρεις αριθμούς (π.χ., στους
αριθμούς 5, 12 και 7, η ενδιάμεση τιμή είναι το 7, αφού 5 ≤ 7 ≤ 12). Στη λύση σας
χρησιμοποιήστε ψευδοκώδικα (οποιονδήποτε από αυτούς που διδαχθήκατε) ή γλώσσα C.

Ερώτημα 2.2.
Δίνονται οι τιμές: 35, 42, 25, 70, 31, 10, 60, 12, 19, 84, 45. Σχηματίστε ένα πλήρες δυαδικό
δένδρο αναζήτησης που οι κόμβοι του έχουν τις τιμές αυτές.
Υπόδειξη: Δεν πρέπει να χρησιμοποιήσετε τις τιμές με τη σειρά που δίνονται (το 35 ΔΕΝ είναι
η ρίζα του δένδρου που ζητείται), αλλά να τις ανακατατάξετε με κατάλληλο τρόπο. Για να
διευκολυνθείτε, κατασκευάστε ένα πλήρες κενό δυαδικό δένδρο με 11 κόμβους (όσες και οι
τιμές που δίνονται), τοποθετώντας στη συνέχεια τις τιμές στις κατάλληλες θέσεις.

Ερώτημα 2.3.
α) Έστω ότι ο μονοδιάστατος πίνακας P, που δίνεται στο Σχήμα 1, λειτουργεί με τη λογική της
«στοίβας». Δώστε σχηματικά τη νέα μορφή του πίνακα P (θέσεις και περιεχόμενα του πίνακα,
δείκτης T) και περιγράψτε τις αλλαγές που γίνονται:
 Μετά την εισαγωγή των στοιχείων 14, 22 και 61.
 Μετά την εξαγωγή πέντε στοιχείων (αφού έχουν εισαχθεί τα τρία).
β) Έστω ότι ο πίνακας P λειτουργεί με τη λογική της «ουράς» και η αρχική του κατάσταση είναι
αυτή του Σχήματος 1. Δώστε σχηματικά τη νέα μορφή του πίνακα P (θέσεις και περιεχόμενα
του πίνακα, δείκτες F και R) και περιγράψτε τις αλλαγές που γίνονται:
 Μετά την εισαγωγή των στοιχείων 27 και 64.
 Μετά την εξαγωγή τριών στοιχείων (αφού έχουν εισαχθεί τα δύο).
1 2 3 4 5 6 7 8 9 10
13 72 29 37 26 12

Σχήμα 1. Αρχική κατάσταση του πίνακα P.


Ερώτημα 2.4.
Εξηγήστε σύντομα (το πολύ σε 2 γραμμές) τι κάνει το τμήμα του αλγορίθμου που δίνεται
παρακάτω. Στη συνέχεια, γράψτε το αντίστοιχο τμήμα αλγορίθμου σε γλώσσα C,
χρησιμοποιώντας α) την εντολή while, και β) την εντολή for.
S:= 0;

ΕΠΑΝΑΛΑΒΕ

ΔΙΑΒΑΣΕ(A);

S:= S + A;

ΜΕΧΡΙ (S > 100);


ΘΕΜΑ 3 (3,0 μονάδες)

Απαντήστε ΚΑΙ ΣΤΑ 3 ερωτήματα (α, β, γ) που ακολουθούν:

Ένα λύκειο έχει τρία τμήματα αποφοίτων (Γ’ Λυκείου) και καθένα από αυτά έχει 20 μαθητές.
Στην καρτέλα του κάθε μαθητή αναγράφονται 8 βαθμοί που αντιστοιχούν στα μαθήματα που
διδάχτηκαν κατά τη διάρκεια της χρονιάς. Οι λειτουργίες που εκτελούνται στις (ηλεκτρονικές)
καρτέλες των μαθητών είναι οι ακόλουθες:
i. Εισαγωγή (από το πληκτρολόγιο) των βαθμών όλων των μαθητών, και των τριών
τμημάτων σε όλα τα μαθήματα. Οι βαθμοί δίνονται στη γραμματεία από τους
καθηγητές σε μία κατάσταση ανά μάθημα και τμήμα (μια κατάσταση έχει για
παράδειγμα τους βαθμούς όλων των μαθητών του 1ου τμήματος στο μάθημα της
Έκθεσης). Η πληκτρολόγηση θα γίνεται για κάθε κατάσταση ξεχωριστά.
ii. Εύρεση και εκτύπωση του μέσου όρου της βαθμολογίας κάθε μαθητή, καθώς και
εύρεση και εκτύπωση του τμήματος που ανήκει ο καλύτερος μαθητής.
iii. Εύρεση και εκτύπωση του μέσου όρου κάθε τμήματος, το ποσοστό αποτυχίας σε κάθε
τμήμα καθώς και το συνολικό πλήθος των μαθητών που απορρίπτονται από όλα τα
τμήματα (μέσος όρος μικρότερος από 9.5).

Ζητούνται τα ακόλουθα:
α. Να σχεδιάσετε το ΔΡΠ - Διάγραμμα Ροής Προγράμματος (flowchart) της λειτουργίας (ii).
β. Να γράψετε αλγόριθμο σε ψευδοκώδικα που υλοποιεί όλες τις παραπάνω λειτουργίες.
γ. Να γράψετε πρόγραμμα σε γλώσσα C που υλοποιεί όλες τις παραπάνω λειτουργίες,
εισάγοντας κώδικα αμυντικού προγραμματισμού στην εισαγωγή των βαθμών.

Υποδείξεις:
1. Η βαθμολογία δίνεται σε κλίμακα από 0 μέχρι 20 (άριστα), με ακρίβεια ενός δεκαδικού
ψηφίου.
2. Ενδείκνυται η χρήση ενός κοινού τριπλού βρόγχου για τους υπολογισμούς των (ii) και (iii).

ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΕΞΕΤΑΣΕΙΣ - ΙΟΥΛΙΟΣ 2003


1. Το παρακάτω πρόγραμμα θα εκτυπώσει την τιμή 2.
main()

int ARR[3] = {1, 2, 3};


print("%d", ARR[2]);

2. Οι αριθμητικοί τελεστές στη γλώσσα προγραμματισμού C περιλαμβάνουν και τους τελεστές ‘++’, ‘-
-’ και ‘**’.
Ερώτημα 1.4.

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

ΘΕΜΑ 2 (3,5 μονάδες)

Απαντήστε στο ερώτημα 2.1 και ΜΟΝΟ σε 2 από τα υπόλοιπα 3 ερωτήματα:

Ερώτημα 2.1. (ΥΠΟΧΡΕΩΤΙΚΟ)

Συμμετρικός πίνακας είναι ένας τετραγωνικός πίνακας Α με Ν γραμμές και Ν στήλες, για τον οποίο
ισχύει ότι Αi,j = Aj,i, για κάθε τιμή των i και j (δηλαδή, κάθε στοιχείο έχει ίδια τιμή με το συμμετρικό του
ως προς την κύρια διαγώνιο του πίνακα). Σχεδιάστε αλγόριθμο σε ψευδοκώδικα που ελέγχει αν ένας
πίνακας A (N x N) είναι συμμετρικός.

Υπόδειξη: Ο αλγόριθμος θα δέχεται στην είσοδο έναν πίνακα και θα επιστρέφει στην έξοδο μια λογική
μεταβλητή SYM, που θα έχει τιμή TRUE αν ο πίνακας είναι συμμετρικός και FALSE αν δεν είναι.

Ερώτημα 2.2.

Στον παρακάτω πίνακα δίνεται η συνεχόμενη αναπαράσταση δυαδικού δένδρου αναζήτησης. Οι


θέσεις χωρίς τιμή υποδεικνύουν ότι στις αντίστοιχες θέσεις του δένδρου δεν υπάρχουν κόμβοι.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Α Β Γ Δ Ε Ζ Η Θ Ι Κ
α) Σχεδιάστε το αντίστοιχο δυαδικό δένδρο αναζήτησης.

β) Βρείτε το μικρότερο και το μεγαλύτερο στοιχείο του δένδρου και αιτιολογήστε την απάντησή σας.

γ) Ποιος από τους κόμβους Ε και Κ είναι μεγαλύτερος και γιατί;


Ερώτημα 2.3.

Στο παρακάτω σχήμα απεικονίζεται λίστα, κάθε κόμβος της οποίας περιλαμβάνει δύο πεδία: την
πληροφορία (INFO) που είναι ακέραιος αριθμός και έναν δείκτη (PTR) προς τον επόμενο κόμβο, που
περιέχει την πραγματική διεύθυνση μνήμης του επόμενου κόμβου στη λίστα. Η λίστα είναι
ταξινομημένη με αύξουσα διάταξη ως προς την πληροφορία (INFO).

INFO PTR INFO PTR INFO PTR INFO PTR INFO PTR
19 800 34 300 41 900 48 700 63 NIL
Αν η διεύθυνση βάσης της λίστας (δηλαδή η διεύθυνση του πρώτου κόμβου) είναι η 1000, τότε
περιγράψτε τη διαδικασία διαγραφής από τη λίστα των κόμβων που έχουν ως τιμές INFO τους
αριθμούς 41 και 19 και δώστε σχηματικά την κατάσταση της λίστας μετά από κάθε διαγραφή.

Υπόδειξη: Για την περιγραφή της διαδικασίας διαγραφής, θα πρέπει να αναφέρετε σε κάθε βήμα τον
τρέχοντα κόμβο, τον επόμενο κόμβο, τη σύγκριση που γίνεται, το αποτέλεσμα της σύγκρισης και την
επόμενη ενέργεια, σύμφωνα με τον πίνακα που ακολουθεί.

ΤΡΕΧΩΝ ΕΠΟΜΕΝΟΣ ΑΠΟΤΕΛΕΣΜΑ


ΣΥΓΚΡΙΣΗ ΕΠΟΜΕΝΗ ΕΝΕΡΓΕΙΑ
ΚΟΜΒΟΣ ΚΟΜΒΟΣ ΣΥΓΚΡΙΣΗΣ
… … … … …

Ερώτημα 2.4.

Στο παρακάτω πρόγραμμα σε γλώσσα C, συμπληρώστε τη συνάρτηση exist, η οποία δέχεται ως είσοδο
μια ακέραια τιμή s και επιστρέφει έναν ακέραιο αριθμό που δείχνει πόσες φορές υπάρχει η τιμή s στον
πίνακα ακεραίων p[m][n].

Υπόδειξη: Ο πίνακας p είναι καθολική (global) μεταβλητή και ορίζεται έξω από το σώμα της συνάρτησης
exist. Οι απαραίτητες δηλώσεις, καθώς και το κυρίως πρόγραμμα (main) δίνονται στη συνέχεια.

#include <stdio.h>

const int m=3;

const int n=4;

int p[m][n];

int exist(int s)

main()

{
int i, j, num;

/* … Εντολές ανάγνωσης του πίνακα p */

print("Εισαγωγή τιμής για αναζήτηση στον πίνακα p: ");

scanf("%d", &num);

print("Η τιμή %d υπάρχει στον πίνακα p %d φορές", num, exist(num));

}
ΘΕΜΑ 3 (3,0 μονάδες)

Απαντήστε ΚΑΙ ΣΤΑ 2 ερωτήματα (α, β) που ακολουθούν:

Ο υπολογισμός του ετήσιου φόρου των 20 υπαλλήλων μιας επιχείρησης γίνεται με βάση το ετήσιο
ακαθάριστο εισόδημά τους ως εξής:

Αφορολόγητο ποσό: 6000 €

Φόρος 10% για τα επόμενα 10000 €


Φόρος 20% για τα επόμενα 10000 €

Φόρος 30% για το υπόλοιπο εισόδημα

Ζητούνται τα ακόλουθα:
α) Να σχεδιάσετε το ΔΡΠ - Διάγραμμα Ροής Προγράμματος (flowchart) και να γράψετε σε
ψευδοκώδικα τον αλγόριθμο ανάγνωσης των ετήσιων ακαθάριστων αποδοχών για όλους τους
υπαλλήλους.

β) Να γράψετε πρόγραμμα σε γλώσσα C, το οποίο:

i. Διαβάζει τις ετήσιες ακαθάριστες αποδοχές όλων των υπαλλήλων, με χρήση κώδικα
αμυντικού προγραμματισμού.
ii. Υπολογίζει και εκτυπώνει τον ετήσιο φόρο για κάθε υπάλληλο.
iii. Υπολογίζει και εκτυπώνει το μηνιαίο καθαρό μισθό κάθε υπαλλήλου (θεωρώντας τους
μισθούς σε δωδεκάμηνη βάση).
iv. Βρίσκει και εκτυπώνει το μεγαλύτερο καθαρό ετήσιο εισόδημα και τον αντίστοιχο φόρο.

ΤΕΛΙΚΕΣ ΕΞΕΤΑΣΕΙΣ - ΙΟΥΝΙΟΣ 2004


Θέμα 1 β) Στο παρακάτω τμήμα κώδικα C πόσες φορές θα τυπωθεί το Χ;
for(i=0;i<7;i++)

printf("X");

for(j=0;j<5;j++)

printf("X");

Θέμα 2 (2,0 μονάδες)


β) Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση

void bin_to_oct(int dyadikos[15])

που μετατρέπει έναν δυαδικό αριθμό στον αντίστοιχο οκταδικό αριθμό και στη συνέχεια τον
εκτυπώνει. Ο δυαδικός αριθμός είναι είσοδος στη συνάρτηση ως πίνακας 15 θέσεων, κάθε
στοιχείο του οποίου είναι ένα δυαδικό ψηφίο. Στην πρώτη θέση του πίνακα βρίσκεται το λιγότερο
σημαντικό ψηφίο (LSB). Για παράδειγμα, ο δυαδικός αριθμός 100110110011110 αποθηκεύεται
στον πίνακα με την παρακάτω μορφή:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 1 1 1 1 0 0 1 1 0 1 1 0 0 1

You might also like