Προγραμματισμός Η/Y Διάλεξη 6 η : Συναρτήσεις
Η C είναι συναρτησιακή γλώσσα προγραμματισμού Ως τώρα όλα τα προγράμματα που είδαμε ήταν γραμμένα μέσα στην main Τι θα κάνουμε όμως αν Το πρόγραμμα είναι τεράστιο (π.χ. 100000 γραμμές); Υπάρχουν κομμάτια κώδικα τα οποία θέλουμε να εκτελέσουμε πολλές φορές; Θα χωρίσουμε το πρόγραμμα σε κομμάτια Φιλοσοφία του διαίρει και βασίλευε T κάθε κομμάτι σε ένα επιμέρους υποπρόβλημα Τι θα κερδίσουμε;
Τι θα κερδίσουμε Τα υποπροβλήματα είναι μικρότερα και συνεπώς πιο εύκολα στη διαχείριση Δημιουργούμε μια συνάρτηση για κάθε υποπρόβλημα Ο κώδικας είναι πιο ευανάγνωστος και ευκολότερος στη συντήρηση Μπορούμε να χρησιμοποιήσουμε συναρτήσεις που έχουμε γράψει στο παρελθόν για την επίλυση νέων προβλημάτων Αποφεύγουμε την επανάληψη κώδικα στο ίδιο πρόγραμμα Επιτυγχάνεται αφαίρεση. Δηλ. απόκρυψη μη απαραίτητων λεπτομερειών από τον προγραμματιστή Σκεφτείτε ομάδες προγραμματιστών που υλοποιούν ένα μεγάλο σύστημα
Συναρτήσεις Βασίζει την ανάπτυξη σύνθετων συστημάτων στην τμηματοποίηση των σύνθετων διεργασιών σε επιμέρους απλούστερες διεργασίες Τμηματοποίηση ενός προγράμματος σε συναρτήσεις (functins) Κάθε συνάρτηση πρέπει να είναι Σχετικά μικρή Αν είναι δυνατό να έχει μία είσοδο και μία έξοδο Να είναι αυτόνομη Να εκτελεί σαφώς ορισμένο έργο Να έχει καλά προσδιορισμένη επαφή Κάθε πρόγραμμα C αποτελείται από τη συνάρτηση main και (προαιρετικά) από ένα αριθμό άλλων συναρτήσεων
Δηλαδή τι θα μπορούσα να φτιάξω ως συνάρτηση Παράδειγμα: Υπολογίστε την αξία του ΦΠΑ στην τιμή ενός προϊόντος. Π.χ Αν ένα πουκάμισο κοστίζει (τελική τιμή) 80 και το ΦΠΑ είναι 23%, πόσο πληρώνουμε για ΦΠΑ Αν αυτό το χρειαζόμαστε π.χ. 50 φορές στο πρόγραμμά μας, δεν το γράφουμε 50 φορές Δημιουργούμε μία συνάρτηση! Η συνάρτηση, όπως και στα μαθηματικά, έχει είσοδο (μεταβλητές) και έξοδο (αποτέλεσμα)
Υπολογισμός φόρου Είσοδος Τελική τιμή προϊόντος Ποσοστό ΦΠΑ Έξοδος Φόρος Στη C return_type functin_name (parameter list) { //Κώδικας συνάρτησης }
Παράδειγμα flat calc_vat (flat price, flat vat) { flat price_n_vat,vat; price_n_vat = price / (1.0 + vat); vat = price - price_n_vat; return vat; } Κατόπιν οπουδήποτε στο πρόγραμμά μας μπορούμε να γράψουμε: printf ( T FPA einai: %.2f, calc_vat(80.0, 0.23) );
Συναρτήσεις Η βιβλιοθήκη της C παρέχει πολλές έτοιμες συναρτήσεις. Στο εργαστήριο έχουμε δει: printf() συνάρτηση εκτύπωσης scanf() συνάρτηση εισόδου rand () - Παραγωγή τυχαίων αριθμών Αν για κάτι που θέλουμε να κάνει το πρόγραμμα μας, βοηθάει μια έτοιμη συνάρτηση τότε την χρησιμοποιούμε Δεν ξαναγράφουμε τον κώδικα από την αρχή Χρησιμοποιήστε τις συναρτήσεις της βιβλιοθήκης όσο περισσότερο μπορείτε
Παραδείγματα συναρτήσεων int max(int a, int b); int max(int, int); vid draw_circle(duble x, duble y, duble r); vid print_menu (); Τα ονόματα των μεταβλητών δεν είναι υποχρεωτικά, μόνο ο τύπος τους vid: δεν επιστρέφεται καμία τιμή Οι δηλώσεις των printf και scanf βρίσκονται στο αρχείο stdi.h Η συνάρτηση δηλώνεται στην αρχή του κώδικα (πρότυπο) και στη συνέχεια έχουμε τον κώδικά της
Ένα ακόμη παράδειγμα
Κλήση συνάρτησης Έστω η συνάρτηση int max (int a, int b) η οποία επιστρέφει τον μεγαλύτερο από δύο αριθμούς Τι τιμή θα έχει η μεταβλητή result μετά την εκτέλεση της παρακάτω γραμμής; Με ποιον αριθμό θα συγκριθεί ο αριθμός 17; result = max ( max (18,21), 17);
Επιστροφή από συνάρτηση - return Με τη δεσμευμένη λέξη return τερματίζει μια συνάρτηση Αν υπάρχει κώδικας παρακάτω, δεν θα εκτελεστεί
Ροή προγράμματος 1. Πρώτα εκτελούνται το printf και το scanf της main 2. Μετά έχουμε κλήση συνάρτησης. Στέλνονται στην συνάρτηση οι τιμές των num1, num2, num3 3. Οι τρεις τιμές αντιγράφονται στις παραμέτρους της max a, b, c 4. Εκτελούνται οι εντολές της max και η συνάρτηση επιστρέφει έχοντας υπολογίσει το temp 5. Ανατίθεται στην μεταβλητή megaliters η τιμή που επέστρεψε η max και εκτελείται το printf
Ποια η ροή του κώδικα εδώ; int main(vid){ int num1, num2, num3, megaliters; printf( dwse treis arithmus \n); scanf( %d %d %d,&num1,&num2,&num3); megaliters = max(num1,num2,num3); return 0; } int max(int a, int b, int c) { int temp = a; if (temp < b) temp = b; if (temp < c) temp = c; print_max(temp); return temp; } vid print_max(int num) { printf( max is %d,num); }
Κανόνες ευανάγνωστου κώδικα Οργανώστε τον κώδικά σας σύμφωνα με τα παρακάτω Εντολές προεπεξεργαστή (#include, #define) Πρωτότυπα συναρτήσεων Δηλώσεις γενικών μεταβλητών Συνάρτηση main Ορισμοί λοιπών συναρτήσεων Μεταξύ των παραπάνω ομάδων αφήνετε 1-2 κενές γραμμές Χρησιμοποιείτε κάθετη στοίχιση για να δηλώσετε την εμφώλευση Χρησιμοποιείτε αντιπροσωπευτικά ονόματα μεταβλητών Όλες οι μεταβλητές να δηλώνονται στο ίδιο σημείο