Professional Documents
Culture Documents
3η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ
4ος Τόμος
ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΑΤΙΣΜΟΥ
20/1/2020
1
Σύμφωνα με τον Κανονισμό Σπουδών, η καταληκτική ημερομηνία για την παραλαβή της Γ.Ε.
από το μέλος ΣΕΠ είναι η επόμενη Τετάρτη από το τέλος της εβδομάδας παράδοσης Γ.Ε.
3η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2019-2020
Α. Υπολογίστε και αιτιολογήστε τα αποτελέσματα που θα τυπωθούν σε κάθε μία από τις
περιπτώσεις (i) και (ii).
main() main()
{ {
int x = 1, y = 3; int x = 1, y = 3;
printf("%d %d\n", x, y); printf("%d %d\n", x, y);
what (x, y); what (&x, &y);
printf("%d %d\n", x, y); printf("%d %d\n", x, y);
} }
void what(int a, int b) void what (int *a, int *b)
{ {
a = a+1; *a = *a+1;
b = ++b; *b = ++*b;
} }
Β. Τι θα τυπώσει η κλήση f(7) της αναδρομικής συνάρτησης που ακολουθεί; Τεκμηριώστε την
απάντησή σας.
void f(int k)
{
int i;
if (k==0)
return;
printf("%d", k);
for (i=1;i<k;i=i+2)
f(i);
}
Γ. Να γραφεί πρόγραμμα στη γλώσσα προγραμματισμού C, το οποίο να:
i. δηλώνει ένα πίνακα ακεραίων με το όνομα a (που να αποτελείται από 3 γραμμές και 3
στήλες) και δίνει τις ακόλουθες αρχικές τιμές στον πίνακα
1 2 3
4 5 6
7 8 9
ii. ορίζει ένα δείκτη σε ακέραιο με όνομα a_ptr και δίνει στο δείκτη τη διεύθυνση μνήμης
του πίνακα
Σελίδα 2 από 7
3η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2019-2020
iii. εμφανίζει το στοιχείο 7 (της 3ης γραμμής, 1ης στήλης) του πίνακα χρησιμοποιώντας το
δείκτη.
Γ. Υποθέτουμε ότι η ΠΛΗ10 έχει 2 τμήματα φοιτητών και καθένα από αυτά έχει 3 φοιτητές.
Στην καρτέλα του κάθε φοιτητή αναγράφονται 4 βαθμοί που αντιστοιχούν στις 4 γραπτές
εργασίες κατά τη διάρκεια της ακαδημαϊκής χρονιάς. Οι λειτουργίες που εκτελούνται στις
(ηλεκτρονικές) καρτέλες των φοιτητών είναι οι ακόλουθες:
Σελίδα 3 από 7
3η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2019-2020
i. Εισαγωγή (από το πληκτρολόγιο) των βαθμών όλων των φοιτητών, και των 2 τμημάτων για
όλες τις εργασίες σε ένα πίνακα τριών διαστάσεων. Οι βαθμοί δίνονται ανά εργασία και τμήμα.
ii. Εύρεση και εκτύπωση του μέσου όρου της βαθμολογίας κάθε φοιτητή.
iii. Εύρεση και εκτύπωση του μέσου όρου κάθε τμήματος, το ποσοστό φοιτητών που δεν
απέκτησαν δικαίωμα εξετάσεων σε κάθε τμήμα καθώς και το συνολικό πλήθος των φοιτητών
που δεν απέκτησαν δικαίωμα εξετάσεων από όλα τα τμήματα (μέσος όρος μικρότερος από 5).
Να γραφεί πρόγραμμα στη γλώσσα προγραμματισμού C, το οποίο υλοποιεί όλες τις παραπάνω
λειτουργίες, εισάγοντας κώδικα αμυντικού προγραμματισμού στην εισαγωγή των βαθμών.
Να γράψετε πρόγραμμα C που επαναλαμβανόμενα θα ζητά από το χρήστη ένα θετικό ακέραιο
(y) αριθμό μικρότερο από 1000 και θα εμφανίζει στην οθόνη τον αριθμό ολογράφως, καθώς και
την προσέγγιση της τετραγωνικής ρίζας ανά επανάληψη μαζί με το απόλυτο σφάλμα.
Διευκρινίζεται ότι το απόλυτο σφάλμα ισούται με την απόλυτη τιμή της διαφοράς της
τρέχουσας προσέγγισης με την προηγούμενη προσέγγιση. Το πρόγραμμά σας, θα τερματίζει
όταν δοθεί ένας αριθμός που δεν είναι θετικός.
Οι διαδοχικές προσεγγίσεις για την εύρεση της τετραγωνικής ρίζας του εκατόν τριάντα πέντε
Σελίδα 4 από 7
3η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2019-2020
Υπόδειξη: Για να υπολογίσετε την απόλυτη τιμή ενός πραγματικού αριθμού χρησιμοποιήστε τη
συνάρτηση fabs() από τη βιβλιοθήκη math.h.
0: F:
Σελίδα 5 από 7
3η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2019-2020
Αυτός ο πίνακας θα τυπώνεται στην οθόνη στο τέλος του προγράμματος και θα έχει 4 γραμμές
(επειδή ο κάθε αριθμός ή γράμμα που θα πρέπει να τυπωθεί στην οθόνη απαιτεί 4 χαρακτήρες
σε ύψος) και megistos_arithmos_eisodou*4 στήλες (επειδή ο κάθε αριθμός ή γράμμα
που θα πρέπει να τυπωθεί στην οθόνη σε πλάτος απαιτεί 3 χαρακτήρες συν ένα κενό διάστημα
για να ξεχωρίζουν μεταξύ τους).
Να δηλωθούν οι τιμές ενός πίνακα δυο διαστάσεων ως εξής:
const int thesi_kommation[7][2];
Αυτός ο πίνακας θα περιέχει τιμές 0, 1, 2 και θα έχει 7 γραμμές (μια για το κάθε κομμάτι του
ενδείκτη) και 2 στήλες και θα αντιστοιχεί κάθε κομμάτι του ενδείκτη στην αντίστοιχη θέση του
χρησιμοποιώντας ένα νέο πίνακα 3Χ3:
0
5 6 1
4 3 2
Για παράδειγμα, το κομμάτι με αριθμό 0 του ενδείκτη αντιστοιχεί στην 0 γραμμή και την στήλη
1, δηλαδή η πρώτη γραμμή του πίνακα thesi_kommation θα έχει τιμές (0, 1).
Β. Να γραφεί μια συνάρτηση η οποία θα αποθηκεύει κενούς χαρακτήρες σε όλα τα στοιχεία του
πίνακα eksodos. Η συνάρτηση θα δηλώνεται ως εξής:
void adiasma_pinaka_eksodou(void)
Γ. Να γραφεί μια συνάρτηση η οποία θα αποθηκεύει την αντιστοίχιση κάθε ενός από τα επτά
κομμάτια του ορίσματος eisodos στην αντίστοιχη θέση του πίνακα eksodos (οι θέσεις
παίρνουν τιμές από 0 έως megistos_arithmos_eisodou - 1). Η συνάρτηση θα δηλώνεται
ως εξής:
void epeksergasia_eisodou(int eisodos, int thesi)
Δ. Να γραφεί μια συνάρτηση η οποία θα τυπώνει τα περιεχόμενα κάθε γραμμής του πίνακα
eksodos όπως φαίνεται στο παρακάτω παράδειγμα. Η συνάρτηση θα δηλώνεται ως εξής:
void ektuposi_eksodou(void)
Ε. Να γραφεί ένα κυρίως πρόγραμμα (συνάρτηση main), το οποίο θα διαβάζει μία σειρά
ακέραιων αριθμών από 0 έως 9 καθώς και τα γράμματα A, C και F. Αυτή τη σειρά θα τη
μετατρέπει σε ένδειξη του ενδείκτη επτά κομματιών και θα την τυπώνει στην οθόνη, καλώντας
τις συναρτήσεις adiasma_pinaka_eksodou(), epeksergasia_eisodou() και
ektuposi_eksodou(). Ως μέγιστη τιμή των αριθμών και γραμμάτων που εισάγει ο χρήστης
θα δηλώνετε το 10: #define megistos_arithmos_eisodou 10. Εάν οι αριθμοί και τα
γράμματα που εισάγει ο χρήστης είναι περισσότεροι από 10, τα επιπλέον να αγνοούνται. Αν
δοθεί άλλος χαρακτήρας από αυτούς τους δεκατρείς απλά να μην τυπώνεται. Ακολουθεί
παράδειγμα εκτέλεσης:
Σελίδα 6 από 7
3η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2019-2020
Γενικές Υποδείξεις:
Ι) Για τις απαντήσεις της εργασίας μπορείτε να ανατρέξετε στη συμπληρωματική βιβλιογραφία που
δίνεται και στα βοηθητικά κείμενα που υπάρχουν στο δικτυακό τόπο / portal της θεματικής
ενότητας. Συνιστάται να προσθέσετε στο τέλος της εργασίας σας κατάλογο βιβλιογραφίας.
ΙΙ) Οι απαντήσεις πρέπει να είναι γραμμένες με χρήση επεξεργαστή κειμένου (π.χ. Word) σε σελίδες
διαστάσεων Α4. Ενδεικτικά, οι απαντήσεις μπορούν να επιτευχθούν σε περίπου 10 σελίδες. Για την
εφαρμογή του αμυντικού προγραμματισμού αρκεί να γίνεται έλεγχος ως προς το εάν μία τιμή που
εισάγεται από το χρήστη του προγράμματος βρίσκεται εντός αποδεκτών ορίων (π.χ. να είναι θετική,
διαφορετική από το 0, μεγαλύτερη από 20 κλπ.). Δεν απαιτείται έλεγχος ως προς το εάν η τιμή
ανήκει στο σωστό τύπο δεδομένων (π.χ. ακέραιος, πραγματικός αριθμός, χαρακτήρας κλπ.)
σύμφωνα με τον τύπο της μεταβλητής στην οποία θα αποθηκευτεί η τιμή αυτή.
ΙΙΙ) Το αρχείο της εργασίας θα πρέπει να έχει ως πρώτη σελίδα το Έντυπο Υποβολής - Αξιολόγησης ΓΕ
συμπληρωμένο και ως δεύτερη σελίδα τον τίτλο «Σχόλια προς τον φοιτητή» (θα συμπληρωθεί από
τον καθηγητή σας). Οι απαντήσεις στις υπο-εργασίες θα αρχίζουν από την τρίτη σελίδα, χωρίς να
επαναλαμβάνονται οι εκφωνήσεις. Κάθε υπο-εργασία θα αρχίζει από νέα σελίδα. Για την απάντησή
σας θα πρέπει να χρησιμοποιείτε υποχρεωτικά το Πρότυπο Υποβολής Γραπτής Εργασίας.
ΙV) Στα ερωτήματα όπου ζητείται υλοποίηση κώδικα σε γλώσσα C, και στο έγγραφο της απάντησής
σας και στο αρχείο του κώδικα θα πρέπει να δίνεται ολόκληρο το πρόγραμμα, επισημαίνοντας με
σχόλια πού απαντάτε κάθε ερώτημα. Για να θεωρούνται οι απαντήσεις ολοκληρωμένες θα πρέπει:
γ) Κάθε αρχείο .c που θα παραδοθεί θα πρέπει τουλάχιστον να περνά τη φάση της μεταγλώττισης
χωρίς λάθη.
V) Η καλή παρουσίαση της εργασίας λαμβάνεται υπόψη στην αξιολόγηση της εργασίας.
Σελίδα 7 από 7