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

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

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

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

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

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

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

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

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

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

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

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

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

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

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

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

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

Γλώσσα Προγραμματισμού C

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

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

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

Προγραµµατισµός. Αναδροµή (1/2)

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

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

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

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

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

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

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

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

Προγραμματισμός Αναδρομή

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

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

Προγραμματισμός Αναδρομή

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

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

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

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

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

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

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

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

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

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

Παραδείγματα με συναρτήσεις στη C

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

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

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

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

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

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

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

Αναδρομικοί Αλγόριθμοι

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Διάλεξη 15η: Αναδρομή, μέρος 1ο

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

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

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

Κεφάλαιο 7: Υπορουτίνες

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

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

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

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

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

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

Διδάσκων: Παναγιώτης Ανδρέου

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

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

Εισαγωγή στον δομημένο προγραμματισμό

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Προγραμματισμός ΙI (E)

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

Εντολές Επανάληψης. int sum = 0, i=1; sum += i++ ; sum += i++ ; Η πράξη αυτή θα πρέπει να επαναληφθεί Ν φορές!

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

Οι δείκτες στη γλώσσα C

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Transcript:

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 1000 1001 1002 1003 1004 1005 12 9.8 9976 3 1010 26 1006 1007 1008 1009 1010 1011 16 125 1299 a 13 1298

Δήλωση Δήλωση Τύπος *ΌνομαΔείκτη; Πχ int *a; char *c;

Ο τελεστής & Οτελεστήςδιεύθυνσης&, όταν εφαρμοστεί σε μια μεταβλητή, αφορά τη διεύθυνση μνήμης της μεταβλητής. Πχ int met = 10; &met είναι η διεύθυνση μνήμης της μεταβλητής met. int *p; p = &met;

Οτελεστής* (Προσπέλαση της αριθμητικής τιμής) Οτελεστής*, όταν εφαρμόζεται σε ένα δείκτη επιστρέφει την αριθμητική τιμή της μεταβλητής στην οποία αναφέρεται οδείκτης. Πχ: int *p; int met = 3; p = &met; (*p) έχει την τιμή 3

Σχηματικά 1000 12 1001 9.8 1002 9976 1003 3 1004 987 1005 26 1006 16 1007 1299 1008 1010 1009 a 1010 10 1011 1298 int met = 10; int *p ; p met p = &met; printf( Το περιεχόμενο της διεύθυνσης που δείχνει ο p είναι:%d, *p );

Τιμές που μπορεί να ανατεθούν σε ένα δείκτη NULL (μηδενική - ο δείκτης δεν αναφέρεται σε καμία διεύθυνση μνήμης) πχ int *p = NULL; Τη διεύθυνση μιας μεταβλητής Τη διεύθυνση στην οποία δείχνει ένας άλλος δείκτης

Ανάθεση σε δείκτη της διεύθυνσης μιας μεταβλητής int met = 10; int *p= &met; p met 10

Ανάθεση σε δείκτη της διεύθ. στην οποία δείχνει ένας άλλος δείκτης int *p, *q, met = 10; p = &met; q = p ; p q met 10

Παράδειγμα int *p, *q, x, y; p = &x; q = &y; p x q y

Παράδειγμα *p = 5; *q = 8; p x 5 q y 8

Παράδειγμα Βρείτε το σωστό 1) p = q; p x p x 8 5 q y q y 8 8 Λάθος Σωστό

Παράδειγμα Βρείτε το σωστό 2) *p = *q; p x p x 8 5 q y q y 8 8 Σωστό Λάθος

Δείκτες και παράμετροι συναρτήσεων Κλήση με τιμή (call by value) Όταν η λίστα τυπικών παραμέτρων περιέχει τους κλασικούς τύπους δεδομένων Πχ: Δήλωση: Int CalculateSum(int x,int y ); Κλήση: CalculateSum( a, b ); Αντιγραφή των τιμών των μεταβλητών a,b στις τοπικές μεταβλητές της CalculateSum x,y. Αλλαγές των τιμών x,y μέσα από τη συνάρτηση δεν επηρεάζουν τα a,b

Δείκτες και παράμετροι συναρτήσεων Κλήση με αναφορά (call by reference) Όταν η λίστα τυπικών παραμέτρων περιέχει δείκτες Πχ: Δήλωση: Int CalculateSum(int *x,int y ); Κλήση από τη main: CalculateSum( &a, b ); Στην τοπική μεταβλητή x της συνάρτησης CalculateSum, αντιγράφεται η διεύθυνση της τοπικής μεταβλητής a της main. (Η x δείχνει τη διεύθυνση της a) Αλλαγή στο περιεχόμενο της διεύθυνσης που δείχνει η x, αλλάζει και την τιμή της μεταβλητής a

Δείκτες και παράμετροι συναρτήσεων Call by value void swap( int x, int y) { int temp; temp = x; x = y; y = temp; } main(){ int a=8,b=9; swap(a,b); } Δέσμευση μνήμης για τις τοπικές μεταβλητές της swap Δέσμευση μνήμης για τις τοπικές μεταβλητές της main 1001 8 1003 8 1005 8 1002 9 1004 1006 9 Δεν αντιμετατίθενται οι τιμές των a,b

Δείκτες και παράμετροι συναρτήσεων Call by reference void swap( int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } main(){ int a=8,b=9; swap(&a,&b); } Δέσμευση μνήμης για τις τοπικές μεταβλητές της swap Δέσμευση μνήμης για τις τοπικές μεταβλητές της main 1001 1005 1003 8 1005 8 1002 1006 1004 1006 9 Αντιμετατίθενται οι τιμές των a,b

Παράδειγμα Υλοποιήστε μια συνάρτηση που να υπολογίζει το μέγιστο 2 ακεραίων. Η συνάρτηση να μην έχει επιστρεφόμενο τύπο (void). Να χρησιμοποιηθεί call by reference για το μέγιστο.

Πρόγραμμα void maximum(int a, int b, int *meg){ if (a>b) *meg= a; else *meg = b; }

Πρόγραμμα main(){ int a,b,max; printf( Input numbers\n ); scanf( %d%d,&a,&b); maximum(a,b,&max); printf( Megistos:%d\n,max); }

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

Παράδειγμα Υπολογισμός int factorial(int n) { if (n == 0) return 1; else } Παραγοντικού Ειδική Περίπτωση που δίνεται η λύση (κατάσταση διακοπής) return (n*(factorial(n-1)); Αναδρομικό Βήμα

Παράδειγμα Factorial(3) Αναδρομικό Επίπεδο 0 factorial(3) 1 3*factorial(2) 2 2*factorial(1) 3 1*factorial(0) 1 6 2 1

Αναδρομή Με κάθε αναδρομική κλήση δημιουργείται ένα αναδρομικό επίπεδο (νέα δέσμευση μνήμης για αποθήκευση των παραμέτρων) Οι εντολές μετά την αναδρομή τίθενται σε αναμονή, και εκτελούνται όταν ο έλεγχος ροής επιστρέψει στο αναδρομικό επίπεδο

Παράδειγμα Να γραφεί ένα πρόγραμμα που να διαβάζει μια γραμμή χαρακτήρων και να την εκτυπώνει με αντίστροφη φορά

Πρόγραμμα #include <stdio.h> #include <stdlib.h> void antistrofh(void){ char xar; scanf("%c",&xar); if (xar!='\n') antistrofh(); Εκτελείται στην προς τα κάτω διαδικασία Αναδρομικό Βήμα } printf("%c",xar); Εκτελείται στην προς τα πάνω διαδικασία (επιστροφή στο προηγούμενο αναδρομικό επίπεδο)

Πρόγραμμα main(){ printf("input character stream\n"); antistrofh(); system("pause"); return 0; }

Παράδειγμα Φτιάξτε ένα πρόγραμμα (με χρήση αναδρομικής συνάρτησης) που να υπολογίζει και να τυπώνει τους Ν αριθμούς της ακολουθίας Fibonacci A 0 = 0 A 1 = 1 A ν = A ν-1 + Α ν-2

Συνάρτηση Fibonacci int Fibonacci (int N){ if (N == 0) return 0; else if (N == 1) return 1; else return (Fibonacci(N-1) + Fibonacci(N-2)); }