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

Slides:



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

Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
ΜΑΘ-3122/106 Προγραμματισμός
29/11/2004Εισαγωγή στο OpenMP1 OpenMP Αθήνα, Νοέμβριος 2004 Συστήματα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστημάτων.
MΑΘ 106/3122 Ξ. Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Αλφαριθμητικά (Strings)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 1.  Ένα thread έχει: ID, program counter, register set, stack  Μοιράζεται με τα άλλα threads της ίδιας διεργασίας.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Δομημένος Προγραμματισμός και Δομές.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 3: Δείκτες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής, τηλ.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Ολυμπιάδα Πληροφορικής
1 Ολυμπιάδα Πληροφορικής Μάθημα 5. 2 Στόχοι μαθήματος Πίνακες 2 διαστάσεων.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Ντίρλης Νίκος- ΕΤΥ 4ο ΦΡΟΝΤΙΣΤΗΡΙΟ Παρασκευή Β4 1.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
MΑΘ 106/3122Ξενοφών Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Δείκτες (Pointers)
1 Κλήσεις συναρτήσεων και προγραμματισμός με μηχανές καταστάσεων.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
6/15/2015HY220: Ιάκωβος Μαυροειδής1 HY220 Static Random Access Memory.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Δείκτες (Pointers) (1/2)
TEXNΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΓΛΩΣΣΑ C / 06 1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C Αρχεία (files)
Αριθμητική Επίλυση Διαφορικών Εξισώσεων 1. Συνήθης Δ.Ε. 1 ανεξάρτητη μεταβλητή x 1 εξαρτημένη μεταβλητή y Καθώς και παράγωγοι της y μέχρι n τάξης, στη.
Πίνακες στην JAVA ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014: Κώστας Στάμος)
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ 1 Εισαγωγή στη γλώσσα Προγραμματισμού C ΠΙΝΑΚΕΣ (arrays)
Πολυδιάστατοι Πίνακες στην JAVA ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ.
Αντισταθμιστική ανάλυση
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Πίνακες και αλφαριθμητικά
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Τεχνολογία και Προγραμματισμός Υπολογιστών
Δείκτες 1/4 Σύμβαση Τελεστής &
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Ενισχυτική διδασκαλία
Ενισχυτική διδασκαλία
Τύποι Μεταβλητών.
Ταξινόμηση Ορισμός: Δοθέντων των στοιχείων a1,a2,… ,an η ταξινόμηση συνίσταται στην αντιμετάθεση της θέσης των στοιχείων ώστε να τοποθετηθούν με μια νέα.
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών
5ο Μάθημα Χώρος διευθύνσεων προγράμματος Η εντολή assert
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
aka Mathematical Models and Applications
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
ΑΣΚΗΣΕΙΣ.
Μεταγράφημα παρουσίασης:

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C Dynamic Memory Allocation (Δυναμική Παραχώρηση Μνήμης) ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Παραχώρηση μνήμης ΣΤΑΤΙΚΗ ΠΑΡΑΧΩΡΗΣΗ (STATIC ALLOCATION) Είναι η παραχώρηση χώρου μνήμης που γίνεται κατά τη διάρκεια της μεταγλώττισης (compile time). ΔΥΝΑΜΙΚΗ ΠΑΡΑΧΩΡΗΣΗ (DYNAMIC ALLOCATION) Είναι η παραχώρηση χώρου μνήμης που γίνεται κατά τη διάρκεια της εκτέλεσης (run time) με χρήση κατάλληλων συναρτήσεων. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Δυναμικά παραχωρούμενη μνήμη σημαίνει ότι ένα πρόγραμμα, καθώς εκτελείται ζητά από τον υπολογιστή να του παραχωρήσει ένα τμήμα της κεντρικής του μνήμης, αρκετά μεγάλο ώστε να μπορεί να διακρατήσει μια μεταβλητή ενός προκαθορισμένου τύπου δεδομένων. Ο υπολογιστής τότε επιστρέφει στο πρόγραμμα τη διεύθυνση της μνήμης που εκχωρεί στο πρόγραμμα. Το πρόγραμμα μπορεί να έχει πρόσβαση στο τμήμα αυτό της μνήμης ΜΟΝΟΝ μέσω της διεύθυνσης ΔΗΛΑΔΗ πρέπει να χρησιμοποιήσει έναν ΔΕΙΚΤΗ! ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Συνήθως η δυναμική παραχώρηση της μνήμης δεν αφορά μεμονωμένες μεταβλητές αλλά πίνακες. Σε πολλές περιπτώσεις, όταν γράφεται ο πηγαίος κώδικας (δηλ. το πρόγραμμα) το μέγεθος ενός πίνακα που θα χρησιμοποιηθεί δεν είναι εξ αρχής γνωστό, παρά μόνον όταν ξεκινήσει η εκτέλεση του προγράμματος. Αυτό συμβαίνει όταν το πλήθος των δεδομένων καθορίζεται από τον χρήστη του προγράμματος. Όταν ένας πίνακας εκχωρείται δυναμικά δεν δεσμεύεται χώρος γι’ αυτόν (όπως συμβαίνει με τους στατικούς πίνακες) αλλά η δέσμευση γίνεται μόλις καθοριστεί το μέγεθός του. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Όταν η ποσότητα μνήμης που απαιτείται δεν είναι δυνατόν να παραχωρηθεί τότε η αντίστοιχη συναρτηση επιστρέφει ως διεύθυνση την τιμή 0 που αντιστοιχεί στην τιμή NULL του δείκτη. Είναι απαραίτητος ο έλεγχος για τη δυνατότητα παραχώρησης της μνήμης πριν γίνει οποιαδήποτε προσπάθεια χρήσης της ! ! ! Όταν ένα πρόγραμμα ολοκληρώσει τη χρήση της δυναμικής μνήμης πρέπει να επιστρέφει την ποσότητα αυτή στο σύστημα ώστε να είναι διαθέσιμη για μελλοντική χρήση. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

In programming we may come across situations where we may have to deal with data, which is dynamic in nature. The number of data items may change during the executions of a program. The number of customers in a queue can increase or decrease during the process at any time. When the list grows we need to allocate more memory space to accommodate additional data items. Such situations can be handled move easily by using dynamic techniques. Dynamic data items are created at run time, thus optimizing file usage of storage space. The process of allocating memory at run time is known as dynamic memory allocation. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Introduction Many languages permit a programmer to specify an array size at run time. Such languages have the ability to calculate and assign during executions, the memory space required by the variables in the program. C inherently does not have this facility but supports with memory management functions, which can be used to allocate and free memory during the program execution. The following functions are used in c for purpose of memory management. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Function Task Functions malloc calloc free realloc Allocates memory requests size of bytes and returns a pointer to the 1st byte of allocated space calloc Allocates space for an array of elements initializes them to zero and returns a pointer to the memory free Frees previously allocated space realloc Modifies the size of previously allocated space. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

malloc malloc requires one argument - the number of bytes you want to allocate dynamically. If the memory allocation was successful, malloc will return a void pointer - you can assign this to a pointer variable, which will store the address of the allocated memory. If memory allocation failed (for example, if you're out of memory), malloc will return a NULL pointer. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

#include <stdio.h> #include <stdlib.h> /* required for the malloc and free functions */   int main() { int number, *ptr , i; printf("How many ints would you like store? "); scanf_s("%d", &number); ptr = malloc(number*sizeof(int)); /* allocate memory */ if(ptr!=NULL) { for(i=0 ; i<number; i++) *(ptr+i) = i; for(i=number ; i>0 ; i--) { printf("%d\n", *(ptr+(i-1))); /* print out in reverse order */ } free(ptr); /* free allocated memory */ return 0; } else { printf("\nMemory allocation failed - not enough memory.\n"); return 1; } ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

ΠΑΡΑΧΩΡΗΣΗ ΜΝΗΜΗΣ – συνάρτηση malloc( ) Η συνάρτηση παραχώρησης μνήμης malloc( ) απαιτεί τη δήλωση #include <stdlib.h> Όρισμα της συνάρτησης είναι το πλήθος θέσεων μνήμης (bytes) Επιστρέφει τη διεύθυνση του πρώτου byte του μπλοκ μνήμης που έχει δεσμεύσει ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04Β

/*παραχώρηση μνήμης για πίνακα ακεραίων 15 θέσεων*/ ΠΑΡΑΔΕΙΓΜΑ /*παραχώρηση μνήμης για πίνακα ακεραίων 15 θέσεων*/ int *numbers; numbers=(int*) malloc(15 * sizeof(int)) ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Παρατηρήσεις Μη δεσμεύετε περισσότερη μνήμη από όση χρειάζεστε. Μην εκχωρείτε ένα νέο αλφαριθμητικό (string) σε πίνακα χαρακτήρων με μικρότερο δεσμευμένο μέγεθος. Θα χαθούν χαρακτήρες. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Ασκηση Μια σειρά δεδομένων πρέπει να αποθηκευτεί σε ένα δισδιάστατο πίνακα αλλά δεν είναι γνωστό ούτε το πλήθος των γραμμών ούτε το πλήθος των στηλών. Οι τιμές τους δίνονται κατά τη διάρκεια εκτέλεσης του προγράμματος. Να γραφεί ένα πρόγραμμα σε γλώσσα C που θα εισάγει τιμές (ακέραιες) σε ένα τέτοιο πίνακα και στη συνέχεια θα τις εμφανίζει. ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04

Λύση #include <stdio.h> #include <stdlib.h> int *intptr, num_entries,num_cols,i,j; void main() { printf("how many entries ?"); scanf_s("%d",&num_entries); printf("how many columns? "); scanf_s("%d",&num_cols); intptr=(int*)calloc(num_entries*num_cols,sizeof(int)); if (intptr!=NULL) printf(" enter your values :\n"); for (i=0;i<num_entries*num_cols;i++) scanf_s("%d",&intptr[i]); for (i=0;i<num_entries;i++) { for (j=0;j<num_cols;j++) printf("%4d ", intptr[i*num_cols+j]); printf("\n\n"); } ΔΠΘ-ΜΠΔ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / 04