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



Σχετικά έγγραφα
Σελίδα 1/17. //01 CAFES.cpp -EΙΣΑΓΩΓΙΚΟ #include <cstdlib> #include <iostream> using namespace std;

B1. Σειρά :

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

8. ΠΙΝΑΚΕΣ (ARRAYS) (Πρόχειρο σχέδιο - Μαθήµατος 5) //26. Array.cpp #include <iostream> using namespace std;

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

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

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

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

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

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

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

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

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

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

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

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

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

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

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

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

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

Διδάσκων: Παναγιώτης Ανδρέου

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Περιεχόμενα. Πρόλογος... 17

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

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

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

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

ΗΥ-150. Πίνακες (Arrays)

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

Επανάληψη. Εντολές while, for, do-while

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Συναρτήσεις. Εισαγωγή

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Κλάσεις και Αντικείµενα

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Κεφάλαιο 7: Υπορουτίνες

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

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Πίνακες.

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

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

Αναφορές, είκτες και Αλφαριθμητικά

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

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

Περιεχόμενα. Πρόλογος... 21

Aσκήσεις Πράξης 6 - EΠΑΝΑΛΗΠΤΙΚΟ A ΜΕΘΟ ΟΛΟΓΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ι ΕΡΓΑΣΤΗΡΙΟ. 5. Τι τυπώνει το επόµενο πρόγραµµα:

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

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

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

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

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

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

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

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

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

Transcript:

(Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29 5. ΣΥΝΑΡΤΗΣΕΙΣ 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή Η συνάρτηση είναι void, δεν επιστρέφει κάποια τιµή. //Oρισµός συνάρτησης χωρίς παραµέτρους // 12. starline void starline () for (int i=0;i<25;i++) cout << * ; cout << endl; //κλήση συνάρτησης starline(); //Oρισµός συνάρτησης µε µία παράµετρο void starline (char ch) for (int i=0;i<25;i++) cout <<ch; cout << endl; Oι µεταβλητή ch λέγεται και τυπική παράµετρος //κλήση συνάρτησης µε όρισµα * starline( * ); //κλήση συνάρτησης µε όρισµα # starline( # ); Οι τιµές µε τις οποίες καλείται µια συνάρτηση λέγονται ορίσµατα //Oρισµός συνάρτησης µε 2 παραµέτρους void starline (char ch, int n) for (int i=0;i<12;i++) cout <<setw(n)<<ch; cout << endl; //κλήση συνάρτησης µε ισάριθµα oρίσµατα *, 2 starline( *,2); //κλήση συνάρτησης µε oρiσµατα #, 3 starline( #,3); 5.2 Συναρτήσεις, που επιστρέφουν κάποια τιµή Η συνάρτηση είναι π.χ. float επιστρέφει κάποια τιµή float. //Oρισµός συνάρτησης VK - page 23

//13. mesosoros float mo(int x, int y) float m; m=(x+y)/2.0; return(m); //κλήση συνάρτησης µε ισάριθµα oρίσµατα 3, 8 mo(3, 8); //αλλά και κλήση συνάρτησης µε µεταβλητές a, b int a,b; a=23; b=2; mo(a,b); 5.3 Γενικά Γενικά όταν καλείται µια συνάρτηση, το πλήθος και ο τύπος των ορισµάτων πρέπει να είναι αντίστοιχα µε τις τυπικές παραµέτρους της. Ο προκαθορισµένος τρόπος µεταβίβασης των ορισµάτων λέγεται κλήση κατ αξία call by value Ενας άλλος τρόπος µεταβίβασης των ορισµάτων, λέγεται κλήση κατ αναφορά call by reference Eνας τρίτος τρόπος µεταβίβασης των ορισµάτων στις συναρτήσεις είναι µε την χρήση δεικτών (pointers). Μια αναφορά- reference είναι απλά ένα διαφορετικό όνοµα για µια µεταβλητή. Όταν τα ορίσµατα µεταβιβάζονται κατ αξία, η συνάρτηση που καλείται δηµιουργεί µια νέα µεταβλητή x, ίδιου τύπου µε το όρισµα a και αντιγράφει την τιµή του ορίσµατος στο x. Η τιµή του x µέσα στην συνάρτηση µπορεί να αλλάξει αλλά όχι και η τιµή του a. float mo(int x, int y) float m=(x+y)/2.0;return(m);... int a=23,b=2; mo(a,b); //η mo δηµιουργεί νέα µεταβλητή x=23; Αν όµως επιβάλλεται η αλλαγή της τιµής του a µέσα στην συνάρτηση χρησιµοποιώ αναφορά (που δηλώνεται µε το & αµέσως µετά τον τύπο του x, δηλ. int& x) //14. MOcallbyREF float mo(int& x, int y) float m=(x+y)/2.0; x=3;return(m);... int a=23,b=2; mo(a,b); //η mo δεν δηµιουργεί νέα µεταβλητή αλλά x=a=3; Μεταβιβάζοντας ορίσµατα κατ αναφορά, η συνάρτηση µπορεί να προσπελάσει τις µεταβλητές του καλούντος προγράµµατος. VK - page 24

Oταν ένα πρόγραµµα καλεί µια συνάρτηση, πρέπει να ξέρει τον τύπο της. εν µπορεί να καλεστεί πριν τον ορισµό της. Αυτό µπορεί να ξεπεραστεί 1. ηλώνοντας την πρώτα - πρόσθια δήλωση (συνήθως πριν την main() ) PROTOTYPE 2. Ορίζοντάς την αργότερα (συνήθως µετά την main() ) // ήλωση συνάρτησης //15. MO πρόσθια δήλωση float mo(int x, int y); main().cout<<mo(3,6); float mo(int x, int y).; Xρήση συναρτήσεων βιβλιοθήκης #include <αρχείο> double sqrt (double num) π.χ. η συνάρτηση sqrt ορίζεται µέσα στο αρχείο cmath επιστρέφει double και έχει παράµετρο τύπου double. Οι συναρτήσεις µπορούν να καλούν τον εαυτό τους π.χ. fibo(n)=fibo(n-1) + fibo(n-2); // recursive function //16. recursive power (power & biblioθήκη)!!!! Υπερφόρτωση συνάρτησης & ασάφεια Ορισµός συναρτήσεων µε ίδιο όνοµα και διαφοροποίηση παραµέτρων. inline συναρτήσεις π.χ. inline float mo(int x, int y); Με τις συναρτήσεις inline εξοικονοµείται µνήµη, διότι όσες φορές και αν κληθεί η συνάρτηση εκτελείται ο ίδιος κώδικας δηλ. το σώµα της συνάρτησης δεν επαναλαµβάνεται στην µνήµη. Οταν ο compiler δει την κλήση δηµιουργεί ένα jump στην συνάρτηση και όταν την τελειώσει επιστρέφει στην επόµενη από την κλήση οδηγία. Αυτό θέλει λίγο extra χρόνο. Για να γλυτώσουµε χρόνο όταν έχουµε µικρές συναρτήσεις µπορεί να επιλεχθεί το σώµα της συνάρτησης να µπεί κατ ευθείαν µαζί µε το κώδικα του προγράµµατος που την καλεί (π.χ. µαζί µε το main). Έτσι κάθε φορά αντί να καλείται η συνάρτηση, παρεµβάλλεται ο κώδικάς της inline. //17. Inline.cpp VK - page 25

inline float pounds(float klib) return klib / 0.453592 ; int main() float kgs; cout << "\nenter your weight in kilograms: "; cin >> kgs; cout << "Your weight in pounds is: "<< pounds(kgs)<< endl; system( "PAUSE" ); Στατική µεταβλητή π.χ. static float m=0; //αρχική τιµή µόνο µια φορά έχει την ορατότητα µιας τοπικής µεταβλητής (δηλ. µέσα στην συνάρτηση που την περιέχει),και δεν υπάρχει µέχρι την πρώτη φορά που θα καλεστεί η συνάρτηση, κατόπιν υπάρχει για πάντα. χρησιµοποιείται όταν είναι απαραίτητο για µια συνάρτηση να θυµάται την τιµή της µεταβλητής όταν δεν εκτελείται η συνάρτηση (ανάµεσα στις κλήσεις της συνάρτησης) σαν να είναι global για την συνάρτηση). //18. Static.cpp float mo(float); int main(void) float data = 1, avg; while(data!= 0) cout << "Enter a number or 0 to stop: "; cin >> data; avg = mo(data); cout << "Neos mesos oros "<< avg << endl; float mo(float newdata) static float total = 0; static int count = 0; count++; total += newdata; return total / count; VK - page 26

6. ΤΥΠΟΙ ΟΡΙΖΟΜΕΝΟΙ ΑΠΟ ΤΟΝ ΧΡΗΣΤΗ 6.1 Απαριθµήσεις (enumerations) enum meres DEY,TRI,TET,PEP,PAR,SAV,KYR; ηλώνεται νέος τύπος µε όνοµα meres, οι µεταβλητές του οποίου µπορούν να πάρουν τιµές µόνο από την λίστα τιµών. meres douleia, giorti, simera; //η µεταβλητή douleia µπορεί π.χ. να πάρει τιµή DEU (ανήκει στη λίστα) douleia=dey; giorti=kyr; Αν δεν ορίζεται διαφορετικά το 1 ο στοιχείο της λίστας έχει τιµή 0, το 2 ο έχει 1 κ.ο.κ. TRI+PEP //1+3=4 DEY=1; //EINAI ΛΑΘΟΣ enum meres DEY=1,TRI,TET,PEP,PAR,SAV,KYR //ΣΩΣΤΟ Οι λίστες κάνουν πιο ευανάγνωστο το πρόγραµµα if (simera==dey) cout << DOULEIA!! \n ; // καλύτερο από το if (simera==0) enum meres DEY,TRI,TET,PEP,PAR,SAV,KYR mathima,argia; //19. enumerations enum meres DEY=1,TRI,TET,PEM,PAR,SAV,KYR; #include "gconsole.h" /*Ο τύπος color είναι µέσα στο gconsole enum color cblack=0, cdark_blue=1, cdark_green=2, cdark_cyan=3, cdark_red=4, cdark_magenta=5, cbrown=6, clight_gray=7, cdark_gray=8, cblue=9, cgreen=10, ccyan=11, cred=12, cmagenta=13, cyellow=14, cwhite=15; */ VK - page 27

int main() meres giorti, simera; simera=dey; giorti=tet; //µέσα στο gconsole init_graphics(); set_color(cred); if (simera==dey) cout <<"DOULEIA!! \n" ; set_color(cmagenta); cout<<"sum DEY & TET = "<<DEY+TET<<endl; //µετατροπή σε τύπο color set_color( static_cast<color>(rand()%16) ); //H rand() επιστρέφει έναν τυχαίο ακέραιο 6.2 οµές (Structures) Συλλογή από µεταβλητές κάθε τύπου, που αναφέρονται µε κοινό όνοµα. Η δηµιουργία µιας δοµής δίνει δυνατότητα να οριστούν µεταβλητές αυτού του τύπου //20. structures struct mathitis char onoma[15]; char address[20]; char thl[13]; int ilikia; ; int main() mathitis M1,M2="GIORGOS","EGNATIAS 122","2310335234",22; M1.ilikia=23; cout<<m1.ilikia<<endl; //ορισµός δοµής mathitis µε 4 µεταβλητές-µέλη struct mathitis ; //δήλωση µεταβλητής της δοµής mathitis mathitis M1,M2; //απόδοση αρχικών τιµών στα µέλη µιας δοµής main() VK - page 28

. mathitis Μ1= GIORGOS, EGNATIAS 122, 2310335234,22;.. //αναφορά στα µέλη µιας δοµής µέσω του τελεστή τελεία (.) Μ1.ilikia=23; //µεγάλωσε //συναρτήσεις ως µέλη δοµής //21. funinstruct struct trigono float basi; float ypsos; float emvado() return basi*ypsos/2; ; int main() trigono T1=15,50; trigono T2=40,70; cout<<"to E tou T1 einai "<<T1.basi<<"x"<<T1.ypsos<<" : " <<T1.emvado()<<endl; // to trigono έχει δυο µεταβλητές µέλη και µια συνάρτηση µέλος. οι συναρτήσεις µέλη µπορούν νάχουν και παραµέτρους. 6.3 Άλλοι τύποι δεδοµένων Ενώσεις (π.χ. επιτρέπουν σε δυο µεταβλητές να µοιράζονται ίδιο τµήµα µνήµης) Συνώνυµα (χρήση της typedef για να δώσει συνώνυµο σε υπάρχοντα τύπο δεδοµένων) typedef float pososto; pososto a,b; //ίδιο µε float a,b; Κλάσεις!!!! ΣΥΜΠΕΡΑΣΜΑ Αντικείµενα και κλάσεις είναι έννοιες που έχουν µεγάλη συγγένεια και οµοιότητα µε τις δοµές. Η ύπαρξη των κλάσεων κάνει περιττή την χρήση των δοµών στην C++, που όµως διατηρούνται για λόγους συµβατότητας µε τα προγράµµατα της C. VK - page 29