...τι περιλαμβάνει αυτό το κεφάλαιο:
Στο κεφάλαιο αυτό θα δούμε τι είναι μια συνάρτηση, πως δημηουργείται, γιατί δημιουργήται και πως μπορούμε να την χρησιμοποιήσουμε! Θα δούμε την διαφορά όταν έχουμε και όταν δεν έχουμε συναρτήσεις στο ΙΔΙΟ πρόβλημα και τέλος, θα δούμε λίγα πραγματάκια για δείκτες σχετικά με τις συναρτήσεις.
Τι είναι μια συνάρτηση
Ας δώσουμε έναν ορισμό σχετικά με το τί είναι μια συνάρτηση! Μια συνάρτηση λοιπόν, είναι ένα κομμάτι κώδικα η μια ανεξάρτητη ενότητα αν θέλετε, που εκτελεί μια συγκεκριμένη εργασία και μπορεί να επιστρέφει η όχι μια τιμή.
Οι συναρτήσεις διευκολύνουν πολύ εναν προγραμματιστή και στην πραγματικότητα είναι ένας τρόπος να διαμοιράσουμε τον κώδικα μας σε πολλά υπο-προβληματα! Θυμηθείτε πως, έχοντας ένα αρχικό προβλημα αν καταφέρουμε να το "σπάσουμε" σε υπο-προβλήματα και ίσως αυτά σε άλλα πιο μικρά υπο-προβλήματα ουσιαστικά έχουμε την λύση. Γιατί? Όσο, μεγάλο πρόβλημα κι αν είναι το αρχικό διαχωρίζοντας το σε υπο-προβλήματα έχουμε να λύσουμε πολύ πιο απλά και εύκολα προβλήματα, απο τα οποία πολλές φορες οι λύσεις είναι και αυτονόητες κι αν όχι είναι τελοςπάντων πολύ απλές! Αυτό είναι πολύ σημαντικό ως προγραμματιστικη τεχνική και χρησιμοποιείται κατα κόρον στα μεγάλα και πολύπλοκα προγράμματα! Στο σημείο αυτό θα ήθελα να δώσω ένα απλό παράδειγμα...
Στο παράδειγμά μας θα διαβάζουμε δυο αριθμους και θα τους προσθέτουμε εκτυπώνοντας το αποτέλεσμα:
...χωρίς συνάρτηση:
- Κώδικας: Επιλογή όλων
#include <stdio.h>
int main( ){
int a, b, sum=0 ;
scanf("%d", &a) ;
scanf("%d", &b) ;
sum = a + b ;
printf( "Το άθροισμα είναι: %d\n", a+b ) ;
return 0 ;
}
...με συνάρτηση:
- Κώδικας: Επιλογή όλων
#include <stdio.h>
int cal_sum (int a, int b ) {
return a+b;
}
int main( ){
int a, b, sum = 0 ;
scanf("%d", &a) ;
scanf("%d", &b) ;
sum = cal_sum(a, b);
printf( "Το άθροισμα είναι: %d\n", sum ) ;
return 0 ;
}
Δημιουργία συνάρτησης
Στο πρόγραμμά μας μπορούμε να έχουμε πολλές συναρτήσεις. Τα προγράμματα αποτελούνται απο τις βιβλιοθήκες που βρίσκονται στην αρχή και μετά την Main(κύρια συνάρτηση). Οι επιπλέον συναρτήσεις μπορούν να βρίσκονται πάνω η κα΄τω απο την main. Υπάρχει μια μικρή διαφορά όμως!
- Συναρτήσεις που υλοποιούνται πάνω απο την main: Το μόνο που χρειάζεται να κάνουμε είναι να την υλοποιήσουμε σωστά.
- Συναρτήσεις που υλοποιούνται κάτω απο την main: Εκτός απο την υλοποίηση(ίδια όπως και στην πρώτη περίπτωση) θα πρέπει πάνω απο την main να την ορίσουμε-δηλώσουμε. αυτό γίνεται γράφοντας με την σειρά:
- τον τύπο επιστροφής(πχ. int, float,... )
- το όνομα της συνάρτησης,
- και τα ορίσματα που δέχεται.
Προσέξτε την σειρά που ορίζετε τις συναρτήσεις αν ακολουθήσετε την δεύτερη περίπτωση. Υπάρχει περίπτωση να τις ορίσετε με τέτοια σειρά ώστε να καλείτε μια συνάρτηση στη οποία χρησιμοποιήτε κάτι που το δηλώνετε σε μια άλλη συνάρτηση παρακάτω. Με άλλα λόγια θα πρέπει πρίν χρησιμοποιήτε κάτι(πχ. μια μεταβλητή) να το έχετε δηλώσει-αρχικοποιήσει στην main η σε κάποια συνάρτηση που έχετε ήδη καλέσει!!!
Πέρασμα παραμέτρων
Χρησιμοποιώντας συναρτήσεις θα πρέπει κάποια στιγμή να περάσουμε τις παραμέτρους απο την main. Αυτό γίνεται με πολλούς τρόπους απο τους οποίους οι πιο συνηθισμένοι είναι με:
- με αναφορά
- με τιμή
Στο πέρασμα των παραμέτρων με τιμή περνάμε αυτούσια την τιμή των μεταβλητών και κάθε φορά που αλλάζει κάτι καθώς εκτελείται η συνάρτηση αλλάζει και στην μνήμη. Αντίθετα στο πέρασμα με αναφορα΄(by reference) αυτό που γίνεται είναι να χρησιμοποιύμε δείκτες έτσι ώστε κάθε μεταβλητή που χρησιμοποιούμε στην συνάρτηση να δείχνει στο χώρο μνήμης που είναι δεσμευμένο απο την main. Παρακάτω θα δείτε λίγο πιο αναλυτικά αυτους τους δύο τρόπους. Στην ουσία είναι δυο βήματα, πρώτα όταν καλούμε την συνάρτηση και μετά όταν περνάμε τις παραμέτρουυς στην συνάρτηση.
Πέρασμα παραμέτρων με τιμή...
Όταν καλούμε την συνάρτηση απο την main απλά γράφουμε το όνομα των μεταβλητών. Για παράδειγμα, αν θέλουμε να περάσουμε 2 ακεραίους και έναν πίνακα τύπου float θα κάναμε το εξής:
- Κώδικας: Επιλογή όλων
main() {
function(a, b, A); /* το a,b είναι οι δυο ακέραιοι και A ο πίνακας */
}
Συνεχίζοντας με την υλοποίηση της συνάρτησης, εδώ βάζουμε τον τύπο & όνομα μεταβλητής. Με άλλα λόγια έστω οτι θέλουμε να συνεχίσουμε το παραπάνω παράδειγμα. Όταν υλοποιούμε την συνάρτηση θα πρέπει να γράψουμε;
- Κώδικας: Επιλογή όλων
void function(int a, int b, float A[]){
// ... υλοποίηση της συνάρτησης με κώδικα
}
Πέρασμα παραμέτρων με αναφορά...
συνεχίζεται...