Συναρτήσεις (Functions) Εισαγωγή στη C++ 1
Δημιουργία συναρτήσεων Για κάθε συνάρτηση που θα δημιουργούμε θα πρέπει να ορίζουμε τα εξής: Τύπος επιστρεφόμενης τιμής Όνομα συνάρτησης Παράμετροι π.χ. int athrisma(int a, int b) 2
Δομή Προγράμματος με χρήση συναρτήσεων #include<iostream> using namespace std; int athrisma(int a,int b); int main(){ int x,y,sum; cin>>x>>y; sum=athrisma(x,y); cout<<sum<<endl; return 0; int athrisma(int a,int b){ int result; result=a+b; return result; Πρότυπο συνάρτησης. Δηλώνουμε τις συναρτήσεις που θα χρησιμοποιήσουμε Κλήση συνάρτησης Ορισμός συνάρτησης 3
Το πρότυπο της συνάρτησης Πληροφορεί τον compiler ότι υπάρχει μια συνάρτηση που θα οριστεί αργότερα. Μπορεί να παραληφθεί Όμως μας επιτρέπει την χρήση μιας συνάρτησης πριν ακόμα αυτή οριστεί. 4
#include<iostream> using namespace std; Εναλλακτικά int athrisma(int a,int b){ int result; result=a+b; return result; int main(){ int x,y,sum; cin>>x>>y; sum=athrisma(x,y); cout<<sum<<endl; return 0; 5
Κλήση συνάρτησης Μόλις το κυρίως πρόγραμμα εντοπίσει μια συνάρτηση σταματά και περνά τον έλεγχο του προγράμματος στη συνάρτηση. Η συνάρτηση μέσα στο κυρίως πρόγραμμα πρέπει να έχει το ίδιο όνομα, αριθμό και τύπο παραμέτρων. 6
Ορισμός Συνάρτησης Γράφουμε τις εντολές που θέλουμε να εκτελούνται όταν καλέσουμε τη συνάρτηση. Με την εντολή return καθορίζει την τιμή που θα επιστρέφει η συνάρτηση. Σε περίπτωση που η συνάρτηση δεν επιστρέφει κάτι (τύπος επιστρεφόμενης τιμής void) τότε η εντολή return παραλείπεται. 7
Παράδειγμα 1 Να δημιουργήσετε το πρόγραμμα που λύνει την εξίσωση x=y!+z! Σημείωση: Παραγοντικό (!) ενός αριθμού Ν ορίζεται το γινόμενο 1*2*3* (Ν-1)*Ν π.χ. 5!=1*2*3*4*5=120 8
Παράδειγμα 1 #include<iostream> using namespace std; int par(int N); int main(){ int x,y,z; cin>>y>>z; x=par(y)+par(z); cout<<x<<endl; return 0; int par(int N){ int i,p=1; for(i=1;i<=n;i++){ p*=i; return p; 9
Παράδειγμα 2 Να δημιουργήσετε το πρόγραμμα που δέχεται έναν ακέραιο αριθμό και χρησιμοποιώντας τη συνάρτηση prwtos ελέγχει αν ο αριθμός είναι πρώτος ή όχι. Πρότυπο συνάρτησης prwtos: bool prwtos(int n); 10
Παράδειγμα 2 #include <iostream> #include<cmath> using namespace std; bool prwtos(int n); int main(){ int num; cin>>num; if (prwtos(num)) cout<<"prime"<<endl; else cout<<"not Prime"<<endl; return 0; bool prwtos(int n){ int i; bool result = true; if(n==1) return false; for(i=2;i<=sqrt(n);i++) if (n%i==0) result=false; return result; 11
Παράδειγμα 3 Να δημιουργήσετε το πρόγραμμα που δέχεται έναν ακέραιο αριθμό Ν και ένα χαρακτήρα C και χρησιμοποιεί τη συνάρτηση triangle για να τυπώσει ένα ορθογώνιο τρίγωνο που θα έχει N γραμμές και θα σχηματίζεται από το χαρακτήρα C. π.χ. 3 @ @ @@ @@@ 12
Παράδειγμα 3 #include <iostream> using namespace std; void triangle(int n,char c); int main(){ int n; char c; cin>>n>>c; triangle(n,c); return 0; void triangle(int n,char c){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=i;j++) cout<<c; cout<<endl; 13
Κλήση συνάρτησης με αναφορά Οι συναρτήσεις με τη χρήση της εντολής return μπορούν να επιστρέψουν μόνο μία τιμή. Σε περίπτωση που θέλουμε η συνάρτηση μας να «επηρεάσει» περισσότερες από μία μεταβλητές χρησιμοποιούμε την κλήση με αναφορά. Περνάμε στη συνάρτηση τη διεύθυνση της μεταβλητής και όχι τη τιμή της. 14
Παράδειγμα #include<iostream> using namespace std; void byvalue(int y){ y = y + 1; cout << y << endl; void byreference(int& y){ y = y + 1; cout << y << endl; int main() { int x = 5; byvalue(x); cout <<"x="<<x<<endl; byreference(x); cout <<"x="<<x<<endl; return 0; output 6 x=5 6 x=6 15
Παράδειγμα 4 Να δημιουργήσετε το πρόγραμμα που χρησιμοποιεί τη συνάρτηση Calculate για να υπολογίσει το εμβαδόν και την περίμετρο ενός ορθογωνίου τριγώνου. 16
Παράδειγμα 4 #include<iostream> #include<cmath> using namespace std; void calculate(float a,float b,float& e,float& p); int main(){ float a,b,e,p; cin>>a>>b; calculate(a,b,e,p); cout<<"e="<<e<<endl; cout<<"p="<<p<<endl; return 0; void calculate(float a,float b,float& e,float& p){ float c; c=sqrt(a*a+b*b); e=a*b/2; p=a+b+c; 17
Παράδειγμα 5 Να δημιουργήσετε το πρόγραμμα που δέχεται 2 ακέραιους αριθμούς και τους αποθηκεύει στις μεταβλητές Α, Β. Στη συνέχεια το πρόγραμμα χρησιμοποιεί τη συνάρτηση swap για να ανταλλάξουν οι δύο μεταβλητές τις τιμές τους. 18
#include<iostream> using namespace std; void swap(int& A,int& B); int main(){ int A,B; cin>>a>>b; swap(a,b); cout<<a<<" "<<B<<endl; return 0; void swap(int& A,int& B){ int temp; temp=a; A=B; B=temp; Παράδειγμα 5 19
1d-Πίνακες και Συναρτήσεις Ένας πίνακας αποτελείται από περισσότερες από μία τιμές οπότε για να περάσουμε έναν πίνακα σε μια συνάρτηση πρέπει να γίνει κλήση της συνάρτησης με αναφορά (δηλαδή να περάσουμε τη διεύθυνση του πίνακα). Παράδειγμα Ορισμός στο πρότυπο void FillArray (int array[ ]); Στην κλήση FillArray (array); 20
Παράδειγμα 6 Να γράψετε το πρόγραμμα που χρησιμοποιεί τις συναρτήσεις fill και print για να γεμίσουν και να τυπώσουν έναν μονοδιάστατο πίνακα μεγέθους 10 θέσεων. 21
Παράδειγμα 6 #include<iostream> #define N 10 using namespace std; void fill(int a[]); void print(int a[]); int main(){ int A[N]; fill(a); print(a); return 0; void fill(int a[]){ int i; for(i=0;i<n;i++){ cin>>a[i]; void print(int a[]){ int i; for(i=0;i<n;i++){ cout<<a[i]<<endl; 22
Παράδειγμα 7 Να γράψετε το πρόγραμμα που χρησιμοποιεί : Τη συνάρτηση read για να διαβάσει τους βαθμούς και τα ονόματα 25 μαθητών. τη συνάρτηση average για να υπολογίσει το μέσο όρο των βαθμών. τη συνάρτηση maxname για να βρει το όνομα του μαθητή με τον ψηλότερο βαθμό. Σημείωση: Θεωρείστε ότι δεν υπάρχει ισοβαθμία. 23
#include<iostream> #include<string> #define N 25 using namespace std; void read(int v[],string names[]); float average(int v[]); string maxname(int v[],string names[]); int main(){ int V[N]; string Names[N]; read(v,names); cout<<"avg="<<average(v)<<endl; cout<<"maxname="<<maxname(v,names)< <endl; return 0; void read(int v[],string names[]){ int i; Παράδειγμα 7 float average(int v[]){ int i,sum=0; for(i=0;i<n;i++){ sum+=v[i]; return float(sum)/n; string maxname(int v[],string names[]){ int max=v[0],i; string mn=names[0]; for(i=1;i<n;i++){ if(v[i]>max){ max=v[i]; mn=names[i]; return mn; for(i=0;i<n;i++){ cin>>v[i]>>names[i]; 24
2d-Πίνακες και Συναρτήσεις Όπως και στους 1d πίνακες, περνάμε στη συνάρτηση τη διεύθυνση του πίνακα. Παράδειγμα void FillArray(int array[][max numbers of columns]) Η τιμή να ορίζεται πάντα σαν σταθερά: int N; const int M = 5; cin >> N; void fillarray1 (int arr1[n]); void fillarray2 (int arr2[][n]); void printarray (int arr2[][m]); // σφάλμα // σφάλμα 25
Παράδειγμα 8 Να γράψετε το πρόγραμμα που δέχεται 9 αριθμούς και τους αποθηκεύει σε έναν πίνακα 3x3. Στη συνέχεια χρησιμοποιεί τη συνάρτηση sum για να υπολογίσει το άθροισμα των στοιχείων του πίνακα. 26
Παράδειγμα 8 #include<iostream> #define N 3 using namespace std; int sum(int A[][N]); int main(){ int i,j; int a[n][n]; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>a[i][j]; cout<<sum(a); int sum(int A[][N]){ int i,j,s=0; for(i=0;i<n;i++) for(j=0;j<n;j++) s+=a[i][j]; return s; 27