Πάνω προς Κάτω Σχεδιασμός και Συναρτήσεις

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Το αλφαριθμητικό (string)
Advertisements

Προγραμματισμός PASCAL
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
31/1/2000epl-0321 Προγραμματισμός •Γιατι γραφουμε προγραμματα (προηγ. διαλεξη) •Πως γραφουμε προγραμματα –τι ειναι προγραμματισμος –μεθοδολογια –αφαιρετικοτητα.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Πολυδιάστατοι Πίνακες, Δομές, Ενώσεις
Πινακες (Arrays) Σημασια Συνταξη Αρχικοποιηση Προσβαση Παραμετροι
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
Αντικειμενοστραφής Προγραμματισμός
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΜΑΘ-3122/106 Προγραμματισμός
Τύποι πραγματικών αριθμών
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Εντολες Επιλογης (Selection)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
ΜΕΤΑΒΛΗΤΕΣ - ΤΥΠΟΙ ΜΑΘΗΜΑ 3.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
25/1/2000epl-1311 Αναδρομη:Υπολογιστές/Προγραμματισμός παντου παντουΥπολογιστες ειναι παντουπαντου Παρα παρα πολλες εφαρμογες Γιατί; –Αυτοματοποιηση –Απλοποιηση.
Δείκτες, Πίνακες σε Δείκτες, Δείκτες σε Συναρτήσεις
1 Ολυμπιάδα Πληροφορικής Μάθημα 7. 2 Στόχοι μαθήματος Δημιουργία συναρτήσεων από το χρήστη Δομή προγράμματος με συναρτήσεις Συναρτήσεις και παράμετροι.
Ολυμπιάδα Πληροφορικής
Παράδειγματα Συναρτησεις Πανω-Κατω Σχεδιασμος
ΣΥΝΑΡΤΗΣΕΙΣ.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
Δείκτες (Pointers) – Δομές (Structs)
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Κεφάλαιο 10 – Υποπρογράμματα
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΜΑΘ3122/106 – Γλώσσα προγραμματισμούΞενοφών Ζαμπούλης ΜΑΘ3122/106 Γλώσσα προγραμματισμού Συναρτήσεις.
Προγραμματισμός Γιατι γραφουμε προγραμματα (προηγ. διαλεξη)
Μετατροπή Εκφράσεων σε C
Έλεγχος Ονομάτων (Name Control) Για ένα πρόγραμμα που αποτελείται από πολλά τμήματα κάποια από τα οποία έχουν πιθανώς γραφτεί από άλλους προγραμματιστές.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Υπερφόρτωση Τελεστών (Συνέχεια) Αντικειμενοστραφής Προγραμματισμός.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
2/28/00epl-1311 Παραδειγματα Aλγοριθμων Αριθμος λεξεων που διαβαστηκαν απο εισοδο Εκτυπωση περιφερειας τετραγωνων με * Υπολογισμος exp(x,n) = 1 + x/1!
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 getchar() /* char_count.c A program to count characters of input. */ main() { int c ; int count = 0; while.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ 1 Εισαγωγή στη γλώσσα Προγραμματισμού C ΠΙΝΑΚΕΣ (arrays)
Συναρτήσεις.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος
Η Γλώσσα Pascal Υποπρογράμματα
Εισαγωγή στον Προγ/μό Υπολογιστών
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Πάνω προς Κάτω Σχεδιασμός και Συναρτήσεις Top-Down Design αφαιρετικοτητα/αρθρωση Συναρτησεις: Χρηση, Συνταξη και Σημασια Παραμετροι Επιστροφη τιμης Εμβελεια Μεταβλητων 14/2/2000 epl-131

Πανω προς Κατω Σχεδιασμος διευκολυνει διασπαση σε υποπροβληματα Αφαιρετικότητα (abstraction): διαχωρισμός ανάμεσα στο τι και το πως Aρθρωτός σχεδιασμός(modular design) Επαναχρησιμοποίηση (reuse) ... Συναρτήσεις Μηχανισμος που επιτρεπει στον προγραμματιστη να υλοποιησει την διασπαση σε υποπροβληματα 14/2/2000 epl-131

Πανω προς Κατω Σχεδιασμος Προγραμμα που διαβαζει ενα πραγματικο αριθμο, υπολογιζει την τετραγωνικη δυναμη του και την τυπωνει 14/2/2000 epl-131

Πανω-Προς Κατω Σχεδιασμος main() { /* get input number */ /* compute squαre power */ /* display input and its square power */ } Πανω-Προς Κατω Σχεδιασμος Διασπαση: ορισμος του τι πρεπει να γινει οχι πως 14/2/2000 epl-131

Εκλεπτυνση/Υλοποιηση #include <stdio.h> #include <math.h> void main() { double number, square_power; printf(“Enter a real number: ”); scanf(“%d”, &number); square_power = pow(number,2); printf(“The square power of %e is %e\n”, number, square_power); } Εκλεπτυνση/Υλοποιηση 14/2/2000 epl-131

Αφαιρετικότητα Συνάρτησης #include <stdio.h> #include <math.h> void main() { double number, square_power; printf(“Enter a real number: ”); scanf(“%d”, &number); square_power = pow(number,2); printf(“The square power of %e is %e\n”, number, square_power); } printf, scanf, pow ξερουμε τι κανουν οχι πως 14/2/2000 epl-131

Συναρτησεις Συναρτησεις Βιβλιοθηκης δεν οριζονται απο τον χρηστη πχ printf, scanf, pow ενσωματωση με το include Συναρτησεις που οριζονται απο τον προγραμματιστη (user defined functions) 14/2/2000 epl-131

Συνταξη Καθε C προγραμμα αποτελειται απο μια ή περισοτερες συναρτησεις Καθε προγραμμα εχει μια συναρτηση main Καθε συναρτηση πρεπει να οριζεται Μια συναρτηση πριν αναφερθει πρεπει να ορισθει (defined) ή δηλωθει (declared) Δεν επιτρεπεται να γραψεται μια συναρτηση μεσα σε αλλη συναρτηση Analogo me metavlitew 14/2/2000 epl-131

Συνταξη Ορισμου Συναρτησης Διεπαφη <τυπος επιστροφης> <ονομα συναρτησης>(<λιστα παραμετρων>) { αρχη της συναρτησης [ δηλωσεις μεταβλητων] [ εντολες] [return <εκφραση>;] } τελος της συναρτησης Σωμα συναρτησης 14/2/2000 epl-131

Σύνταξη <Τυπος τιμης εξοδου>: <Ονομα Συναρτησης>: int, char, float, double, void, συνθετος… <Ονομα Συναρτησης>: συντακτικο ορθο ονομα <Λιστα Παραμετρων>: αδεια ή τυπος μεταβλητη, τυπος μεταβλητη, …. 14/2/2000 epl-131

Συνάρτηση main χωρις παραμετρους void main() { printf(“Hello out there!\n”); } 14/2/2000 epl-131

Συνάρτηση χωρις παραμετρους void display_six_stars() { printf(“******\n”); } void display_six_stars() { printf(“******\n”); return; } 14/2/2000 epl-131

#include <stdio.h> void display_six_stars() { printf(“******\n”); } επιστροφη int main() { display_six_stars(); return 0; } κληση 14/2/2000 epl-131

Πλευρικο Φαινομενο(side-effect) Το φαινομενο που προκαλει η εκτελεση μιας εντολης, συναρτησης, προγραμματος... Καλος προγραμματισμος: περιγραφεται με σχολια τα side-effects καθε συναρτησης π.χ. εκτυπωση μυνηματων αλλαγη της μεταβλητης foo (εμβελεια αργοτερα) κτλ 14/2/2000 epl-131

Συναρτήσεις με Μια Παραμετρο χωρις τιμη εξοδου void display_area(float area) { printf(“The area is %f square meters\n”,area); } 14/2/2000 epl-131

Συναρτήσεις με Μια Παραμετρο χωρις τιμη εξοδου void compute_and_display_mod3(int number) { printf(“%dmod3 is %d\n”,number, number%3); } void compute_and_display_mod3(int number) { int mod3; mod3 = number%3; printf(“%dmod3 is %d\n”, number, mod3); } 14/2/2000 epl-131

Συνάρτηση με πολλαπλές παραμέτρους χωρίς τιμή εξοδου void display_area(float length, float width, float area) { printf(“The area of a rectangle with length %f m and width %f m is %f sq. m\n”, length, width,area); } 14/2/2000 epl-131

Συναρτήσεις με παραμετρους και τιμη εξοδου Συναρτηση παιρνει δυο παραμετρους float compute_area(float a, float b) { float area; area = a * b; return area; } Επιστρεφει την τιμη της area που ειναι τυπου float 14/2/2000 epl-131

Συναρτήσεις float compute_area(float a, float b) { return a * b; } 14/2/2000 epl-131

Παραμέτροι Επιτρεπουν την επικοινωνια (διασυνδεση) μεταξυ συναρτησεων (εισοδο και εξοδο δεδομενων) Λιστα παραμετρων οριζει τον αριθμο, σειρα και τυπο τιμων που δεχεται μια συναρτηση Για εισοδο: περασμα δια τιμης (τιμή) Για εισοδο/εξοδο: περασμα δια αναφορας (διεύθυνση)- αργοτερα 14/2/2000 epl-131

Σημασία Κλήσης Δεσμευση μνημης για παραμετρους και τοπικες μεταβλητες της συναρτησης (εαν υπαρχουν) Αντιγραφη των τιμων των ορισματων στις παραμετρους (εαν υπαρχουν παραμετροι) αριθμος, σειρα και τυποι ορισματων να ταιριαζουν με τον αριθμο, σειρα και τυπους τυπικων παραμετ. Ξεκινα εκτελεση απο την πρωτη εντολη της συναρτησης 14/2/2000 epl-131

Σημασία Επιστροφής Αποτιμηση της εκφρασης που ακολουθει το return και αντιγραφη της τιμης εξοδου στο σημειο κλησης (εαν επιστρεφεται τιμη) Συνεχιση εκτελεσης με την εντολη που ακολουθει την κληση Αποδεσμευση μνημης που δεσμευθηκε οταν εγινε κληση. Οι αντιστοιχες μεταβλητες δεν υφιστανται πλεον 14/2/2000 epl-131

πρωτοτυπο συναρτησης τυπικοι παραμετροι ορισμος συναρτησης ορισματα/ #include <stdio.h> float compute_area(float x, float y); float compute_area(float a, float b) { return (a * b); } int main() float length, width; float area; printf(“Enter length and width: “); scanf(“%f%f”,&length, &width); area = compute_area(length, width); printf(“The area of a rectangle with dim %f by %f m is %f sq. m\n”, length, width, area); return(0); πρωτοτυπο συναρτησης τυπικοι παραμετροι ορισμος συναρτησης ορισματα/ πραγματικοι παραμετροι κληση συναρτησης 14/2/2000 epl-131

Δηλωση Συναρτησης (function prototype) Συνταξη Προτωτυπου Συναρτησης: <τυπος επιστροφης> <ονομα συναρτησης>(<λιστα παραμετρων>); Σημασια: επιτρεπει χρηση μιας συναρτησης πριν ακομα ορισθει Καλος προγραμματισμος: λιστα με προτωτυπα ολων των συναρτησεων σε ενα προγραμμα 14/2/2000 epl-131

Προτώτυπα Συναρτήσεων /* σχολια */ /* #include */ /* προτωτυπα συναρτησεων */ /* σταθερες*/ /* ορισμος συναρτησεων - μια ειναι η main*/ float compute_area(float length, float width); void error_message_for_negative_input(); int get_grade(int student_id); 14/2/2000 epl-131

πρωτοτυπο συναρτησης τυπικοι παραμετροι ορισμος συναρτησης Ορισματα/ #include <stdio.h> int compute_sum(int x, int y); int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() int sum=0; sum = compute_sum(5, 4); printf(“The sum of %d and %d is %d\n”,4, 5, sum); return(0); πρωτοτυπο συναρτησης τυπικοι παραμετροι ορισμος συναρτησης Ορισματα/ πραγματικοι παραμετροι κληση συναρτησης 14/2/2000 epl-131

#include <stdio.h> int compute_sum(int x, int y); int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() int sum=0; sum = compute_sum(5, 4); printf(“The sum of %d and %d is %d\n”,4, 5, sum); return(0); 14/2/2000 epl-131

9 5 4 9 sum a b sum #include <stdio.h> int compute_sum(int x, int y); int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() int sum=0; sum = compute_sum(5, 4); printf(“The sum of %d and %d is %d\n”,4, 5, sum); return(0); sum 9 a 5 b 4 sum 9 14/2/2000 epl-131

9 sum #include <stdio.h> int compute_sum(int x, int y); int compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() int sum=0; sum = compute_sum(5, 4); printf(“The sum of %d and %d is %d\n”,4, 5, sum); return(0); sum 9 14/2/2000 epl-131

4 6 4 6 sum a c a b sum #include <stdio.h> int compute_sum(int x, int y); void compute_sum(int a, int b) { int sum; sum = a + b; return sum; } int main() int sum=0; int a=4, c=6; sum = compute_sum(a, c); printf(“The sum of %d and %d is %d\n”,a, c, sum); return(0); a sum c 4 6 a b sum 4 6 14/2/2000 epl-131

Εμβέλεια Μεταβλητής (scope) Το τμημα του προγραμματος που μπορει μια μεταβλητη να χρησιμοποιηθει local (τοπικες): δηλωνονται στην αρχη ενος programming block {..} οπουδηποτε μετα τον ορισμο μεσα στο block global (καθολικες) - αργοτερα δηλωνονται εξω απο συναρτησεις οπουδηποτε μετα τον ορισμο 14/2/2000 epl-131

Παράδειγμα Γραψετε μια συναρτηση με την ακολουθη διεπαφη: Η διαδικασια παιρνει μια παραμετρο την ωρα (time) σε 24ωρη μορφη και τυπωνει την ωρα και τα λεπτα χωρισμενα με :. Π.χ. εαν η τιμη της παραμετρου ειναι 1256, η εξοδος θα ειναι The time is 12:56 void display_time(int time); 14/2/2000 epl-131

void display_time(int time) { /* compute hours */ /* compute minutes */ /* display hours:minutes } void display_time(int time) { int hours,minutes /* compute hours */ hours = time / 100; /* compute minutes */ minutes = time % 100; /* display hours:minutes printf(“The time is %02d:%02d\n”,hours, minutes); }