Τμήμα:C/Μάθημα 7ο

Από Βικιεπιστήμιο
Προηγούμενη
Ενότητα
Περιεχόμενα Επόμενη
Ενότητα


Ασχολούμενοι όλο και περισσότερο με τον προγραμματισμό θα διαπιστώσετε πως κάποιες εντολές γίνονται επαναλαμβανόμενες. Αν θέλαμε για παράδειγμα στο πρόγραμμα κρυπτογράφησης του προηγούμενου μαθήματος να δημιουργήσουμε ένα μενού όπου ο χρήστης θα επέλεγε ανάμεσα στις επιλογές κρυπτογράφησης και αποκρυπτογράφησης, με τις μέχρι τώρα γνώσεις μας, θα το κάναμε με μια δομή επανάληψης. Όμως αν στην συνέχεια θέλαμε να προσθέσουμε και άλλα μενού η δομή επανάληψης θα γινόταν περίπλοκη και χαοτική.

Λύση σε αυτό το πρόβλημα δίνουν οι συναρτήσεις(functions) οι οποίες έχουν δύο σημαντικά πλεονεκτήματα:

  • Απλοποίηση και ευκολότερη ανάγνωση του κώδικα,
  • Αποφυγή του code duplication, δηλαδή να ξαναγράφεται ο ίδιος κώδικας περισσότερες από μία φορές.

Σύνταξη[επεξεργασία]

Έχουμε ήδη εξετάσει την συνάρτηση main(). Το ότι είναι συνάρτηση το υποδεικνύουν οι παρενθέσεις. Μέσα στις παρενθέσεις μπορούν να μπουν διάφοροι παράμετροι με τον τύπο τους, οι οποίοι μπορούν να διαφοροποιήσουν την λειτουργία της ίδιας συνάρτησης. Φανταστείτε για παράδειγμα μια συνάρτηση που να προσθέτει την παράμετρο Α με την παράμετρο Β. Ανάλογα με τις τιμές των παραμέτρων Α και Β το αποτέλεσμα θα άλλαζε.

Σύνταξη
datatype functionIdentifier(type1 param1;type2 param2;...;typeN paramN)
{
	// κώδικας συνάρτησης
	return value; // Η τιμή που θα επιστραφεί στην εντολή που κάλεσε την συνάρτηση (αν χρειαστεί)
}
Όπου datatype, ένας τύπος δεδομένων πχ. int, long, float ή κενός τύπος void. Όπως και στην συνάρτηση main, έτσι και κάθε συνάρτηση void δεν χρειάζεται να επιστρέφει κάποια τιμή.


Παράδειγμα μιας συνάρτησης
int add(int a, int b){
	return a+b;
}


Παράδειγμα με πλήρες κώδικα
#include <stdio.h>
int add(int a, int b){
	return a+b;
}

// MAIN FUNCTION
void main()
{
	int a,b;
	printf("First number:");  scanf("%d",&a);
	printf("Second number:"); scanf("%d",&b);
	printf("%d+%d=%d\n",a,b,add(a,b)); // Καλούμε την συνάρτηση για την πρόσθεση
}


Δήλωση συνάρτησης[επεξεργασία]

Δοκιμάστε να μεταγλωττίσετε τον προηγούμενο κώδικα μεταφέροντας τον κώδικα της συνάρτησης μετά την συνάρτηση main(). Στην ANSI C, ο κώδικας δεν πρόκειται να μεταγλωττιστεί, λόγο του ότι συναντάει μια κλήση σε συνάρτηση που δεν έχει ακόμα δηλωθεί. Πιο μοντέρνοι μεταγλωττιστές όπως ο gcc δεν έχουν πρόβλημα με κάτι τέτοιο, καλό όμως είναι να το έχουμε υπόψη μας, για να μην δημιουργηθεί πρόβλημα εάν ποτέ χρειαστεί να χρησιμοποιήσουμε άλλο μεταγλωττιστή.

Για να αποφευχθεί κάθε περίπτωση μη εύρεσης της συνάρτησης, δηλώνουμε την ύπαρξή της στην αρχή του προγράμματός μας.

Σύνταξη
datatype functionIdentifier(type1 param1;type2 param2;...;typeN paramN);
Προσέξτε το ερωτηματικό στο τέλος της γραμμής, ενώ δεν υπάρχει ο κώδικας της συνάρτησης.


Παρόλο που με αυτό το κομμάτι κώδικα δεν θα υπάρχει πρόβλημα, συνηθίζεται οι συναρτήσεις να γράφονται πάνω από την συνάρτηση main(). Εσείς μπορείτε να επιλέξετε τον τρόπο γραφής που σας ταιριάζει.

Πλήρες πρόγραμμα
#include <stdio.h>
// Declarations (δηλώσεις)
int add(int a, int b);

// Functions (συναρτήσεις)
int add(int a, int b){
	return a+b;
}

// MAIN FUNCTION
int main()
{
	int a, b;
	printf("First number:");  scanf("%d",&a);
	printf("Second number:"); scanf("%d",&b);
	printf("%d+%d=%d\n",a,b,add(a,b)); // Καλούμε την συνάρτηση για την πρόσθεση
}


Προηγούμενη
Ενότητα
Περιεχόμενα Επόμενη
Ενότητα