Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Σχετικά έγγραφα
Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Σημειώσεις για πρόοδο στο εργαστήριο

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

Εντολές ελέγχου ροής if, for, while, do-while

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Προγραμματισμός II (Γλώσσα C)

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

Συμβολοσειρές. 1 Συμβολοσειρές. 6 Απριλίου 2014

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Μεταβλητές τύπου χαρακτήρα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Δομημένος Προγραμματισμός (ΤΛ1006)

Εκτέλεση της εντολής1 και στη συνέχεια εκτέλεση της ΕΝΟΤΗΤΑΣ και της εντολής2 όσο η ΣΥΝΘΗΚΗ είναι αληθής.

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

5ο σετ σημειώσεων - Δείκτες

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 5η: Εντολές Επανάληψης

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Η γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραμματισμό

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Υπολογισμός - Εντολές Επανάληψης

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Γλώσσα Προγραμματισμού C

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ 8/9/2008

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

Προγραμματισμός Η/Υ (ΤΛ2007 )

8. Συνθήκες ελέγχου, λογικοί τελεστές

3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? )

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Τύποι Δεδομένων Είσοδος/Έξοδος

Αʹ. Πίνακες. Άσκηση 1. Λύση. Άσκηση 2. Λύση. Ασκήσεις Εργαστηρίου Προγραμματισμού

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Η γλώσσα προγραμματισμού C

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

4. Επιλογή και Επανάληψη

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΠΡΟΓΡΑΜΜΑΤΑ ΕΡΓΑΣΤΗΡΙΟΥ

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προσέξτε πως η παράσταση μπορεί να περιλαμβάνει όχι μόνο μία τιμή ή μια άλλη μεταβλητή αλλά μια ολόκληρη μαθηματική παράσταση, όπως η εξής:

Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΞΕΤΑΣΕΙΣ ΧΕΙΜΕΡΙΝΟΥ ΕΞΑΜΗΝΟΥ Ερωτήσεις

Εισαγωγή στον Προγραμματισμό

Υπολογισμός - Εντολές Ελέγχου

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

Η γλώσσα προγραμματισμού C

scanf() scanf() stdin scanf() printf() int float double %lf float

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑ Ρ Μ Α ΜΑΤΙ Τ ΣΜΟΣ

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Προγραμματισμός Ι (ΗΥ120)

Η γλώσσα προγραμματισμού C

EΒ ΟΜΑ Α 3 Η. Άλλοι τελεστές καταχώρησης: += -= *= /= %= x += 5; σηµαίνει x = x + 5; k *= 7; σηµαίνει k = k * 7; sum %= 15; σηµαίνει sum = sum % 15;

Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Η γλώσσα προγραμματισμού C

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 4: Έλεγχος Ροής. Κ.

Τα δεδομένα στη C++ χωρίζονται σε 3 κατηγορίες: τους αριθμούς (numbers), τους χαρακτήρες (characters) και τις συμβολοσειρές (strings).

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Προγραμματισμός Η/Υ (ΤΛ2007 )

Παραδείγματα. Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών

Η γλώσσα προγραμματισμού C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 3 Εντολές Επιλογής. Γιώργος Λαμπρινίδης Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι (HY120)

Δομημένος Προγραμματισμός (ΤΛ1006)

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

Transcript:

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης 30 Μαρτίου 014 1 Ομάδα Α - Ερωτήσεις Γενικών Γνώσεων 1. (ΕΓΓ.103) Να γραφεί πρόγραμμα σε C που να υπολογίζει τη μέση τιμή ακέραιων αριθμών, όταν εισάγονται από το πληκτρολόγιο. Η εισαγωγή τερματίζεται όταν δοθεί σαν τιμή ακέραιου το 0. 5 int a, sum = 0, count = 0; 6 7 do { scanf("%d", &a); 9 sum += a; 10 if (a) 11 ++count; 1 } while (a); 13 14 printf("h mesn timn eivai %f\n", sum / ( float) count); 15 16 return 0; 17 }. (ΕΓΓ.104) Να αναφέρετε τους βασικούς τύπους δεδομένων της C. Να γραφεί πρόγραμμα όπου θα εκτυπώνονται οι τιμές των μεταβλητών που όρισε ο χρήστης. Οι βασικοί τύποι της C είναι οι int, float, double και char¹. # include <limits.h> 3 # include <float.h> 4 5 int main() ¹Μπορείτε να αναφέρετε και τους specifiers που έχετε στις σημειώσεις σας (short, long, signed και unsigned αν και δεν μου φαίνεται απαραίτητο 1

6 { 7 int i; float f; 9 double d; 10 char c; 11 1 printf("dwse evav int: "); scanf("%d", &i); 13 printf("dwse evav float: "); scanf("%f", &f); 14 printf("dwse evav double: "); scanf("%lf", &d); 15 getchar(); 16 printf("dwse evav char: "); scanf("%c", &c); 17 1 printf("int: %d\n", i); 19 printf("float: %f\n", f); 0 printf("double: %lf\n", d); 1 printf("char: %c\n", c); } 3. (ΕΓΓ.105) Να γραφεί πρόγραμμα σε C που θα τυπώνει μήνυμα και θα ζητάει να πληκτρολογηθούν τρεις ακέραιοι. Θα διαβάζει τους αριθμούς αυτούς από το πληκτρολόγιο και θα τους αποθηκεύει σε τρεις μεταβλητές. Θα εναλλάσσει τις τιμές των μεταβλητών με ολίσθηση προς τα δεξιά (δηλαδή η δεύτερη μεταβλητή θα παίρνει την τιμή της πρώτης, η τρίτη της δεύτερης και η πρώτη της τρίτης, οπότε αν αρχικά οι μεταβλητές είχαν τιμές 10, 0 και 30, μετά το βήμα αυτό θα έχουν 30, 10 και 0 αντίστοιχα). Τέλος θα τυπώνει τις νέες τιμές των μεταβλητών στην οθόνη. 5 int v1, v, v3, t; 6 7 printf(" Dwse tnv prwtn metablntn: "); scanf("%d", &v1); 9 printf(" Dwse tnv deutern metablntn: "); 10 scanf("%d", &v); 11 printf(" Dwse tnv tritn metablntn: "); 1 scanf("%d", &v3); 13 14 t = v3; 15 v3 = v; 16 v = v1; 17 v1 = t; 1 19 printf("h vea prwtn metablntn: %d\n", v1); 0 printf("h vea deutern metablntn: %d\n", v); 1 printf("h vea tritn metablntn: %d\n", v3); 3 return 0;

4 } 4. (ΕΓΓ.106) Να γραφεί πρόγραμμα σε C που θα υπολογίζει την δύναμη, υποθέτοντας ότι ο χρήστης εισάγει την βάση και τον εκθέτη. Να καλυφθούν όλες οι πιθανές περιπτώσεις τιμών του εκθέτη. 5 int vasi, ekthetis; 6 double result; 7 int i; 9 printf("dwse tnv basn: "); 10 scanf("%d", &vasi); 11 1 printf(" Dwse tov eketn: "); 13 scanf("%d", &ekthetis); 14 15 result = 1; 16 for (i = 0; i < abs( ekthetis); ++i) 17 result *= vasi; 1 19 if ( ekthetis < 0) 0 result = 1 / result; 1 printf(" To apotelesma eivai: % lf \n", result); 3 4 return 0; 5 } 5. (ΕΓΓ.107) Με χρήση κατάλληλου προγράμματος να επεξηγήσετε τη διαφορά μεταξύ των εντολών break και continue. Η εντολή break σταματάει εντελώς την εκτέλεση ενός βρόχου, δηλαδή η τρέχουσα επανάληψη διακόπτεται στο σημείο που βρίσκεται η break και αφενός δεν εκτελούνται οι υπόλοιπες εντολές της τρέχουσας επανάληψης αφετέρου δεν πραγματοποιείται καμία επανάληψη περαιτέρω. Η continue διακόπτει την τρέχουσα επανάληψη του βρόχου αλλά συνεχίζει στην επόμενη επανάληψη. Δηλαδή παρακάμπτονται οι εντολές του σώματος του βρόχου για την τρέχουσα επανάληψη και μόνο. Στο παρακάτω πρόγραμμα για παράδειγμα, ο βρόχος που ξεκινάει στη γραμμή 7 θα έπρεπε αν δεν υπήρχε η break να εκτελέσει 10 επαναλήψεις. Σε κάθε μία από αυτές θα τύπωνε την τιμή του i δηλαδή τον αριθμό της τρέχουσας επανάληψης και μετά μία τελεία. Αυτό θα συμβεί στις 5 πρώτες επαναλήψεις στις οποίες το i είναι μικρότερο ή ίσο από το 5. Στην 6η όμως επανάληψη αφού εκτελεστεί η printf της γραμμής, θα ισχύει η συνθήκη της if και θα εκτελεστεί η break οπότε θα τερματιστεί εντελώς η εκτέλεση του βρόχου και τελικά θα τυπωθεί 1..3.4.5.6 αφού δεν θα εκτελεστεί ούτε η γραμμή 11 της 6ης επανάληψης ούτε θα εκτελεστούν οι επόμενες επαναλήψεις. 3

Ο δεύτερος βρόχος των γραμμών 16-1, θα λειτουργήσει με τον ίδιο τρόπο στις πρώτες 5 επαναλήψεις θα τυπωθεί δηλαδή σε αυτές το 1..3.4.5.. Στην 6η επανάληψη θα εκτελεστεί η γραμμή 17 τυπώνοντας το 6 αλλά καθώς η συνθήκη της if θα ισχύει, θα εκτελεστεί η continue η οποία θα προχωρήσει στην επόμενη επανάληψη του βρόχου, παρακάμπτοντας τη γραμμή 0. Το ίδιο θα συμβεί και στις επόμενες επαναλήψεις οπότε τελικά από την 6η επανάληψη μέχρι το τέλος του βρόχου θα τυπωθεί το 67910. 5 int i; 6 7 for (i = 1; i <= 10; ++i) { printf("%d", i); 9 if (i > 5) 10 break; 11 printf("."); 1 } 13 14 printf("\n"); 15 16 for (i = 1; i <= 10; ++i) { 17 printf("%d", i); 1 if (i > 5) 19 continue; 0 printf("."); 1 } 3 return 0; 4 } 6. (ΕΓΓ.10) Να γραφεί πρόγραμμα σε C που θα διαβάζει δυο ακεραίους αριθμούς από το πληκτρολόγιο και θα εκτυπώνει το άθροισμά τους στην οθόνη. Το αποτέλεσμα να φαίνεται επίσης σε οκταδική και δεκαεξαδική μορφή. 5 int a, b, sum; 6 7 printf(" Dwse tov prwto arimo: "); scanf("%d", &a); 9 10 printf(" Dwse tov deutero arimo: "); 11 scanf("%d", &b); 1 13 sum = a + b; 14 4

15 printf(" To aroisma eivai ( dekadiko): %d\n", sum); 16 printf(" To aroisma eivai ( oktadiko): %o\n", sum); 17 printf(" To aroisma eivai ( dekae3adiko): %x\n", sum); 1 19 return 0; 0 } 7. (ΕΓΓ.109) Να γραφεί πρόγραμμα σε C που θα υπολογίζει το μέσο όρο πραγματικών αριθμών. Ο υπολογισμός της μέσης τιμής να γίνει με τη δημιουργία ξεχωριστής συνάρτησης. 3 float mo( float a, float b) 5 return (a+b) / ; 6 } 7 int main() 9 { 10 float a, b; 11 1 printf(" Dwse ton eva arimo: "); 13 scanf("%f", &a); 14 printf(" Dwse ton allo arimo: "); 15 scanf("%f", &b); 16 17 printf("o mesos oros eivai %f\n", mo(a, b)); 1 19 return 0; 0 }. (ΕΓΓ.110) Να γραφεί πρόγραμμα σε C που θα διαβάζει το όνομα του χρήστη και θα εκτυπώνει φιλικό χαιρετισμό. 5 char p[100]; 6 7 printf("pws se leve? "); gets(p); 9 printf("geia sou, %s!\n", p); 10 11 return 0; 1 } 5

9. (ΕΓΓ.111) Να γραφεί πρόγραμμα σε C που θα μετατρέπει μονάδες μήκους από εκατοστά σε ίντσες. Να εκτυπωθεί το ύψος σας ανά 0 εκατοστά σε ίντσες (1 ίντσα =,5 εκ.). 5 int height, i; 6 7 printf(" Dwste to ypsos sas se ekatosta: "); scanf("%d", &height); 9 printf(" cm inches\n"); 10 printf("----+-------\n"); 11 for (i = 0; i <= height; i += 0) 1 printf("%3d %5.f\n", i, i /.5); 13 14 return 0; 15 } 10. (ΕΓΓ.11) Να γραφεί πρόγραμμα σε C που θα εκτυπώνει πίνακα αντιστοίχισης μονάδων θερμοκρασίας από Φαρενάιτ σε Κελσίου ανά 0 βαθμούς (ο τύπος μετατροπής είναι C = 5(F 3)/9. 5 int i; 6 printf(" F C\n"); 7 printf("----+--------\n"); for (i = 0; i <= 300; i += 0) { 9 printf("%3d %7.f\n", i, (5. * (i-3)) / 9.); 10 } 11 1 return 0; 13 } 11. (ΕΓΓ.113) Να γραφεί πρόγραμμα σε C που θα εκτυπώνει το όνομα και τον τελικό βαθμό του μαθητή με βάση το βαθμό του γραπτού και το βαθμό των ασκήσεων. (Με δεδομένο ότι ότι ο βαθμός του γραπτού είναι >= 4, τότε ο τελικός βαθμός σχηματίζεται από το 30% του βαθμού άσκησης και 70% από το βαθμό γραπτού, διαφορετικά δεν λαμβάνεται υπόψη η άσκηση. Εάν από το συνυπολογισμό του βαθμού της άσκησης ο τελικός βαθμός είναι μικρότερος από το βαθμό του γραπτού, ο βαθμός της άσκησης δεν υπολογίζεται. Αν είναι μεγαλύτερος από το βαθμό του γραπτού, τότε ο μαθητής πριμοδοτείται με μισή μονάδα. 6

5 int grapto; 6 int askisi; 7 float telikos; 9 printf(" Dose bamo graptou: "); 10 scanf("%d", &grapto); 11 printf(" Dose bamo asknsns: "); 1 scanf("%d", &askisi); 13 14 if ( grapto < 4) 15 printf(" Kobetai\n"); 16 else { 17 telikos =.3 * askisi +.7 * grapto; 1 if ( telikos < grapto) 19 telikos = grapto; 0 else 1 telikos += 0.5; } 3 printf(" Telikos bamos: %.f\n", telikos); 4 5 return 0; 6 } 1. (ΕΓΓ.114) Να γράψετε ένα πρόγραμμα σε γλώσσα C, το οποίο να διαβάζει από το πληκτρολόγιο μία σειρά χαρακτήρων και να μετρά το πλήθος των αριθμητικών χαρακτήρων, των κενών και των αλφαβητικών χαρακτήρων και να εμφανίζει στην οθόνη τα αποτελέσματα. Σημείωση: Στο παρακάτω γράφονται αναλυτικά οι συνθήκες ελέγχου του κάθε χαρακτήρα. Στο πακέτο με τις λύσεις των θεμάτων πιστοποίησης μπορείτε να δείτε κάποιες συναρτήσεις που παρέχονται από τη βιβλιοθήκη της C για αυτό το σκοπό, συγκεκριμένα τις isblank, isalpha και isdigit που επιστρέφουν true αν ο χαρακτήρας που τους δίνεται είναι κενό, αλφαβητικός ή αριθμητικός αντίστοιχα. 5 char s[100]; 6 int numbers = 0; 7 int alphas = 0; int blanks = 0; 9 int i; 10 11 printf(" Dose symboloseira: "); 1 gets(s); 13 14 for (i = 0; i < strlen(s); ++i) { 15 if (s[i] == ' ') 7

16 blanks ++; 17 else if (s[i] >= '0' && s[i] <= '9') 1 numbers ++; 19 else if (( s[i] >= 'a' && s[i] <= 'z') (s[i] >= 'A' && s[i] <= 'Z')) 0 alphas ++; 1 } 3 printf(" Alfabntikoi: %d\n", alphas); 4 printf(" Arimntikoi: %d\n", numbers); 5 printf(" Keva: %d\n", blanks); 6 7 return 0; } 13. (ΕΓΓ.115) Να γράψετε πρόγραμμα που να εμφανίζει μια οθόνη επιλογής με τις τέσσερις πράξεις: 1. Πρόσθεση,. Αφαίρεση, 3. Πολλαπλασιασμός και 4. Διαίρεση. Ο χρήστης θα επιλέγει την πράξη και θα δίδει τους αριθμούς. Ο υπολογιστής θα εκτελεί την αντίστοιχη πράξη και θα εμφανίζει το αποτέλεσμα. (Υπόδειξη: Το πρόγραμμα να γίνει με χρήση της εντολής case. Επίσης να γίνεται έλεγχος ώστε να μη γίνεται διαίρεση με μηδέν και σε τέτοια περίπτωση να εμφανίζεται κατάλληλο μήνυμα.) 5 float a, b; 6 int choice; 7 printf("dwse tov prwto telesteo: "); scanf("%f", &a); 9 printf("dwse tov deutero telesteo: "); scanf("%f", &b); 10 11 printf(" 1. Prosthesi\n"); 1 printf(". Afairesh\n"); 13 printf(" 3. Pollaplasiasmos\n"); 14 printf(" 4. Diairesn\n"); 15 printf("diale3e pra3n: "); scanf("%d", &choice); 16 17 switch ( choice) { 1 case 1: 19 printf("%f + %f = %f\n", a, b, a + b); 0 break; 1 case : printf("%f - %f = %f\n", a, b, a - b); 3 break; 4 case 3: 5 printf("%f * %f = %f\n", a, b, a * b); 6 break; 7 case 4: if (b == 0)

9 printf(" Den epitrepetai n diairesn me to mndev\n"); 30 else 31 printf("%f / %f = %f\n", a, b, a / b); 3 break; 33 default: 34 printf(" Eprepe va diale3eis 1,, 3 n 4\ n"); 35 } 36 37 return 0; 3 } 14. (ΕΓΓ.116) Να γραφεί συνάρτηση της C με όνομα power που θα δέχεται δύο ακέραιες παραμέτρους base και n και θα επιστρέφει τον ακέραιο base υψωμένο στη n-οστή δύναμη. Να γραφεί πρόγραμμα C που θα καλεί τη συνάρτηση power. Ο χρήστης του προγράμματος αυτού θα μπορεί να καθορίζει παραμετρικά την τιμή των base και n. 3 int power(int base, int n) 5 int result = 1; 6 int i; 7 for (i = 0; i < n; ++i) 9 result *= base; 10 11 return result; 1 } 13 14 int main() 15 { 16 int base, n; 17 1 printf("dose tn basn: "); 19 scanf("%d", &base); 0 printf(" Dose tov eketn: "); 1 scanf("%d", &n); 3 printf(" To %d eis tnv %d eivai %d\n", base, n, power( base, n)); 4 5 return 0; 6 } 15. (ΕΓΓ.117) Να γραφτεί συνάρτηση της C με όνομα min(n, m) που να επιστρέφει τον μικρότερο από τους ακέραιους n και m. Να χρησιμοποιηθεί ο τελεστής?: για τον υπολογισμό του μικρότερου. 9

3 int min(int n, int m) 5 return (n < m)? n : m; /* Oi pareveseis dev eivai aparaitntes */ 6 } 7 int main() 9 { 10 int a, b; 11 1 printf("dose ton prwto: "); scanf("%d", &a); 13 printf("dose ton deutero: "); scanf("%d", &b); 14 15 printf("o mikroteros eivai o %d\n", min(a, b)); 16 17 return 0; 1 } 16. (ΕΓΓ.11) Έστω ότι οι παρακάτω εντολές αποτελούν μέρος ενός προγράμματος της C. a = 4;, b = ;, c = a;, d = ++a;, e = --b;, f = a++;, c++; Να αναφέρετε τις τελικές τιμές των μεταβλητών του προγράμματος. a:6, b:7, c:5, d:5, e:7, f:5 17. (ΕΓΓ.119) Να γραφεί πρόγραμμα σε C που θα εκτυπώνει στην οθόνη τον ASCII χαρακτήρα των αγγλικών κεφαλαίων γραμμάτων (π.χ. letter A -> Ascii code 65)² 5 char c; 6 7 for (c = 'A'; c <= 'Z'; ++c) printf(" Letter %c -> Ascii code %d\n", c, c); 9 10 return 0; 11 } 1. (ΕΓΓ.10) Να γραφεί πρόγραμμα C που θα δέχεται ως παραμέτρους (command line arguments) το ποσό του κεφαλαίου και το ετήσιο επιτόκιο. Θα υπολογίζει τον ετήσιο τόκο και θα τα τυπώνει στην έξοδο, όπως στο εξής παράδειγμα: Κεφάλαιο:1000 Επιτόκιο: 4% Τόκος:40 ² Προφανώς το θέμα εννοεί τον χαρακτήρα και τον ASCII κωδικό. 10

3 int main(int argc, char* argv[]) 5 printf(" Kefalaio: %d\n", atoi( argv[1])); 6 printf("epitokio: %d\%\n", atoi(argv[])); 7 printf("tokos: %.f\n", (atoi(argv[1]) / 100.) * atoi(argv[])); 9 return 0; 10 } 19. (ΕΓΓ.11) Να γραφεί συνάρτηση της C που θα αντιμεταθέτει τις τιμές των δύο ακεραίων παραμέτρων της κάνοντας χρήση αναφοράς. 3 void swap(int* a, int* b) 5 int c; 6 c = *a; 7 *a = *b; *b = c; 9 } 10 11 int main() 1 { 13 int a =, b = 4; 14 swap(&a, &b); 15 printf("a: %d, b: %d\n", a, b); 16 17 return 0; 1 } 0. (ΕΓΓ.1) Να γραφεί πρόγραμμα C που θα προσθέτει τους άρτιους αριθμούς από το 11 μέχρι το 131 και θα εμφανίζει στην οθόνη το αποτέλεσμα. Επίσης να εμφανίζει σε πεντάδες τους αριθμούς που προστέθηκαν. (Σ=1+14+...+130) 3 4 int main() 5 { 6 int i; 7 int sum = 0; int count = 0; 9 10 for (i = 1; i <= 130; i += ) { 11 sum += i; 1 printf("%d ", i); 13 if (++ count % 5 == 0) 14 printf("\n"); 11

15 } 16 17 printf(" To aroisma eivai %d\n", sum); 1 return 0; 19 } 1. (ΕΓΓ.13) Να γραφεί συνάρτηση της C που με τη χρήση της αναδρομής υπολογίζει το μέγιστο κοινό διαιρέτη δύο ακεραίων. 3 // Ypoetei oti a > b 4 int mkd(int a, int b) 5 { 6 if (a % b == 0) 7 return b; else 9 return mkd(b, a % b); 10 } 11 1 int main() 13 { 14 int a, b; 15 16 printf("dose ton a: "); 17 scanf("%d", &a); 1 printf("dose ton b: "); 19 scanf("%d", &b); 0 1 printf("o MKD einai %d\n", a < b? mkd(b,a) : mkd(a,b)); 3 return 0; 4 }. (ΕΓΓ.14) Να γραφεί συνάρτηση της C που με τη χρήση της αναδρομής υπολογίζει το παραγοντικό των 10 πρώτων ακεραίων αριθμών. (Υπόδειξη: Το παραγοντικό ενός αριθμού είναι το γινόμενο του αριθμού επί όλων των αριθμών μέχρι τον αριθμό αυτό, όπου k! = k (k 1)! και 0! = 1). 3 int factorials(int n) 5 int result; 6 7 if (n == 0) result = 1; 9 else 1

10 result = n * factorials(n-1); 11 1 printf("%d! = %d\n", n, result); 13 return result; 14 } 15 16 int main() 17 { 1 factorials (10); 19 0 return 0; 1 } 3. (ΕΓΓ.15) Υποθέτοντας ότι μια πόλη έχει πληθυσμό 550.000 κάτοικους με ετήσιο ρυθμό αύξησης 3,3%, να γραφεί πρόγραμμα C που θα υπολογίζει τον πληθυσμό για τα επόμενα πέντε έτη. 5 float plith = 550000; 6 int i; 7 for (i = 0; i < 5; ++i) { 9 plith += plith * 3.3 / 100; 10 printf(" Etos %d, plnysmos: %.0f\n", i+1, plith); 11 } 1 13 return 0; 14 } 4. (ΕΓΓ.16) Να γραφεί πρόγραμμα C που θα δέχεται στην είσοδο θετικό ακέραιο αριθμό και θα εμφανίζει στην έξοδο τον αριθμό αυτό αντεστραμμένο (π.χ. αν δοθεί ο αριθμός 134, θα εμφανιστεί το 431). 5 int a; 6 7 printf(" Dose tov arimo: "); scanf("%d", &a); 9 10 do { 11 printf("%d", a % 10); 1 a = a / 10; 13

13 } while (a); 14 15 return 0; 16 } 5. (ΕΓΓ.17) Να γραφεί πρόγραμμα C που θα εμφανίζει στην οθόνη τον πίνακα της προπαίδειας των αριθμών από το 1 μέχρι το 10. 5 int i, j; 6 7 printf(" "); for (j = 1; j <= 10; ++j) 9 printf("%4d", j); 10 printf("\n"); 11 for (j = 1; j <= 43; ++j) 1 printf("-"); 13 printf("\n"); 14 15 for (i = 1; i <= 10; ++i) { 16 printf("%d ", i); 17 for (j = 1; j <= 10; ++j) 1 printf("%4d", i * j); 19 printf("\n"); 0 } 1 return 0; 3 } 6. (ΕΓΓ.1) Να γραφεί πρόγραμμα στη C το οποίο θα μετρά και θα εμφανίζει πόσες φορές πληκτρολογήσατε έναν αριθμητικό χαρακτήρα. το πρόγραμμα σταματά όταν πληκτρολογηθεί το πλήκτρο Q. 5 int count = 0; 6 int c; 7 while ((c = fgetc(stdin))!= 'Q') { 9 if (isdigit(c)) 10 ++count; 11 } 1 printf(" Arimoi: %d\n", count); 13 14

14 return 0; 15 } 7. (ΕΓΓ.19) Να γραφεί πρόγραμμα στη C που με κατάλληλη χρήση των δομών επανάληψης θα εμφανίζει στην οθόνη το παρακάτω: 1 333 4444 55555 5 int i, j; 6 7 for (i = 1; i <=5; ++i) { for (j = 0; j < i; ++j) 9 printf("%d",i); 10 printf("\n"); 11 } 1 13 return 0; 14 }. (ΕΓΓ.130) Να γραφεί πρόγραμμα στη C το οποίο θα βρίσκει τον μικρότερο αριθμό από ένα μονοδιάστατο πίνακα 10 ακεραίων αριθμών. 5 int p[10]; 6 int i; 7 int m; 9 for (i = 0; i < 10; ++i) { 10 printf(" Dose ton arimo %d: ", i+1); 11 scanf("%d", &p[i]); 1 } 13 14 m = p[0]; 15 for (i = 1; i < 10; ++i) 16 if (p[i] < m) 17 m = p[i]; 1 15

19 printf("o mikroteros eivai o %d\n", m); 0 1 return 0; } 9. (ΕΓΓ.131) Να γραφεί πρόγραμμα σε C που θα γεμίζει ένα δισδιάστατο πίνακα ακεραίων 10Χ10 με όνομα pinax ως εξής: Αν i+j είναι άρτιος τότε το pinax[i,j]=1. Αν i+j είναι περιττός τότε το pinax[1,j]=-1. Αν i=j τότε pinax[i,j] = 0. 5 int pinax [10][10]; 6 int i, j; 7 for (i = 0; i < 10; ++i) 9 for (j = 0; j < 10; ++j) 10 if ( i == j) 11 pinax[i][ j] = 0; 1 else if ( (i+j) % == 0 ) 13 pinax[i][ j] = 1; 14 else 15 pinax[i][ j] = -1; 16 17 return 0; 1 } 30. (ΕΓΓ.13) Να γραφεί πρόγραμμα σε C που θα υπολογίζει το άθροισμα των περιττών μόνο ακεραίων αριθμών μονοδιάστατου πίνακα 10 θέσεων που έχει πάρει τα στοιχεία του από εισαγωγή του χρηστη. 5 int p[10]; 6 int i; 7 int sum =0; 9 for (i = 0; i < 10; ++i) { 10 printf(" Dose ton arimo %d: ", i+1); 11 scanf("%d", &p[i]); 1 } 13 14 for (i = 0; i < 10; ++i) 15 if (p[i] % ) 16 sum += p[i]; 16

17 1 printf(" To aroisma twv perittwv eivai %d\n", sum); 19 0 return 0; 1 } 31. (ΕΓΓ.133) Να γράψετε πρόγραμμα που να διαβάζει το επώνυμο και το βαθμό 10 μαθητών και να τα αποθηκεύει σε ένα πίνακα του οποίου κάθε στοιχείο θα είναι μια κατάλληλη δομή. Στη συνέχεια για κάθε μαθητή θα τυπώνει στην οθόνη το επώνυμό του, το βαθμό του, καθώς και το χαρακτηρισμό επίδοσης ανάλογα με το βαθμό του. Ο χαρακτηρισμός επίδοσης είναι: 0-9 αποτυχών, 10-1 μέτρια, 13-15 καλά, 16-1 πολύ καλά, 19-0 άριστα. Στο τέλος να τυπωθεί το πλήθος των μαθητών κάθε κατηγορίας επίδοσης, δηλαδή άριστα 7 μαθητές κτλ. 3 typedef struct { 4 char onoma [100]; 5 int bathmos; 6 } mathitis_t; 7 10 int oria[5] = { 9, 1, 15, 1, 0 }; 9 char* chep[5] = { "apotyxia", "metria", "kala", "poly kala", "arista" }; 11 // pairvei parametro eva bamo kai epistrefei 1 // to xaraktnrismo (0: apotyxia, 1: metria, : kala, ktl 13 int getchep(int grade) 1 15 int i; 16 for (i = 0; i < 5; ++i) 17 if (grade <= oria[i]) 1 return i; 19 } 0 1 int main() { 3 int counts[5] = { 0, 0, 0, 0, 0 }; 4 mathitis_t mathites [10]; 5 int i; 6 7 for (i = 0; i < 10; ++i) { printf(" Mathitis %d\n", i+1); 9 printf(" Dose to onoma: "); gets( mathites[i]. onoma); 30 printf("dose to bathmo: "); scanf("%d", &mathites[i].bathmos); getchar(); 31 counts[ getchep( mathites[i]. bathmos )]++; 3 } 33 34 for (i = 0; i < 10; ++i) { 35 printf(" Mathitis %d\n", i+1); 17

36 printf(" Onoma: %s\n", mathites[i]. onoma); 37 printf(" Bathmos: %d\n", mathites[i]. bathmos); 3 printf(" Xaraktnrismos epidosns: %s\n", chep[ getchep( mathites[i]. bathmos )]); 39 printf("\n"); 40 } 41 4 for (i = 0; i < 5; ++i) { 43 printf("%d mathites pnrav %s\n", counts[i], chep[i]); 44 } 45 46 return 0; 47 } 3. (ΕΓΓ.134) Να γραφεί συνάρτηση της C με όνομα reverse(str) που να αναστρέφει τη σειρά των χαρακτήρων του string str. 3 void reverse(char str[]) 5 int i, j; char c; 6 i = 0; j = strlen(str) - 1; 7 while (i < j) { 9 c = str[i]; str[i] = str[j]; str[j] = c; 10 ++i; --j; 11 } 1 } 13 14 int main() 15 { 16 char str[100]; 17 printf(" Dose tn symvoloseira: "); 1 gets(str); 19 reverse(str); 0 printf("h avestramevn str eivai: %s\n", str); 1 return 0; 3 } 33. (ΕΓΓ.135) Να γραφεί συνάρτηση της C με όνομα strlen(s) που να επιστρέφει το μήκος του string s. 3 int strlen(char s[]) 5 int i = 0; 6 1

7 while (s[i]) ++i; 9 return i; 10 } 11 1 int main() 13 { 14 char s[100]; 15 printf(" Dose tn symvoloseira: "); 16 gets(s); 17 printf(" To mnkos tns eivai %d\n", strlen(s)); 1 19 return 0; 0 } 34. (ΕΓΓ.136) Να γραφεί πρόγραμμα C όπου θα επεξηγείται η έννοια του δείκτη (pointer) καθώς και η έννοια του τελεστή & 5 int a = ; 6 int b = 4; 7 int *p; 9 printf("a: %d, b:%d\n", a, b); 10 p = &a; 11 *p = 5; 1 p = &b; 13 *p = 10; 14 printf("a: %d, b:%d\n", a, b); 15 16 return 0; 17 } 35. (ΕΓΓ.137) Να γραφεί πρόγραμμα C όπου ο χρήστης θα γεμίζει από το πληκτρολόγιο δισδιάστατο πίνακα ακεραίων 3Χ3 και θα εμφανίζει στην οθόνη τα στοιχεία και το άθροισμα της διαγωνίου. 5 int p[3][3]; 6 int sum = 0; 7 int i, j; 9 for (i = 0; i < 3; ++i) { 19

10 for (j = 0; j < 3; ++j) { 11 printf(" Dose to stoixeio %d,% d:", i+1, j+1); 1 scanf("%d", &p[i][j]); 13 } 14 } 15 16 for (i = 0; i < 3; ++i) { 17 printf("p[%d,%d]: %d\n", i+1, i+1, p[i][i]); 1 sum += p[i][i]; 19 } 0 printf(" To aroisma tns diagwviou eivai %d\n", sum); 1 return 0; } 36. (ΕΓΓ.13) Έστω οι παρακάτω δηλώσεις αποτελούν μέρος ενός προγράμματος της C: 1 int p[10]; int *pp; 3 int m, n; 4 for (i = 0; i <= 10; ++i) 5 p[i] = i+1; 6 pp = &p[0]; 7 m = *(pp+3); n = *(pp+5); m: 4, n: 6. 37. (ΕΓΓ.139) Να γραφεί συνάρτηση της C που θα μετατρέπει ένα string αριθμών στο αριθμητικό του ισοδύναμο (δηλαδή το string 134 να μετατραπεί στον αριθμό 134). 3 int convertstr(char s[]) 5 int multiplier = 1; /* H trexousa dyvamn toy 10 */ 6 int number = 0; /* O telikos arithmos */ 7 int i; 9 i = strlen(s) - 1; 10 while (i >= 0) { 11 number += multiplier * (s[i] - '0'); 1 multiplier *= 10; 13 --i; 14 } 15 16 return number; 17 } 1 19 int main() 0

0 { 1 char s[100]; printf(" Dose tn symvoloseira: "); 3 gets(s); 4 printf(" To arithmitiko tis isodynamo eivai %d\n", convertstr(s)); 5 6 return 0; 7 } 3. (ΕΓΓ.140) Να γραφεί συνάρτηση της C που θα ελέγχει αν δύο συμβολοσειρές είναι ίσες. Δύο εκδοχές της συνάρτησης. Η πρώτη είναι πιο "επαγγελματική", η δεύτερη πιο κατανοητή. 3 int strcmp1( char* s1, char * s) 5 while (*s1 && *s && *s1++ == *s++) ; 6 return * s1 == * s; 7 } 9 int strcmp(char* s1, char* s) 10 { 11 int i, len; 1 if (strlen(s1)!= strlen(s)) 13 return 0; 14 else { 15 while (*s1) { 16 if (*s1!= *s) 17 return 0; 1 ++ s1; 19 ++ s; 0 } 1 return 1; } 3 } 4 5 int main() 6 { 7 char s1[100]; char s[100]; 9 30 printf(" Dwse tnv prwtn symboloseira: "); gets( s1); 31 printf(" Dwse tnv deutern symboloseira: "); gets( s); 3 33 if (strcmp(s1, s)) 34 printf(" Eivai idies\n"); 35 else 36 printf(" Dev eivai idies\n"); 37 3 return 0; 39 } 1

39. (ΕΓΓ.141) Να γραφεί συνάρτηση της C που θα μετρά το πλήθος των αριθμών σε μια συμβολοσειρά (δηλαδή να βρει ότι στη συμβολοσειρά ff45ggt6 υπάρχουν τρεις αριθμοί. 3 int countnum(char* s) 5 int count = 0; 6 7 while (*s) { if (isdigit(*s)) 9 ++count; 10 ++s; 11 } 1 return count; 13 } 14 15 int main() 16 { 17 char s[100]; 1 19 gets(s); 0 printf(" Yparxouv %d arimoi\n", countnum(s)); 1 return 0; 3 } 40. (ΕΓΓ.14) Να περιγράψετε τι κάνει το παρακάτω τμήμα κώδικα: 1 void mystery1( char *s1, const char * s) { 3 while (*s1!= '\0') 4 ++ s1; 5 for ( ; *s1 = *s; s1++, s++) ; 6 } Η παραπάνω συνάρτηση αντιγράφει τη συμβολοσειρά s στο τέλος της s1. Οι γραμμές 3 και 4 προχωρούν το δείκτη s1 μέχρι να φτάσει στο χαρακτήρα τερματισμού της πρώτης συμβολοσειράς. Το for της γραμμής 5: Δεν έχει αρχική εντολή. Σε κάθε επανάληψη ελέγχεται η συνθήκη *s1 = *s η οποία είναι αληθής όσο το *s είναι αληθές όσο δηλαδή ο s δεν δείχνει το τέλος της δεύτερης συμβολοσειράς. Επίσης, ο χαρακτήρας στον οποίο δείχνει ο s αντιγράφεται στη θέση που δείχνει ο s1. Στην πρώτη επανάληψη δηλαδή, ο πρώτος χαρακτήρας της δεύτερης συμβολοσοειράς αντιγράφεται στη θέση που βρισκόταν ο χαρακτήρας τερματισμού της πρώτης, δηλαδή στο τέλος της. Το σώμα του βρόχου είναι κενό, οπότε η επανάληψη τελειώνει με το βήμα το οποίο προχωράει τους δύο δείκτες κατά μία θέση. Οι επαναλήψεις συνεχίζονται, δηλαδή αντιγράφεται ο δεύτερος χαρακτήρας της δεύτερης συμβολοσειράς μία θέση μετά το τέλος της πρώτης, ο τρίτος δύο θέσεις μετά το τέλος της πρώτης κοκ. Κάποια στιγμή, όταν ο δείκτης s δείξει στο χαρακτήρα τερματισμού της δεύτερης συμβολοσειράς

αυτός θα αντιγραφεί στη θέση στην οποία δείχνει ο δείκτης s1 θέτοντας το νέο τέλος της πρώτης γραμματοσειράς. Επίσης η τιμή της συνθήκης θα είναι η τιμή του *s, δηλαδή '\0', δηλαδή ψευδής οπότε ο βρόχος και η συνάρτηση θα τερματιστούν. 41. (ΕΓΓ.143) Να περιγράψετε τι κάνει το παρακάτω τμήμα κώδικα: 1 void mystery( const char* s1, const char* s) { 3 for ( ; *s1!= '\0' && *s!= '\0'; s1++, s++) ; 4 if (*s1!= *s) 5 return 0; 6 return 1; 7 } Η συνάρτηση δέχεται δύο παραμέτρους, τους δείκτες σε δύο συμβολοσειρές. Το for με κενή αρχική εντολή, εκτιμά πριν από κάθε επανάληψη τη συνθήκη η οποία είναι αληθής όταν ο s1 δεν δείχνει το τέλος της πρώτης συμβολοσειράς και ο s δεν δείχνει το τέλος της δεύτερης. Με άλλα λόγια η συνθήκη παύει να ισχύει όταν κάποιος από τους δύο δείκτες δείξει το τέλος της αντίστοιχης συμβολοσειράς. Όσο η συνθήκη ισχύει εκτελείται το σώμα που είναι κενό και μετά το βήμα s1++, s++ δηλαδή οι δύο δείκτες προχωρούν κατά μία θέση. Η διαδικασία επαναλαμβάνεται μέχρι κάποιος από τους δύο δείκτες να δείξει το τέλος της αντίστοιχης συμβολοσειράς. Τότε ελέγχεται το if το οποίο ελέγχει αν τα *s1 και *s είναι ίσα. Εφόσον όμως ο βρόχος for σταμάτησε επειδή κάποιος από τους δύο δείκτες έδειχνε στο τέλος της συμβολοσειράς του, η συνθήκη της if θα ισχύει αν και ο άλλος δείκτης δείχνει το τέλος της αντίστοιχης συμβολοσειράς, δηλαδή αν οι δύο συμβολοσειρές έχουν το ίδιο μήκος. Σε αυτήν την περίπτωση επιστρέφεται η τιμή 0. Αλλιώς επιστρέφεται η τιμή 1. Τελικά η συνάρτηση επιστρέφει 0 αν οι δύο συμβολοσειρές έχουν το ίδιο μήκος ή 1 στην αντίθετη περίπτωση. 4. (ΕΓΓ.144) Να γραφεί πρόγραμμα C που θα ζητά από το χρήστη 3 ακεραίους ώστε να αρχικοποιήσει τις ακέραιες μεταβλητές της ημέρας, του μήνα και του έτους σε μια δομή ημερομηνίας (struct date). Στη συνέχεια ζητείται να απεικονισθεί η ημερομηνία στην οθόνη με τη μορφή ΗΗ/ΜΜ/ΕΕΕΕ π.χ. 7/10/1971. 3 4 int main() 5 { 6 struct date { 7 int imera; int minas; 9 int etos; 10 } d; 11 1 printf("dose imera: "); scanf("%d", &d.imera); 13 printf("dose mina: "); scanf("%d", &d.minas); 14 printf("dose etos: "); scanf("%d", &d.etos); 15 16 printf("%d/% d/% d\n", d. imera, d. minas, d. etos); 3

17 1 return 0; 19 } 43. (ΕΓΓ.145) Να γραφεί πρόγραμμα C το οποίο υπολογίζει την ηλικία ενός ατόμου σε έτη, αν δοθούν από το χρήστη η ημερομηνία γέννησης και η σημερινή ημερομηνία. (Υπόδειξη: Να χρησιμοποιηθεί δομή για την αποθήκευση της ημερομηνίας). Η λογική είναι ότι η ηλικία ενός ατόμου σε έτη είναι το τρέχον έτος μείον το έτος γέννησης. Αν όμως η τρέχουσα ημερομηνία είναι μικρότερη από την ημερομηνία γέννησης, πρέπει να αφαιρεθεί ένα έτος. 3 struct date { 4 int year; 5 int month; 6 int day; 7 }; 9 int main() 10 { 11 struct date birthday; 1 struct date today; 13 int age; 14 15 printf(" Dwse nmeromnvia gevvnsns:\ n"); 16 printf("dwse etos: "); scanf("%d", &birthday.year); 17 printf("dwse mnva: "); scanf("%d", &birthday.month); 1 printf("dwse mera: "); scanf("%d", &birthday.day); 19 0 printf(" Dwse snmerivn nmeromnvia:\ n"); 1 printf("dwse etos: "); scanf("%d", &today.year); printf("dwse mnva: "); scanf("%d", &today.month); 3 printf("dwse mera: "); scanf("%d", &today.day); 4 5 age = today.year - birthday.year; 6 if ( ( today. month < birthday. month) 7 (today. month == birthday. month && today.day < birthday.day) ) --age; 9 30 printf(" Hlikia: %d\n", age); 31 3 return 0; 33 } 44. (ΕΓΓ.146) Να γραφεί πρόγραμμα C που θα διαβάζει από την είσοδο μια ημερομηνία με την μορφή 1 Jan 004 και θα την απεικονίζει στην έξοδο με τη μορφή 1-1-004. 4

# include <string.h> 3 4 int main() 5 { 6 int day; 7 char month[4]; int year; 9 char* months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", 10 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; 11 int i; 1 13 printf(" Dwse nmeromnvia se morfn dd mon yyyy: "); 14 scanf("%d %s %d", &day, month, &year); 15 16 for (i = 0; i < 1; ++i) 17 if (! strcmp( months[i], month)) 1 break; 19 0 printf("%d-%d-% d\n", day, i+1, year); 1 return 0; 3 } 45. (ΕΓΓ.147) Να γραφεί πρόγραμμα C που θα διαβάζει από την είσοδο μια ημερομηνία με την μορφή 10-1-195 και θα παράγει στην έξοδο το αποτελεσμα Τρίτη 10 Δεκεμβρίου 195. # include <string.h> 3 # include <time.h> 4 5 int main() 6 { 7 time_t rawtime; struct tm * ltime; 9 char s[100]; 10 int month; 11 int day; 1 int year; 13 char* wdays[] = { "Kyriakn", "Deutera", "Tritn", "Tetartn", 14 "Pemptn", "Paraskeun", "Sabbato" }; 15 char* months[] = { "Iavouariou", "Febrouariou", "Martiou", 16 "Apriliou", "Maiou", "Iouviou", 17 "Iouliou", "Augoustou", "Septembriou", 1 "Oktwbriou", "Noembriou", "Dekembriou" }; 19 0 printf(" Dwse nm/ via se morfn dd-mm- yyyy: "); 1 scanf("%d-%d-%d", &day, &month, &year); 3 time(& rawtime); 5

4 ltime = localtime(& rawtime); 5 ltime -> tm_mon = month - 1; 6 ltime -> tm_mday = day; 7 ltime -> tm_year = year - 1900; mktime( ltime); 9 30 printf("%s ", wdays[ ltime -> tm_wday]); 31 printf("%d ", day); 3 printf("%s ", months[month -1]); 33 printf("%d", year); 34 35 return 0; 36 } 46. (ΕΓΓ.14) Να γραφεί πρόγραμμα C με το όνομα fcopy που θα αντιγράφει τα περιεχόμενα του αρχείου f1 στο αρχείο f. Η κλήση θα γίνεται από τη γραμμή εντολών (δηλ. fcopy f1 f). Σημείωση: Για λόγους απλότητας το παρακάτω πρόγραμμα δεν κάνει χειρισμό λαθών. Για όποιον ενδιαφέρεται για μια πληρέστερη εκδοχή υπάρχει το αρχείο pisto14_errors.c στο πακέτο με τις λύσεις των θεμάτων πιστοποίησης. # include <stdlib.h> 3 4 int main(int argc, char* argv[]) 5 { 6 FILE *f1, *f; 7 int c; 9 f1 = fopen(argv[1], "rb"); 10 f = fopen(argv[], "wb"); 11 1 while (( c = fgetc( f1))!= EOF) 13 fputc(c, f); 14 15 fclose(f1); 16 fclose(f); 17 1 return 0; 19 } 47. (ΕΓΓ.149) Να γραφεί πρόγραμμα C με το όνομα fcompare που θα συγκρίνει ανά γραμμή τα περιεχόμενα δύο αρχείων. Θα εκτυπώνεται η γραμμή που τα αρχεία διαφέρουν. Η κλήση θα γίνεται από τη γραμμή εντολών (δηλ. fcompare f1 f). Το πρόγραμμα τυπώνει τις γραμμές που διαφέρουν γράφοντας τον χαρακτήρα < πριν από τη γραμμή στο πρώτο αρχείο και το χαρακτήρα > πριν από την αντίστοιχη του δεύτερου³. ³Το πρόγραμμα δεν κάνει χειρισμό λαθών και κάνει την υπόθεση ότι τα δύο αρχεία έχουν τον ίδιο αριθμό γραμμών. Μπορείτε να δείτε ένα πρόγραμμα με χειρισμό λαθών το οποίο επίσης χειρίζεται την περίπτωση τα δύο αρχεία να μην έχουν το ίδιο μήκος στο αρχείο pisto149_errors.c στο πακέτο με τις λύσεις των θεμάτων πιστοποίησης. 6

# include <stdlib.h> 3 4 int main(int argc, char* argv[]) 5 { 6 FILE *f1, *f; 7 char s1[1000]; char s[1000]; 9 10 f1 = fopen(argv[1], "r"); 11 f = fopen(argv[], "r"); 1 13 while ( fgets(s1, 1000, f1) && fgets(s, 1000, f)) { 14 if (strcmp(s1, s)) 15 printf(" < %s> %s", s1, s); 16 } 17 1 fclose(f1); 19 fclose(f); 0 1 return 0; } 4. (ΕΓΓ.150) Να γραφεί πρόγραμμα C με το όνομα fcount που θα απαριθμεί τους πεζούς και κεφαλαίους χαρακτήρες ενός αρχείου και θα τυπώνει το αποτέλεσμα σε άλλο αρχείο. Η κλήση θα γίνεται από τη γραμμή εντολών (δηλ. fcount f1 f). Σημείωση: Όπως και στη σημείωση του θέματος 14, μπορεί κανείς να δει μία πληρέστερη εκδοχή στο αρχείο pisto150_errors.c. 3 int main(int argc, char* argv[]) 5 FILE *f1, *f; 6 int c; 7 int pezoi = 0, kefalaioi = 0; 9 f1 = fopen(argv[1], "r"); 10 while ((c = fgetc(f1))!= EOF) { 11 if ( islower(c)) 1 pezoi ++; 13 else if ( isupper(c)) 14 kefalaioi ++; 15 } 16 fclose(f1); 17 1 f = fopen(argv[], "w"); 19 fprintf(f, " Pezoi: %d\n", pezoi); 0 fprintf(f, " Kefalaioi: %d\n", kefalaioi); 1 fclose(f); 7

3 return 0; 4 } 49. (ΕΓΓ.151) Να γραφεί πρόγραμμα C όπου ο χρήστης θα γεμίζει από το πληκτρολόγιο μονοδιάστατο πίνακα ακεραίων 10 θέσεων και μετά θα εμφανίζει τα στοιχεία του με ανάστροφη φορά. 5 int p[10]; 6 int i; 7 int a; 9 for (i = 0; i < 10; ++i) { 10 printf(" Dwse tov arimo #% d: ", i); 11 scanf("%d",&p[i]); 1 } 13 14 for (i = 9; i >= 0; --i) 15 printf(" Stoixeio #% d: %d\n", i, p[i]); 16 17 return 0; 1 } 50. (ΕΓΓ.15) Να γραφεί πρόγραμμα C όπου ο χρήστης θα γεμίζει από το πληκτρολόγιο δισδιάστατο πίνακα ακεραίων 4Χ4 και θα βρίσκει το μέγιστο και το ελάχιστο στοιχείο του πίνακα. 5 int p[4][4]; 6 int i,j; 7 int meg, elax; 9 for (i = 0; i < 4; ++i) { 10 for (j = 0; j < 4; ++j) { 11 printf(" Dwse to stoixeio %d,% d: ", i, j); 1 scanf("%d", &p[i][j]); 13 } 14 } 15 16 meg = p[0][0]; 17 elax = p[0][0];

1 19 for (i = 0; i < 4; ++i) { 0 for (j = 0; j < 4; ++j) { 1 if (p[i][ j] > meg) meg = p[i][j]; 3 if (p[i][ j] < elax) 4 elax = p[i][j]; 5 } 6 } 7 printf(" To megisto eivai: %d\n", meg); 9 printf(" To elaxisto eivai: %d\n", elax); 30 31 return 0; 3 } 51. (ΕΓΓ.153) Να γραφεί πρόγραμμα C με το όνομα fcapitalise που θα αλλάζει όλους τους πεζούς χαρακτήρες από ένα αρχείο κειμένου σε άλλο αρχείο με κεφαλαίους. Η κλήση του προγράμματος θα γίνεται από τη γραμμή εντολών. Σημείωση: Όπως και στη σημείωση του θέματος 14, μπορεί κανείς να δει μία πληρέστερη εκδοχή στο αρχείο pisto153_errors.c. 3 int main(int argc, char* argv[]) 5 FILE *f1, *f; 6 int c; 7 f1 = fopen(argv[1], "r"); 9 f = fopen(argv[], "w"); 10 11 while ((c = fgetc(f1))!= EOF) { 1 if ( islower(c)) 13 c = toupper(c); 14 fputc(c, f); 15 } 16 17 fclose(f1); 1 fclose(f); 19 0 1 return 0; } 9