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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Επεξεργασία Αρχείων Κειµένου

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

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

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

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

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

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

είκτες και Πίνακες (2)

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Κεφάλαιο : Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

ΠαράδειγµαΠρογραµµατισµού

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 2: ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΣΤΗ C

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

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

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

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

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Η Γλώσσα C Μία Σφαιρική Ανασκόπηση

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

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

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

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

Αντικειµενοστρεφής Προγραµµατισµός

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

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

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στην πληροφορική

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

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

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

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

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

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

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

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

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

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 ); return 0; Αυτή η εντολή είναι κλήση συνάρτησης Αυτό είναι ένα string που περνάµε ως όρισµα στην συνάρτηση printf 11-7

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

Συνάρτηση main int main(void) printf( Hello!\n ); return 0; main() printf( Hello!\n ); int main() printf( Hello!\n ); return 0; 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)); Αυτό θα είναι το βασικό αντικείµενο µελέτης αυτής της ενότητας. Θα µελετήσουµε στην συνέχεια καλύτερα τις συναρτήσεις χρήστη. return 0; 11-10

#include <stdio.h> οµή Προγράµµατος µε χρήση συναρτήσεων Χρήστη A void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης ( ηλώνουν τι επιπλέον συναρτήσεις θα χρησιµοποιήσουµε χωρίς να ορίζουµε πως) Β 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); Το πρόγραµµα εκτυπώνει : counter φορές Have a nice day 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

οµηµένος Προγραµµατισµός Παράδειγµα 2 Ας δούµε ξανά το παράδειγµα του µη-δοµηµένου προγράµµατος της διαφάνειας 11.2. Αυτή την φορά θα το δοµήσουµε µε συναρτήσεις #include <stdio.h> // PROTYPA SYNARTHSEWN int mypower(int,int); int myfactorial(int); 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++) return factorial; factorial *= i; 11-19