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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

Transcript

1 ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 18 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών & Τεχνολογίας Υπολογιστών

2 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τυπου άδειας χρησης, η άδεια χρησης αναφερεται ρητώς. 2

3 Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια το υ εκπαιδευτικού έργου των διδασκόντων καθηγητών. Το έργο «Ανοικτά Ακαδήμαϊκά Μαθήματα στο Πανεπιστήμιο Πατρών» έχει χρηματοδοτηθεί μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκη Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικους πόρους. 3

4 Ανάπτυξη Το παρόν εκπαιδευτικό υλικό αναπτύχθηκε στο τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών του Πανεπιστημίου Πατρών 4

5 Αφαιρετικότητα στα δεδομένα Έλεγχος τύπων Δομές Κατασκευή τύπων Δυναμική διαχείριση μνήμης free(), malloc(), realloc(), Αναδρομικός ορισμός συναρτήσεων 5

6 Αναδρομικότητα στη C 6 #include <stdio.h> int f(int); main ( ) { int a = 3; printf ("%d\n", f(a)); int f(int n) { int temp; if (n==0) temp = 1 ; else temp = n * f(n - 1); return temp; Χρειάζεται συνθήκη τερματισμού. Η συνάρτηση f( ) καλεί τον εαυτό της στον ορισμό της. 6

7 Λύση χωρίς αναδρομικότητα int f(int n) { int temp = 1, i; for (i=1;i<=n;i++) temp *= i; return temp; int f(int n) { int temp = 1, i; for(i=1;i<=n;temp*=(i+ +)); return temp; 7

8 Ένας ορισμός της countchar() int countchar(char *s, char c) { return (*s)?(*s == c) + countchar(s+1,c):0; 8

9 Ένας ορισμός της getmin() int getmin (int a[], int size) { int i, temp; temp = a[0]; for (i=1; i < size; i++) { if ( temp>a[i] ) temp = a[i]; return temp; 9

10 Ένας ορισμός της getmax() int getmax (int a[], int size) { int i, temp; temp = a[0]; for (i=1; i < size; i++) { if ( temp<a[i] ) temp = a[i]; return temp; 10

11 getmin() & getmax() int getmin (int a[], int size) { int i, temp; temp = a[0]; for (i=1; i < size; i++) { if ( temp>a[i] ) temp = a[i]; int getmax (int a[], int size) { int i, temp; temp = a[0]; for (i=1; i < size; i++) { if ( temp<a[i] ) temp = a[i]; return temp; return temp; 11

12 Όνομα συνάρτησης Οι παρενθέσεις ως τελεστής Δήλωση/πρότυπο συνάρτησης int f (int ); Κλήση συνάρτησης int a ; a = f(5) ; Το όνομα συνάρτησης μόνο του διεύθυνση Μπορώ να δηλώσω σχετική μεταβλητή 12

13 Δείκτης σε συνάρτηση /* δήλωση δείκτη σε ακέρ αιο */ int *intptr; /* πρότυπο συνάρτησης που επιστρέφει δείκτη σε ακέραιο */ int *f(); /* δήλωση δείκτη σε συνά ρτηση */ int (*f)() ; int function1(void); int function2(void); main ( ) { int a = 0; int (*f)( ); if (!a) f = function1; else f= function2; (*f)(); 13

14 Παράδειγμα #include <stdio.h> int map (int a[], int size, int (*f)(int, int)); int more(int a, int b); int less(int a, int b); int main(void) { int data[7]= {-1, 2, 1, 0, 5, 7, -3; printf("max: %2d\n", map(data, 7, more)); printf("max: %2d\n", map(data, 7, less)); return 0; int less (int a, int b) { return a > b; int more (int a, int b) { return a < b; int map (int a[], int size, int (*f)(int, int)) { int i, temp; temp = a[0]; for (i=1; i < size; i++) if ( f(temp, a[i])) temp = a[i]; return temp; 14

15 Πίνακας Δεικτών σε Συνάρτηση - Αρχικοποίηση #include <stdio.h> double one( double ); double two( double ); main ( ) { double (*f[2])(double) = {one, two ; double x = 3.47, y; int i ; do { printf("select function:\t"); scanf("%d", &i); y = (*f[i-1])( x) ; printf("result %g\n", y); while (1) ; double one(double x) { return (x + 1.0) ; double two(double x ) { return (x + 2.0) ; 15

16 Λίστα Listelement c = { "Giannis", 5, NULL; Στατική δήλωση Δυναμική δήλωση στοιχείου της λίστας Listelement *element_ptr; element_ptr = (Listelement *) malloc ( sizeof (Listelement)); strcpy((*element_ptr).name,"ntina"); (*element_ptr).age = 9; (*element_ptr).next = NULL; Άλλος συμβολισμός, ενδεικτικά: element_ptr->name αντί (*element_ptr).name Listelement *element_ptr; element_ptr = (Listelement *) malloc ( sizeof (Listelement)); strcpy(element_ptr->name,"ntina"); element_ptr->age = 9; element_ptr->next = NULL; 16

17 Παράδειγμα #include <stdio.h> #include <stdlib.h> #include <string.h> #define L 30 struct listelement { char name[l]; int age; struct listelement *next; ; typedef struct listelement Listelement; typedef Listelement * Listelement_ptr; int main(int argc, char *argv[]) { /* Initialize */ Listelement_ptr iterator=null, element_ptr, previous_ptr, first_ptr; /* create elements and put them to list*/ element_ptr = (Listelement_ptr) malloc ( sizeof (Listelement)); strcpy(element_ptr->name,"ntina"); element_ptr -> age = 9; element_ptr -> next = NULL; first_ptr = element_ptr; previous_ptr = element_ptr; element_ptr = (Listelement_ptr) malloc ( sizeof (Listelement)); strcpy(element_ptr->name,"giannis"); element_ptr -> age = 6 ; previous_ptr -> next = element_ptr; /* Access elements */ for (iterator = first_ptr; iterator!= NULL ; iterator = iterator->next) { printf( "name: %s\n", iterator->name); printf("age: %d\n", iterator->age); return 0; 17

18 mytypes.h #define L 30 struct listelement { char name[l]; int age; struct listelement *next; ; typedef struct listelement Listelement; typedef Listelement * Listelement_ptr; typedef Listelement * List; 18

19 Τύποι λίστας στο mytypes.h Listelement Στοιχείο λίστας (struct listelement) Listelement_ptr Δείκτης σε στοιχείο λίστας. Ίδιο με struct listelement * Listelement * List Δείκτης σε στοιχείο λίστας Μεταβλητές αυτού του τύπου δείχνουν Στο πρώτο στοιχείο της λίστας ή Έχουν την τιμή NULL (κενή λίστα). 19

20 Δημιουργία στοιχείου #include <string.h> #include <stdlib.h> #include "mytypes.h" Listelement_ptr createnewelement(char word[], int number) { Listelement_ptr newelement_ptr; newelement_ptr = (Listelement_ptr) malloc ( sizeof (Listelement)); strcpy(newelement_ptr->name, word); newelement_ptr -> age = number; newelement_ptr -> next = NULL; return newelement_ptr; 20

21 Διατρέχει όλα τα στοιχεία της λίστας #include <stdio.h> #include "mytypes.h" void reportlist(list const alist) { Listelement_ptr iterator= alist; for (; iterator!= NULL ; iterator = iterator->next) { printf( "name: %s\n", iterator->name); printf("age: %d\n", iterator->age); NULL 21

22 Δημιουργία στοιχείου (*iterator).next Listelement_ptr iterator = alist; alist NULL Αφού το iterator γίνει NULL, ο βρόχος τερματίζεται. Έχει διατρέξει ΟΛΑ τα στ οιχεία της λίστας. iterator = alist iterator=null for (; iterator!= NULL ; iterator = iterator->next) 22

23 Προσθήκη στοιχείου στο τέλος λίστας NULL #include <stdio.h> #include "mytypes.h" Παράμετρος δείκτης σε λίστα ή διπλός δείκτης σε στοιχείο void addtolist (List *list, Listelement_ptr elem_ptr ) { Listelement_ptr iterator = *list; if (*list==null) /* handle empty list*/ *list = elem_ptr; else { /* if not empty, move to last element list*/ for (; iterator->next!= NULL; iterator = iterator->next); /* append element to list */ iterator->next = elem_ptr; Όταν βγει από το βρόχο, ο iterator δείχνει στο τελευταίο στοιχείο 23

24 iterator->next iterator->next Listelement_ptr iterator = *list; *list NULL Αφού το iterator->next γ ίνει NULL, ο βρόχος τερματίζεται. To iterator δείχνει στο Τελευταίο στοιχείο. iterator = *list iterator->next=null for (; iterator->next!= NULL ; iterator = iterator->next) 24

25 Παράδειγμα χρήσης συναρτήσεων #include <stdio.h> #include <stdlib.h> #include <string.h> #include "mytypes.h Listelement_ptr createnewelement(char *, int); Listelement_ptr findelementbyname(list, char []); void reportlist( List const); void addtolist(list *, Listelement_ptr); void deleteelement(list *, Listelement_ptr); int main(int argc, char *argv[]) { /* Initialize */ Listelement_ptr iterator=null, element_ptr, previous_ptr; List nameslist = NULL; char name[50]; /* create elements and put them to list*/ element_ptr = createnewelement("ntina", 10); addtolist (&nameslist, element_ptr); element_ptr = createnewelement("giannis", 5); addtolist( &nameslist, element_ptr); element_ptr = createnewelement("maria", 7); addtolist( &nameslist, element_ptr); reportlist(nameslist); /* find, delete, report */ do { printf("name: "); scanf("%s", name); element_ptr = findelementbyname(nameslist, name); if (element_ptr) { printf("found it. data: %d\n", element_ptr->age); deleteelement(&nameslist, element_ptr); reportlist(nameslist); while (nameslist!=null) ; return 0; 25

26 Λίστα ως παράμετρος με αναφορά void addtolist (List *, Listelement_ptr ); Η nameslist αποθηκεύεται στη θέση 22FE48. Η τιμή της nameslist αλλάζει μετά την κλήση της addtolist. (όχι η θέση της!) Τύπος της nameslist: List Τύπος της θέσης της: List * Τιμές πριν την εκτέλεση της addtolist Τιμές μετά την εκτέλεση της addtolist List nameslist = NULL; Listelement_ptr element_ptr; element_ptr = createnewelement("ntina", 10); addtolist (&nameslist, element_ptr); 26

27 Λίστα ως παράμετρος με αναφορά Θέση της namelist ( ή &nameslist) 22FE48 Τιμή της namelist 2F7BB0 Πριν την κλήση της addtolist Μετά την κλήση της addtolist 27

28 Διαγραφή στοιχείου #include <stdio.h> #include <stdlib.h> #include "mytypes.h" Παράμετρος: δείκτης σε λίστα ή διπλός δείκτης σε στοιχείο λίστας int deleteelement(list *alist, Listelement_ptr element) { Listelement_ptr iterator = *alist, todelete_ptr; if (element == NULL *alist == NULL) return -1 ; if (element== *alist) { /* if required, delete first element */ *alist = element->next ; free(element); else { /* find the element before the one to be deleted */ for(; iterator->next!= element; iterator = iterator->next) ; iterator->next = element->next; free(element); return 0; 28

29 Διαγραφή με πρόβλεψη το στοιχείο να μην υπάρχει στη λίστα #include <stdio.h> #include <stdlib.h> #include "mytypes.h" int deleteelement(list *alist, Listelement_ptr todelete_ptr) { Listelement_ptr iterator = *alist; if (todelete_ptr == NULL *alist == NULL) return -1 ; if (todelete_ptr == *alist) { *alist = todelete_ptr->next ; free(todelete_ptr); else { for(; iterator!= NULL && iterator->next!= todelete_ptr ; iterator = iterator->next) ; if (iterator!=null) { iterator->next = todelete_ptr->next; free(todelete_ptr); else { printf("element not in list"); return -1; return 0; Όσο δείχνεις σε στοιχείο της λίστας (iterator!=null) ΚΑΙ το επόμενο στοιχείο δεν είναι το προς διαγραφή (iterator->next!= todelete_ptr), πήγαινε στο επόμενο στοιχείο Αν μετά το βρόχο το iterator δείχνει σε στοιχείο (!=NULL), αυτό είναι το ακριβώς προηγούμενο από το προς διαγραφή. 29

30 Διαγραφή με πρόβλεψη το στοιχείο να μην υπάρχει στη λίστα #include <stdio.h> #include <stdlib.h> #include "mytypes.h" int deleteelement(list *alist, Listelement_ptr todelete_ptr) { Listelement_ptr iterator = *alist; if (todelete_ptr == NULL *alist == NULL) return -1 ; if (todelete_ptr == *alist) { /* if required, delete first element*/ *alist = todelete_ptr->next ; free(todelete_ptr); else { /* find the element before the one to be deleted or continue until no more elements in list */ for(; iterator!= NULL && iterator->next!= todelete_ptr ; iterator = iterator->next) ; if (iterator!=null) { iterator->next = todelete_ptr->next; free(todelete_ptr); else { return 0; printf("element not in list"); return -1; Πρώτα χρησιμοποιώ το todelete_ptr Μετά αποδεσμεύεται με free Τι θα γίνει αν γράψουμε iterator->next!=todelete_ptr && iterator!=null αντί για iterator!=null && iterator->next!=todelete_ptr 30

31 Χρήσιμα σημεία σε συναρτήσεις επεξεργασίας λίστας Η λίστα ως παράμετρος Αναφερόμαστε σε λίστα με τη διεύθυνση του πρώτο υ στοιχείου Μερικές συναρτήσεις αλλάζουν τη διεύθυνση του π ρώτου στοιχείου (προσθέτουν, διαγράφουν, ) Άλλες όχι (εκτύπωση, καταμέτρηση, αναζήτηση ) Πρώτα χρησιμοποιώ, μετά διαγράφω Βρίσκω και καλύπτω ειδικές περιπτώσεις Ενδεικτικά: άδεια λίστα, πρώτο στοιχείο, κενό στοιχ είο ως είσοδος 31

32 Αναδρομική αναζήτηση σε λίστα #include <string.h> #include "mytypes.h" Listelement_ptr recfind(list alist, char name[]) { if (alist == NULL) return NULL; else if (!strcmp(alist->name, name)) return alist; else return recfind(alist->next, name); 32

33 Χρήση αρχείων #include <string.h> #include "mytypes.h" Listelement_ptr recfind(list alist, char name[]) { if (alist == NULL) return NULL; else if (!strcmp(alist->name, name)) return alist; else return recfind(alist->next, name); 33

34 Χρήση αρχείων #include <stdio.h> #include <stdlib.h> main ( ) { int i; int num; FILE *data ; if ((data = fopen ("dataout.txt", "wt") )==NULL) { printf("cannot create file.\n"); exit(1); for ( i = 0; i < 10 ; i++) fprintf (data, "number i: %d\n", i); fclose(data); if((data = fopen ("numbers.txt", "rt"))==null) { printf("cannot read from file.\n"); exit(1); ; while (fscanf(data, "%d", &num)!=eof) printf("%d ", num); fclose(data); 34

35 Χρήση αρχείων #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int n; FILE * pfile; char buffer [27]; pfile = fopen ("test.txt","w+"); for ( n='a' ; n<='z' ; n++) fputc ( n, pfile); rewind (pfile); fread (buffer,1,26,pfile); fclose (pfile); buffer[26]='\0'; puts (buffer); system("pause"); return 0; 35

36 fwrite() size_t fwrite ( const void * ptr, size_t size, size_t count, FILE *stream ); Γράφει περιοχή μνήμης στη ροή stream Παράμετροι ptr Δείκτης σε πίνακα στοιχείων προς εγγραφή. size μέγεθος κάθε στοιχείου σε bytes count πλήθος στοιχείων καθένα μεγέθους size bytes. stream Δείκτης σε FILE 36

37 Χρήση αρχείων size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); Παράμετροι Ptr Δείκτης σε μπλοκ μνήμης ελάχιστου μεγέθους (size*count) bytes. Size Μέγεθος σε bytes κάθε στοιχείου προς ανάγνωση. Count Πλήθος στοιχείων καθένα μεγέθους size bytes. Stream Δείκτης σε FILE 37

38 Χρήση αρχείων #include <stdio.h> #include <stdlib.h> typedef struct data{ int a; char name[10]; Data; int main(int argc, char *argv[]) { Data mydata[] = {{5, "red", {10, "black", {11,"yellow"; Data mycopy[10]; FILE *testio; int i; testio = fopen ("mydata.bin", "wb"); fwrite (mydata, sizeof (Data), 3, testio); fclose(testio); testio = fopen ("mydata.bin", "rb"); fread(mycopy, sizeof (Data), 3, testio); fclose(testio); for (i=0;i<3;i++) printf("value: %d\nname: %s\n", mycopy[i].a, mycopy[i].name); return 0; 38

39 Χρήση αρχείων int fseek ( FILE * stream, long int offset, int origin ); Παράμετροι Δείκτης σε FILE. Offset πλήθος bytes για πρόσθεση στο origin. Origin τρέχουσα θέση στην οποία προστίθεται το offset. Μπορεί να είναι μια από τις σταθερές: SEEK_SET Αρχή αρχείου SEEK_CUR Τρέχουσα θέση SEEK_END Τέλος αρχείου 39

40 Χρήση αρχείων #include <stdio.h> #include <stdlib.h> typedef struct data{ int a; char name[10]; Data; int main(int argc, char *argv[]) { FILE * testio; long filesize; Data * mycopy; size_t result; int numberofelems; int i; testio = fopen ( "mydata.bin", "rb" ); if (testio == NULL) printf("failed to open\n"); else printf("stream open\n"); fseek (testio, 0, SEEK_END); filesize = ftell (testio); rewind (testio); mycopy = (Data *) malloc (sizeof (char)*filesize); result = fread (mycopy,1,filesize,testio); if (result!= filesize) {fputs ("Reading error",stderr); exit (3); fclose (testio); numberofelems=(filesize)/(sizeof(data)); printf("data elements read: %d\n", numberofelems); for (i=0;i<numberofelems;i++) printf("value: %d\nname: %s\n", mycopy[i].a, mycopy[i].name); free (mycopy); system("pause"); return 0; 40

41 Στοίβες - stacks Λειτουργίες push/pop Top_ptr 41 41

42 Χρήση αρχείων #include <stdio.h> #include <stdlib.h> struct stacknode {/* self-referential structure */ int data; struct stacknode *nextptr; ; typedef struct stacknode StackNode; typedef StackNode *StackNodePtr; void push( StackNodePtr *, int ); int pop( StackNodePtr * ); int isempty( StackNodePtr ); void printstack( StackNodePtr ); void instructions( void ); int main() { StackNodePtr stackptr = NULL; /* points to stack top */ int choice, value; instructions(); printf( "? " ); scanf( "%d", &choice ); while ( choice!= 3 ) { switch ( choice ) { case 1: /* push value onto stack */ printf( "Enter an integer: " ); scanf( "%d", &value ); push( &stackptr, value ); printstack( stackptr ); break; case 2: /* pop value off stack */ if (!isempty( stackptr ) ) printf( "The popped value is %d.\n", pop( &stackptr ) ); printstack( stackptr ); break; default: printf( "Invalid choice.\n\n" ); instructions(); break; printf( "? " ); scanf( "%d", &choice ); printf( "End of run.\n" ); return 0; 42

43 Χρήση αρχείων /* Print the instructions */ void instructions( void ) { printf( "Enter choice:\n" "1 to push a value on the stack\n" "2 to pop a value off the stack\n" "3 to end program\n" ); /* Insert a node at the stack top */ void push( StackNodePtr *topptr, int info ) { StackNodePtr newptr; newptr = malloc( sizeof( StackNode ) ); if ( newptr!= NULL ) { newptr->data = info; newptr->nextptr = *topptr; *topptr = newptr; else printf( "%d not inserted. No memory available.\n", info ); /* Print the stack */ void printstack( StackNodePtr currentptr ) { if ( currentptr == NULL ) printf( "The stack is empty.\n\n" ); else { printf( "The stack is:\n" ); while ( currentptr!= NULL ) { printf( "%d --> ", currentptr->data ); currentptr = currentptr->nextptr; printf( "NULL\n\n" ); /* Is the stack empty? */ int isempty( StackNodePtr topptr ) { return topptr == NULL; /* Remove a node from the stack top */ int pop( StackNodePtr *topptr ) { StackNodePtr tempptr; int popvalue; tempptr = *topptr; popvalue = ( *topptr )->data; *topptr = ( *topptr )->nextptr; free( tempptr ); return popvalue; 43

44 Ουρές - Queues Λειτουργίες enqueue/dequeue tailptr headptr 44

45 Παράδειγμα #include <stdio.h> #include <stdlib.h> struct queuenode { /* self-referential structure */ char data; struct queuenode *nextptr; ; typedef struct queuenode QueueNode; typedef QueueNode *QueueNodePtr; /* function prototypes */ void printqueue( QueueNodePtr ); int isempty( QueueNodePtr ); char dequeue( QueueNodePtr *, QueueNodePtr * ); void enqueue( QueueNodePtr *, QueueNodePtr *, char ); void instructions( void ); void instructions( void ) { printf ( "Enter your choice:\n" " 1 to add an item to the queue\n" " 2 to remove an item from the queue\n" " 3 to end\n" ); 45

46 Παράδειγμα int main() { QueueNodePtr headptr = NULL, tailptr = NULL; int choice; char item; instructions(); printf( "? " ); scanf( "%d", &choice ); while ( choice!= 3 ) { switch( choice ) { case 1: printf( "Enter a character: " ); scanf( "\n%c", &item ); enqueue( &headptr, &tailptr, printqueue( headptr ); break; case 2: default: if (!isempty( headptr ) ) { item = dequeue( &headptr, &tailptr ); printf( "%c has been dequeued.\n", item ); printqueue( headptr ); break; printf( "Invalid choice.\n\n" ); instructions(); break; printf( "? " ); scanf( "%d", &choice ); item); printf( "End of run.\n" ); return 0; 46

47 Παράδειγμα void enqueue( QueueNodePtr *headptr, QueueNodePtr *tailptr, char value ) { QueueNodePtr newptr; newptr = malloc( sizeof( QueueNode ) ); if ( newptr!= NULL ) { newptr->data = value; newptr->nextptr = NULL; if ( isempty( *headptr ) ) *headptr = newptr; else ( *tailptr )->nextptr = newptr; *tailptr = newptr; else printf( "%c not inserted. No memory available.\n", value ); char dequeue( QueueNodePtr *headptr, QueueNodePtr *tailptr ) { char value; QueueNodePtr tempptr; value = ( *headptr )->data; tempptr = *headptr; *headptr = ( *headptr )->nextptr; if ( *headptr == NULL ) *tailptr = NULL; free( tempptr ); return value; int isempty( QueueNodePtr headptr ) { return headptr == NULL; void printqueue( QueueNodePtr currentptr ) { if ( currentptr == NULL ) printf( "Queue is empty.\n\n" ); else { printf( "The queue is:\n" ); while ( currentptr!= NULL ) { printf( "%c --> ", currentptr->data ); currentptr = currentptr->nextptr; printf( "NULL\n\n" ); 47

48 Δυαδικά δέντρα 48

49 Δυαδικά Δένδρα Πρακτικές αναδρομικές συναρτήσεις για κατασκευή του δυαδικού δένδρου και για αναζήτηση 49

50 Δυαδικά Δένδρα Γραμμική δυαδική αναζήτηση σε πίνακα Βρες αν υπάρχει το Πρέπει να είναι ταξινομημένος ο πίνακας Πώς προσθέτω στοιχεία σε ταξινομημένο πίνακα; 50

51 Δυαδικά Δένδρα Κατά την κατασκευή του δένδρου τοποθετούμε κόμβους σε θέση κατάλληλη. Το δένδρο μπορεί να επεκταθεί οποιαδήποτε στιγμή 51

52 Δυαδικά Δένδρα Παράδειγμα: 11, 2, 5, 19, 7, 15, 4 Κανόνας: Αριστερά οι μικρότεροι, δεξιά οι μεγαλύτεροι

53 Δυαδικά Δένδρα #include <stdio.h> #include <stdlib.h> #include <time.h> struct treenode { struct treenode *leftptr; int data; struct treenode *rightptr; ; typedef struct treenode TreeNode; typedef TreeNode *TreeNodePtr; void insertnode( TreeNodePtr *, int ); void inorder( TreeNodePtr ); void preorder( TreeNodePtr ); void postorder( TreeNodePtr ); 53

54 Δυαδικά Δένδρα int main() { int i, item; TreeNodePtr rootptr = NULL; srand( time( NULL ) ); /* insert random values between 1 and 15 in the tree */ printf( "The numbers being placed in the tree are:\n" ); for ( i = 1; i <= 10; i++ ) { item = rand() % 15; printf( "%3d", item ); insertnode( &rootptr, item ); /* traverse the tree preorder */ printf( "\n\nthe preorder traversal is:\n" ); preorder( rootptr ); /* traverse the tree inorder */ printf( "\n\nthe inorder traversal is:\n" ); inorder( rootptr ); /* traverse the tree postorder */ printf( "\n\nthe postorder traversal is:\n" ); postorder( rootptr ); return 0; 54

55 Τοποθέτηση Κενή θέση; Αν ναι, συνέδεσε τον κόμβο και τέλος. Αν όχι, Αν η τιμή που θέλω να τοποθετήσω είναι μικρότερη από την τρέχουσα, τοποθέτησε αριστερά Αν είναι μεγαλύτερη, τοποθέτησε δεξιά Αν είναι ίση, η τιμή υπάρχει στο δένδρο, τέλος. 55

56 Δυαδικά Δένδρα void insertnode( TreeNodePtr *treeptr, int value ) { if ( *treeptr == NULL ) { /* *treeptr is NULL */ *treeptr = malloc( sizeof(treenode) ); if ( *treeptr!= NULL ) { ( *treeptr )->data = value; ( *treeptr )->leftptr = NULL; ( *treeptr )->rightptr = NULL; else printf( "%d not inserted. No memory available.\n", value ); else if ( value < ( *treeptr )->data ) insertnode( &( ( *treeptr )->leftptr ), value ); else if ( value > ( *treeptr )->data ) insertnode( &( ( *treeptr )->rightptr ), value ); else printf( "dup" ); 56

57 Δυαδικά Δένδρα void inorder( TreeNodePtr treeptr ) { if ( treeptr!= NULL ) { inorder( treeptr->leftptr ); printf( "%3d", treeptr->data ); inorder( treeptr->rightptr ); 57

58 Δυαδικά Δένδρα void preorder( TreeNodePtr treeptr ) { if ( treeptr!= NULL ) { printf( "%3d", treeptr->data ); preorder( treeptr->leftptr ); preorder( treeptr->rightptr ); void postorder( TreeNodePtr treeptr ) { if ( treeptr!= NULL ) { postorder( treeptr->leftptr ); postorder( treeptr->rightptr ); printf( "%3d", treeptr->data ); 58

59 Σημείωμα αναφοράς Copyright Πανεπιστήμιο Πατρών, Παλιουράς Βασίλειος, Δερματάς Ευάγγελος «Αρχές Προγραμματισμού». Έκδοση: 1.0. Πάτρα 2015 Διαθέσιμο από τη δικτυακιακή διέυθυνση 59

Αρχές Προγραμματισμού

Αρχές Προγραμματισμού Αρχές Προγραμματισμού https://eclass.upatras.gr/courses/ee806/index.php Βασίλης Παλιουράς paliuras@ece.upatras.gr ΠΕΡΙΣΣΟΤΕΡΑ ΓΙΑ ΑΡΧΕΙΑ 1 int main ( ) { int i; int num; FILE *data ; if ((data = fopen

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 17 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Σημειώσεις ένατης εβδομάδας

Σημειώσεις ένατης εβδομάδας Σημειώσεις ένατης εβδομάδας Η δομή της ουράς (queue), είναι και αυτή γραμμική δομή, όπως η λίστα και η στοίβα. Το βασικό χαρακτηριστικό της είναι ότι, όπως και στις φυσικές ουρές, εξυπηρετείται πρώτος,

Διαβάστε περισσότερα

Σημειώσεις όγδοης εβδομάδας

Σημειώσεις όγδοης εβδομάδας Σημειώσεις όγδοης εβδομάδας Για να την δημιουργία σειριακών αρχείων, χρησιμοποιείται η fopen(filename, w ). Το αρχείο δημιουργείται στον ίδιο φάκελο που τρέχει το εκτελέσιμο πρόγραμμα. Το παρακάτω πρόγραμμα,

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 15 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 6 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 8 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 13 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Σημειώσεις έκτης και έβδομης εβδομάδας

Σημειώσεις έκτης και έβδομης εβδομάδας Σημειώσεις έκτης και έβδομης εβδομάδας Προσέξτε το μέγεθος των δύο δομών. Το Node είναι 8 bytes, ενώ το Node1 1 byte. Η διαφορά έγκειται στο ότι η πρώτη δομή περιέχει ακέραιο, τον δείκτη next, οπότε πρέπει

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 10 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 12 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 11 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα

Διαβάστε περισσότερα

Διάλεξη 18η: Διαχείρηση Αρχείων

Διάλεξη 18η: Διαχείρηση Αρχείων Διάλεξη 18η: Διαχείρηση Αρχείων Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Αρχεία CS100, 2015-2016 1 / 24 Η βιβλιοθήκη Εισόδου/Εξόδου Στο stdioh

Διαβάστε περισσότερα

ιαφάνειες παρουσίασης #6 (β)

ιαφάνειες παρουσίασης #6 (β) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 9 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 7 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Περιεχόμενα. Πρόλογος... 17

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

Διαβάστε περισσότερα

Περιεχόμενα. Πρόλογος... 21

Περιεχόμενα. Πρόλογος... 21 Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 2 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες Τι είναι οι συνδεδεμένες λίστες (linked lists) Μια Συνδεδεμένη Λίστα (Σ.Λ.) είναι μια διάταξη από κόμβους που μπορούμε να τους διαχειριστούμε δυναμικά. Κάθε

Διαβάστε περισσότερα

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ταξινοµηµένες Λίστες µε δυναµική δέσµευση µνήµης Αναδροµκές συναρτήσεις ΕΠΛ 12 Αρχές Προγραµµατισµού ΙΙ 1 Λίστες

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579 Ευρετήριο Η γλώσσα C σε βάθος # #define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579 A abs(), 625 AND, 64 ASCII πίνακας

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ Μια ουρά αποτελεί μια δομή δεδομένων στη λογική του First-in

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή υναµική έσµευση Μνήµης (συν.) Στην ενότητα αυτή θα µελετηθούν: Μια εφαρµογή συνδεδεµένων λιστών ιπλά συνδεδεµένες Λίστες ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Εφαρµογή Ζητούµενο: Πρόγραµµα που παίρνει σαν

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 16 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 4 ο Στοίβα Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση Αφηρηµένος Τύπος εδοµένων Στοίβα Υλοποίηση µε Πίνακα Υλοποίηση

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 8: Αρχεία και Δομές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

Δομές δεδομένων (2) Αλγόριθμοι

Δομές δεδομένων (2) Αλγόριθμοι Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student

Διαβάστε περισσότερα

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

Εισαγωγή στον δομημένο προγραμματισμό Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 12 η : Δυναμική Ανάθεση Θέσης Αν. καθηγητής Στεργίου Κώστας e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 20η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Υλοποίηση στοίβας σε C. 2 Αναπαράσταση στοίβας StackNode n1 value 10

Διαβάστε περισσότερα

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τύποι αρχείων Ρεύματα Άνοιγμα ρευμάτων Εγγραφή και ανάγνωση δεδομένων προς/από ένα ρεύμα Διαχείριση και κλείσιμο ρευμάτων Παραδείγματα

Διαβάστε περισσότερα

Δομές Δεδομένων Ενότητα 3

Δομές Δεδομένων Ενότητα 3 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 3: Στοίβα Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 13-1 Περιεχόμενο

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2011 Θέµα 1 (α') 1 - i 2 - ii 3 - iii 4 - iv 5 - v 6 - vi 7 - vii 8 - viii 9 - ix 10 - x Το αποτέλεσµα είναι η αντιστοιχία των

Διαβάστε περισσότερα

Δομές δεδομένων ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δομές δεδομένων ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Δομές δεδομένων Διδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου

Διαβάστε περισσότερα

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι Λίστες Λίστες - Απλά Συνδεδεμένες Λίστες - Διπλά Συνδεδεμένες Λίστες Είδη Γραμμικών Λιστών Σειριακή Λίστα Καταλαμβάνει συνεχόμενες θέσεις κύριας μνήμης Συνδεδεμένη Λίστα Οι κόμβοι βρίσκονται σε απομακρυσμένες

Διαβάστε περισσότερα

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct) Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct) Αρχεία Το γενικό πλαίσιο: data stream (ρεύμα δεδομένων). stdin, stdout, stderr data stream ως προς τα δεδομένα βάσει προσπέλασης

Διαβάστε περισσότερα

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ❶ Προετοιµασία για το 1 ο Εργαστήριο

Διαβάστε περισσότερα

Ενδεικτική περιγραφή μαθήματος

Ενδεικτική περιγραφή μαθήματος ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές.

Διαβάστε περισσότερα

Περιεχόµενα. Πρόλογος... 15

Περιεχόµενα. Πρόλογος... 15 Πρόλογος... 15 Κεφάλαιο 1: Εισαγωγή... 17 Πώς να διαβάσετε αυτό το βιβλίο...18 Η γλώσσα C Ιστορική αναδροµή...19 Τα χαρακτηριστικά της C...20 C Μια δοµηµένη γλώσσα...20 C Μια γλώσσα για προγραµµατιστές...21

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων Προγραμματισμός Η/Υ Ενότητα 8: Ειδικά Θέματα Αλγορίθμων Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση

Διαβάστε περισσότερα

Αρχές Προγραμματισμού

Αρχές Προγραμματισμού Αρχές Προγραμματισμού https://eclass.upatras.gr/courses/ee806/index.php Βασίλης Παλιουράς paliuras@ece.upatras.gr Άσκηση Να γραφεί πρόγραμμα που να αθροίζει δύο διανύσματα Ν στοιχείων σε ISO C90 χρησιμοποιώντας

Διαβάστε περισσότερα

Δομές Δεδομένων Ενότητα 4

Δομές Δεδομένων Ενότητα 4 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 14: Δυναμική Μνήμη Δυναμική μνήμη προγράμματος Πολλές φορές, δεν γνωρίζουμε εκ των προτέρων πόση μνήμη θα χρειαστεί το πρόγραμμα μας. Αν δεσμεύσουμε περισσότερη μνήμη

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 10: Στοίβες:Υλοποίηση& Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης - Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις - Εφαρμογή

Διαβάστε περισσότερα

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 5: Εντολές συνθήκης Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 4 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 14-1 Περιεχόμενο

Διαβάστε περισσότερα

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1 Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο) Προγραμματισμός Η/Υ Ενότητα 2β: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση της έννοιας του Τελεστή

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση της C είκτες Πίνακες

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ οµηµένος Προγραµµατισµός Ανοιξη 5 Μάθηµα 5 ο Ουρά Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση Αφηρηµένος Τύπος εδοµένων Ουρά Υλοποίηση µε Κυκλικό Πίνακα Υλοποίηση

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 6: Πίνακες και Δείκτες Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 2 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις Άσκηση 1 Έστω ότι µια

Διαβάστε περισσότερα

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Α Β Γ static; printf(%c\n, putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf(*); ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2016 (1/2/2016) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12) Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 7: Διαχείριση Μνήμης,Δυναμικές Δομές Δεδομένων, Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Δυναμικές Δομές Δεδομένων Γενικά - Δυναμική Δέσμευση/Αποδέσμευση

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

Διαβάστε περισσότερα

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

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

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files) ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files) Αρχείο είναι μια συλλογή δεδομένων του ίδιου τύπου. Ενα αρχείο αποθηκεύεται στην περιφερειακή μνήμη (σκληρό δίσκο, δισκέττα). Τα αρχεία είναι μόνιμα. Τα δεδομένα

Διαβάστε περισσότερα

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Λίστες -Υλοποίηση ταξινομημένης λίστας με δυναμική δέσμευση μνήμης ΕΠΛ035

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή

Διαβάστε περισσότερα

Φροντιστήριο 4 Σκελετοί Λύσεων

Φροντιστήριο 4 Σκελετοί Λύσεων Φροντιστήριο 4 Σκελετοί Λύσεων 1. Ο ζητούμενος ΑΤΔ μπορεί να υλοποιηθεί ως εξής: (i) Διαδοχική χορήγηση μνήμης Υποθέτουμε ότι οι λίστες μας έχουν μέγιστο μέγεθος max και χρησιμοποιούμε τη δομή type elements[max];

Διαβάστε περισσότερα

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 3 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 10-1 Περιεχόμενο Διάλεξης

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

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

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Έκτη (6 η ) τρίωρη διάλεξη. Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/

Διαβάστε περισσότερα

Εργαστήριο 9: Αρχεία

Εργαστήριο 9: Αρχεία Εργαστήριο 9: Αρχεία Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αρχεία, Είσοδος/Έξοδος από/προς αρχεία - Δυαδικά αρχεία - Παραδείγματα ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ.

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 2: Μεταβλητές και Σταθερές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης

Διαβάστε περισσότερα

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος II Θέματα ιάλεξης Μη- ομημένος

Διαβάστε περισσότερα

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 7: C++ TEMPLATES, ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ, ΕΞΑΙΡΕΣΕΙΣ Templates ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

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

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Έλεγχος ροής Δομή επιλογής (if, switch) Δομές επανάληψης (while, do-while, for) Διακλάδωση

Διαβάστε περισσότερα

ιαφάνειες παρουσίασης #5 (β)

ιαφάνειες παρουσίασης #5 (β) ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης.

Διαβάστε περισσότερα

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y)

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y) D4 2 2. (pixel) 2 ( ) M N (x, y) (x, y ) ( )f(x, y) j N- i j i f(i, j) M-. ij f(i, j) 8 2 8 = 256, 2 2 f(x, y) 3,, R(x, y), G(x, y), B(x, y) 256 2 2.2 ( ) JPEG (Joint Photographic Experts Group), GIF (Graphics

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων Στόχοι και αντικείμενο ενότητας Πέρασμα Πίνακα σε Συνάρτηση #8.. Ειδικά Θέματα Αλγορίθμων Προβλήματα Αναζήτησης Γραμμική Αναζήτηση (Linear Search) Ενημέρωση Μέτρηση Δυαδική Αναζήτηση (Binary Search) Προβλήματα

Διαβάστε περισσότερα

Προγραμματισμός Δομές Δεδομένων

Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων (Data Structures) Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων Ομαδοποίηση πληροφορίας που

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #4 2 Γενικά Στο Τετράδιο #4 του Εργαστηρίου θα αναφερθούμε σε θέματα διαχείρισης πινάκων

Διαβάστε περισσότερα