Διάλεξη 6η: Συναρτήσειςhy100/lecture06.pdf ·...

68
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Διάλεξη 6η: Συναρτήσεις Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ. Παναγιωτάκη Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 1 / 15

Upload: others

Post on 12-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Διάλεξη 6η: Συναρτήσεις

Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης

Εισαγωγή στην Επιστήμη Υπολογιστών

Βασίζεται σε διαφάνειες του Κ. Παναγιωτάκη

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 1 /15

Page 2: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Αλγόριθμοι και Προγράμματα

Τα υπολογιστικά προβλήματα λύνονται εκτελώντας μιαακολουθία από εντολές με συγκεκριμένη σειράΑλγόριθμος: ποιές είναι αυτές οι εντολές και η σειράεκτέλεσής τουςΠολλές φορές ο αλγόριθμος που λύνει ένα πρόβλημαχρησιμοποιεί άλλους αλγόριθμους για να λύσει μικρότεραεπιμέρους προβλήματα:

Ο αλγόριθμος της διαίρεσης κάνει πολλές αφαιρέσειςΟ αλγόριθμος της ύψωσης σε δύναμη κάνει πολλούςπολλαπλασιασμούς

Μπορούμε να “γενικεύσουμε” τέτοιους υπο-αλγόριθμουςκαι να τους “καλούμε” από όπου τους χρειαζόμαστεΣυνάρτηση: ένα κομμάτι του προγράμματος πουμπορούμε να “καλέσουμε” από άλλα σημεία τουπρογράμματος

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 2 /15

Page 3: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 4: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Τύπος του αποτελέσματοςπου επιστρέφει η συνάρτηση

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 5: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Όνομα της συνάρτησης:οποιοδήποτε δεκτό όνομα

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 6: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Μέσα σε παρενθέσεις ταορίσματα της συνάρτησης

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 7: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Τύπος του πρώτου ορίσματος

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 8: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Όνομα του πρώτουορίσματος: λειτουργεί όπωςμια τοπική μεταβλητή

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 9: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Μια συνάρτησημπορεί να έχειπολλά ορίσματα(ή κανένα)

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 10: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Το κυρίως σώμα τηςσυνάρτησης ξεκινάει με {

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 11: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

και τελειώνει με }

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 12: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Ό,τι είναι μέσα σε { } λέγεταικαι code block

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 13: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Στην αρχή της συνάρτησηςυπάρχουν οι δηλώσεις τωντοπικών μεταβλητών

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 14: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις – FunctionsΣύνταξη:

Γενική μορφή

type name(type1 argument1, type2 argument2, ... ){declarationsstatements

}

Μετά τις δηλώσειςμεταβλητών μπαίνουν οιεντολές της συνάρτησης

Χωρίζουν το πρόγραμμα σε κομμάτιαΟργάνωση του προγράμματος με “διαίρει και βασίλευε”Κάθε κομμάτι (συνάρτηση) λύνει ένα επιμέρους,μικρότερο πρόβλημαΒuilding blocks για το πρόγραμμαΚάθε συνάρτηση έχει ορίσματα (είσοδο) και αποτέλεσμα(έξοδο)

Διαδικασία (από το Λύκειο): συνάρτηση που δεν επιστεφειαποτέλεσμα (void)Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 3 /15

Page 15: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 16: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Χρησιμοποιείτεσχόλια για ναπεριγράψετε τησυνάρτηση

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 17: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Ένα σχόλιο αρχίζειμε /*

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 18: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

και τελειώνει με */

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 19: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Περίληψη: ποιόπρόβλημα λύνει ησυνάρτηση;

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 20: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Τί παίρνει ως είσοδο;

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 21: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Τί επιστρέφει στηνέξοδο;

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 22: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Η συνάρτησηεπιστρέφει ένανακέραιο αριθμό

(integer)

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 23: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Η συνάρτησηονομάζεται

count_digits

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 24: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Έχει ένα όρισμα xπου είναι ακέραιος

αριθμός

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 25: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Το x είναι σαν μιατοπική μεταβλητή,που αρχικά περιέχει

το όρισμα

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 26: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Δήλωση καιαρχικοποίηση της

τοπικήςμεταβλητής count

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 27: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Αρχή των εντολώντης συνάρτησηςcount_digits

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 28: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}Η τελευταία εντολή

επιστρέφει τοαποτέλεσμα τηςσυνάρτησης

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 29: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Η main είναι μιασυνάρτηση χωρίςορίσματα που

επιστρέφει ακέραιο

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 30: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Δήλωση τηςτοπικής

μεταβλητής number

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 31: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Αρχή των εντολώντης συνάρτησης

main

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 32: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Καλεί τηνcount_digits μεόρισμα number

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 33: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Ξεκινά η εκτέλεσητης count_digits

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 34: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Δημιουργείται το xσαν τοπική

μεταβλητή καιαρχικοποιείται με

number

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 35: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}Τελικά η

count_digitsεπιστρέφει την τιμήπου περιέχει η

count

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 36: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Μέτρηση ψηφίων

count-digits.c

#include <stdio.h>

/∗ Συνάρτηση digits: μετράει τα ψηφία∗ ενός αριθμού. Δέχεται έναν ακέραιο∗ αριθμό και επιστρέφει πόσα ψηφία έχει∗/int count_digits(int x){int count = 0;

while (x != 0) {x = x / 10;count++;

}return count;

}

/∗ Συνάρτηση main ∗/int main(){int number;

printf(”Please give a number: ”);scanf(”%d”, &number);printf(”Number %d has %d digits.\n”,

number, count_digits(number));}

Το αποτέλεσμα τηςcount_digits τοπαίρνει η printfσαν όρισμα

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 4 /15

Page 37: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Δευτεροβάθμια εξίσωση

quadratic.c

/∗ Πρόγραμμα: quadratic.c∗ Λύνει μια δευτεροβάθμια εξίσωση∗/

#include <stdio.h>#include <math.h>

/∗ function declarations ∗/float discriminant(float, float, float);int solve_quadratic(float a, float b, float c);

/∗ function definitions ∗/int main(){float a, b, c;

printf(”Please type 3 decimal numbers\n”);scanf(”%f %f %f”,&a,&b,&c);printf(”Quadratic equation: ”

”%fx^2 + (%f)x + (%f) = 0\n”, a, b, c);if (a == 0) {printf(”This is a first degree equation\n”);

} else {solve_quadratic(a, b, c);

}}

float discriminant(float a, float b, float c){return (b ∗ b) -(4 ∗ a ∗ c);

}

int solve_quadratic(float a, float b, float c){float D, x1, x2;

D = discriminant(a, b, c);

if (D < 0) {printf(”Discriminant is negative. ”

”There are no real solutions\n”);return 0;

} else if (D == 0) {x1 = -b / (2 ∗ a);printf(”One solution: %f\n”, x1);return 1;

} else {x1 = (-b + sqrt(D)) / (2 ∗ a);x2 = (-b - sqrt(D)) / (2 ∗ a);printf(”Two solutions: %f, %f\n”, x1, x2);return 2;

}}

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 5 /15

Page 38: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Οργάνωση του προγράμματος

Είναι γενικά ευκολότερο να διαχειριστούμε ένα πρόβλημασπάζοντάς το σε υποπροβλήματαΚάθε υποπρόβλημα αντιστοιχεί σε μια συνάρτησηΠιο εύκολη διαχείρηση κώδικα

Debugging: δοκιμή κάθε συνάρτησης ξεχωριστά,ευκολότερη εύρεση λαθώνUpdating: ευκολότερη αλλαγή ενός αλγορίθμου με έναναποδοτικότερο χωρίς να επηρρεάζεται το υπόλοιποπρόγραμμα

Επαναχρησιμοποίηση του κώδικα: χρήση υπαρχόντωνσυναρτήσεων σε νέα προγράμματαΑποφυγή επανάληψης του ίδιου κώδικα πολλές φορές

Το copy & paste αντιγράφει και τα λάθη...Αφαιρετική σκέψη (abstraction)

Κρύβει όσες λεπτομέρειες δεν χρειάζονται

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 6 /15

Page 39: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Κλήση συναρτήσεωνΗ κλήση συνάρτησης είναι έκφραση

function_name(argument1, ..., argumentN)

Η έκφραση αυτή έχει τύπο τον τύπο που επιστρέφει ησυνάρτηση, και τιμή ό,τι επιστραφεί

number = count_digits(10+10) + 2;Για να εκτελεστεί η κλήση μιας συνάρτησης:1 Υπολογίζονται πρώτα οι τιμές των ορισμάτων

number = count_digits(20) + 2;2 Αντιγράφονται οι τιμές των ορισμάτων στις αντίστοιχεςμεταβλητές της συνάρτησης

x = 20;3 Εκτελούνται οι εντολές της συνάρτησης μέχρι ναεκτελεστεί κάποιο return

return count;4 Η κλήση συνάρτησης αντικαθίσταται με την τιμή πουεπιστρέφει

number = 2 + 2;Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 7 /15

Page 40: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Διαδικασίες και συναρτήσεις

Στο Λύκειο, είδατε συναρτήσεις που επιστρέφουναποτέλεσμα, και διαδικασίες που δεν επιστρέφουνΗ γλώσσα C έχει μόνο συναρτήσειςΜια συνάρτηση μπορεί να επιστρέφει αποτέλεσμα τύπουvoid, δηλαδή κενό

void.c

void f(){printf(”This is a test\n”);return;

}

Μια συνάρτηση που επιστρέφει void είναι σαν διεργασία,δεν μπορεί να καλεστεί σε έκφραση

Π.χ: δεν επιτρέπεται η εντολή x = f() + 2

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 8 /15

Page 41: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Διαδικασίες και συναρτήσεις

Στο Λύκειο, είδατε συναρτήσεις που επιστρέφουναποτέλεσμα, και διαδικασίες που δεν επιστρέφουνΗ γλώσσα C έχει μόνο συναρτήσειςΜια συνάρτηση μπορεί να επιστρέφει αποτέλεσμα τύπουvoid, δηλαδή κενό

void.c

void f(){printf(”This is a test\n”);return;

}

Όταν η συνάρτηση επιστρέφειvoid τότε η εντολή return

δεν παίρνει τιμή

Μια συνάρτηση που επιστρέφει void είναι σαν διεργασία,δεν μπορεί να καλεστεί σε έκφραση

Π.χ: δεν επιτρέπεται η εντολή x = f() + 2

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 8 /15

Page 42: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Συναρτήσεις βιβλιοθήκης

Συναρτήσεις ορισμένες από τον προγραμματιστήΌπως οι f, count_digits, discriminant παραπάνω

Συναρτήσεις βιβλιοθήκηςΈτοιμες συναρτήσεις που μπορούμε να χρησιμοποιήσουμεΌπως οι printf και scanf

Βιβλιοθήκες έτοιμων συναρτήσεωνΗ βιβλιοθήκη της γλώσσας CΒιβλιοθήκες συναρτήσεων διαθέσιμες στο διαδίκτυο

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 9 /15

Page 43: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η βιβλιοθήκη της C

#include <stdlib.h>

int abs(int);void exit(int);int rand(void);void srand(unsigned int);

Μπορείτε να δείτε αναλυτικά όλες τις συναρτήσειςβιβλιοθήκης στο manual page: $ man stdlib.hManual pages των επιμέρους συναρτήσεων: $ man prandManual page της εντολής man: $ man manΑντίστοιχα για Input/Output: $ man stdio.h

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 10 /15

Page 44: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η βιβλιοθήκη της C

#include <stdlib.h>

int abs(int);void exit(int);int rand(void);void srand(unsigned int);

Η απόλυτη τιμή ενόςακεραίου

Μπορείτε να δείτε αναλυτικά όλες τις συναρτήσειςβιβλιοθήκης στο manual page: $ man stdlib.hManual pages των επιμέρους συναρτήσεων: $ man prandManual page της εντολής man: $ man manΑντίστοιχα για Input/Output: $ man stdio.h

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 10 /15

Page 45: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η βιβλιοθήκη της C

#include <stdlib.h>

int abs(int);void exit(int);int rand(void);void srand(unsigned int);

Τερματίζει το πρόγραμμαεπιστρέφοντας μια τιμή στο

λειτουργικό σύστημα

Μπορείτε να δείτε αναλυτικά όλες τις συναρτήσειςβιβλιοθήκης στο manual page: $ man stdlib.hManual pages των επιμέρους συναρτήσεων: $ man prandManual page της εντολής man: $ man manΑντίστοιχα για Input/Output: $ man stdio.h

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 10 /15

Page 46: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η βιβλιοθήκη της C

#include <stdlib.h>

int abs(int);void exit(int);int rand(void);void srand(unsigned int);

Δημιουργεί και επιστρέφειένα ψευδοτυχαίο αριθμό από0 μέχρι RAND_MAX με κανονική

κατανομή

Μπορείτε να δείτε αναλυτικά όλες τις συναρτήσειςβιβλιοθήκης στο manual page: $ man stdlib.hManual pages των επιμέρους συναρτήσεων: $ man prandManual page της εντολής man: $ man manΑντίστοιχα για Input/Output: $ man stdio.h

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 10 /15

Page 47: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η βιβλιοθήκη της C

#include <stdlib.h>

int abs(int);void exit(int);int rand(void);void srand(unsigned int);

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

Μπορείτε να δείτε αναλυτικά όλες τις συναρτήσειςβιβλιοθήκης στο manual page: $ man stdlib.hManual pages των επιμέρους συναρτήσεων: $ man prandManual page της εντολής man: $ man manΑντίστοιχα για Input/Output: $ man stdio.h

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 10 /15

Page 48: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 49: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

“Ταβάνι”, ο αμέσωςμεγαλύτερος ακέραιος

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 50: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Συνημίτονο

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 51: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Εκθετικό ex

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 52: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Απολυτη τιμή

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 53: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

“Πάτωμα”, ο αμέσωςμικρότερος ακέραιος

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 54: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Φυσικός λογάριθμος

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 55: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Ύψωση σε δύναμη

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 56: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Ημίτονο

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 57: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Τετραγωνική ρίζα

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 58: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Η μαθηματική βιβλιοθήκη της C

#include <math.h>

double ceil(double);double cos(double);double exp(double);double fabs(double);double floor(double);double log(double);double pow(double, double);double sin(double);double sqrt(double);double tan(double);

Εφαπτομένη

Το manual page της μαθηματικής βιβλιοθήκης:$ man math.h$ man powΣτο compile και link, προσθέτουμε -lm όταν καλούμε τοgcc:$ gcc power.c -o power.exe -lmΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 11 /15

Page 59: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Ορισμός συναρτήσεωνΟι δηλώσεις μεταβλητών μέσα σε code blocksδημιουργούν τοπικές μεταβλητές

Αυτές οι μεταβλητές χάνονται στο τέλος του blockΕκτός αν είναι static μεταβλητές

Δεν μπορούν να οριστούν συναρτήσεις μέσα σεσυναρτήσεις

Λάθος πρόγραμμα!

int main(){void f() {printf(”This is not valid C.\n”);

}}

Οποιαδήποτε συνάρτηση μπορεί να καλέσει όποια άλλησυνάρτηση έχει δηλωθεί ή οριστεί

Ακόμη και τον εαυτό της (αναδρομή)Αν δεν έχουμε ορίσει ή δηλώσει μια συνάρτηση δενμπορούμε να την καλέσουμεΠρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 12 /15

Page 60: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων

Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να τηνορίσουμε ή να τη δηλώσουμεΔήλωση συνάρτησης (function prototype ή declaration)

Μορφή δήλωσης συνάρτησης

type name(type1, ..., typeN);

Η δήλωση (declaration) μιας συνάρτησης διαφέρει απότον ορισμό (definition) της

Δεν χρειάζεται ονόματα παραμέτρωνΔεν υπάρχει “σώμα” της συνάρτησης (δηλώσεις τοπικώνμεταβλητών και εντολές)

Μετά τη δήλωση μπορούμε να την καλέσουμε

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 13 /15

Page 61: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων

Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να τηνορίσουμε ή να τη δηλώσουμεΔήλωση συνάρτησης (function prototype ή declaration)

Μορφή δήλωσης συνάρτησης

type name(type1, ..., typeN);

Ο τύπος που επιστρέφει ησυνάρτηση (όπως στον

ορισμό)

Η δήλωση (declaration) μιας συνάρτησης διαφέρει απότον ορισμό (definition) της

Δεν χρειάζεται ονόματα παραμέτρωνΔεν υπάρχει “σώμα” της συνάρτησης (δηλώσεις τοπικώνμεταβλητών και εντολές)

Μετά τη δήλωση μπορούμε να την καλέσουμε

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 13 /15

Page 62: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων

Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να τηνορίσουμε ή να τη δηλώσουμεΔήλωση συνάρτησης (function prototype ή declaration)

Μορφή δήλωσης συνάρτησης

type name(type1, ..., typeN);

Το όνομα της συνάρτησης(όπως στον ορισμό)

Η δήλωση (declaration) μιας συνάρτησης διαφέρει απότον ορισμό (definition) της

Δεν χρειάζεται ονόματα παραμέτρωνΔεν υπάρχει “σώμα” της συνάρτησης (δηλώσεις τοπικώνμεταβλητών και εντολές)

Μετά τη δήλωση μπορούμε να την καλέσουμε

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 13 /15

Page 63: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων

Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να τηνορίσουμε ή να τη δηλώσουμεΔήλωση συνάρτησης (function prototype ή declaration)

Μορφή δήλωσης συνάρτησης

type name(type1, ..., typeN);

Οι τύποι των ορισμάτων τηςσυνάρτησης

Η δήλωση (declaration) μιας συνάρτησης διαφέρει απότον ορισμό (definition) της

Δεν χρειάζεται ονόματα παραμέτρωνΔεν υπάρχει “σώμα” της συνάρτησης (δηλώσεις τοπικώνμεταβλητών και εντολές)

Μετά τη δήλωση μπορούμε να την καλέσουμε

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 13 /15

Page 64: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων

Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να τηνορίσουμε ή να τη δηλώσουμεΔήλωση συνάρτησης (function prototype ή declaration)

Μορφή δήλωσης συνάρτησης

type name(type1, ..., typeN);

Δεν χρειάζονται τα ονόματατων ορισμάτων

Η δήλωση (declaration) μιας συνάρτησης διαφέρει απότον ορισμό (definition) της

Δεν χρειάζεται ονόματα παραμέτρωνΔεν υπάρχει “σώμα” της συνάρτησης (δηλώσεις τοπικώνμεταβλητών και εντολές)

Μετά τη δήλωση μπορούμε να την καλέσουμε

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 13 /15

Page 65: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων

Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να τηνορίσουμε ή να τη δηλώσουμεΔήλωση συνάρτησης (function prototype ή declaration)

Μορφή δήλωσης συνάρτησης

type name(type1, ..., typeN);

Η δήλωση συνάρτησηςτελειώνει με semicolon ;

Η δήλωση (declaration) μιας συνάρτησης διαφέρει απότον ορισμό (definition) της

Δεν χρειάζεται ονόματα παραμέτρωνΔεν υπάρχει “σώμα” της συνάρτησης (δηλώσεις τοπικώνμεταβλητών και εντολές)

Μετά τη δήλωση μπορούμε να την καλέσουμε

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 13 /15

Page 66: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων

Για να χρησιμοποιήσουμε μια συνάρτηση πρέπει να τηνορίσουμε ή να τη δηλώσουμεΔήλωση συνάρτησης (function prototype ή declaration)

Μορφή δήλωσης συνάρτησης

type name(type1, ..., typeN);

Η δήλωση (declaration) μιας συνάρτησης διαφέρει απότον ορισμό (definition) της

Δεν χρειάζεται ονόματα παραμέτρωνΔεν υπάρχει “σώμα” της συνάρτησης (δηλώσεις τοπικώνμεταβλητών και εντολές)

Μετά τη δήλωση μπορούμε να την καλέσουμε

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 13 /15

Page 67: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Δηλώσεις συναρτήσεων (2)

Τοποθετούμε τις δηλώσεις όλων των συναρτήσεων στηναρχή του προγράμματοςΧρειάζεται υποχρεωτικά αν χρησιμοποιούμε συναρτήσειςπριν τις ορίσουμεΚαλή πρακτική:

Ελέγχουμε τη σωστή χρήση των συναρτήσεων: σωστόςτύπος ορισμάτων, επιστρεφόμενης τιμήςΜπορούμε να δούμε με μια ματιά τις συναρτήσεις τουπρογράμματοςΜπορούμε να καλέσουμε όλες τις συναρτήσεις από όλεςτις άλλες άσχετα με τη σειρά που ορίζονται

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 14 /15

Page 68: Διάλεξη 6η: Συναρτήσειςhy100/Lecture06.pdf · Διάλεξη6η:Συναρτήσεις ΤμήμαΕπιστήμηςΥπολογιστών,ΠανεπιστήμιοΚρήτης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Ηλεκτρονικό ζάρι

die.c

#include <stdlib.h>#include <stdio.h>#include <time.h>

/∗ declarations ∗/int throw_die(unsigned int);void init();int main();

/∗ definitions ∗/

int main() {int result;

init ();printf(”I ’m throwing a 6-sided die.\n”);result = throw_die(6);printf(”%d came out.\n”, result);

}

/∗ Συνάρτηση init∗ Αρχικοποιεί τη γεννήτρια∗ τυχαίων αριθμών∗/void init() {int seconds_since_1970 = time(0);srand(seconds_since_1970);

}

/∗ Συνάρτηση throw_die∗ Προσομοιώνει ένα ζάρι∗ Δέχεται τον αριθμό των πλευρών∗ του ζαριού∗ Επιστρέφει ένα τυχαίο αριθμό από∗ 1 μέχρι sides∗/int throw_die(unsigned int sides) {return (rand() % sides) + 1;

}

Πρατικάκης (CSD) Συναρτήσεις CS100, 2020-2021 15 /15