Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

Σχετικά έγγραφα
Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων

11. Συναρτήσεις (Μέρος Ι)

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Μεθόδων Επίλυσης Προβλημάτων

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμό για ΗΜΥ

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραμματισμό

Συναρτήσεις. Εισαγωγή

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δομημένος Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις

Μεθόδων Επίλυσης Προβλημάτων

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

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

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

12. Συναρτήσεις (Μέρος ΙI)

Προγραμματισμό για ΗΜΥ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

7. Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ανάπτυξη και Σχεδίαση Λογισμικού

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

Η βασική συνάρτηση προγράμματος main()

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

scanf() scanf() stdin scanf() printf() int float double %lf float

Εισαγωγή στην γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διαδικασιακός Προγραμματισμός

ΕΠΛ 034: Εισαγωγήστον ΠρογραµµατισµόγιαΗΜΥ

Δομημένος Προγραμματισμός

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Προγραμματισμό για ΗΜΥ

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Διάλεξη 5η: Εντολές Επανάληψης

Δομημένος Προγραμματισμός

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Ηβασικήσυνάρτηση προγράμματος main()

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμό για ΗΜΥ

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Ανάπτυξη και Σχεδίαση Λογισμικού

Διάλεξη 11η: Δείκτες, μέρος 1

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

Προγραµµατισµός Ι Εισαγωγή Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι Νικόλαος Δ. Τσελίκας

Προγραμματισμός Η/Υ (ΤΛ2007 )

Επανάληψη για τις Τελικές εξετάσεις

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 8: Συναρτήσεις. Κ.

Εισαγωγή στον Προγραμματισμό

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Transcript:

Κεφάλαιο 3.1,3.3-3.4: Συναρτήσεις I (Διάλεξη 11) 11-1 Μη-Δομημένος Προγραμματισμός Το πρόγραμμα στα αριστερά δεν είναι Αρθρωτό (δεν έχει σωστή δομή). Όλη η λειτουργικότητα ορίζεται μέσα στην main. Το αποτέλεσμα είναι: Δύσκολη Κατανόηση Δύσκολη Διόρθωση Λαθών Δύσκολη Συντήρηση Δύσκολη Επέκταση Στην συνέχεια θα δούμε πως θα γράφαμε το ίδιο πρόγραμμα δομημένα // ENA PROGRAMMA MH-ARTHRWTO #include <stdio.h> // ORISMOS SYNARTHSHS MAIN int main() int a = 20; int x; int b = 5; int total = 1; int i; int f = 1; //Paragontiko for (i=1; i<=b; i++) f *= i; //Power for(i = 0; i < b; i++) total = total * a; printf("q1(%d)=%d \n", b, f); printf("q2(%d,%d)=%d \n", a, b, total); 11-2

Δομημένος Προγραμματισμός Πραγματικά συστήματα είναι πολύ μεγάλα. Εκατομμύρια γραμμές κώδικα σε συστήματα Windows 3.1 (1992) (3,000,000) Windows XP (2002) (40,000,000) Windows Vista (2006) (50,000,000) Αρχές δομημένου προγραμματισμού: Η ροή ελέγχου στο πρόγραμμα πρέπει να είναι όσο το δυνατόν πιο απλή Η συγγραφή προγράμματος ακολουθεί το μοντέλο «Από πάνωπρος τα κάτω» (top-down) 11-3 Σχεδιασμός Top-down Αναγωγή προβλήματος σε απλούστερα προβλήματα Τελικά καταλήγουμε Σε πολλά μικρά προβλήματα Καθένα μπορεί να επιλυθεί με ευκολία π.χ. θέλουμε ένα πρόγραμμα που υπολογίζει εμβαδά και περιφέρεια ενός κύκλου. Διασπάμε το πρόβλημα σε υπό-προβλήματα: 1) Εύρεση Εμβαδού, 2) Εύρεση Περιφέρειας. Στην γλώσσα C, όπως και στις περισσότερες γλώσσες προγραμματισμού, υπάρχει η έννοια της συνάρτησης. Η συνάρτηση χρησιμοποιείται για να κωδικοποιεί τα απλά προβλήματα. 11-4

Συναρτήσεις Βιβλιοθήκης Έχουμε ήδη δει κάποιες βασικές συναρτήσεις (printf, scanf) Αυτές είναι αποθηκευμένες σε βιβλιοθήκες Oνομάζονται συναρτήσεις βιβλιοθήκης Δεν ορίζονται από τον χρήστη Ενσωμάτωση με το include 11-5 Συναρτήσεις (Functions) Γιατί μας ενδιαφέρουν Αφαιρετικότητα (abstraction): διαχωρισμός ανάμεσα στο τι και το πώς Aρθρωτός σχεδιασμός (modular design) Επαναχρησιμοποίηση (reuse) 11-6

#include <stdio.h> Συναρτήσεις Βιβλιοθήκης int main ( ) printf είναι το όνομα συνάρτησης στην βιβλιοθήκη stdio printf ( Hello World!\n ); Αυτή η εντολή είναι κλήση συνάρτησης Αυτό είναι ένα string που περνάμε ως όρισμα στην συνάρτηση printf 11-7 Παρατήρηση: Κάθε συνάρτηση παίρνει 0 ή περισσότερες τιμές εισόδου (arguments) Κάθε συνάρτηση επιστρέφει ΠΑΝΤΑ ΕΝΑ αποτέλεσμα (return). #include <stdio.h> // Είσοδος (τίποτα)αποτέλεσμα(0) int main ( ) // Είσοδος ( Hello World!\n ) //Αποτέλεσμα(0) printf ( Hello World!\n ); Συναρτήσεις Αν κάποιος ορίσει την ακόλουθη πρόταση : printf ( %d, printf( Hello World!\n )); θα εκτυπωθεί στην οθόνη: 0 Αυτό δείχνει ότι ακόμα και το printf επιστρέφει κάτι επιπλέον της εκτύπωσης που κάνει 11-8

Συνάρτηση main int main(void) printf( Hello!\n ); main() printf( Hello!\n ); int main() printf( Hello!\n ); main(void) printf( Hello!\n ); Όλες οι περιπτώσεις είναι σωστές Όμως η πάνω αριστερά είναι η πιο ξεκάθαρη (διότι δηλώνουμε ρητά το input και το output) 11-9 Συναρτήσεις Χρήστη (User Functions) O προγραμματιστής μπορεί να γράψει και τις δικές του συναρτήσεις (user defined functions) Τιμές Εισόδου #include <stdio.h> int sum(int, int); int sum(int a, int b) return a + b; int main() int a = 5, b=6; Αποτέλεσμα επιστροφής printf("%d + %d = %d", a, b, sum(a,b)); Αυτό θα είναι το βασικό αντικείμενο μελέτης αυτής της ενότητας. Θα μελετήσουμε στην συνέχεια καλύτερα τις συναρτήσεις χρήστη. 11-10

#include <stdio.h> Δομή Προγράμματος με χρήση συναρτήσεων Χρήστη A void PrintMessage (void); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε χωρίς να ορίζουμε πως) Β main ( ) PrintMessage ( ); (Ζητάμε να εκτελεστεί η συνάρτηση) Κλήση Συνάρτησης C void PrintMessage (void) Ορισμός Συνάρτησης (Ορίζουμε ποιες εντολές θέλουμε να εκτελεστούν με την κλήση) printf ( A message for you:\n\n ); printf ( Have a Nice Day!\n ); 11-11 A) Το πρότυπο συνάρτησης Πληροφορεί τον compiler ότι υπάρχει μία συνάρτηση που θα οριστεί αργότερα. Σημασία: επιτρέπει χρήση μιας συνάρτησης πριν ακόμα ορισθεί τι επιστρέφει όνομα τι ορίσματα παίρνει void PrintMessage (void); Καλός προγραμματισμός: λίστα με πρότυπα όλων των συναρτήσεων σε ένα πρόγραμμα 11-12

B) Κλήση συνάρτησης Περνάει ο έλεγχος προγράμματος στη συνάρτηση Πρέπει να έχει το ίδιο όνομα, αριθμό και τύπο παραμέτρων void PrintMessage (void) printf( Hello ); main ( ) ίδιο όνομα PrintMessage ( ); Εκτυπώνει Hello στην οθόνη δεν υπάρχουν ορίσματα 11-13 C) Ορισμός συνάρτησης Στον ορισμό μιας συνάρτησης ορίζουμε ποιες ακριβώς εντολές θέλουμε να εκτελούνται void PrintMessage (void) printf ( A message for you:\n\n ); printf ( Have a Nice Day\n ); Μόλις τελειώσει η συνάρτηση PrintMessage, o έλεγχος επιστρέφει σε αυτόν που την κάλεσε, εδώ στη main ( ) 11-14

C) Ορισμός συνάρτησης: Σύνταξη Σύνταξη <Τύπος τιμής εξόδου> <Όνομα Συνάρτησης> (<Λίστα Παραμέτρων>) <Τύπος τιμής εξόδου>: int, char, float, double, void, σύνθετος <Όνομα Συνάρτησης>: συντακτικά ορθό όνομα <Λίστα Παραμέτρων>: άδεια (void) ή τύπος μεταβλητής, τύπος μεταβλητής,. 11-15 Δομημένος Προγραμματισμός Παράδειγμα 1 #include <stdio.h> void PrintMessage (int); main ( ) int num; printf ("Enter an integer: "); scanf ("%d", &num); PrintMessage (num); Το πρόγραμμα εκτυπώνει : Have a nice day counter φορές void PrintMessage (int counter) int i; for (i = 0; i < counter; i++) printf ("Have a nice day\n\n"); 11-16

Δομημένος Προγραμματισμός Παράδειγμα 1 Τα σχόλια κάνουν τον κώδικα επεξηγηματικό /* * PrintMessage * Input: Some integer @counter * Functionality: Prints out Have a nice day @counter times * Output: void */ void PrintMessage (int counter) int i; for (i = 0; i < counter; i++) printf ( Have a nice day\n ); 11-17 Ας δούμε ξανά το παράδειγμα του μη-δομημένου προγράμματος της διαφάνειας 11.2. Αυτή την φορά θα το δομήσουμε με συναρτήσεις #include <stdio.h> // PROTYPA SYNARTHSEWN int mypower(int,int); int myfactorial(int); Δομημένος Προγραμματισμός Παράδειγμα 2 int main() int a = 2; int b = 5; Εκτυπώνει pow(2,5)=32 fact(5)=120 // KLHSH SYNARTHSEWN printf("pow(%d,%d)=%d \n", a, b, mypower(a,b)); printf("fact(%d)=%d \n", b, myfactorial(b)); συνεχίζεται 11-18

Δομημένος Προγραμματισμός Παράδειγμα 2 // Mypower υψωνει το val στην δυναμη pow int mypower(int val, int pow) int total = 1; int i; for(i = 0; i < pow; i++) total = total * val; return total; // Myfactorial επιστρεφει το παραγοντικο του val int myfactorial(int val) int factorial = 1; int i; if (val == 0) factorial = 1; else for (i=1; i<=val; i++) factorial *= i; return factorial; 11-19