Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Δομή Συνάρτησης τύπος όνομα ( λίστα τυπικών παραμέτρων ) { Δηλώσεις μεταβλητών εντολή_1 εντολή_2 : εντολή_ν } Σώμα της συνάρτησης
2
Δομή της Λίστας Τυπικών Παραμέτρων
τύπος_ παράμετρος_1, τύπος_ παράμετρος_2, τύπος_ παράμετρος_3, : τύπος_ν παράμετρος_ν Παράδειγμα λίστας τυπικών παραμέτρων int a, double x, float y, char xar
3
Παράδειγμα void ektyposi_epilogon(void) { printf(“ Εισάγετε 1 για τη μέθοδο 1\n”); printf(“ Εισάγετε 2 για τη μέθοδο 2\n”); printf(“ Εισάγετε 3 για τη μέθοδο 3\n”); }
4
Κλήση Συνάρτησης όνομα-συνάρτησης (λίστα πραγματικών παραμέτρων); Παράδειγμα κλήσης ektyposi_epilogon (); Δήλωση Συνάρτησης (Πρωτότυπο) τύπος όνομα-συνάρτησης (λίστα τυπικών παραμέτρων) ; Παράδειγμα δήλωσης void ektyposi_epilogon( void ) ; ή void ektyposi_epilogon(); /*δεν συνιστάται*/
5
Παράδειγμα Να γραφεί πρόγραμμα που να καλεί την συνάρτηση ektyposi_epilogon. Πρόγραμμα #include <stdio.h> void ektyposi_epilogon (void); /*Πρωτότυπο Συνάρτησης*/ int main(void) { ektyposi_epilogon(); /*κλήση*/ return 0; }
6
/. ορισμός της συνάρτησης
/*ορισμός της συνάρτησης*/ void ektyposi_epilogon(void) { printf(“Εισάγετε 1 για τη μέθοδο 1 \n”); printf(“Εισάγετε 2 για τη μέθοδο 2 \n”); printf(“Εισάγετε 3 για τη μέθοδο 3 \n”); }
7
Συναρτήσεις που επιστρέφουν μία τιμή
Η εντολή return return ( παράσταση ) ; Αν δεν επιστρέφει μία τιμή (τύπος=void) τότε η return μπορεί να παραλειφθεί(συνιστάται) ή return;
8
Παράδειγμα Να γραφεί πρόγραμμα που να καλεί την συνάρτηση ektyposi_epilogon. Στη συνέχεια να ελέγχεται η ορθότητα της απάντησης του χρήστη.
9
#include <stdio.h> /*Πρωτότυπα συναρτήσεων*/
Πρόγραμμα #include <stdio.h> /*Πρωτότυπα συναρτήσεων*/ void ektyposi_epilogon (void); int epilogi_xristi(void); int main(void) { /*Δηλώσεις μεταβλητών*/ int epilogi; char synexisete = ‘n’; /* n(ai) */ /*Σώμα συνάρτησης*/
10
while (synexisete == ‘n’) { epilogi = epilogi_xristi(); printf(“Επιθυμείτε να συνεχίσετε; (n/o):”); scanf(“%c”, &synexisete); getchar(); /* διαβάζει το CR */ } return 0; /*Σκοπός: Έλεγχος δεδομένων από το χρήστη. Δέχεται: Κανένα δεδομένο. Επιστρέφει: epilogi*/
11
int epilogi_xristi(void) { /. δηλώσεις μεταβλητών
int epilogi_xristi(void) { /* δηλώσεις μεταβλητών*/ char sosti_epilogi = ‘ο’;/* oxi */ int epilogi; /*Σώμα συνάρτησης*/ while (sosti_epilogi == ‘ο’) ektyposi_epilogon(); scanf(“%d”, &epilogi);
12
if (epilogi ==1 || epilogi == 2 || epilogi ==3) sosti_epilogi = ‘n’; } /*Επιστροφή της τρέχουσας τιμής της epilogi κάτω από το όνομα της συνάρτησης*/ return epilogi;
13
/. ορισμός της συνάρτησης
/*ορισμός της συνάρτησης*/ void ektyposi_epilogon(void) { printf(“Εισάγετε 1 για τη μέθοδο 1 \n”); printf(“Εισάγετε 2 για τη μέθοδο 2 \n”); printf(“Εισάγετε 3 για τη μέθοδο 3 \n”); }
14
ΣΥΝΑΡΤΗΣΕΙΣ ΜΕ ΠΑΡΑΜΕΤΡΟΥΣ
ΣΥΝΑΡΤΗΣΕΙΣ ΜΕ ΠΑΡΑΜΕΤΡΟΥΣ Τυπικές Παράμετροι Παράμετροι τιμών Παράμετροι δεικτών (value) (pointers) Μεταβλητές εισόδου Μεταβλητές εξόδου
15
Παράδειγμα Το πρωτότυπο συνάρτησης που δέχεται τρεις ακέραιους αριθμούς και επιστρέφει το μεγαλύτερο, μπορεί να είναι το εξής: int megistos (int x, int y, int z); /*συνιστάται*/ ή int megistos( int, int, int ); /*δεν συνιστάται*/ int megistos(x, y, z); int x, int y, int z; Γράψτε μία συνάρτηση που να προσδιορίζει το πρόσημο ενός αριθμού.
16
/*Σκοπός : Προσδιορίζει το πρόσημο ενός αριθμού.
Δέχεται : Έναν πραγματικό αριθμό. Επιστρέφει: Το πρόσημο ενός αριθμού κάτω από το όνομα της συνάρτησης*/ char prosimo (float arithmos) { if (arithmos < 0) return ‘-’; else return ‘+’; } /*Σώμα συνάρτησης*/
17
Παράδειγμα Γράψτε μία συνάρτηση που να βρίσκει το μεγαλύτερο από τρεις ακέραιους αριθμούς Συνάρτηση /*Σκοπός: Προσδιορίζει το μεγαλύτερο από τρεις ακέραιους αριθμούς. Δέχεται: Τρεις ακέραιους αριθμούς. Επιστρέφει: Το μεγαλύτερο ακέραιο κάτω από το όνομα της συνάρτησης*/
18
int megistos (int ar1, int ar2, int ar3)
{ τυπικές μεταβλητές int meg; /* Τοπική μεταβλητή */ if (ar1 > ar2) meg = ar1; else meg = ar2; /*meg = max ( meg1, meg2) */ if (ar3 > meg) meg = ar3; return (meg); }
19
pros1=megistos(num1, num2, num3); pros2=megistos(num4, num5, pros1);
Παράδειγμα Γράψετε ένα πρόγραμμα που να βρίσκει το μεγαλύτερο από πέντε ακέραιους αριθμούς χρησιμοποιώντας τη συνάρτηση megistos Ανάλυση pros1=megistos(num1, num2, num3); pros2=megistos(num4, num5, pros1); Πραγματικές Παράμετροι
20
#include <stdio.h> /*Πρωτότυπα συναρτήσεων*/
Πρόγραμμα #include <stdio.h> /*Πρωτότυπα συναρτήσεων*/ int megistos (int ar1, int ar2, int ar3); int main(void) { int num1, num2, num3, num4, num5; int pros1, pros2; printf(“Εισάγετε 5 ακέραιους αριθμούς:”); scanf(“%d %d %d %d %d ”, &num1, &num2, &num3, &num4, &num5);
21
pros1 = megistos (num1, num2, num3); pros2 = megistos (num4, num5, pros1); πραγματικές παράμετροι printf(“Ο μεγαλύτερος είναι ο: %d”, pros2); return 0; } /*Σκοπός: Προσδιορίζει το μεγαλύτερο από τρεις ακέραιους αριθμούς. Δέχεται: Τρεις ακέραιους αριθμούς. Επιστρέφει: Το μεγαλύτερο ακέραιο κάτω από το όνομα της συνάρτησης*/
22
{ int meg; if (ar1 > ar2) meg = ar1; else meg = ar2;
int megistos (int ar1, int ar2, int ar3) { int meg; if (ar1 > ar2) meg = ar1; else meg = ar2; if (ar3 > meg) meg = ar3; return (meg); }
23
Παράδειγμα Γράψτε ένα πρόγραμμα που να υπολογίζει και τυπώνει τον n-ιοστό αριθμό της ακολουθίας Fibonacci. Η ακολουθία Fibonacci
24
Πρόγραμμα #include <stdio. h> /. Πρωτότυπα συναρτήσεων
Πρόγραμμα #include <stdio.h> /*Πρωτότυπα συναρτήσεων*/ int fibonacci (int n); int main(void) { int n, fib; printf(“Εισάγετε ένα θετικό ακέραιο:”); scanf(“%d”, &n); fib = fibonacci(n); printf(“Ο %d -οστός αριθμός είναι: %d”, n, fib);
25
/*Σκοπός: Υπολογίζει τον n-ιοστό αριθμό fibonacci.
return 0; } /*Σκοπός: Υπολογίζει τον n-ιοστό αριθμό fibonacci. Δέχεται: Ένα θετικό ακέραιο αριθμό. Επιστρέφει: Τον αριθμό fibonacci.*/ int fibonacci (int n) { int protos = 0, deyteros = 1, metritis = 3, arithmos; if (n == 1) arithmos = protos; else
26
if (n == 2) arithmos = deyteros; while (metritis <= n) { arithmos = protos + deyteros; protos = deyteros; deyteros = arithmos; metritis++; } return (arithmos);
27
Παράδειγμα Γράψτε μια συνάρτηση που να υπολογίζει και τυπώνει την τιμή της σειράς:
για μια δεδομένη τιμή του x. Οι όροι της σειράς αθροίζονται μέχρις ότου κάποιος από αυτούς γίνει μικρότερος από ε κατά απόλυτο τιμή, όπου ε=0.5×10-6.
28
float series (float x, float epsilon) { float oros = 1
float series (float x, float epsilon) { float oros = 1.0, athroisma = 1.0; int n = 1; while (abs(oros) > epsilon) oros *= -x/n; athroisma += oros; ++n; } return (athroisma);
29
Παράδειγμα Γράψτε ένα πρόγραμμα που να χρησιμοποιεί την συνάρτηση series, προκειμένου να υπολογίζει με γνωστή ακρίβεια ε την τιμή της σειράς: για άγνωστο πλήθος δεδομένων (x, ε). Κάθε ζεύγος τιμών για τις x και ε δίνεται από το πληκτρολόγιο.
30
#include <stdio.h> #include <math.h>
Πρόγραμμα #include <stdio.h> #include <math.h> float series(float x, float epsilon); int main(void) { float x1, eps, timi; char apantisi = ‘n’, nea_grammi; while (apantisi == ‘n’) printf(“Εισάγετε τα x και ε:”);
31
printf(“\n %7.3f %e %7.3f ”, x1, eps, timi);
scanf(“%f %f”, &x1, &eps); timi = series (x1, eps); printf(“\n %7.3f %e %7.3f ”, x1, eps, timi); printf(“Επιθυμείτε να συνεχίσετε; (n/o):”); scanf(“%c”, &apantisi); getchar(); /* διαβάζει το CR */ } return 0;
32
Να γραφεί μία συνάρτηση, η οποία να επιστρέφει την τιμή του για δεδομένο n. Συνάρτηση int athroisma_tetr (int n) { int i, athroisma= 0; for (i=1; i <= n; ++i) athroisma += i*i; return (athroisma); }
33
/. Η χρήση της ανωτέρω συνάρτησης σε ένα πρόγραμμα γίνεται ως εξής:
/*Η χρήση της ανωτέρω συνάρτησης σε ένα πρόγραμμα γίνεται ως εξής: */ #include <stdio.h> #define N 5 int main(void) { int n; for (n=1; n <= N; ++n) printf(“\n%5d”, athroisma_tetr(n)); printf(“\n\n”); return 0; }
34
Παράδειγμα Να γραφεί συνάρτηση, η οποία να επιστρέφει την τιμή του για δεδομένα n και k.
35
Καταρχήν θα γράψουμε μία συνάρτηση, η οποία επιστρέφει τις τιμές της δύναμης mn για δεδομένα m και n. Συνάρτηση int dynami (int m, int n) { int i, ginomeno = 1; for (i=1; i <= n; ++i) ginomeno *= m; return (ginomeno); }
36
Συνάρτηση int athroisma_dyn (int k, int n) { int i, athroisma = 0; for (i=1; i <= n; ++i) athroisma += dynami (i, k); return (athroisma); }
37
Αναδρομή Αναγωγή του αρχικού προβλήματος σε μικρότερα προβλήματα του ίδιου τύπου Αν μια συνάρτηση περιέχει μια κλήση του εαυτού της στο εσωτερικό του τμήματος των εντολών της, τότε λέγεται ότι είναι μία αναδρομική συνάρτηση (recursive function) Δομή αναδρομικής συνάρτησης Κατάσταση διακοπής Αναδρομικό βήμα Πρόβλημα Να γραφεί μια αναδρομική συνάρτηση που να υπολογίζει το παραγοντικό ενός μη αρνητικού ακεραίου αριθμού.
38
Ανάλυση n! = n(n-1)!, ! = 1 Αν n = = 0 τότε να επιστραφεί η τιμή (κατάσταση διακοπής) Αν n 1, τότε να επιστραφεί η : n * factorial (n-1) (αναδρομικό βήμα) Υλοποίηση int factorial (int n) { if (n = = 0) /* Κατάσταση διακοπής */ return 1; else return (n * factorial (n-1)); /* Αναδρομικό βήμα */ }
39
Εκτέλεση της factorial(3);
Αναδρομικό επίπεδο 0 factorial(3) 6 1 3 * factorial(2) 2 2 2 * factorial(1) 1 * factorial(0)
40
Πρόβλημα Γράψτε ένα πρόγραμμα που να διαβάζει ένα ακέραιο
αριθμό και στη συνέχεια να τον τυπώνει με την αντίστροφη φορά (πρώτο ψηφίο να είναι το τελευταίο του αριθμού που διαβάστηκε, δεύτερο ψηφίο να είναι το προτελευταίο, κ.ο.κ.).
41
Μη αναδρομικό πρόγραμμα
/*Αντιστρέφει τα ψηφία ενός ακέραιου*/ #include <stdio.h> void antistrofi (long *akeraios); int main (void) { long arithmos; printf (”\nΔώστε ένα ακέραιο αριθμό”); scanf (”%d”, &arithmos); printf(“\nΟ αριθμός που προκύπτει είναι :”); antistrofi (&arithmos); return 0; }
42
void antistrofi (long *akeraios)
{ do printf (”%d”, *akeraios % 10); *akeraios = *akeraios / 10; } while (*akeraios != 0);
43
Με τη χρήση αναδρομής #include <stdio.h>
void antistrofi (long akeraios); int main (void) { long arithmos; printf (”Δώστε ένα ακέραιο αριθμό”); scanf (”%d”, &arithmos); printf(“\nΟ αριθμός που προκύπτει είναι :”); antistrofi (arithmos); return 0; }
44
void antistrofi (long akeraios)
{ printf (”%d”, akeraios % 10); /*εκτύπωση του ακραίου δεξιού ψηφίου*/ akeraios = akeraios / 10; if (akeraios != 0) antistrofi (akeraios); }
45
Εντολές μετά την αναδρομική κλήση
Πρόβλημα Να γραφεί ένα πρόγραμμα που να διαβάζει μια γραμμή χαρακτήρων και να την τυπώνει με την αντίστροφη φορά. #include <stdio.h> void stoivaxeharaktires (void ); int main (void ) { printf (”\nΔώστε μία σειρά χαρακτήρων : ”); stoivaxeharaktires ( ); printf (”\n\n”); return 0; }
46
void stoivaxeharaktires (void )
{ char xar; scanf (”%c”, &xar); if (xar != ‘\n’) stoivaxeharaktires ( ); printf (”%c”, xar); }
47
Αναδρομικό Προς τα πίσω Ενέργεια
επίπεδο διαδικασία 1 scanf (”%c”, &xar); Διαβάζεται ο ‘Τ’ 2 scanf (”%c”, &xar); Διαβάζεται ο ‘h’ 3 scanf (”%c”, &xar); Διαβάζεται ο ‘e’ Αναδρομικό Προς τα εμπρός Ενέργεια επίπεδο διαδικασία 3 printf (”%c”, &xar); Τυπώνεται o ‘e’ 2 printf (”%c”, &xar); Τυπώνεται o ‘h’ 1 printf (”%c”, &xar); Τυπώνεται o ‘T’
48
athroisma (m,n) = m + (m + 1) + … + n
Πρόβλημα Να γραφεί μία συνάρτηση που να υπολογίζει το άθροισμα όλων των ακεραίων αριθμών από τον m μέχρι τον n. Ανάλυση Δεδομένων δύο ακεραίων αριθμών m και n (m n) θέλουμε να υπολογίσουμε το άθροισμα athroisma (m,n) = m + (m + 1) + … + n
49
int athroisma (int m, n) { if (n == m) return n; else return (n + athroisma (m, n-1)); }
50
Αναδρομικό επίπεδο Προς τα πίσω/εμπρός διαδικασία
0 athroisma (1,5) athroisma (1,4) athroisma (1,3) 1+2+3 athroisma (1,2) 1+2 athroisma (1,1) 1 athroisma (1,1)
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.