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

Σχετικά έγγραφα
ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ηλεκτρονικοί Υπολογιστές

Επεξεργασία κειμένου και συμβολοσειρών σε C

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

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

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

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

Εισαγωγή στους Υπολογιστές

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

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

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED)

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

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

Εισαγωγή στους Υπολογιστές

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

Προχωρημένες έννοιες προγραμματισμού σε C

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

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

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

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

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

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

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

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

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

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

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

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

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

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

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

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

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

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

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

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

Διάλεξη 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

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

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

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

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

HY150a Φροντιστήριο 3 24/11/2017

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

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

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

Transcript:

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

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

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

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

Σκοπός Στόχος της παρακάτω ενότητας είναι 5

#include <stdio.h> int main(int argc, char *argv[]) { int a, b, c, d, e; Όχι καλό do { scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); scanf("%d", &d); scanf("%d", &e); while ((a<5 a>7) (b<5 b>7) (c<5 c>7) (d<5 d>7) (e<5 e>7) ) ; return 0; 6

#include <stdio.h> int getnum(void); Καλύτερο int main(int argc, char *argv[]) { int a, b, c, d, e; a = getnum(); b = getnum(); c = getnum(); d = getnum(); e = getnum(); return 0; int getnum(void) { int a; while (scanf("%d", &a), a<5 a >7) ; return a; 7

#include <stdio.h> #define N 5 int getnum(void); Γενικότερος κώδικας int main(int argc, char *argv[]) { int a[n], i; for (i=0;i < N; i++) a[i] = getnum(); return 0; int getnum(void) { int a; while (scanf("%d", &a), a<5 a >7) ; return a; 8

Διαβάζω μια λέξη v0 #include <stdio.h> int main () { FILE *myfile ; char aword[20]; Ζητείται ένα πρόγραμμα που να διαβάζει λέξεις από αρχείο και στη συνέχεια αφού τις αποθηκεύσει να τις τυπώσει. Ακολουθούμε διαδικασία bottom-up myfile = fopen ("test.txt", "rt"); fscanf(myfile, "%s", aword); printf("%s\n", aword); fclose(myfile); return 0; 9

Διαβάζω πολλές λέξεις v1 #include <stdio.h> int main () { FILE *myfile ; char aword[20]; myfile = fopen ("test.txt", "rt"); while (fscanf(myfile, "%s", aword)!=eof) printf("%s\n", aword); fclose(myfile); return 0; 10

Διαβάζω πολλές λέξεις και τις αποθηκεύω - v2 #include <stdio.h> #include <string.h> int main () { FILE *myfile ; char aword[20]; char manywords[100][20]; int i=0; myfile = fopen ("test.txt", "rt"); while (fscanf(myfile, "%s", aword)!=eof) { strcpy(manywords[i++], aword); printf("%s\n", aword); fclose(myfile); return 0; 11

Διαβάζω λέξεις και μετά τις τυπώνω v3 #include <stdio.h> #include <string.h> int main () { FILE *myfile ; char aword[20]; char manywords[100][20]; int j, i=0; myfile = fopen ("test.txt", "rt"); while(fscanf(myfile, "%s", aword)!=eof) { strcpy(manywords[i++], aword); for (j=0; j<i;j++) printf("%s\n", manywords[j]); fclose(myfile); return 0; 12

#include <stdio.h> #include <string.h> int readdtext(file *f, char text[100][20]); void displaytext (char text[100][20], int words); int main () { FILE *myfile ; char manywords[100][20]; int wordcount; Refactoring v4 myfile = fopen ("test.txt", "rt"); wordcount = readtext(myfile, manywords); displaytext(manywords, wordcount); fclose(myfile); return 0; Διαδικασία bottom up Εδώ φτιάχνουμε Συνάρτηση που διαβάζει Και μετράει τις λέξεις int readtext(file *f, char manywords[100][20]) { char aword[20]; int i = 0; while(fscanf(f, "%s", aword)!=eof) { strcpy(manywords[i++], aword); return i; void displaytext(char manywords[100][20], int words) { int j; for (j=0; j<words; j++) printf("%s\n", manywords[j]); 13

Απλοποίηση διεπαφών με δομές #include <stdio.h> #include <string.h> typedef struct text { char manywords[100][20]; int wordcount; Text; void displaytext(text mytext); Text readtext (FILE *f); int main () { FILE *myfile ; Text mytext; myfile = fopen ("test.txt", "rt"); mytext = readtext (myfile); Text readtext (FILE *f) { char aword[20]; int i = 0; Text text; while (fscanf(f, "%s", aword)!=eof) strcpy( text.manywords[i++], aword); text.wordcount = i; return text; void displaytext(text text) { int j; for (j=0; j <text.wordcount; j++) printf("%s\n", text.manywords[j]); displaytext(mytext); fclose(myfile); return 0; 14

Τι είναι ταχύτερο; #include <stdio.h> #include <time.h> #define TIMES 10000000 typedef struct test { char data[100]; Test; void byvalue(test a) { Test b; /* do something */ void byref(test *a ) { Test b; /* do something */ int main(int argc, char *argv[]) { Test a ; int i; clock_t start, stop; start = clock(); printf("size of data: %d\n", sizeof (Test)); for (i=0;i<times; i++) byvalue(a); stop = clock(); printf("by value time: %g\n", (double) (stop - start)/clocks_per_sec); start = clock(); for (i=0;i<times; i++) byref(&a); stop = clock(); printf("by ref time: %g\n", (double) (stop - start)/clocks_per_sec); return 0; Κλήση με αξία και Κλήση με αναφορά 15

Δυναμική διαχείριση μνήμης στη C Δέσμευση μνήμης: void *malloc(size_t size); Επιστρέφει δείκτη σε εξασφαλισμένη περιο χή μεγέθους size bytes ή NULL αν δεν υπά ρχει τέτοια. Απελευθέρωση μνήμης: void free(void *pointer); 16

Πώς δουλεύει ο μηχανισμός; Χρησιμοποιεί static δεδομένα Λεπτομερή διαχείριση ανά block Διεύθυνση αρχής Μέγεθος Μοιράζεται πληροφορία μεταξύ διαφορετικών συναρτήσεων malloc ( ), free ( ) Πώς γίνεται αυτό; 17

Παράδειγμα #include <stdio.h> #include <stdlib.h> #define N 10 main ( ) { char matrix[n]; scanf("%s", matrix); printf("hello %s!\n", matrix); 18

Παράδειγμα #include <stdio.h> #include <stdlib.h> #define N 10 main ( ) { char matrix[n]; char *dynamicdata; scanf("%s", matrix); printf("hello %s!\n", matrix); dynamicdata = (char *) malloc( N * sizeof (char)); scanf("%s", dynamicdata); printf("hello dynamic %s!", dynamicdata); 19

Παράδειγμα #include <stdio.h> #include <stdlib.h> #define N 10 main ( ) { char matrix[n]; char *dynamicdata; int i; scanf("%s", matrix); printf("hello %s!\n", matrix); dynamicdata = (char *) malloc( N * sizeof (char)); scanf("%s", dynamicdata); printf("hello dynamic %s!\n", dynamicdata); for (i=0;dynamicdata[i]!=0;i++) printf("%c\n", dynamicdata[i]); 20

Παράδειγμα #include <stdio.h> #include <stdlib.h> #define N 10 main ( ) { char matrix[n]; char *dynamicdata; int i, nchars; scanf("%s", matrix); printf("hello %s!\n", matrix); while (1) { printf("how many chars?"); scanf("%d", &nchars); dynamicdata = (char *) malloc( nchars * sizeof (char)); scanf("%s", dynamicdata); printf("hello dynamic %s!\n", dynamicdata); for (i=0;dynamicdata[i]!=0;i++) printf("%c\n", dynamicdata[i]); free(dynamicdata); 21

Επόμενα Δυναμικές δομές δεδομένων Διασυνδεδεμένες λίστες Διαχείριση μνήμης (memory management) 22

Στατικές και δυναμικές δομές δεδομένων Στατικές: θέση και μέγεθος καθορίζονται στη μεταγλώτ τιση. int array[10]; Δυναμικές: θέση και μέγεθος καθορίζονται κατά την εκτέλεση. Απλούστερος τύπος: η λίστα Λίστα: Έτοιμη σε C++/Java, σε C γράφουμε κώδικα 23

Λίστες και στοιχεία τους Αρχή (όνομα) NULL 24

Eισαγωγή στοιχείου Αρχή (όνομα) NULL 25

Διαγραφή στοιχείου Αρχή (όνομα) NULL Τι γίνεται με τη μνήμη την οποία το στοιχείο καταλάμβανε; 26

Στοιχείο λίστας Δεδομένα προβλήματος #define N 10 struct elem { char value[ν]; int count ; struct elem *next; ; typedef struct elem Element; Θέση επόμενου στοιχείου 27

Χρήσιμοι συμβολισμοί struct test { int a ; struct test *next; atest, *atest_ptr, *btest_ptr; Διεύθυνση στοιχείου μετά το atest -> atest.next atest.a = 4; /* δείκτης σε δομή */ atest_ptr = atest.next; btest_ptr = &atest; (*btest_ptr).a ++; /* το ίδιο με το προηγούμενο */ (btest_ptr->a)++ ; 28

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