ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό Ενότητα 9: Συναρτήσεις Εμβέλεια Κ. Κουκουλέτσος Τμήμα: Τμήμα Υπολογιστικών Συστημάτων
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σκοποί ενότητας... 4 Περιεχόμενα ενότητας... 4 Ασκήσεις... 5 Άσκηση 1... 5 Άσκηση 2... 5 Άσκηση 3... 5 Άσκηση 4... 6 Άσκηση 5... 6 Ασκήσεις για τον σπουδαστή... 7 Άσκηση 1 (Άσκηση για τον σπουδαστή)... 7 Άσκηση 2 (Άσκηση για τον σπουδαστή)... 7
Σκοποί ενότητας Σκοπός της ενότητας είναι η πρακτική εξάσκηση του εκπαιδευόμενου με έννοιες που έχουν αναλυθεί στο αντίστοιχο τμήμα της θεωρίας, με την επίλυση ασκήσεων. Πιο αναλυτικά οι σκοποί είναι Να εξοικειωθεί με τους τρόπους μεταβίβασης τιμών σε συνάρτηση Να αναγνωρίζει πότε πρέπει να κάνει χρήση παραμέτρων τιμής και πότε αναφοράς Να μάθει την έννοια της εμβέλειας μεταβλητών Nα γνωρίσει τις συναρτήσεις που επιστρέφουν δείκτες Περιεχόμενα ενότητας Η ενότητα του εργαστηρίου περιλαμβάνει ασκήσεις για το μάθημα: Εισαγωγή στον προγραμματισμό.
Ασκήσεις Άσκηση 1 Να εμφανίζονται οι προηγούμενη και επόμενη τιμή μίας ακεραίας μεταβλητής // Dio parametroi gia klisi me anafora void prinmeta(int, int *, int *); int main (){ int a=200, prin, meta; printf("o arithmos einai = %d\n\n",a); prinmeta(a, & prin, & meta); printf("h proigoumeni timi einai %d\n",prin); printf("h epomeni timi einai %d\n",meta); void prinmeta(int z, int * x, int * y ){ *x=z-1; *y=z+1; printf("h x= %d H y= %d\n\n\n",*x,*y); Άσκηση 2 Να εισάγεται ένας πραγματικός αριθμός. Κατόπιν με κλήση μίας συνάρτησης να υπολογίζεται η περίμετρος και το εμβαδό κύκλου που έχει ακτίνα τον αριθμό που εισήχθηκε. Η συνάρτηση να επιστρέφει δυο τιμές την περίμετρο και το εμβαδό στην main. Στην main να εμφανίζονται στην οθόνη οι δύο αυτές τιμές. #define PI 3.14159 int main( ){ int aktina ; float emv, per ; printf ( "\ndose aktina kiklou:" ) ; scanf ( "%d", &aktina ) ; kiklos ( aktina, &emv, &per) ; printf ( "\nemvado = %.3f Perimetros = %.3f\n", emv, per ) ; void kiklos ( int faktina, float *femv, float *fper ){ *femv = PI *faktina *faktina ; *fper = 2 * PI *faktina ; Άσκηση 3 Εκτελέστε το παρακάτω πρόγραμμα στον υπολογιστή και παρατηρήστε την χρήση static μεταβλητών /* Function me auto metabliti */ void funcauto(void){
int plithos = 0; ++plithos; printf("\nauto plithos = %d ", plithos ); /* Function me static */ void funcstatic(void){ static int plithos = 0; ++plithos; printf("\nstatic plithos = %d ", plithos ); int main(void){ int i; for( i = 0; i < 5; i++ ){ funcauto(); funcstatic(); Άσκηση 4 Να γραφεί πρόγραμμα σε γλώσσα C: που να καλεί συνάρτηση μετατροπής που μετατρέπει τα δευτερόλεπτα σε ισοδύναμο χρόνο που εκφράζεται σε λεπτά και δευτερόλεπτα (πχ 65 sec = 1 min & 5 sec). ο αριθμός που αντιπροσωπεύει δευτερόλεπτα να εισάγεται με συνάρτηση που απλά επιστρέφει την τιμή στο main. Κατόπιν να καλείται η συνάρτηση μετατροπής και να επιστρέφει τα λεπτά και δευτερόλεπτα στο main. //============================================= int dose1() //function { int xr; printf("dose ton xrono "); scanf("%d",& xr); return xr; //============================================= void sectomin(int x, int *a,int* b) //definition of function { *a=x/60; *b=x%60; //=============================================*/ int main( ) { int xronos, min, sec; xronos=dose1(); sectomin(xronos,&min,&sec); printf("o xronos eine %d lepta kai %d defterolepta\n",min,sec); system("pause"); Άσκηση 5 Εκτελέστε το πρόγραμμα το οποίο εμφανίζει 5 τυχαίους αριθμούς και τους επιστρέφει με χρήση πίνακα που αντιπροσωπεύει ένα δείκτη
// function poy epistrefei tixaious int * tixaios( ) { static int r[5]; //static pinakas int i; srand( time(null) ); for ( i = 0; i < 5; ++i) { r[i] = rand()%10+1; printf("%d\n", r[i] ); return r; //epistrefei dieftinsi int main (){ int *ptr, i; // ptr deiktis se akeraio ptr = tixaios(); for ( i = 0; i < 5; i++ ){ printf("o %d os = %d\n", i+1, *(ptr + i) ); Ασκήσεις για τον σπουδαστή (Κάποιες από τις ασκήσεις αυτές μπορούν να λυθούν στην διάρκεια του εργαστηρίου για εμβάθυνση ορισμένων εννοιών. Όμως συνήθως λύνονται με πρωτοβουλία του σπουδαστή και μπορούν να συζητηθούν με το διδάσκοντα καθηγητή του εργαστηρίου ) Άσκηση 1 (Άσκηση για τον σπουδαστή) Να γραφεί παρόμοιο πρόγραμμα με την άσκηση 4 που να μετατρέπεται ένας αριθμός που αντιπροσωπεύει cm σε ένα συμμιγή αριθμό που αποτελείται από Km, m, και cm (δηλαδή σε 200101 cm είναι 2km 1m και 1 cm. Όλες οι εμφανίσεις (εκτυπώσεις) των αριθμών να γίνονται μέσα από το main και όχι στις συναρτήσεις. Άσκηση 2 (Άσκηση για τον σπουδαστή) Να γραφεί πρόγραμμα το οποίο να καλεί συνάρτηση και να εμφανίζει ένα ποσό που δίνεται σε ευρώ από πόσα χαρτονομίσματα των 500, των εκατό, των είκοσι και κέρματα του ενός ευρώ αποτελείται. Η μετατροπή γίνεται ώστε το αρχικό ποσό να μετατρέπεται στον ελάχιστο αριθμό χαρτονομισμάτων και κερμάτων. Να εισάγεται ο αριθμός που αντιπροσωπεύει ευρώ στο κύριο πρόγραμμα. (πχ 1133 ευρώ αποτελείται από 2 πεντακοσάρικα, 1 κατοστάρικο, 1 εικοσάρικο και 13 ευρώ)