ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C 1. ΣΥΝΑΡΤΗΣΕΙΣ ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
ΣΥΝΑΡΤΗΣΕΙΣ (FUNCTIONS) έχει δικό του όνομα, εκπληρώνει μια συγκεκριμένη διεργασία και μπορεί να επιστρέψει μια ή περισσότερες τιμές στο πρόγραμμα που την καλεί. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Παράδειγμα #include <stdio.h> long cube(long x); long input, answer; main() { printf("Enter an integer value: "); scanf("%d", &input); answer = cube(input); printf("\nThe cube of %ld is %ld.\n", input, answer); return 0; } /* Function: cube()-Calculates the 3rd value of a var */ long cube(long x) long x_cubed; x_cubed = x * x * x; return x_cubed; ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Εκτέλεση του παραδείγματος Enter an integer value: 100 The cube of 100 is 1000000. Enter an integer value: 9 The cube of 9 is 729. Enter an integer value: 3 The cube of 3 is 27. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Πρωτότυπα (protoypes) και ορισμοί (definitions) Function Prototype Examples double squared( double number ); void print_report( int report_number ); Function Definition Examples double squared( double number ) /* function header */ { /* opening bracket */ return( number * number ); /* function body */ } /* closing bracket */ void print_report( int report_number ) { if( report_number == 1 ) puts( "Printing Report 1" ); else puts( "Not printing Report 1" ); } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Ορίσματα (arguments) και παράμετροι (parameters) #include <stdio.h> float x = 3.5, y = 65.11, z; float half_of(float k); main() { /* στην κλήση , x είναι το όρισμα στην half_of(). */ z = half_of(x); printf("The value of z = %f\n", z); /* στην κλήση, y είναι το όρισμα στην half_of(). */ z = half_of(y); return 0; } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
float half_of(float k) { /* k είναι η παράμετρος. Κάθε φορά που καλείται η half_of() το k έχει την τιμή που περνά σαν όρισμα */ return (k/2); } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Τοπικές (Local) μεταβλητές #include <stdio.h> int x = 1, y = 2; void demo(void); main() { printf("\nBefore calling demo(),x = %d and y = %d.",x,y); demo(); printf("\nAfter calling demo(),x = %d and y = %d\n.",x,y); return 0; } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
/* Display their values. */ void demo(void) { /* local variables. */ int x = 88, y = 99; /* Display their values. */ printf("\nWithin demo(), x = %d and y = %d.", x, y); } Before calling demo(), x = 1 and y = 2. Within demo(), x = 88 and y = 99. After calling demo(), x = 1 and y = 2. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Συναρτήσεις με πολλαπλές εντολές return #include <stdio.h> int x, y, z; int larger_of( int , int ); main() { printf("Enter two different integer values:\n "); scanf("%d%d", &x, &y); z = larger_of(x,y); printf("\nThe larger value is %d.", z); return 0; } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
int larger_of( int a, int b) { if (a > b) return a; else return b; } Enter two different integer values: 200 300 The larger value is 300. 300 200 ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
ΠΑΡΑΔΕΙΓΜΑ #include <stdio.h> void draw_box( int, int); int main() { draw_box( 8, 35 ); return 0; } void draw_box( int row, int column ) int col; for ( ; row > 0; row--) for (col = column; col > 0; col--) printf("X"); printf("\n"); ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Παράδειγμα χρήσης μενού επιλογών #include <stdio.h> int get_menu_choice( void ); main() { int choice; choice = get_menu_choice(); printf("You chose Menu Option %d\n", choice ); return 0; } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
int get_menu_choice( void ) { int selection = 0; do printf("\n" ); printf("\n1 - Add a Record" ); printf("\n2 - Change a record"); printf("\n3 - Delete a record"); printf("\n4 - Quit"); printf("\nEnter a selection: " ); scanf("%d", &selection ); } while ( selection < 1 || selection > 4 ); return selection; } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Εκτέλεση του παραδείγματος 1 - Add a Record 2 - Change a record 3 - Delete a record 4 - Quit Enter a selection: 8 Enter a selection: 4 You chose Menu Option 4 ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
ΠΡΩΤΟΤΥΠΑ ΣΥΝΑΡΤΗΣΕΩΝ ΑΝΤΙΣΤΟΙΧΙΑ ΠΑΡΑΜΕΤΡΩΝ #include <stdio.h> void function1(void); void function2(int n, double x); void main(void) { int m; double y ; m=15; y=308.24; printf ("The value of m in main is m=%d\n\n",m); function1( ); function2(m,y); printf ("The value of m in main is still m=%d\n",m); } ΠΡΩΤΟΤΥΠΑ ΣΥΝΑΡΤΗΣΕΩΝ ΑΝΤΙΣΤΟΙΧΙΑ ΠΑΡΑΜΕΤΡΩΝ ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
ΤΟΠΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ ΔΗΛΩΣΗ ΣΥΝΑΡΤΗΣΗΣ ΔΗΛΩΣΗ ΣΥΝΑΡΤΗΣΗΣ void function1(void) { printf("function1 is a void function that does not receive\n\\rvalues from main.\n\n"); } void function2(int n, double x) int k,m; double z; k=2*n+2; m=5*n+37; z=4.0*x-58.4; printf("function2 is a void function that receives\n\values from main:\n\r\t n=%d \n\r\t x=%lf\n\n",n,x); printf("function2 creates three new variables, k, m and z\n\\rThese variables have the values:\n\\r\t l=%d \n\r\t m=%d \n\r\t z=%lf\n\n",k,m,z); ΔΗΛΩΣΗ ΣΥΝΑΡΤΗΣΗΣ ΤΟΠΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
#include <stdio.h> unsigned long int fact(int m); main(void) { int n; unsigned long int g; double one_over_nfactorial; printf("This program calculates 1/n factorial.\n\ \rEnter a positive integer less than or equal to 12:\n "); scanf ("%d",&n); g = fact(n); one_over_nfactorial=1.0/g; printf("1/%d! = %e",n,one_over_nfactorial); return (0); } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
unsigned long int fact(int m) { int i; unsigned long int product; for (i=m; i>=1; i--) { product*=i; } return(product); } ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Άσκηση -1 Να γραφούν οι κατάλληλες συναρτήσεις για τον υπολογισμό της επιφάνειας και του όγκου μιας σφαίρας με δεδομένη ακτίνα R: Επιφάνεια = 4*π*R2 Όγκος = 4/3*π*R3 Στη συνέχεια να γραφεί πρόγραμμα σε γλώσσα C που θα δέχεται από το πληκτρολόγιο την ακτίνα μιας σφαίρας και θα χρησιμοποιεί τις συναρτήσεις για να εμφανίσει την επιφάνεια και τον όγκο της. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Άσκηση -2 Να γραφεί μια συνάρτηση που θα δέχεται ως όρισμα έναν αριθμό τύπου double. Η συνάρτηση θα επιστρέφει τον χαρακτήρα ‘+’ αν ο αριθμός είναι θετικός και τον χαρακτήρα ‘-’ αν ο αριθμός είναι αρνητικός. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Άσκηση -3 Το τετράγωνο ενός ακεραίου αριθμού N μπορεί να υπολογιστεί προσθέτοντας όλους τους ακέραιους από το 1 έως το Ν και επιστρέφοντας πάλι πίσω στο 1, π.χ. 42 = 1 + 2 + 3 + 4 + 3 + 2 + 1 = 16 Να γράψετε μια συνάρτηση που θα υπολογίζει το τετράγωνο οποιουδήποτε ακέραιου Ν χρησιμοποιώντας τη μέθοδο αυτή. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Άσκηση -4 Να γραφεί ένα πρόγραμμα που θα εισάγει με χρήση της scanf μια σειρά ακεραίων αριθμών και στη συνέχεια θα τους περνά ως παραμέτρους, έναν κάθε φορά, σε μια συνάρτηση even. Η συνάρτηση even θα χρησιμοποιεί τον τελεστή % (modulus) για να αποφασίζει αν ο αριθμός είναι άρτιος ή περιττός. Η συνάρτηση θα δέχεται έναν ακέραιο αριθμό ως όρισμα και θα επιστρέφει true αν ο αριθμός είναι άρτιος αλλιώς false. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01
Άσκηση -5 Να γράψετε μια συνάρτηση με όνομα valid_date η οποία θα δέχεται ως ορίσματα 3 ακέραιους αριθμούς που θα αντιστοιχούν κατά σειρά στην ημέρα, στο μήνα και στο έτος μιας ημερομηνίας και θα επιστρέφει ΤRUΕ ή FΑLSΕ ανάλογα με το αν η ημερομηνία αυτή είναι αποδεκτή ή όχι (αν δηλαδή υπάρχει ή όχι στο ημερολόγιο). Κατά τους υπολογισμούς θα πρέπει να συμπεριληφθούν και τα δίσεκτα έτη. ΔΠΘ- ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C /01