242 -ΕισαγωγήστουςΗ/Υ

Σχετικά έγγραφα
Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

242 -ΕισαγωγήστουςΗ/Υ

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Εργαστήριο 3 Εντολή for while, do while

Δομές Επανάληψης. Εισαγωγή στη C++

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Μεθόδων Επίλυσης Προβλημάτων

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

242 -ΕισαγωγήστουςΗ/Υ

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Συναρτήσεις και διαδικασίες

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

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

Συµβολοσειρές - Strings

Η βασική συνάρτηση προγράμματος main()

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

Εισαγωγή στην πληροφορική

είκτες και Πίνακες (2)

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Ηβασικήσυνάρτηση προγράμματος main()

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Προγραµµατιστικές Τεχνικές

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

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

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

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

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

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

for for for for( . */

12. Συναρτήσεις (Μέρος ΙI)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολές for, while, do-while Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Πληροφορική 2. Γλώσσες Προγραμματισμού

Συναρτήσεις και Πίνακες

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Πληροφορική 2. Αλγόριθμοι

Υπολογιστικά Mαθηματικά II

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

Μεθόδων Επίλυσης Προβλημάτων

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Επεξεργασία Αρχείων Κειµένου

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Προγραμματισμός Αναδρομή

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

Εισαγωγή στην πληροφορική

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

Διάλεξη 15η: Αναδρομή, μέρος 1ο

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

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

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

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

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

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

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

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

Προγραμματισμός Αναδρομή

Παίρνοντας Αποφάσεις 1

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Προγραμματισμό για ΗΜΥ

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Η βασική λειτουργία σε όλες αυτές τις συναρτήσεις είναι η εκτύπωση γραµµών.

Εισαγωγή στην πληροφορική

Συναρτήσεις (Functions) Εισαγωγή στη C++

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

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

lab9grades Άσκηση 1 - Σωστοί τύποι (παραµέτρων και επιστρεφόµενης τιµής) της series_cosh.

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Transcript:

1 242 -ΕισαγωγήστουςΗ/Υ ΤµήµαΜαθηµατικών, Πανεπιστήµιο Ιωαννίνων Άρτια Α.Μ. (0-2-4-6-8)

Συναρτήσεις 2

3 Συναρτήσεις Συναρτήσεις Έτοιµος κώδικας για συγκεκριµένους υπολογισµούς στην C/C++ Προγράµµατα χρησιµοποιούν συναρτήσεις οριζόµενες από χρήστη και συναρτήσεις από τις βιβλιοθήκες της C/C++ C/C++ βιβλιοθήκες έχουν πολλές συναρτήσεις για ευρύ φάσµα υπολογισµών και εφαρµογών ήλωση συνάρτησης Όνοµα Παραµέτρους Τύπο επιστρεφόµενης τιµής Σώµα: τοπικές µεταβλητές, εκτελούµενες εντολές Κλήση συναρτήσεων Γίνεται κατά την χρήση της συνάρτησης ίνουµε όνοµα και παραµέτρους (δεδοµένα) Η συνάρτηση εκτελεί υπολογισµούς ή άλλους χειρισµούς Επιστέφει αποτελέσµα

4 Βιβλιοθήκη Math Συναρτήσεις Κοινές µαθηµατικές συναρτήσεις #include <cmath> Συντακτικό κλήσης FunctionName( arg1, arg2,, argn); sqrt( 900.0 ); Καλεί την συνάρτηση υπολογισµού της τετραγωνικής ρίζας ενός πραγµατικού Όλες οι συναρτήσεις της βιβλιοθήκης math επιστέφουν τύπο double Οι παράµετροι της cmath µπορεί να είναι σταθερές µεταβλητέςηεκφράσεις.

5 Συναρτήσεις Οι συναρτήσεις Βοηθούν στην καλύτερη δόµηση του προγράµµατος το εκλεπτύνουν Όλες οι µεταβλητές που δηλώνονται µέσα στην συνάρτηση είναι τοπικές Είναι γνωστές µόνο στην συνάρτηση Παράµετροι επικοινωνία πληροφοριών µεταξύ συναρτήσεων (και κυρίου προγράµµατος) Τοπικές µεταβλητές τοπικά αποτελέσµατα Οφέλη Μικρότερα κοµµάτια κώδικα για εξειδικευµένους υπολογισµούς βοηθούν στην εκλέπτυνση της λύσης του προβλήµατος και στη διαχείριση του προγράµµατος Επαναχρησιµοποίηση συναρτήσεων (και χωρίς να γνωρίζουµε πως έχουν υλοποιηθεί στην βιβλιοθήκη) εν επαναλαµβάνουµε κώδικα στο πρόγραµµα µας

6 ήλωση συναρτήσεων ήλωση και ορισµός συνάρτησης Τύπος_επιστρεφόµενης_τιµής Όνοµα_συνάρτησης(Λίστα παραµέτρων) { δηλώσεις και εντολές } Όνοµα_συνάρτησης: προσδιοριστή όπως οι µεταβλητές Τύπος_επιστρεφόµενης_τιµής: (εξ ορισµού int) void αν δεν επιστρέφει τίποτα Λίστα παραµέτρων: δηλώνουµε τύπο και όνοµα παραµέτρου, χωρίζουµε µε κόµµα

7 ήλωση συναρτήσεων.. ήλωση και ορισµός συνάρτησης Τύπος_επιστρεφόµενης_τιµής Όνοµα_συνάρτησης(Λίστα παραµέτρων) { δηλώσεις και εντολές } δηλώσεις και εντολές: σώµα συνάρτσξης Μεταβλητές Εντολές Έλεγχος επιστρέφει στο σηµείο κλήσεις της συνάρτησης Εάν δεν επιστρέφει τιµή Μόλις εκτελεστεί η return; Ηότανφτάσειστητελευταίαδεξιά «}» Εάν επιστρέφει τιµή Μόλις εκτελεστεί η return expression;

8 Πρότυπο συνάρτησης Όνοµα συνάρτησης Παράµετροι Πρότυπα συναρτήσεων Τύπος επιστρεφόµενης τιµής Πρότυπο χρειάζεται µόνο αν η δήλωση της συνάρτησης δίνεται µετά την κλήση της στο πρόγραµµα Παράδειγµα int maximum( int, int, int ); παράµετροι είναι 3 ακέραιοι Επιστρέφει ακέραιο Ονόµατα παραµέτρων µπορούν να παραλειφθούν αλλά µπορούν αν δοθούν για καλύτερη αναγνωσιµότητα κώδικα int maximum( int x, int y, int z );

9 Παράµετροι Τυπικές / πραγµατικές παράµετροι Η παράµετροι που ορίζονται στην δήλωση των συναρτήσεων ονοµάζονται τυπικές παράµετροι εν αντιθέσει µε την παράµετρο που χρησιµοποιούµε στην κλήση της συνάρτησηςηοποίεςονοµάζονταιπραγµατικέςπαράµετροι. Οι δύο αυτοί τύποι παραµέτρων πρέπει να συµφωνούν σε τύπο, σειρά και πλήθος. Κατά την κλήση η τιµή της πραγµατικής περνάει στην τυπική παράµετρο. (Υπάρχει και άλλος τρόπος να περάσουµε µία παράµετρο κατά την κλήση όπου περνάµε διεύθυνση και όχι τιµή). Οι µεταβλητές που δηλώνονται µέσα στην συνάρτηση ονοµάζονται τοπικές εν αντιθέσει µε αυτές που ορίζονται στο κύριο πρόγραµµα και ονοµάζονται καθολικές. Οι τοπικές είναι ορατές µόνο µέσα στην συνάρτηση.

10 Παράδειγµα #include <iostream> #include <cstdlib> int maximum( int, int, int ); /* πρότυπο */ using namespace std; int main(int argc, char *argv[]) { system("chcp 1253"); int a, b, c; cout<<" όσε 3 ακεραίους: "; cin>>a>>b>>c; cout<<"max είναι: "<<maximum( a, b, c )<<endl; //κλήση system("pause"); return 0; /* δήλωση συνάρτησης */ int maximum( int x, int y, int z ) { int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max;

11 Αρχεία επικεφαλίδες Αρχεία Header Περιέχουν πρότυπα για συναρτήσεις σε βιβλιοθήκες <cstdlib>, <cmath>,κ.α. #include <cmath>

Κλήσησυναρτήσεων: Παράµετροιτιµής, Παράµετροι αναφοράς Πέρασµα παραµέτρων Παράµετροι τιµής Η τιµής της πραγµατικής παραµέτρου περνάει στην συνάρτηση Αλλαγές στην συνάρτηση δεν επηρεάζουν την πραγµατική παράµετρο Χρησιµοποιείται όταν δεν χρειάζεται να αλλάξουµε την παράµετρο και είναι καλό γιατί αποφεύγουµε αλλαγές κατά λάθος Παράµετροι αναφοράς Περνάµε την διεύθυνση της πραγµατικής παραµέτρου Τυχόν αλλαγές µέσα στην συνάρτηση επηρεάζουν την τιµή της πραγµατικής έξω από την συνάρτηση Χρησιµοποιείται όταν όντως θέλουµε να αλλάξουµε την πραγµατική παράµετρο (είναι και ένας άλλος τρόπος επιστροφής αποτελεσµάτων). Χρειάζεταιπροσοχή. Υπάρχειειδικός συντακτικός µηχανισµός για αυτές τις παραµέτρους. Προς το παρόν χρησιµοποιούµε και επικεντρωνόµαστε µόνο στις παραµέτρους τιµής 12

Τυχαίοι αριθµοί 13 rand function #include <cstdlib> Επιστρέφει ένα «ψευδό-τυχαίο" αριθµό µεταξύ 0 και RAND_MAX (τουλάχιστον 32767) i = rand(); Ψευδό-τυχαίοι Προκαθορισµένη ακολουθία από τυχαίους Ίδια ακολουθία κάθε φορά που τρέχει το πρόγραµµα αλλά επηρεάζεται από την αρχική τιµή (αρχικοποίηση) η οποία µπορεί να είναι τυχαία τιµή (π.χ. ρολόι του συστήµατος) Αλλαγή διαστήµατος Για [1, n] έχουµε 1 + ( rand() % n ) rand() % n [0, n 1] Συν 1[1, n] 1 + ( rand() % 6) [1, 6]

Τυχαίοι αριθµοί 14 srand <cstdlib> Αρχικοποιείται µε ένα αρχικό τυχαίο ακέραιο αλλάζοντας έτσι την ακολουθία των τυχαίων που επιστρέφει κάθε φορά µετην srand( seed ); srand(time(null)); //#include <ctime> time( NULL ) Η τρέχουσα τιµή του ρολογιού σε δευτερόλεπτα Τυχαιοποιεί την αρχική τιµή για την γεννήτρια τυχαίων αριθµών

Τυχαίοι αριθµοί 15 /* random 1-dimensional array - seeded random numbers*/ #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main(int argc, char *argv[]) { int i, N, A[10]; N = 10; srand(time(null)); //arxikopoihsh gia diaforetikous tyxaious ka8e fora // Anathesi tyxaiwn timwn ston pinaka A: cout<<"enhmerwsh: h rand paragei tyxaious apo 0 ews " <<RAND_MAX<<endl; cout<<"emeis theloume 1-100"<<endl; for(i=0; i<n; i++) { A[i] = rand() % 100 + 1; } //Ektypwsi tou pinaka A: cout << "O pinakas A einai o ekshs:"<< endl; for(i=0; i<n; i++) { cout << A[i] << " "; } cout << endl; system("pause"); return 0;

Τυχαίοι αριθµοί 16

Συναρτήσεις οριζόµενες από τον χρήστη 17 Ηκύριαχρήσηγιαµίασυνάρτησηείναινα υπολογίζει και να επιστρέφει µια τιµή βασιζόµενη στις παραµέτρους που περνάει ο χρήστης. Όµως µια συνάρτηση µπορεί να µην έχει παραµέτρους και να µην επιστρέφει τιµή Παράδειγµα, συναρτήσεις που τυπώνουν µηνύµατα

Συναρτήσεις οριζόµενες από τον χρήστη 18 // aplo paradeigma synarthshs xwris parametrous #include <iostream> #include <cstdlib> using namespace std; void print_message1(void); // prototype void print_message2(); // prototype int main(int argc, char *argv[]) { system("chcp 1253"); print_message1(); print_message2(); system("pause"); return 0; void print_message1() // dhlwsh synarthshs { cout<<"prwto mhnyma apo synarthsh print_message1.\n"; void print_message2() // dhlwsh synarthshs { cout<<"deytero mhnyma apo synarthsh print_message2.\n";

Συναρτήσεις οριζόµενες από τον χρήστη 19 Ηκύριαχρήσηγιαµίασυνάρτησηείναινα υπολογίζει και να επιστρέφει µια τιµή βασιζόµενη στις παραµέτρους που περνάει ο χρήστης. Παράδειγµα, ο χρήστης δίνει 2 ακεραίους και η συνάρτηση επιστρέφει το γινόµενο

Γινόµενο 2 ακεραίων 20 // Ginomeno 2 akeraiwn me synarthsh #include <iostream> #include <cstdlib> using namespace std; // dhlwsh synarthshs int mult ( int x, int y ) { return x * y; int main(int argc, char *argv[]) { system("chcp 1253"); int x,y,z; cout<<"dose 2 arithmous gia na pollaplasiasw: "; cin>> x >> y; z=mult (x, y); //klhsh synarthshs cout<<"to ginomeno einai: "<<z<<"\n"; system("pause"); return 0;

Γινόµενο 2 ακεραίων µε χρήση πρωτοτύπου 21 // Ginomeno 2 akeraiwn me synarthsh #include <iostream> #include <cstdlib> using namespace std; int mult ( int x, int y ); // prototypo int main(int argc, char *argv[]) { system("chcp 1253"); int x,y,z; cout<<"dose 2 arithmous gia na pollaplasiasw: "; cin>> x >> y; z=mult (x, y); //klhsh synarthshs cout<<"to ginomeno einai: "<<z<<"\n"; system("pause"); return 0; // dhlwsh synarthshs int mult ( int x, int y ) { return x * y;

Μέγιστος 3 ακεραίων 22 // max 3 akeraiwn me synarthsh #include <iostream> #include <cstdlib> using namespace std; int maximum(int, int, int); //prototype // max 3 akeraiwn int main(int argc, char *argv[]) { int a, b, c; cout<<"dose 3 akeraious: "; cin>>a>>b>>c; cout<<"max einai: "<<maximum(a,b,c)<<endl; system("pause"); return 0; // dhlwsh synarthshs int maximum(int x, int y, int z) {int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max;

Κλάσεις µεταβλητών 23 Τοπικές µεταβλητές Ορίζονται µέσα σε συναρτήσεις (ή σε blocks κώδικα όπως π.χ ανακυκλώσεις for) Είναι ορατές και µπορούν να χρησιµοποιηθούν µόνο µέσα στην συνάρτηση Μετοτέλοςτηςκλήσηςτηςσυνάρτησηςπαύουννα υπάρχουν (εκτός αν δηλωθούν σαν static) Καθολικές µεταβλητές Ορίζονται στην αρχή του προγράµµατος Είναιορατέςσεόλοτοπρόγραµµααλλάµέσασεµία συνάρτηση αν υπάρχει µια τοπική µεταβλητή µε το ίδιο όνοµα τότε χρησιµοποιείται η τοπική µεταβλητή

Εµβέλεια - Ορατότητα 24 Γενικός κανόνας για αναζήτηση ενός προσδιοριστή (όνοµαµεταβλητήςήσυνάρτησης) που χρησιµοποιείται σε µία παράσταση κατά την εκτέλεση µια κλήσης συνάρτησης Κοιτάµε µέσα στην συνάρτηση (στις τοπικές µεταβλητές και τιςπαραµέτρους) Μετά κοιτάµε στις περικλείνουσες συναρτήσεις από την εσωτερικότερη προς την εξωτερικότερη Τέλος κοιτάµε στις καθολικές µεταβλητές Θεωρούµε τις συναρτήσεις (και τα blocks) σαν κουτιά µε τοιχώµατα που είναι µονόδροµοι καθρέπτες. Μπορούµε να δούµε προς τα έξω αλλά απόέξωδενµπορούµεναδούµεµέσαστοκουτί.

Παράδειγµα - ψηφία ακεραίου 25 Να γράψετε πρόγραµµα που διαβάζει έναν ακέραιο αριθµό x και υπολογίζει το πλήθος των ψηφίων του αριθµού x. Χρησιµοποιήστε επαναληπτικές διαιρέσεις του αριθµού x µε το 10 int x, k; cout << "Dose arithmo "<<endl; cin >> x; k = 0 ; while(x!= 0) { x = x / 10; k = k + 1; } cout << "Ta psifia tou "<< x << " einai " << k <<endl;

Παράδειγµα συνάρτηση - ψηφία ακεραίου 26 Να γράψετε πρόγραµµα που διαβάζει έναν ακέραιο αριθµό x και υπολογίζει το πλήθος των ψηφίων του αριθµού x. int CountDigits(int n) // synarthsh gia metrhma psifiwn {int k=0; while(n!= 0) {n = n / 10; k = k + 1; return k;

Παράδειγµα συνάρτηση - ψηφία ακεραίου 27 Να γράψετε πρόγραµµα που διαβάζει έναν ακέραιο αριθµό x και υπολογίζει το πλήθος των ψηφίων του αριθµού x. int main(int argc, char *argv[]) //kyrio programma { int x,k; cout<<"dose akeraio x: "; cin>>x; k=countdigits(x); cout << "To plithos twn psifiwn tou "<< x << " einai " << k <<endl; system("pause"); return 0;

Παράδειγµα x^n 28 Να γράψετε πρόγραµµα που διαβάζει δύο ακεραίους x και n και υπολογίζει τηνύψωσησεδύναµη, δηλαδήτοναριθµό x n.θαπρέπειναελέγχετεόλες τιςπεριπτώσεις, αν n>0, αν n=0, αν n < 0. cout << "Dose vash"<<endl; cin >> x; cout << "Dose ektheth"<<endl; cin >> n; m=n; if(n<0) n = -n; p = 1; for(i=1; i<=n; i++) { p = p * x; } if(m<0) p = 1 / p; // prosoxi: float p; cout << Ypsosi se dinami " << p <<endl;

Παράδειγµα συνάρτηση - x^n 29 Να γράψετε πρόγραµµα που διαβάζει δύο ακεραίους x και n και υπολογίζει τηνύψωσησεδύναµη, δηλαδήτοναριθµό x n.θαπρέπειναελέγχετεόλες τιςπεριπτώσεις, αν n>0, αν n=0, αν n < 0. double xpowern(double x, int n) // synarthsh gia x^n, n>=0 {double p = 1; for(int i=1; i<=n; i++) { p = p * x; } return p;

Παράδειγµα συνάρτηση x^n 30 Να γράψετε πρόγραµµα που διαβάζει δύο ακεραίους x και n και υπολογίζει τηνύψωσησεδύναµη, δηλαδήτοναριθµό x n.θαπρέπειναελέγχετεόλες τιςπεριπτώσεις, αν n>0, αν n=0, αν n < 0. int main(int argc, char *argv[]) // kyrio programma {int x,n,m; double p; cout << "Dose vash: "; cin >> x; cout << "Dose ektheth: "; cin >> n; m=n; if(n<0) n = -n; p=xpowern(x,n); if(m<0) p = 1 / p; cout << "To x^n einai "<< p <<endl; system("pause"); return 0;

Παραγοντικό! 31 // Paragontiko #include <iostream> #include <cstdlib> using namespace std; long int factorial(int n) { long int fact = 1; for(int i = 1; i <= n; ++i) fact *= i; return fact; int main(int argc, char *argv[]) { int n; long int f; cout<<"dose n <=12: "; cin>>n; f=factorial(n); cout<<n<<"! = "<<f<<endl; system("pause"); return 0;

Βαθµοί Fahrenheit 32 // fahrenheit <-> Celcius #include <iostream> #include <cstdlib> #define COLD 0 #define HOT 100 using namespace std; void hotcold(int);// anagnwrizei shmeia phkshs kai thkshs int CtoF(int);// celcius -> farenheit int main(int argc, char *argv[]) { int count; int fahrenheit; int celcius; cout<<"table celius - farenheit\n"; for (count=-4; count<=12; count=count+1) {celcius = 10 * count; fahrenheit = CtoF(celcius); cout<<" C = "<<celcius<<" F = "<<fahrenheit; hotcold(celcius); system("pause"); return 0;

Βαθµοί Fahrenheit 33 συνέχεια /* synarthsh gia mhnymata gia 0, 100 bathmous */ void hotcold(int temperature) { if (temperature == COLD) cout<<" <= Freezing point of water\n"; else if (temperature == HOT) cout<<" <= Boiling point of water\n"; else cout<<"\n"; // synarthsh gia metatroph int CtoF(int celcius) {return (32 + (celcius * 9)/5);}

Αναδροµή, Αναδροµικές συναρτήσεις 34 Οι αναδροµικές συναρτήσεις Καλούν τον εαυτό τους Πρέπειναυπάρχειµίαβάσητηςαναδροµήςγιανα σταµατούν οι αναδροµικές κλήσεις Το πρόβληµα ορίζεται αναδροµικά και κάθε αναδροµική κλήση λύνει το ίδιο πρόβληµα αλλά µε µικρότερο µέγεθος Σε κάθε αναδροµική κλήση, ένα νέο αντίγραφο της συνάρτησης αρχίζει να εκτελείται Έτσι κάποια στιγµή θα φτάσει στην βάση της αναδροµής (η οποία λύνεται εύκολα) και θα αρχίσει να επιστρέφει αποτελέσµαταπίσωπροςτηναρχικήκλήσηηοποίακαιθα δώσει την ολική λύση στο πρόβληµα

Παραγοντικό! (ξανά) 35 Παραγοντικό 5! = 5 * 4 * 3 * 2 * 1 Ισχύει ότι 5! = 5 * 4! 4! = 4 * 3!... Μπορούµε να υπολογίσουµε παραγοντικά αναδροµικά Βάση (1! = 0! = 1) και µετά 2! = 2 * 1! = 2 * 1 = 2; 3! = 3 * 2! = 3 * 2 = 6; long int factorial(int n) {if (n==0) return 1; else return n*factorial(n-1);}

Η σειρά Fibonacci 36 Fibonacci: 0, 1, 1, 2, 3, 5, 8... F n = F n-1 + F n-2, F 0 =0, F 1 =1 Αναδροµική λύση: fib( n ) = fib( n - 1 ) + fib( n 2 ) Συνάρτηση fibaonacci long fibonacci( long n ) { } if (n == 0 n == 1) // βάση else return n; return fibonacci( n - 1) + fibonacci( n 2 );

Η σειρά Fibonacci 37 Αναδροµικές κλήσεις fibonacci f( 3 ) return f( 2 ) + f( 1 ) return f( 1 ) + f( 0 ) return 1 return 1 return 0

Η σειρά Fibonacci /* Fibonacci[N] gia N<=45, anadromikh kai epanalhptikh synarthsh f(i-1), f(i), f(i+1) fib arithmoi 0,1,1,2,3,5,8,13,... */ #include <iostream> using namespace std; int Fib(int); // prwtotype int FibRec(int); // prwtotype anadromikh synarthsh 38 int main(int argc, char *argv[]) { int n, ans; cout<<"dose to deikth N tou arithmou \n"; cout<<"pou anazhtame sthn akolou8ia Fib: "; cin>>n; ans=fib(n); cout << "O "<<n<<"-os Fibonacci (epanalhptika) einai o " <<ans<<endl; ans=fibrec(n); cout << "O "<<n<<"-os Fibonacci (anadromika) einai o " <<ans<<endl; system("pause"); return 0;

Η σειρά Fibonacci... συνέχεια // epanalhptikh synarthsh int Fib(int n) { int i, fn_2=0, fn_1=1, fn=1; i=2; // Trexwn deikths arithmou Fib sthn akolouthia while (i!= n) { fn_2=fn_1; fn_1=fn; fn=fn_2+fn_1; i++; return fn; // anadromikh synarthsh int FibRec(int n) { if (n==0) return 0; else if (n==1) return 1; else return (Fib(n-2)+Fib(n-1)); 39

Αναδροµή/Επανάληψη 40 Επανάληψη υπολογισµών Ανακυκλώσεις: for, while,.. (πιογρήγορο) Αναδροµή: χρήση αναδροµικών κλήσεων (πιο αργό) Τέλος υπολογισµών Ανακυκλώσεις : συνθήκες Αναδροµή : βάση αναδροµής Καιοιδυοτρόποιµπορείναέχουναέναες ανακυκλώσεις αν δεν προσέξουµε Υπέρ/Κατά Ανακυκλώσεις: for, while,.. (πιο γρήγορο αλλά µπορεί να είναι πιο δυσνόητο) Αναδροµή: χρήση αναδροµικών κλήσεων (πιο αργό αλλά πιο εκφραστικό)