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

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

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

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

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

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

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

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

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

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

Η τιµή εξόδου κάποιας συνάρτησης µπορεί να είναι δείκτης, π.χ.

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

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

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

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

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

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

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

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

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

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

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

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

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

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

Προγραμματισμός Ι (ΗΥ120)

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

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

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

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

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

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

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

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

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

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

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

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

8. Συνθήκες ελέγχου, λογικοί τελεστές

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 6 Ο. Συναρτήσεις Τοπικές, καθολικές, στατικές μεταβλητές Μεταβλητές τύπου extern και register Αναδρομή

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

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

Προγραμματισμός Ι (ΗΥ120)

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

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

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

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

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

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

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

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

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

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

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

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

5 &6. Τύποι δεδομένων, τελεστές και

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

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

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

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

Προγραμματισμός Ι (ΗΥ120)

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Προγραμματισμός Ι. Θεματική ενότητα 3: Tελεστές. εκφράσεις

Διάλεξη 9η: Πίνακες (arrays)

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

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

Περιεχόμενα. Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6) Τύποι Δεδομένων. Τελεστές. Αριθμητικές εκφράσεις

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

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

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

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

Προγραμματισμός Ι (ΗΥ120)

Υπολογισμός - Εντολές Επανάληψης

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

Transcript:

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

Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά ΛΑΘΟΣ τρόπος να αυξήσουμε το num κατά 1 #include <stdio.h> void AddOne (int); void AddOne (int num) { num++; main () { printf ( In AddOne: ); int num = 5; printf ( num = %d\n, num); AddOne (num); } printf ( In main: ); printf ( num = %d\n, num); num } 6 num 5 To πρόγραμμα εκτυπώνει: In AddOne: num=6 In main: num= 5 14-2

Παράδειγμα (συνέχεια): Αλλαγή τιμής μεταβλητής με επιστροφή τιμής ΣΩΣΤΟΣ τρόπος να αυξήσουμε το num κατά 1 #include <stdio.h> int AddOne (int); int AddOne (int num) { main () num++; { printf ( In AddOne: ); int num = 5; printf ( num = %d\n, num); return num; num = AddOne (num); } printf ( In main: ); printf ( num = %d\n, num); num } 6 num 6 To πρόγραμμα εκτυπώνει: In AddOne: num=6 In main: num= 6 14-3

Συναρτήσεις Σήμεραθαδούμεσεπερισσότερο βάθος τις συναρτήσεις. Α) Συναρτήσεις με Παραμέτρους Με Επιστροφή Πολλών Τιμών Β) Εισαγωγή στους δείκτες Γ) Η έννοια και η χρήση του * Δ) Αποσφαλμάτωση - έλεγχος 14-4

Χρήση δεικτών ΝΕΟΣ ΣΩΣΤΟΣ τρόπος να αυξήσουμε το num κατά 1 #include <stdio.h> void AddOne (int*); void AddOne (int *nump) { main () *nump = *nump+1; { printf ( In AddOne: ); int num = 5; printf ( num = %d\n, *nump); AddOne (&num); } printf ( In main: ); printf ( num = %d\n, num); num } 6 num 6 To πρόγραμμα εκτυπώνει: In AddOne: num=6 In main: num= 6 14-5

int num = 5; AddOne (&num); Διευθύνσειςωςπαράμετροι num είναι μία μεταβλητή τύπου int &num είναι η διεύθυνσή του στη μνήμη 3643847 5 14-6

Συμβολίζονται με * Εισαγωγή στους δείκτες Ένα μέρος της μνήμης του οποίου το περιεχόμενο είναι διεύθυνση μνήμης 3643847 5 3643847 num nump To nump δείχνει δηλαδή στη μεταβλητή num 14-7

Χρήση * στις τυπικές μεταβλητές void AddOne (int *nump) To nump είναι ένας δείκτης σε μεταβλητές τύπου int. O τύπος εξόδου παραμένει void AΛΛΑ, το int *nump είναι παράμετρος όχι μόνο εισόδου αλλά και εξόδου ΔΕΔΟΜΕΝΟΥ ότι η συνάρτηση γνωρίζει την διεύθυνση που είναι αποθηκευμένη η μεταβλητή num, ώστε να αλλάξει την τιμή της. 14-8

Χρήση * στο σώμα συναρτήσεων *nump = *nump+1; 3643847 5 *nump 3643847 num nump Ερμηνεία: Ακολούθησε τον δείκτη και βρες την τιμή της μεταβλητής στην οποία δείχνει. nump: 3643847 num: 5 *nump == num 14-9

* : Ανακεφαλαίωση 3 χρήσεις/ερμηνείες: Πολλαπλασιασμός (δυαδικός τελεστής) 2 * a Τυπική Παράμετρος int *nump Σημαίνει «δείκτης σε» Μοναδιαίος (unary) τελεστής *nump = 5/num Σημαίνει «ακολούθησε τον δείκτη» 14-10

scanf με δείκτες int number; int *numberp; scanf( %d %d, &number, numberp); ΠΡΟΣΟΧΗ: Δεν βάζουμε το σύμβολο & καθώς η μεταβλητή numberp ήδη αναφέρεται σε διεύθυνση. 14-11

Παράδειγμα συνάρτησης που υπολογίζει πολλαπλές τιμές Δημιουργήστε μία συνάρτηση που διαχωρίζει έναν αριθμό σε ακέραιο και δεκαδικό μέρος void separate (double num, int *intp, double *fracp) { *intp = (int)num; *fracp = num (*intp); } int main () { double value, fractional_part; int integer_part; separate(value, &integer_part, & fractional_part); printf( The integer part of %.4f is %d and the fractional part is %.4f, value, integer_part, fractional_part); } 14-12

*p=5; *q=8; p 5 q 8 p=q; p 8 p 5 q 8 q 8 λάθος σωστό 14-13

*p=5; *q=8; p 5 q 8 *p=*q; p 8 p 5 q 8 q 8 σωστό λάθος 14-14

Έλεγχος προγράμματος με πολλές συναρτήσεις Ο έλεγχος πρέπει να αρχίσει πολύ πριν ολοκληρωθεί η ανάπτυξη όλων των συναρτήσεων. Χρήση σκελετών (stubs) Εκτυπώνουν προειδοποιητικά μηνύματα Εκτυπώνουν μηνύματα με τις τιμές εισόδου Δίνουν (ψεύτικες) τιμές στις παραμέτρου εξόδου 14-15

Π.χ., Σκελετός συνάρτησης που βρίσκει τον ΜΚΔ δύο ακεραίων int mkd(int a, int b) { printf( WARNING: THIS FUNCTION IS INCOMPLETE! ) printf( a= %d, b= %d, a,b); return a*b; } 14-16

Αποσφαλμάτωση Συμβουλές Σχόλια για κάθε συνάρτηση, τις παραμέτρους της και τις τοπικές μεταβλητές Εκτύπωση ενδείξεων για τη ροή του προγράμματος Όνομα συνάρτησης που καλείται Τιμή παραμέτρων κατά την κλίση Τιμή παραμέτρων εξόδου μετά την ολοκλήρωση 14-17