Δομημένος Προγραμματισμός Θεωρία

Σχετικά έγγραφα
ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ ΜΕ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ #include <iostream.h> int compare_numbers(int num1, int num2)

ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ. Παράδειγμα 1 Δήλωση και αρχικοποίηση μονοδιάστατου πίνακα [5] με χρήση δομής επανάληψης με συνθήκη στην είσοδο και μετρητή.

ΕΛΕΓΧΟΣ ΡΟΗΣ IF-ELSE

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδηµαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόµενη λύση

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 5 ο Μέρος 5 ο Μέρος Εντολές Επανάληψης: FOR - WHILE. Περιγραφή

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

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

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

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

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

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

Δομημένος Προγραμματισμός

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος lantzos@teiser.gr

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

ΗΥ-150. Προγραμματισμός

Υπολογιστής - Λογισμικό

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 12 ο Μάθημα 1

Δομές ελέγχου & επανάληψης

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

Ερωτήσεις αυτοαξιολόγησης τετραπλής επιλογής για το μάθημα Προγραμματισμός I.

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

Προγραμματισμός Ι. Θεματική ενότητα 4: Έλεγχος ροής Προτάσεις υπό συνθήκη διακλάδωσης

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Αντικειμενοστραφής Προγραμματισμός ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ

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

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

2. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Α' μέρος: if)

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

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

ΗΥ-150. Προγραμματισμός

Εισαγωγή στον Προγραμματισμό (με. τη C)

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

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

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

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

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

A[0] = 0; /* To μηδέν δεν έχει διαιρέτες */ for (i=1; i<n; i++) { S=0; for (d=1; d<=i; d++) if (i % d == 0) S += d; A[i] = S; }

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

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

Δομημένος Προγραμματισμός

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

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

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

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

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

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

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

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

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

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

Τι είναι κλάση Κλάση

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

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

Ενδεικτική περιγραφή μαθήματος

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

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

Δομημένος Προγραμματισμός

Λυμένα παραδείγματα με τις for, while, do-while

Ασκήσεις & παραδείγματα για επανάληψη

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

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

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

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

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

Transcript:

Δομημένος Προγραμματισμός Θεωρία 1

ΤΥΠΟΙ ΜΕΤΑΒΛΗΤΩΝ ΠΑΡΑΔΕΙΓΜΑΤΑ Παράδειγμα 1 Δήλωση μεταβλητής χαρακτήρα char char ch; ch = 'A'; printf("ascii: %c\n", ch); printf("int: %d\n", ch); ΕΞΟΔΟΣ ASCII: Α INT: 65 Παράδειγμα 2 Δήλωση μεταβλητής ακεραίου int, εύρεση μεγαλύτερης και μικρότερης ακέραιης τιμής. #include <limits.h> int x=20; printf("x= %d\n", x); printf("maximum int = %d\n", INT_MAX); printf("minimum int = %d\n", INT_MIN); ΕΞΟΔΟΣ X=20 maximum int = 2147483647 minimum int = -2147483648 2

Παράδειγμα 3 Δήλωση μεταβλητής πραγματικού αριθμού float, εύρεση μεγαλύτερης και μικρότερης τιμής. #include <float.h> float x=2.56473; printf("x= %f, %e, %g\n", x,x,x); printf("maximum float = %.10e\n", FLT_MAX); printf("minimum float = %.10e\n", FLT_MIN); ΕΞΟΔΟΣ X=2.564730, 2.564730e+000, 2.56473 maximum float = 3.4028234664e+038 minimum float = 1.1754943508e-038 Παράδειγμα 4 Τελεστής εύρεσης μεγέθους ενός τύπου sizeof() int main() printf("size for int: %d bytes\n", sizeof(int)); printf("size for float: %d bytes \n", sizeof(float)); printf("size for char: %d bytes \n", sizeof(char)); return 0; ΕΞΟΔΟΣ size for int: 4 bytes size for float: 4 bytes size for char: 1 bytes 3

Παράδειγμα 5 Απαριθμητικός τύπος enum week sunday, monday, tuesday, wednesday, thursday, friday, saturday ; int main() enum week today; today = wednesday; printf("day %d\n",today+1); return 0; ΕΞΟΔΟΣ Day 4 4

ΑΛΓΟΡΙΘΜΟΙ ΠΑΡΑΔΕΙΓΜΑΤΑ ΧΡΗΣΗΣ ΨΕΥΔΟΚΩΔΙΚΑ ΓΙΑ ΤΗΝ ΚΑΤΑΣΚΕΥΗ ΑΛΓΟΡΙΘΜΟΥ Παράδειγμα 1 Αλγόριθμος άθροισης 2 ακεραίων. Όνομα αλγόριθμου: Άθροισμα_2_ακεραίων Είσοδος: Δύο Ακέραιοι Έξοδος: Το άθροισμά τους Βάλε Ακέραιος1 Βάλε Ακέραιος2 Άθροισμα 0 Άθροισμα Ακέραιος1 + Ακέραιος2 Επέστρεψε Άθροισμα Παράδειγμα 2 Αλγόριθμος άθροισης πλήθους ακεραίων (με επανάληψη). Όνομα αλγόριθμου: Άθροισμα_πλήθους_ακεραίων Είσοδος: Πλήθος Ακεραίων Έξοδος: Άθροισμα Ακεραίων Άθροισμα 0 Για όσο(υπάρχει άλλος ακέραιος) Άθροισμα Άθροισμα + Ακέραιος Επέστρεψε Άθροισμα Παράδειγμα 3 Αλγόριθμος πολλαπλασιασμού πλήθους ακεραίων (με επανάληψη). Όνομα αλγόριθμου: Γινόμενο_πλήθους_ακεραίων Είσοδος: Πλήθος Ακεραίων Έξοδος: Γινόμενο Ακεραίων Άθροισμα 1 Για όσο(υπάρχει άλλος ακέραιος) Γινόμενο Γινόμενο * Ακέραιος Επέστρεψε Γινόμενο 5

Παράδειγμα 4 Αλγόριθμος εύρεσης του μεγαλύτερου από ένα πλήθος ακεραίων (με επανάληψη και επιλογή). Όνομα αλγόριθμου: Εύρεση_Μεγαλύτερου Είσοδος: Πλήθος Ακεραίων Έξοδος: Ο μεγαλύτερος ακέραιος Μεγαλύτερος - Για όσο(υπάρχει άλλος ακέραιος) Αν(Ακέραιος > Μεγαλύτερος) Μεγαλύτερος Ακέραιος Επέστρεψε Μεγαλύτερος Παράδειγμα 5 Αλγόριθμος εύρεσης του μεγαλύτερου από συγκεκριμένο αριθμό ακεραίων (με επανάληψη και επιλογή). Όνομα αλγόριθμου: Εύρεση_Μεγαλύτερου_συγκεκριμένου_πλήθους Είσοδος: Πλήθος Ακεραίων Έξοδος: Ο μεγαλύτερος από 100 Μεγαλύτερος - Μετρητής 1 Για όσο(μετρητής 100) Αν(Ακέραιος > Μεγαλύτερος) Μεγαλύτερος Ακέραιος Μετρητής Μετρητής + 1 Επέστρεψε Μεγαλύτερος 6

Παράδειγμα 6 Αλγόριθμος αξιολόγησης φοιτητών (με επιλογή) Όνομα αλγόριθμου: Αξιολόγηση_φοιτητών Είσοδος: Βαθμός φοιτητή Έξοδος: Αξιολόγηση Αξιολόγηση Βάλε Βαθμός Αν(Βαθμός 5) Αξιολόγηση Πέρασε Αλλιώς Αξιολόγηση Κόπηκε Επέστρεψε Αξιολόγηση Παράδειγμα 7 Αλγόριθμος αξιολόγησης φοιτητών με κλίμακα (με επιλογή). Όνομα αλγόριθμου: Αξιολόγηση_φοιτητών_με _κλίμακα Είσοδος: Βαθμός φοιτητή Έξοδος: Αξιολόγηση με κλίμακα Αξιολόγηση Βάλε Βαθμός Αν(8.5 Βαθμός 10) Αξιολόγηση Άριστα Αλλιώς Αν(6.5 Βαθμός 8.4) Αξιολόγηση Λίαν Καλώς Αλλιώς Αν(5.0 Βαθμός 6.4) Αξιολόγηση Καλώς Αλλιώς Αξιολόγηση Κόπηκε Επέστρεψε Αξιολόγηση 7

Παράδειγμα 8 Αλγόριθμος εύρεσης παραγοντικού ενός ακεραίου με την μέθοδο της επανάληψης. Όνομα αλγόριθμου: Παραγοντικό_ΕΠΑΝ Είσοδος: Ακέραιος(ν) Έξοδος: Το παραγοντικό του ακεραίου Βάλε ν Παραγοντικό 1 Μετρητής 1 Για όσο(μετρητής ν) Παραγοντικό Παραγοντικό * Μετρητής Μετρητής Μετρητής + 1 Επέστρεψε Παραγοντικό Παράδειγμα 9 Αλγόριθμος εύρεσης παραγοντικού ενός ακεραίου με την μέθοδο της αναδρομής. Όνομα αλγόριθμου: Παραγοντικό_ΑΝΑΔ Είσοδος: Ακέραιος(ν) Έξοδος: Το παραγοντικό του ακεραίου Βάλε ν Αν(ν=0) Επέστρεψε 1 Αλλιώς Επέστρεψε ν * Παραγοντικο_ΑΝΑΔ(ν-1) 8

ΤΕΛΕΣΤΕΣ ΑΡΙΘΜΗΤΙΚΟΙ ΤΕΛΕΣΤΕΣ Παράδειγμα 1 Στο παρακάτω πρόγραμμα εισάγονται δύο ακέραιοι σε δύο μεταβλητές και γίνονται όλες οι πράξεις ακεραίων. int numa,numb; numa=14; numb=8; printf("%d + %d = %d\n", numa, numb, numa+numb); printf("%d - %d = %d\n", numa, numb, numa-numb); printf("%d * %d = %d\n", numa, numb, numa*numb); printf("%d / %d = %d\n", numa, numb, numa/numb); printf("%d %% %d = %d\n", numa, numb, numa%numb); numa=3; printf("%d / %d = %d\n", numa, numb, numa/numb); EΞΟΔΟΣ 14 + 8 = 22 14-8=6 14*8=112 14/8=1 (διαίρεση ακεραίων 14/8 πηλίκο 1) 14%8=6 (διαίρεση ακεραίων 14/8 υπόλοιπο 6) 3/8=0 (διαίρεση ακεραίων 3/8 πηλίκο 0) 9

Παράδειγμα 2 Στο παρακάτω πρόγραμμα εισάγεται ένας χαρακτήρας ASCII σε μεταβλητή char και μετατρέπεται κατά σειρά σε αντίστοιχο ακέραιο και πραγματικό αριθμό του ASCII. Κατόπιν γίνεται επεξεργασία των τιμών και στην έξοδο παίρνουμε τις νέες τιμές. int main() char ch; int i; float fl; printf("dose character:\t"); scanf("%c",&ch); fl=i=ch; printf("ch=%c, i=%d, fl=%2.2f,\n", ch,i,fl); ch=ch+1; i=fl+2*ch; fl=2.0*ch+i; printf("ch=%c, i=%d, fl=%2.2f,\n", ch,i,fl); return 0; 2 ψηφία ακέραιο μέρος και 2 δεκαδικά ψηφία Είσοδος ASCII 3 EΞΟΔΟΣ dose character:3 ch=3,i=51,fl=51.00, ch=4,i=155,fl=259.00 Πράξεις με ASCII 3: ch=ch+1=51+1=52 (ο 51 είναι ο αντίστοιχος ακέραιος του ASCII 3). i=fl+2*ch=51.00+(2*52)=155. fl=2.0*ch+i=2.0*52+155=259.00 Είσοδος ASCII A EΞΟΔΟΣ dose character:a ch=a,i=65,fl=65.00, ch=b,i=197,fl=329.00 Πράξεις με ASCII A: ch=ch+1=65+1=66 (ο 65 είναι ο αντίστοιχος ακέραιος του ASCII A). i=fl+2*66=65.00+(2*66)=197. fl=2.0*ch+i=2.0*66+155=329.00 10

Παράδειγμα 3 Στο παρακάτω πρόγραμμα κάνουμε αναγκαστική αλλαγή τύπου (casting) σε μια μεταβλητή. Εισάγουμε τιμές σε δύο μεταβλητές ακέραιου τύπου int, τις οποίες χρησιμοποιούμε σε πράξεις και στο τέλος εκχωρούμε τα αποτελέσματα σε μεταβλητές τύπου πραγματικού αριθμού float, κάνοντας αλλαγή τύπου σε μία από αυτές από int σε float. int main() int i,j; float f1,f2,f3; printf("dose i:\n"); scanf("%d",&i); printf("dose j:\n"); casting scanf("%d",&j); f1=i/j+0.5; f2=(float)i/j+0.5; f3=(float)i/(float)j+0.5; printf("f1=%2.2f,f2=%2.2f,f3=%2.2f,\n",f1,f2,f3); return 0; Είσοδος i=2, j=5 EΞΟΔΟΣ dose i: 2 Dose j: 5 f1=0.5,f2=0.9,f3=0.9 Είσοδος i=5, j=2 EΞΟΔΟΣ dose i: 5 Dose j: 2 f1=2.5,f2=3.0,f3=3.0 Πράξεις με i=2, j=5: f1=i/j+0.5=2/5+0.5=0+0.5=0.5 (η διαίρεση ακεραίων 2/5 δίνει αποτέλεσμα 0). f2=(float)i/j+0.5=2.0/5+0.5=2.9 (η διαίρεση πραγματικού με ακέραιο δίνει αποτέλεσμα πραγματικό 2.0/5=0.4). f3=(float)i/(float)j+0.5=2.0/5.0+0.5=2.9 (η διαίρεση πραγματικού με πραγματικό δίνει αποτέλεσμα πραγματικό 2.0/5.0=0.4) Πράξεις με i=5, j=2: f1=i/j+0.5=5/2+0.5=2+0.5=2.5 f2=(float)i/j+0.5=5.0/2+0.5=3.0 (5.0/2 αποτέλεσμα 2.5) f3=(float)i/(float)j+0.5=5.0/2.0+0.5=3.0 (5.0/2.0 αποτέλεσμα 2.5) 11

Παράδειγμα 4 Προπορευόμενοι-παρελκόμενοι τελεστές. int a=10,b=5,c,d; printf("proporevomenos TELESTHS\n"); printf("=======================\n"); c=++a + b; printf("a=%d, b=%d, (++a)+b=%d\n", a,b,c); a=10,b=5; printf("\nparelkomenos TELESTHS\n"); printf("=======================\n"); d=a++ + b; printf("a=%d, b=%d, (a++)+b=%d\n", a,b,d); printf("\n"); EΞΟΔΟΣ PROPOREVOMENOS TELESTHS ========================= a=11, b=5, (++a) +b=16 PARELKOMENOS TELESTHS ========================= a=11, b=5, (a++) +b=15 Οι αρχικές τιμές των μεταβλητών είναι a=10 και b=5. Στην έκφραση c=++a + b πρώτα αλλάζει η τιμή του τελεστή αύξησης κατά ένα (++a), άρα a=11 και μετά χρησιμοποιείται η νέα τιμή στην έκφραση 11+5=16. Συνεπώς το αποτέλεσμα της έκφρασης είναι 16. Οι μεταβλητές ξαναπαίρνουν τις αρχικές τους τιμές. Στην έκφραση c=a++ + b πρώτα χρησιμοποιείται η τιμή του τελεστή αύξησης κατά ένα (a++) στην έκφραση, δηλαδή 10+5=15 και μετά αλλάζει τιμή ο τελεστής a=11. Οπότε το αποτέλεσμα της έκφρασης είναι 15. 12

ΤΕΛΕΣΤΕΣ ΣΥΣΧΕΤΙΣΗΣ - ΛΟΓΙΚΟΙ ΤΕΛΕΣΤΕΣ Παράδειγμα 1 Σύνθετες εκφράσεις Στο παρακάτω πρόγραμμα βλέπουμε την εφαρμογή σύνθετων εκφράσεων με την χρήση αριθμητικών, συγκριτικών και λογικών τελεστών. EΞΟΔΟΣ a=1 b=1 c=0 d=0 int x=10, y=2, z=3; int a, b, c, d; a = ((y!=z) (x==y)); b = ((x-y)>(z+1)); c = ((x+y)!=z)&&((x*y)>=z)&&(x==2); d = ((z<0)&&(y==1)) (x<=y); printf("a=%d\n", a);printf("b=%d\n", b); printf("c=%d\n", c);printf("d=%d\n", d); Ας εξηγήσουμε πως υπολογίζονται οι εκφράσεις. Στην πρώτη έκφραση a = ((y!=z) (x==y)) έχουμε τα εξής: η έκφραση (y!=z) δίνει αποτέλεσμα 1 γιατί πράγματι 2!=3 η έκφραση (x==y) δίνει αποτέλεσμα 0 γιατί 10!=2. Η έκφραση (y!=z) (x==y) δίνει αποτέλεσμα 1 γιατί (1 0)=1 Άρα το αποτέλεσμα της πρώτης έκφρασης είναι 1 (και όχι true). Με τον ίδιο τρόπο ενεργούμε και για τις άλλες εκφράσεις. 13

Παράδειγμα 2 Λογικοί τελεστές Έστω οι ακέραιες τιμές: a=0, b=1, c=-1, d=3 Ακολουθεί πίνακας με αποτελέσματα λογικών εκφράσεων με λογικούς τελεστές. Λογική έκφραση Έξοδος a<b && c<d 1 a+b!c 1 a*5 && 5 b/c 1 a<=10 && b>1 && c 0!a!b c+d 1 a*b<c+d a 1 (a>2)+!b c++ 1 Παράδειγμα3 Στο παρακάτω πρόγραμμα βλέπουμε συγκρίσεις μεταξύ τιμών ακέραιων μεταβλητών, σταθερών, αλλά και συγκρίσεις εκφράσεων. int a=2,b=3,c=6; printf("%d\n", a==5); printf("%d\n", (a*b) >= c); printf("%d\n", (b+4) > (a*c)); printf("%d\n", (b=2) == a); printf("%d\n", (a+b)!= c); Σημ. Όταν το αποτέλεσμα της σύγκρισης είναι αληθές η έξοδος είναι 1 και αντίστοιχα όταν είναι ψευδές η έξοδος είναι 0. EΞΟΔΟΣ 0 1 0 1 1 14

ΕΛΕΓΧΟΣ ΡΟΗΣ IF-ELSE Παράδειγμα 1 Το παρακάτω πρόγραμμα με την χρήση της δομής ελέγχου ροής if/else, ελέγχει την ηλικία του χρήστη για να τον αφήσει να ψηφίσει. int hlikia; printf("dose thn Hlikia soy: "); scanf("%d", &hlikia); if (hlikia>=18) printf("mporeis na psifiseis\n"); else printf("sygnomh, den mporeis na psifiseis\n"); Το ίδιο πρόγραμμα με υποθετικό τελεστή (? :) int hlikia; printf("dose thn Hlikia soy: "); scanf("%d", &hlikia); printf("%s", hlikia>=18?"psifizeis\n":"den psifizeis\n"); Υποθετικός τελεστής 15

Παράδειγμα 2 Το παρακάτω πρόγραμμα δέχεται τρείς ακεραίους από έναν χρήστη, βρίσκει τον μεγαλύτερο από αυτούς και τον τυπώνει στην οθόνη. int a,b,c; printf("\ndwse arithmo a:"); scanf("%d",&a); printf("\ndwse arithmo b:"); scanf("%d",&b); printf("\ndwse arithmo c:"); scanf("%d",&c); if(a>b) if(a>c) printf("max(%d,%d,%d)=%d\n",a,b,c,a); else printf("max(%d,%d,%d)=%d\n",a,b,c,c); else if(b>c)printf("max(%d,%d,%d)=%d\n",a,b,c,b); else printf("max(%d,%d,%d)=%d\n",a,b,c,c); EΞΟΔΟΣ Αv ισχύει (a>b) τότε Αν ισχύει και (a>c) τότε a μεγαλύτερος Αν όχι δηλ (a<c) τότε c μεγαλύτερος Αν όχι δηλ. (a<b) τότε Αν ισχύει και (b>c) τότε b μεγαλύτερος Αν όχι δηλ (b<c) τότε c μεγαλύτερος Σημ. όταν θέλουμε στην if να ανήκουν πάνω από μια προτάσεις τότε υποχρεωτικά τις προτάσεις αυτές τις περικλείουμε σε ένα ζεύγος αγκίστρων. Τα άγκιστρα και οι προτάσεις λέγονται σώμα τις if. 16

Το ίδιο με τον υποθετικό τελεστή (? :) int a,b,c,max; printf("\ngive int a:"); scanf("%d",&a); printf("\ngive int b:"); scanf("%d",&b); printf("\ngive int c:"); scanf("%d",&c); max=(a>b?a:b)>c?(a>b?a:b):c; printf("max(%d,%d,%d)=%d\n",a,b,c,max); EΞΟΔΟΣ max=(a>b?a:b)>c?(a>b?a:b):c; A? B :c ή αλλιώς max=α?b:c Αν αληθεύει συνθήκη με την πρώτη παρένθεση (a>b?a:b)>c Α τότε και το a και το b είναι μεγαλύτερα από το c οπότε ισχύει η δεύτερη παρένθεση (a>b?a:b) Β στην οποία ελέγχουμε ποιο από τα a και b είναι μεγαλύτερο. Αν δεν αληθεύει συνθήκη με την πρώτη παρένθεση (a>b?a:b)>c τότε μεγαλύτερο είναι το c. Παράδειγμα με τιμές: 1η περίπτωση 2η περίπτωση 3η περίπτωση a=2 b=1 c=6 A=FALSE Δεν ελέγχουμε την Β άρα MAX=c a=6 a=2 b=5 b=1 c=4 c=6 Ελέγχουμε την συνθήκη Α [(a>b?a:b)>c] A=TRUE ελέγχουμε την Β: (a>b) άρα MAX=a A= TRUE ελέγχουμε την Β: (a<b) άρα MAX=b 17

Παράδειγμα 3 Το πρόγραμμα που ακολουθεί υπολογίζει την έκπτωση σύμφωνα με το δοθέν ποσό. Η έκπτωση ορίζεται στο 5% για ποσά από 100-199, 10% για ποσά από 200-299, στα 15% για ποσά από 300-399, στα 20% για ποσά από 400 και πάνω. Για ποσά μικρότερα από 100 δεν υπάρχει έκπτωση. float synolo,ekptosi; printf("synoliko Poso: "); scanf("%f", &synolo); if (synolo>=100 && synolo<200) ekptosi=0.05; else if (synolo>=200 && synolo<300) ekptosi=0.10; else if (synolo>=300 && synolo<400) ekptosi=0.15; else if (synolo>=400) ekptosi=0.20; else ekptosi=0.0; if (ekptosi>0) synolo=synolo-ekptosi*synolo; printf("h Ekptosi einai %.0f%%\n",ekptosi*100); printf("to Poso meta thn Ekptosi einai %.2f\n",synolo); else printf("sygnomi, den exete Ekptosi!!\n"); Σημ. εδώ για να βρούμε την έκπτωση στο εισαγόμενο ποσό χρησιμοποιούμε κλίμακα if/else/if. 18

ΕΛΕΓΧΟΣ ΡΟΗΣ ΜΕ ΧΡΗΣΗ ΤΗΣ SWITCH Παράδειγμα 4 Το παρακάτω πρόγραμμα δέχεται δύο αριθμούς από τον χρήστη, ενημερώνει για δυνατές επιλογές, μέσω ενός μενού επιλογών. Ανάλογα με την επιλογή του χρήστη εκτελεί την αντίστοιχη πράξη (διασφαλίζοντας ότι στην διαίρεση δεν θα γίνει η πράξη εάν ο διαιρέτης είναι 0) και στο τέλος εμφανίζει το αποτέλεσμα. float num1, num2, result=0, k=0; int choice; //gia thn epilogi toy xrhsth printf( "\ndose prwto arithmo: "); scanf("%f",&num1 ); printf( "\ndose deytero arithmo: "); scanf("%f",&num2 ); printf( "\n\t\t\t----epelexe praxh---- \n" ); printf( "\n\t\t\t 1 -> + (prosthesh)\n" ); printf( "\n\t\t\t 2 -> - (afairesh)\n" ); printf( "\n\t\t\t 3 -> * (pollaplasiasmos)\n" ); printf( "\n\t\t\t 4 -> / (diairesh)\n" ); printf( "\n\t\t\t 5 -> / (exodos)\n" ); printf( "\n\tepilogh: " ); scanf( "%d",&choice ); switch(choice) //elegxos ths choice me ta cases case 1: result=num1+num2; break; case 2: result=num1-num2; break; case 3: result=num1*num2; break; 19

case 4: if (num2!=0) result=num1/num2; // num2!= 0 else printf( "\t\t ERROR: division by 0\n" ); break; case 5: printf("\nden EPILEXATE PRAXH *GEIA SAS*\n\n"); k=1; //gia na mhn typothei apotelesma break; default: printf( "\nlathos EPILOGH\n\n" ); k=1; //gia na mhn typothei apotelesma break; // TELOS THS switch if (k==0) printf( "\n\tto APOTELESMA EINAI: %10.2f\n\n",result ); // telos ths main Λειτουργία 1. Το πρόγραμμα παίρνει την επιλογή του χρήστη και την συγκρίνει με την τιμή της choice. Εάν είναι ίσες τότε εκτελεί την εντολή μετά το αντίστοιχο case (κάνει την πράξη) και βγαίνει από την switch, για να τυπώσει το αποτέλεσμα (εάν το k είναι 0). Σημ. το k λέγεται flag. 2. Στην περίπτωση 5 (έξοδος) τυπώνεται μήνυμα μη επιλογής πράξης, το flag k γίνεται 1, με την break φεύγουμε από την switch και δεν τυπώνεται το αποτέλεσμα!(k==0). 3. Στην περίπτωση που επιλέξουμε κάτι άλλο από τα 1,2,3,4,5 cases, η choice δεν είναι ίση με την εισηγμένη τιμή, η switch δεν εκτελείται, αλλά εκτελείται αυτό που βρίσκεται μετά την default (μήνυμα λάθους επιλογής και το flag k γίνεται 1). 20

ΒΡΟΧΟΙ ΒΡΟΧΟΣ WHILE Παράδειγμα 1 Το παρακάτω πρόγραμμα ζητάει από τον χρήστη να εισάγει μία ολόκληρη πρόταση και του την επιστρέφει μαζί με τον πλήθος των χαρακτήρων της. int c,count=0; printf("dose protasi\n"); while((c=getchar())!='\n') //elegxos ena-ena toys xarakthres //eosotou pathsoume to enter('\n') putchar(c); //typonei enan kathe fora count++; //metra olous toys xarakthres printf("\nplithos xaraktiron protashs = %d\n",count); Λειτουργία Στο παράδειγμά μας η συνθήκη στην while παίρνει έναν χαρακτήρα κάθε φορά (getchar) αρκεί να μην είναι το enter και εκτελεί το σώμα της while όπου τυπώνει τον χαρακτήρα (putchar) που δέχτηκε και αυξάνει έναν μετρητή (count). Όταν πατηθεί το enter η συνθήκη καθίσταται ψευδής και στην οθόνη τυπώνεται η τιμή του μετρητή εκείνη την στιγμή που είναι και το πλήθος των χαρακτήρων της πρότασης. Η συνάρτηση getchar() διαβάζει από το πληκτρολόγιο ένα χαρακτήρα χωρίς να δέχεται παραμέτρους όπως η scanf(). Παίρνει έναν χαρακτήρα από το πληκτρολόγιο χωρίς το πάτημα του πλήκτρου enter. Η συνάρτηση putchar() εμφανίζει στην οθόνη έναν μόνο χαρακτήρα. Και οι δύο ανήκουν στο αρχείο κεφαλίδας stdio.h. 21

Παράδειγμα 2 Το παρακάτω πρόγραμμα ζητάει από τον χρήστη να εισάγει δύο χαρακτήρες και αυτό τυπώνει όλους τους ενδιάμεσους char protos,deyteros; printf("dose dyo xarakthres kata seira: "); scanf("%s %s",&protos, &deyteros); printf("\n"); while (protos<=deyteros) //sygkrinontai oi ASCII times putchar(protos); //typose xarakthra protos++; //afkshse thn timh toy ASCII printf("\n"); Λειτουργία Εδώ εισάγονται δύο τιμές στις διευθύνσεις των δύο μεταβλητών (&protos, &deyteros). Κατόπιν εάν ισχύει η συνθήκη εισόδου τότε τυπώνεται ο πρώτος χαρακτήρας και αυξάνεται ο αντίστοιχός του ASCII. Αυτό θα επαναληφθεί (δηλαδή η εκτύπωση όλων των ενδιάμεσων χαρακτήρων) έως ότου γίνει ψευδής η συνθήκη και αφού θα έχει τυπώσει όλους τους ενδιάμεσους αλλά και τον δεύτερο χαρακτήρα που μπήκε από τον χρήστη. 22

ΒΡΟΧΟΣ FOR Παράδειγμα 1 Το παρακάτω πρόγραμμα ζητάει από τον χρήστη να εισάγει έναν ακέραιο και τον εκτυπώνει αντεστραμμένο. int i,ar; printf("dose enan arithmo: "); scanf("%d", &ar); for(i=ar;i>=1;i/=10) printf("%d", i%10); printf("\n"); Λειτουργία Η τιμή του εισαγόμενου αριθμού αρχικοποιεί τον μετρητή του βρόχου for. Έτσι εάν εισαχθεί για παράδειγμα ο αριθμός 3487, μέσα στο σώμα του βρόχου τυπώνεται το υπόλοιπο της διαίρεσης με το 10 που είναι το 7, κατόπιν το βήμα του for είναι το πηλίκο της διαίρεσης του i με το 10 που είναι το 348, δηλαδή ουσιαστικά τα 3 πρώτα ψηφία του αρχικού αριθμού. Αυτό συνεχίζεται εωσότου τυπωθεί ο αριθμός ανάποδα. 3487->7843 Αριθμός Έξοδος (i%10) Βήμα(i/=10) 3487 7 348 348 8 34 34 4 3 3 3 0 23

ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΒΡΟΧΟΥ FOR ΣΕ WHILE Παράδειγμα Το παρακάτω πρόγραμμα τυπώνει το πηλίκο της διαίρεσης με το 2 των ακεραίων αριθμών από το 10 έως το 1. #include<stdio.h> for(int n=10;n>0;n--) printf("%d\n",n/2); Το ίδιο με μετασχηματισμό σε while. #include<stdio.h> int n=10; while(n>0) printf("%d\n",n/2); n--; EΞΟΔΟΣ 5 10/2 4 9/2 4 8/2 3 7/2 3 6/2 2 5/2 2 4/2 1 3/2 1 2/2 0 1/2 24

ΒΡΟΧΟΣ DO / WHILE Παράδειγμα Το παρακάτω πρόγραμμα υπολογίζει τον μέσο όρο του πλήθους των αριθμών που εισάγονται από τον χρήστη. Η εισαγωγή των αριθμών σταματά όταν ο χρήστης πατήσει το 0. float num,sum=0.0; int count=0; do printf("dose arithmo (0 gia telos): "); scanf("%f",&num); if (num!=0) sum+=num; count++; while (num!=0); if (count!=0) printf("o M.O.einai: %.2f \n",sum/count); else printf("den ypologisthke o M.O.\n"); Λειτουργία Η if μέσα στο σώμα της do/while υπολογίζει το άθροισμα των αριθμών και μετρά το πλήθος τους. Ο βρόχος do/while θα λειτουργεί μέχρι να πληκτρολογηθεί το μηδέν. Η if μετά το βρόχο μας εξασφαλίζει ότι κατά τον υπολογισμό του μέσου όρου (sum/count) δεν θα γίνει διαίρεση με το μηδέν εάν εξ αρχής ο χρήστης πληκτρολογήσει το μηδέν οπότε και η τιμή του αθροίσματος θα είναι 0. 25

ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΒΡΟΧΟΥ FOR ΣΕ DO/WHILE Παράδειγμα Το παρακάτω πρόγραμμα τυπώνει το υπόλοιπο της διαίρεσης του 10 με τους αριθμούς από το 5 έως το 1. #include<stdio.h> for(int n=5;n>0;n--) printf("%d\n",5%n); Το ίδιο με μετασχηματισμό σε while. #include<stdio.h> int n=5; do printf("%d\n",5%n); n--; while(n>0); EΞΟΔΟΣ 0 5%5 1 5%4 2 5%3 1 5%2 0 5%1 26

ΒΡΟΧΟΣ ΕΜΦΩΛΕΥΜΕΝΟΥ FOR Παράδειγμα Το παρακάτω πρόγραμμα υπολογίζει τις 4 πρώτες δυνάμεις των αριθμών 1-9. int temp; printf(" i i^2 i^3 i^4\n"); for(int i=1;i<10;i++) temp=1; for(int j=1;j<5;j++) temp=(temp*i); printf("%5d",temp); printf("\n"); Λειτουργία Ο εξωτερικός βρόχος είναι αυτός των αριθμών από το 1 έως το 9 και ο εσωτερικός υπολογίζει τις 4 πρώτες δυνάμεις του κάθε αριθμού. EΞΟΔΟΣ i i 2 i 3 i 4 1 1 1 1 2 4 8 16 3 9 27 81 4 16 64 256 5 25 125 625 6 36 216 1296 7 49 343 2401 8 64 512 4096 9 81 729 6561 27

ΒΡΟΧΟΣ ΜΕ ΤΗΝ ΕΝΤΟΛΗ CONTINUE Παράδειγμα Το πρόγραμμα εμφανίζει μόνο τους άρτιους αριθμούς από το 0 έως το 100. int x; for(x=0;x<100;x++) if(x%2) continue; printf("%d\n",x); Λειτουργία Κάθε φορά που επαληθεύεται η συνθήκη της if, δηλαδή κάθε φορά που προκύπτει υπόλοιπο από την διαίρεση του αριθμού με το 2 (δηλαδή ο αριθμός είναι περιττός), η continue στέλνει την ροή του προγράμματος στην αρχή του βρόχου και ο αριθμός δεν τυπώνεται. ΒΡΟΧΟΣ ΜΕ ΤΗΝ ΕΝΤΟΛΗ BREAK Παράδειγμα Το πρόγραμμα εμφανίζει τους αριθμούς από το 1-100. int t; for(t=0;t<100;t++) printf("%d\n",t); if(t==10) break; Λειτουργία Εδώ το πρόγραμμα έχει φτιαχτεί για να μας εμφανίζει τους αριθμούς από το 1-100. Εάν επαληθευτεί η συνθήκη της if, δηλαδή τυπωθεί και ο αριθμός 10 τότε η break στέλνει την ροή του προγράμματος έξω από το βρόχο τυπώνοντας ουσιαστικά τους αριθμούς από το 1-10. 28

ΒΡΟΧΟΣ ΜΕ ΤΗΝ ΕΝΤΟΛΗ GOTO Παράδειγμα Το παρακάτω πρόγραμμα ζητάει από τον χρήστη να μαντέψει έναν αριθμό από το 1-100 μέχρι να βρει τον κρυφό αριθμό που είναι ήδη περασμένος στο πρόγραμμα. #include<stdio.h> int num, ar=77; mario: printf("mantepse enan ar apo 1-100\n"); scanf("%d",&num); if (num==ar) printf("ton vrhkes!!\n"); else printf("xanaprospathise!!\n"); goto mario; Λειτουργία Εδώ η εντολή goto πηγαίνει την ροή του προγράμματος στην ετικέτα Mario: αν ο αριθμός που εισήχθη είναι διαφορετικός από τον κρυφό δημιουργώντας έναν ψευδοβρόχο, εωσότου ο χρηστής πληκτρολογήσει τον σωστό αριθμό. Σημ. Το παραπάνω πρόγραμμα μπορούμε να το υλοποιήσουμε και με βρόχο do-while. 29

ΠΙΝΑΚΕΣ ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Παράδειγμα 1 Δήλωση και αρχικοποίηση μονοδιάστατου πίνακα [5] με χρήση δομής επανάληψης με συνθήκη στην είσοδο και μετρητή. int main() int myarray[5]; int i; for(i=0;i<5;i++)//loop 4 times printf("value for myarray[%d]:",i); scanf("%d", &myarray[i]); for(i=0;i<5;i++) printf("myarray[%d] is %d\n",i,myarray[i]); return 0; EΞΟΔΟΣ Εάν βάλουμε στον πίνακα τις τιμές 1,2,3,45,100: Value for myarray[0]:1 Value for myarray[0]:2 Value for myarray[0]:3 Value for myarray[0]:45 Value for myarray[0]:100 θα πάρουμε την έξοδο: myarray[0] is 1 myarray[0] is 2 myarray[0] is 3 myarray[0] is 45 myarray[0] is 100 Δήλωση και αρχικοποίηση με τις δοθείσες τιμές: int myarray[5]=1,2,3,45,100; 30

Παράδειγμα 2 Δήλωση ενός πίνακα 5 στοιχείων και εκτύπωση των τιμών των στοιχείων του αντίστροφα. int main() int Ar[5],i; for(i=0;i<5;i++) printf("%2d: ",i+1); scanf("%d", &Ar[i]); printf("oi times antistrofa einai:\n"); for(i=4;i>-1;i--) printf("%5d\n", Ar[i]); return 0; Λειτουργία Εδώ χρησιμοποιούμε βρόχο for για την εισαγωγή τιμών στον πίνακα με αρχικοποίηση στο 0 (πρώτο στοιχείο του πίνακα) και συνθήκη i<5. Για την εμφάνιση των τιμών του πίνακα αντίστροφα χρησιμοποιούμε βρόχο for με αρχικοποίηση στο 4 (τελευταίο στοιχείο του πίνακα) και φθίνουσα μέτρηση. 31

ΔΙΣΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Παράδειγμα 1 Δήλωση και αρχικοποίηση δισδιάστατου πίνακα [2Χ3] με χρήση δομής επανάληψης με συνθήκη στην είσοδο και μετρητή int myarray[2][3]; int i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) printf("value for myarray[%d][%d]:",i,j); scanf("%d", &myarray[i][j]); for(i=0;i<2;i++) for(j=0;j<3;j++) printf("myarray[%d][%d] is %d\n",i,j,myarray[i][j]); EΞΟΔΟΣ Εάν βάλουμε στον πίνακα τις τιμές 1,10,100,2,20,200 Είσοδος Value for myarray[0][0]:1 Value for myarray[0][1]:10 Value for myarray[0][2]:100 Value for myarray[1][0]:2 Value for myarray[1][1]:200 Value for myarray[1][2]:2000 θα πάρουμε την έξοδο: myarray[0][0] is 1 myarray[0][1] is 10 myarray[0][2] is 100 myarray[1][0] is 2 myarray[1][1] is 20 myarray[1][2] is 200 Δήλωση και αρχικοποίηση με τις δοθείσες τιμές: int myarray[2][3]=1,10,100,2,20,200 32

Παράδειγμα 2 Πρόγραμμα που αρχικοποιεί έναν δισδιάστατο πίνακα 3Χ4 με τιμές που του δίνει ο χρήστης και κατόπιν εμφανίζει στην έξοδο τα αθροίσματα των στοιχείων των στηλών και τα γινόμενα των στοιχείων των γραμμών εκχωρώντας τα αποτελέσματα των πράξεων σε δύο νέους πίνακες. #define R 3 #define C 4 int main() int i,j; float Ar[R][C],sum[4],prod[3]; //arxikopoihsh pinaka for(i=0;i<r;i++) for(j=0;j<c;j++) printf("\nstoixeio[%d][%d]: ",i,j); scanf("%f", &Ar[i][j]); for(j=0;j<c;j++) //athroisma sthlwn sum[j]=0.0; for(i=0;i<r;i++) sum[j]=sum[j]+ar[i][j]; for(i=0;i<r;i++) //ginomeno grammwn prod[i]=1.0; for(j=0;j<c;j++) prod[i]=prod[i]*ar[i][j]; printf("\nginomeno GRAMMWN:\n"); for(i=0;i<r;i++) printf("%.2f ",prod[i]); printf("\nathroisma STHLWN:\n"); for(j=0;j<c;j++) printf("%.2f ",sum[j]); return 0; 33

EΞΟΔΟΣ Για έναν πίνακα με τιμές: Γινόμενα γραμμών 5 2 3 4 120 1 7 8 9 504 6 2 1 1 12 Αθροίσματα στηλών 12 11 12 14 Σημ. Τις μεταβλητές που δέχονται αθροίσματα τιμών (sum) τις αρχικοποιούμε στην τιμή 0 και αυτές που δέχονται γινόμενα (prod) στο 1. Εάν δεν τις αρχικοποιήσουμε, οι μεταβλητές θα πάρουν τυχαίες αρχικές τιμές που θα αλλοιώσουν το τελικό αποτέλεσμα. Παράδειγμα3 Πρόγραμμα που βρίσκει και εμφανίζει το μικρότερο στοιχείο της κύριας και δευτερεύουσας διαγώνιου ενός ακέραιου πίνακα 5Χ5. include <stdio.h> #define R 5 #define C 5 int Ar[R][C], i,j,master_min,minor_min; for(i=0;i<r;i++) for(j=0;j<c;j++) printf("\nstoixeio[%d][%d]: ",i,j); scanf("%d", &Ar[i][j]); printf("\n"); master_min=ar[0][0]; \\ 1 Ο for(i=0;i<r;i++) if(ar[i][i]<master_min) stoixeio kyrias diagwniou master_min=ar[i][i]; minor_min=ar[0][c-1]; \\ 1 Ο stoixeio defterevousas diagon 34

for(i=0;i<r;i++) if(ar[i][c-1-i]<minor_min) minor_min=ar[i][c-1-i]; printf("\nmikr kyrias diag. einai to:%d \n",master_min); printf("\nmikr deyt. diag. einai to:%d \n",minor_min); EΞΟΔΟΣ Τα στοιχεία της κύριας διαγώνιου είναι τα: Ar[i][i] Ar[0][0], Ar[1][1], Ar[2][2], Ar[3][3], Ar[4][4]. Τα στοιχεία της δευτερεύουσας διαγώνιου είναι τα: Ar[i][j-1-i] Ar[0][4], [0] [5-1-0] Ar[1][3], [1] [5-1-1] Ar[2][2], [2] [5-1-2] Ar[3][1], [3] [5-1-3] Ar[4][0]. [4] [5-1-4] Π.χ. σε έναν πίνακα: 5 3 7 6 11 2 4 3 5 4 9 10 2 3 8 7 1 0 0 0 0 1 3 12 11 Η κύρια διαγώνιος είναι: Η δευτερεύουσα διαγώνιος είναι: 5 3 7 6 11 5 3 7 6 11 2 4 3 5 4 2 4 3 5 4 9 10 2 3 8 9 10 2 3 8 7 1 0 0 0 7 1 0 0 0 0 1 3 12 11 0 1 3 12 11 35

Παράδειγμα ΑΛΦΑΡΙΘΜΗΤΙΚΑ ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ ΑΛΦΑΡΙΘΜΗΤΙΚΟΥ char name[30]; printf( Poio einai to onoma soy?\n ); scanf( %s, name); printf( Geia soy %s \n, name); EΞΟΔΟΣ Poio einai to onoma soy? (Εισάγουμε Mario) Geia soy Mario ΜΕ ΤΗΝ ΧΡΗΣΗ ΤΩΝ gets() ΚΑΙ puts() #include <string.h> char name[30]; printf( Poio einai to onoma soy?\n ); gets(name); puts( Geia soy); puts(name); Σημ. Όταν σε κάποια συνάρτηση καλούμε την μεταβλητή αλφαριθμητικού, γράφουμε μόνο το όνομά της και όχι τον δείκτη των στοιχείων της. 36

ΣΥΝΑΡΤΗΣΕΙΣ ΑΛΦΑΡΙΘΜΗΤΙΚΩΝ ΕΥΡΕΣΗ ΜΗΚΟΥΣ strlen() #include <string.h> char name[30]= Hello ; printf( %d\n, strlen(name)); EΞΟΔΟΣ Θα τυπωθεί το μήκος του αλφαριθμητικού δηλαδή στην προκειμένη περίπτωση θα εκτυπωθεί ο αριθμός 5. ΤΟ ΙΔΙΟ ΜΕ ΕΚΧΩΡΗΣΗ ΣΕ ΜΕΤΑΒΛΗΤΗ. #include <string.h> int a; char name[30]= Hello ; a=strlen(name); printf( to mhkos toy %s einai %d\n, name, a); ΑΝΤΙΓΡΑΦΗ ΑΛΦΑΡΙΘΜΗΤΙΚΟΥ strcpy() #include <string.h> char name1[30]= hello ; char name2[30]= class ; strcpy(name1, name2); printf( %s n, name1); EΞΟΔΟΣ Το string του name2 θα καταχωρηθεί στο name1. Θα τυπωθεί το αλφαριθμητικό class που πήρε την θέση του Hello στον πίνακα name1. Με strncpy(name1, name2, n); Θα αντιγράψει τα n πρώτα γράμματα του name2 στο name1. 37

ΣΥΝΕΝΩΣΗ ΑΛΦΑΡΙΘΜΗΤΙΚΩΝ strcat() #include <string.h> char name1[30]= hello ; char name2[30]= class ; strcat(name1, name2); printf( %s n, name1); EΞΟΔΟΣ Το string του name2 θα συνενωθεί με το string του name1. Θα τυπωθεί το αλφαριθμητικό helloclass. Με strncat (name1, name2, n); Θα ενώσει τα n πρώτα γράμματα του name2 με το name1. ΣΥΓΚΡΙΣΗ ΑΛΦΑΡΙΘΜΗΤΙΚΩΝ strcmp() #include <string.h> char name1[30]= hello ; char name2[30]= class ; strcmp(name1, name2); EΞΟΔΟΣ Συγκρίνονται τα δύο αλφαριθμητικά και εάν βρεθούν όμοια η έξοδος της strcmp() είναι ο αριθμός 0 αλλιώς είναι ο -1. Σημ. Εδώ η έξοδος θα είναι 0. 38

Παράδειγμα1 Συνδυασμός των συναρτήσεων strcpy() και strcat() #include <string.h> char str1[30], str2[30]; strcpy(str1, Kalhmera!! ); strcpy(str2, Paidia!! ); printf( String1=%s\t string2=%s \n,str1,str2); strncat(str1,str2,3); printf( String1=%s \n,str1); strcpy(str1, Kalhnyxta ); printf( String1=%s \n,str1); EΞΟΔΟΣ Τα str1 Και str2 θα πάρουν τα strings Kalhmera και Paidia αντίστοιχα. Θα τυπωθεί στην αρχή: String1=Kalhmera!! String2=Paidia!! Μετά τη συνένωση του πρώτου string και των 3 πρώτων χαρακτήρων του δεύτερου θα έχουμε: String1=Kalhmera!! Pai Στο τέλος το str1 θα πάρει το string Kalynyxta και θα έχουμε: String1=Kalhnyxta 39

Παράδειγμα2 Συνδυασμός των συναρτήσεων strcpy() και strcmp() και δομή επιλογής if/else. #include <string.h> char name1[30]="kalhmera"; char name2[30]="kalhspera"; int diff; diff=strcmp(name1,name2); if(diff==0) printf("ta strings einai idia\n"); else printf("ta strings den einai idia\n"); printf("to diff einai %d\n", diff); strcpy(name2,name1); diff=strcmp(name1,name2); if(diff==0) printf("ta strings einai idia\n"); else printf("ta strings den einai idia\n"); printf("to diff einai %d\n", diff); EΞΟΔΟΣ Στην αρχή τα strings είναι Kalhmera και Kalhspera. Αφού συγκριθεί το πλήθος των χαρακτήρων των δύο μεταβλητών με την συνάρτηση strcmp() το αποτέλεσμα εκχωρείται στην μεταβλητή diff. Στη έξοδο θα τυπωθεί: Ta strings den einai idia To diff einai -1 Κατόπιν αντιγράφουμε το string του name1 στο name2. Τώρα οι δύο μεταβλητές έχουν τι ίδιο μήκος αλφαριθμητικού άρα το ίδιο πλήθος χαρακτήρων. Στη έξοδο θα τυπωθεί: Ta strings einai idia To diff einai 0 40

ΣΥΝΑΡΤΗΣΕΙΣ ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ ΜΕ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ #include <iostream.h> int compare_numbers(int num1, int num2); int main().... return 0; int compare_numbers(int num1, int num2) if (num1>mum2) return (num1); ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ ΧΩΡΙΣ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ #include <iostream.h> void compare_numbers(int num1, int num2); int main().... return 0; void compare_numbers(int num1, int num2) if (num1>mum2) printf( max=%d\n, num1); else printf( max=%d\n, num1); 41

ΤΟΠΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ Το παρακάτω πρόγραμμα δείχνει την συμπεριφορά των τοπικών μεταβλητών. #include<stdio.h> int tetragono(int a); int x, y; // y-topikh metavlhth ths main x=3; y=tetragono(x); printf("to y ths main einai=%d\n", y); printf("to tetragono toy %d einai %d\n", x, y); int tetragono(int a) int y=10; // y-topikh metavlhth ths tetragono printf("to y ths tetragono einai=%d\n", y); return(a*a); EΞΟΔΟΣ To y ths tetragono einai 10 To y ths main einai 9 To tetragono toy 3 einai 9 Press any key to continue ΠΙΝΑΚΑΣ ΩΣ ΠΑΡΑΜΕΤΡΟΣ ΣΥΝΑΡΤΗΣΗΣ void func_arr(int Pin[]); //dhlosh synarthshs int A[10],i; for(i=0;i<=9;i++) A[i]=i; func_arr(a); /* klhsh synsrthshs me apostolh toy pinaka A */ void func_arr(int Pin[]) //orismos synarthshs int k; for(k=0;k<=9;k++) printf("%d\n",pin[k]); 42

Λειτουργία Σε αυτό το πρόγραμμα αρχικοποιούμε τον πίνακα Α[10] με τις τιμές που παίρνει ο μετρητής του βρόχου και μετά καλούμε την συνάρτηση func_arr() με όρισμα το όνομα του πίνακα Α. η συνάρτηση με την σειρά της τυπώνει τι τιμές του πίνακα Pin[ ] τις οποίες έχει δεχθεί από τον πίνακα Α[ ]. ΠΟΛΛΕΣ ΕΝΤΟΛΕΣ ΕΠΙΣΤΡΟΦΗΣ (ΧΡΗΣΗ ΤΗΣ ΓΛΩΣΣΑΣ C++) Το παρακάτω πρόγραμμα δέχεται ένα ποσό που του δίνει ο χρήστης μεταξύ 0 και 1000 και το διπλασιάζει. Εάν το ποσό που εισήχθη είναι μεγαλύτερο από 1000 βγάζει μήνυμα λάθους. #include <iostream.h> int diplasio(int posogiadiplasiasmo); int main() int apotelesma=0; int posoeisagomeno; cout<<"dose poso metaxy 0 kai 10000 gia na to diplasiaso: "; cin>>posoeisagomeno; cout<<"\nprin kaleso thn diplasio... "; cout<<"\neisagomeno poso: "<<posoeisagomeno<<" Diplasio: "<<apotelesma<<"\n"; apotelesma=diplasio(posoeisagomeno); if (apotelesma==-1) cout<<"\nepistrofh apo thn diplasio...\n"; cout<<"to poso pou edoses einai megalytero apo 10000\n\n"; else cout<< "\nepistrofh apo thn diplasio..."; cout<< "\neisagomeno poso: "<<posoeisagomeno<< "Diplasio: "<<apotelesma<< "\n\n"; return 0; int diplasio(int pragmatiko) 43

if (pragmatiko<=10000) return (pragmatiko*2); else return -1; ΔΙΠΛΗ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ ΠΕΡΑΣΜΑ ΟΡΙΣΜΑΤΩΝ ΜΕ ΤΙΜΗ (ΠΑΡΑΜΕΤΡΟΙ ΣΑΝ ΤΟΠΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ) Το παρακάτω πρόγραμμα κάνει αλλαγή θέσης 2 τιμών τοπικών μεταβλητών χωρίς να επηρεάζονται οι αρχικές μεταβλητές. #include <iostream.h> void swap(int x, int y); int main() int a,b; cout<<"dose a: "<<endl; cin>>a; cout<<"dose b: "<<endl; cin>>b; cout<<"main. Prin to swap, a: "<<a<<" b: "<<b<<"\n"; swap(a,b); cout<<"main. Meta to swap, a: "<<a<<" b: "<<b<<"\n"; return 0; void swap(int x, int y) int temp; cout<<"swap. Prin to swap, x: "<<x<<" y: "<<y<<"\n"; temp=x; x=y; y=temp; cout<<"swap. Meta to swap, x: "<<x<<" y: "<<y<<"\n"; Λειτουργία Σε αυτό το πρόγραμμα ένα αντίγραφο των τιμών των μεταβλητών a,b περνούν στις x,y. Στην έξοδο έχουμε την αντιστροφή των μεταβλητών x,y χωρίς να επηρεαστούν οι τιμές των μεταβλητών a,b. 44

ΣΥΝΑΡΤΗΣΗ ΜΕ ΑΝΑΔΡΟΜΗ Το παρακάτω πρόγραμμα υπολογίζει το παραγοντικό ενός αριθμού. Ισχύει ότι: n!=1 αν n=0 και n!=n*(n-1) αν n>0. #include <iostream.h> long paragontiko(long n); //dhlosh prototypou int main() long arithmos; cout<<"dose enan arithmo: "<<endl; cin>>arithmos; // exodos me klhsh ths synarthshs cout<<arithmos<<"!=" <<paragontiko(arithmos)<<endl; return 0; //telos ths main long paragontiko(long n) //orismos synarthshs if (n>1) return (n*paragontiko(n-1)); else return 1; //telos synarthshs Λειτουργία Πχ. Εάν το n=5 τότε η συνάρτηση καλεί τον εαυτό της με όρισμα n-1 μέχρι το παραγοντικό του 0 όπου και σταματά λόγω της συνθήκης του if όπου θα επιστρέψει 1 δηλαδή: Επιστρέφει 120 5 * paragontiko(4) 4 * paragontiko(3) 3 * paragontiko(2) 2 * paragontiko(1) 1 * paragontiko(0) Επιστρέφει 24 Επιστρέφει 6 Επιστρέφει 2 Επιστρέφει 1 Εάν το n=0 τότε η συνάρτηση δεν τρέχει τον εαυτό της αλλά επιστρέφει 1 που ουσιαστικά είναι το παραγοντικό του 0. 45

ΣΥΝΑΡΤΗΣΗ ΜΕ ΕΠΑΝΑΛΗΨΗ Το παρακάτω πρόγραμμα υπολογίζει την δύναμη ενός αριθμού. Ο αριθμός και η δύναμη θα εισάγεται από το χρήστη. Ισχύει: x n = x*x*x*..*x, n φορές. #include <iostream.h> int power(int x, int n); //dhlosh synarthshs int main() int a,b,dynamh; cout<<"dose ton arithmo: "<<endl; cin>>a; cout<<"dose thn dynamh: "<<endl; cin>>b; dynamh=power(a,b); //klhsh ths synarthshs cout<<"to "<<a<<"sthn"<<b<<" mas kanei: <<dynamh<<endl; return 0; //telos ths main int power(int x, int n) //orismos synarthshs int i,p; p = 1; for (i=1; i<=n; i++) p = p*x; return p; //telos synarthshs 46

ΠΡΟΚΑΘΟΡΙΣΜΕΝΕΣ ΤΙΜΕΣ ΠΑΡΑΜΕΤΡΩΝ Το παρακάτω πρόγραμμα υπολογίζει τον όγκο ενός κύβου με την χρήση προκαθορισμένων τιμων. #include <iostream.h> int ogkoskyvou(int mhkos, int platos = 30, int ypsos = 2); int main() int mhkos = 50; int platos = 20; int ypsos = 5; int ogkos; ogkos = ogkoskyvou(mhkos, platos, ypsos); cout <<"1h Klhsh Synarthshs o ogkos einai: "<<ogkos<<"\n"; ogkos = ogkoskyvou(mhkos, platos); cout <<"2h Klhsh Synarthshs o ogkos einai: "<<ogkos<<"\n"; ogkos = ogkoskyvou(mhkos); cout <<"3h Klhsh Synarthshs o ogkos einai: "<<ogkos<<"\n"; return 0; ogkoskyvou(int mhkos, int platos, int ypsos) return (mhkos * platos * ypsos); Λειτουργία Εδώ το πρόγραμμα θα χρησιμοποιήσει (καλέσει) την συνάρτηση 3 φορές με διαφορετικές κάθε φορά παραμέτρους κατά την κλήση. Την πρώτη φορά θα υπολογιστεί ο όγκος χρησιμοποιώντας τις τιμές των παραμέτρων που έχουν οριστεί μέσα στην main. Την δεύτερη φορά χρησιμοποιώντας τις τιμές δύο εκ των παραμέτρων που έχουν οριστεί μέσα στην main και την τελευταία στη σειρά στο πρωτότυπο και τη τρίτη φορά χρησιμοποιώντας την τιμή της μιας παραμέτρου που έχει οριστεί μέσα στην main και την 2 η και 3 η κατά σειρά στο πρωτότυπο. 47

ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΗΣ ΑΠΟ ΣΥΝΑΡΤΗΣΗ Το παρακάτω πρόγραμμα με την χρήση συναρτήσεων βρίσκει εάν ο αριθμός που εισάγει ο χρήστης είναι άρτιος ή περιττός. Εάν δοθεί σαν επιλογή ο αριθμός 0 τότε το πρόγραμμα να τερματίζει. #include <iostream.h> void peritos(int a); void artios(int a); int main() int i; do cout<<"dose enan arithmo (0 gia EXODO): "; cin>>i; peritos(i); while (i!=0); return 0; void peritos(int a) if ((a%2)!=0) ΚΛΗΣΗ ΤΗΣ ΣΥΝΑΡΤΗΣΗΣ artios(a) ΜΕΣΑ ΣΤΗ ΣΥΝΑΡΤΗΣΗ peritos(a) cout<<"o arithmos pou edoses einai PERITOS.\n"; else artios(a); void artios(int a) if ((a%2)==0) cout<<"o arithmos pou edoses einai ARTIOS.\n"; else peritos(a); Λειτουργία Εδώ το πρόγραμμα θα βρει εάν ο αριθμός που εισήχθη είναι άρτιος ή περιττός με την χρήση κλήσης συνάρτησης από συνάρτηση. Η πρώτη συνάρτηση καλείται μέσα στην main. Εκεί ελέγχεται εάν ο αριθμός που εισήχθη είναι το 0 κάτι που προκαλεί το τερματισμό του προγράμματος. Στην πρώτη συνάρτηση (peritos) ελέγχεται εάν το υπόλοιπο της διαίρεσης του αριθμού δεν είναι 0 τότε ο αριθμός είναι περιττός αλλιώς καλείται η δεύτερη συνάρτηση (artios) που ελέγχει με την σειρά της εάν ο αριθμός είναι άρτιος. 48

INLINE ΣΥΝΑΡΤΗΣΕΙΣ Το παρακάτω πρόγραμμα διπλασιάζει 3 φορές διαδοχικά μια τιμή εισόδου με την χρήση INLINE συνάρτησης. #include <iostream.h> inline int Diplasio(int); int main() int timh; cout<<"dose MIA TIMH: "; cin>>timh; cout<<"\ndiadoxikos DIPLASIASMOS TIMHS\n"; cout<<"\narxikh TIMH: "<<timh<<endl; timh=diplasio(timh); cout<<"timh1 (ARXIKH TIMH x 2): "<<timh<<endl; timh=diplasio(timh); cout<<"timh2 (TIMH1 x 2): "<<timh<<endl; timh=diplasio(timh); cout<<"timh3 (TIMH2 x 2): "<<timh<<endl; cout<<endl; return 0; int Diplasio(int timh) return 2*timh; Λειτουργία Εδώ έχουμε ορίσει μία inline συνάρτηση (Diplasio) που την καλούμε μέσα στην main τρεις φορές. Ουσιαστικά ο compiler αντιγράφει τον κώδικα της συνάρτησης σε κάθε σημείο της main που καλείται η συνάρτηση. Με αυτό τον τρόπο δεν έχουμε τρεις μεταπηδήσεις από την main στην συνάρτηση και έτσι κερδίζουμε χρόνο κατά την εκτέλεση του προγράμματος. Χρησιμοποιούμε inline συναρτήσεις όταν η συνάρτηση έχει μία έως δύο εντολές και χρειάζεται να την καλέσουμε μέσα στην main πολλές φορές. 49

ΥΠΕΡΦΟΡΤΩΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Το παρακάτω πρόγραμμα χρησιμοποιεί μία συνάρτηση με υπερφόρτωση ώστε να κάνει τα εξής: I. Να τυπώνει στην οθόνη 50 μηδενικά (0), II. Να τυπώνει στην οθόνη 50 χαρακτήρες που θα καθορίζονται από την κλήση της συνάρτησης και III. Να τυπώνει στην οθόνη χαρακτήρες που ο χαρακτήρας αλλά και ο αριθμός των χαρακτήρων να καθορίζονται στην κλήση της συνάρτησης. #include <iostream.h> void printfunc(); void printfunc(char ch); void printfunc(char ch, int n); printfunc(); printfunc('/'); printfunc('%',40); void printfunc() int i; for (i=0; i<50; i++) cout << "0"; cout << endl; void printfunc(char ch) int i; for (i=0; i<50; i++) cout << ch; cout << endl; void printfunc(char ch, int n) int i; for (i=0; i<n; i++) cout << ch; cout << endl; 50

ΥΠΕΡΦΟΡΤΩΣΗ ΣΥΝΑΡΤΗΣΕΩΝ (ΜΕ ΠΡΟΕΠΙΛΕΓΜΕΝΑ ΟΡΙΣΜΑΤΑ) Το παρακάτω πρόγραμμα χρησιμοποιεί μία συνάρτηση με υπερφόρτωση και προεπιλεγμένα ορίσματα - και 50 #include <iostream.h> void printfunc(char ch='-', int n=50); printfunc(); printfunc('/'); printfunc('%',40); void printfunc(char ch, int n) int i; for (i=0; i<n; i++) cout << ch; cout << endl; Λειτουργία Εδώ το πρόγραμμα θα χρησιμοποιήσει (καλέσει) την συνάρτηση 3 φορές. Την πρώτη φορά το loop που βρίσκεται μέσα στον ορισμό της συνάρτησης θα χρησιμοποιήσει και τα δύο προεπιλεγμένα ορίσματα που βρίσκονται μέσα στο πρωτότυπο. Την δεύτερη φορά θα χρησιμοποιήσει το όρισμα της κλήσης συνάρτησης και το δεξί του πρωτοτύπου και την τρίτη φορά θα χρησιμοποιήσει τα ορίσματα που βρίσκονται στη κλήση της συνάρτησης. 51

ΔΟΜΕΣ ΟΡΙΣΜΟΣ ΔΟΜΗΣ Παράδειγμα 1 Το παρακάτω πρόγραμμα ορίζει μια δομή για να καταχωρήσει τα στοιχεία ενός φοιτητή. #include <string.h> struct foit_entry //orismos domhs int f_code; //melos ths domhs char f_fname[15]; char f_lname[15]; float vathmos; foithths1; //dhlosh metavlhths domhs // eisagwgh stoixeiwn foithths1.f_code=001; strcpy(foithths1.f_fname, "George") ; strcpy(foithths1.f_lname, "Panou"); foithths1.vathmos=7.5; // emfanish stoixeiwn printf("stoixeia tou foithth:\n"); printf("kwdikos:%d\n", foithths1.f_code); printf("onma:%s\n", foithths1.f_fname); printf("epwnymo:%s\n", foithths1.f_lname); printf ("Vathmos:%.2f\n", foithths1.vathmos); Λειτουργία Μέσα στην main ορίζουμε μια δομή με όνομα foit_entry, δημιουργώντας ταυτόχρονα τη μεταβλητή foithths1 της δομής. Μετά εισάγουμε τα στοιχεία της μεταβλητής με την σειρά που είναι δηλωμένα στην δομή και κατόπιν τα εμφανίζουμε στην οθόνη. Εδώ οι τιμές των μελών της μεταβλητής της δομής καταχωρούνται κατευθείαν μέσα από το πρόγραμμα. 52

Παράδειγμα 2 Στο παρακάτω πρόγραμμα ορίζουμε μια δομή όπως στο προηγούμενο παράδειγμα, αλλά καταχωρούμε τα στοιχεία ενός φοιτητή από το πληκτρολόγιο. struct foit_entry //orismos domhs int f_code; //melos ths domhs char f_fname[15]; char f_lname[15]; float vathmos; foithths1; //dhlosh metavlhths domhs // eisagwgh timwn printf("dwse Kwdiko: "); scanf("%d",foithths1.f_code); getchar(); printf("dwse Onoma: "); gets(foithths1.f_fname); printf("dwse Epwnymo: "); gets(foithths1.f_lname); printf("dwse Vathmo: "); scanf("%f", foithths1.vathmos); ΔΟΜΕΣ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ struct foithths //orismos domhs char f_name[15]; char l_name[15]; int Vathmos; ; //telos domhs //dhlwsh synarthshs eisagwghs timwn struct foithths entry(struct foithths); //dhlwsh synarthshs emfanishs timwn void show(struct foithths); struct foithths x; x=entry(x) ; ΤΥΠΟΣ ΕΠΙΣΤΡΟΦΗΣ ΣΥΝΑΡΤΗΣΗΣ ΤΥΠΟΣ ΠΑΡΑΜΕΤΡΟΥ ΣΥΝΑΡΤΗΣΗΣ ΟΝΟΜΑ ΣΥΝΑΡΤΗΣΗΣ 53

show(x) ; //end of main // orismos synarthshs eisagwghs stoixeiwn struct foithths entry(struct foithths a) printf("dwse Onoma: "); gets(a.f_name); printf("dwse Epwnymo: "); gets(a.l_name); printf("dwse Vathmo: "); scanf("%d", &a.vathmos); return a; // orismos synarthshs emfanishs stoixeiwn void show(struct foithths a) printf ("\nta stoixeia toy foithth einai:\n"); printf("onoma:%s\n", a.f_name); printf("epwnymo:%s\n", a.l_name); printf("vathmos:%d\n", a.vathmos); Λειτουργία Σε αυτό το πρόγραμμα ορίζουμε μια δομή και την χρησιμοποιούμε πλέον σαν τύπο για άλλες μεταβλητές ή συναρτήσεις. Δηλαδή στην πρόταση: struct foithths entry(struct foithths) δηλώνεται η συνάρτηση entry με τύπο επιστροφής struct foithths και τύπο ορίσματος τον ίδιο. Στον ορισμό της συνάρτησης αυτής βλέπουμε ότι θα επιστραφεί η μεταβλητή a, που είναι του ίδιου τύπου με τα παραπάνω, δηλαδή θα επιστραφούν όλες οι τιμές των μελών της μεταβλητής x της δομής, που μεταβιβάζεται σαν παράμετρος στην συνάρτηση. Στην main βλέπουμε ότι φτιάχνουμε μία μεταβλητή της δομής foithths και την ονομάζουμε x. Κατόπιν καλούμε την συνάρτηση entry και της μεταβιβάζουμε ως παράμετρο την μεταβλητή x με τα μέλη της μεταβλητής χωρίς τιμές. Όταν επιστρέψει η συνάρτηση θα καταχωρήσει στην x τις τιμές των μελών που εισήχθησαν. Τέλος για να δούμε τα στοιχεία που έχουν τα μέλη της μεταβλητής x καλούμε την συνάρτηση show με όρισμα την μεταβλητή x που πλέον έχει τιμές στα μέλη της. 54

ΕΝΘΕΤΕΣ ΔΟΜΕΣ struct address //domh diefthinshs char odos[15]; char polh[15]; char tax_cod[6]; char thlefwno[11]; ; //telos domhs struct foithths //domh foithth int f_code; char f_name[15]; char l_name[15]; struct address f_address; //en8eth domh float Vathmos; ; //telos domhs //dhlosh metavlhths foit1 kai eisagogh stoixeiwn struct foithths foit1=1,"giorgos", "ATHANASIOU", "DHMOSTHENOUS 1", "IOANNINA", "12546", "2569-56325", 8.0; //ektypwsh apo thn arxikh domh printf("o foithths: %s\n", foit1.l_name); //ektypwsh apo thn en8eth domh printf("menei sthn polh: %s\n", foit1.f_address.polh); printf("o Vathmos toy einai: %2.1f\n", foit1.vathmos); //telos ths main Λειτουργία Σε αυτό το πρόγραμμα φτιάχνουμε δύο δομές foithths και address. Η δομή address θα δηλωθεί ως ένθετη μέσα στην δομή foithths. Στην main θα δηλώνουμε τη μεταβλητή foit1 της δομής foithths με ταυτόχρονη εισαγωγή στοιχείων σε όλα τα μέλη και των δύο δομών κατά σειρά. (Δηλαδή κωδικός, όνομα, επώνυμο, διεύθυνση, πόλη, ταχ. κωδικός, τηλέφωνο και βαθμός). Στο τέλος ζητάμε από το πρόγραμμα να μας επιστρέψει το επώνυμο (foit1.l_name) την πόλη (foit1.f_address.polh) και τον βαθμό του φοιτητή (foit1.vathmos) με την βοήθεια πάντα του τελεστή τελεία (.) 55

ΔΟΜΕΣ ΚΑΙ ΠΙΝΑΚΕΣ #include<stdio.h> #define N 10 struct foithtes //domh int code; char name[20]; char lastname[20]; float vathmos; ; //telos domhs struct foithtes foithths[n]; // pinakas N metablhtwn printf("----esagwgh Stoixeiwn----\n\n"); for(int i=0;i<n;i++) //Vroxos eisagwghs stoixeiwn printf("%dos Foithths\n",i+1); printf("kwdikos: "); scanf("%d", &foithths[i].code); printf("onoma: "); scanf("%s", foithths[i].name); printf("epwnymo: "); scanf("%s", foithths[i].lastname); printf("vathmos: "); scanf("%f", &foithths[i].vathmos); printf("\n"); //telos Vroxou eisagwghs printf("----emfanish Stoixeiwn----\n"); for(i=0;i<n;i++) //Vroxos emfanishs stoixeiwn printf("%dos Foithths\n",i+1); printf("kwdikos: %d\n", foithths[i].code); printf("onoma: %s\n", foithths[i].name); printf("epwnymo: %s\n", foithths[i].lastname); printf("vathmos: %2.1f\n", foithths[i].vathmos); printf("\n"); //telos Vroxou emfanishs //telos main Λειτουργία Σε αυτό το πρόγραμμα δηλώνουμε μέσα στην main πίνακα Ν μεταβλητών foithths[n] και κατόπιν με δύο βρόχους for εισάγουμε και τυπώνουμε στοιχεία. 56

ΠΑΡΑΔΕΙΓΜΑ #include<stdio.h> #include<math.h> //xrhsh mathimatikwn synarthsewn struct shmeio //orismos domhs float a,b; ; //telos domhs //protwtypo synarthshs float apostash(struct shmeio, struct shmeio); struct shmeio shm1, shm2; //metavlhtes domhs printf ("Syntetagmenes 1ou shmeiou: "); printf ("(Vazoyme keno anamesa) "); scanf ("%f %f", &shm1.a, &shm1.b); printf("syntetagmenes 2ou shmeiou: "); printf ("(Vazoyme keno anamesa) "); scanf ("%f %f", &shm2.a, &shm2.b); //ektypwsh twn stoixeiwn me klhsh synarthshs //gia ton ypologismo ths apostashs printf("h apopstash metaxy (%.2f, %.2f) kai (%.2f, %.2f) einai %.2f\n", shm1.a, shm1.b, shm2.a, shm2.b, apostash(shm1, shm2)); //orismos synarthshs poy //ypologizei thn apostash float apostash (struct shmeio a1, struct shmeio a2) return sqrt(pow((a1.a-a2.a),2) + pow((a1.b-a2.b),2)); Λειτουργία Σε αυτό το πρόγραμμα δηλώνουμε δύο σημεία πάνω στο επίπεδο, της μορφής shm1(a1,b1) shm2(a2,b2) και υπολογίζουμε την απόσταση μεταξύ τους, με βάση την εφαρμογή του πυθαγόρειου θεωρήματος, σε 2 2 σύστημα συντεταγμένων: ( a1 2) ( 1 2). Η συνάρτηση apostash παίρνει τα μέλη a,b των μεταβλητών shm1,shm2 της δομής shmeio και επιστρέφει το μήκος του ευθύγραμμου τμήματος, που ορίζεται από τα 2 σημεία στο επίπεδο. Για την λύση χρησιμοποιούμε την μαθηματική συνάρτηση δύναμης pow(vash,dynamh), αλλά και την συνάρτηση τετραγωνικής ρίζας sqrt(), 57

από το αρχείο επικεφαλίδας math.h, το οποίο και συμπεριλαμβάνουμε στο πρόγραμμά μας. Την έξοδο την παίρνουμε συνδυασμένα, με την συνάρτηση μορφοποιημένης εξόδου scanf(), όπου εμφανίζουμε και τις συντεταγμένες των σημείων που επιλέξαμε, αλλά και το αποτέλεσμα, καλώντας μέσα στην scanf() την συνάρτηση apostash. 58