Βασικές Εξειδικεύσεις σε Θεωρία και Λογισµικό

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

Download "Βασικές Εξειδικεύσεις σε Θεωρία και Λογισµικό"

Transcript

1 Βασικές Εξειδικεύσεις σε Θεωρία και Λογισµικό H γλώσσα προγραµµατισµού C Ακ. Έτος , τµήµα Α2 Βασίλειος Βεσκούκης, ρ. Μηχανικός ΕΜΠ Η γλώσσα προγραµµατισµού C ιαφάνειες διαλέξεων Σχολής ΗΜΜΥ ΕΜΠ Νίκος Παπασπύρου, Λέκτορας ΕΜΠ Βασίλης Βεσκούκης, Επισκ.Επ.Καθ.ΕΜΠ 1

2 ΗιστορίατηςC AT&T Bell Labs, Dennis Ritchie 1978 The C Programming Language K&R: Kernighan & Ritchie 1983 Σύσταση ANSI Standardization Committee X3J Αποδοχή ANSI/ISO Standard ANSI C Αναθεώρηση του standard υπό εξέλιξη C9X C99 Χαρακτηριστικά της C (i) Γλώσσα προστακτικού προγραµµατισµού Γλώσσα µετρίου επιπέδου Οικονοµία στην έκφραση (λιτή και περιεκτική) Σχετικά χαλαρό σύστηµα τύπων Φιλοσοφία: οπρογραµµατιστής έχει πλήρη έλεγχο και ευθύνεται για τα σφάλµατά του 2

3 Χαρακτηριστικά της C (ii) Ιδιαίτερα δηµοφιλής στην πράξη Έχει χρησιµοποιηθεί για τον προγραµµατισµό ευρέωςφάσµατος συστηµάτων και εφαρµογών Έχει χρησιµοποιηθεί ως βάση για πληθώρα άλλων γλωσσών: C++, Java Hello world! #include <stdio.h> void main () { printf("hello world!\n"); Παρατηρήσεις Ηεπικοινωνίαµε τον«έξω» κόσµο γίνεται µέσω της βιβλιοθήκης συναρτήσεων Το σηµείο έναρξης του προγράµµατος είναι η «κύρια» συνάρτηση main. 3

4 Εκτέλεση προγραµµάτων Πηγαίος κώδικας (source) hello.c Εκτελέσιµο πρόγραµµα (executable) hello Μεταγλωττιστής C (compiler) Object code Συνδέτης (linker) hello.o stdio.h Αρχεία επικεφαλίδας (header files) Βιβλιοθήκη (library) printf Τύποι δεδοµένων (απλοί) Ακέραιοι αριθµοί int char Καθορισµός προσήµανσης signed unsigned Καθορισµός µεγέθους short long Αριθµοί κινητής υποδιαστολής float double 4

5 Απλοί τύποι δεδοµένων char, signed char, unsigned char signed short int, unsigned short int signed int, unsigned int signed long int, unsigned long int float double long double Με κόκκινο χρώµα όσαµπορούν να παραλειφθούν. Ορισµός µεταβλητών int x; int x, y, z; double r; unsigned long abc; Αρχικοποίηση int x = 1; int x, y = 0, z = 2; double r = 1.87; unsigned long abc = ; 5

6 Σταθερές (i) Ακέραιες δεκαδικές 037 οκταδικές 0x1f δεκαεξαδικές 42U 42L 42UL unsigned & long Κινητής υποδιαστολής δεκαδικές 2.99e8 µε δύναµη του F 42.0L float & long double Σταθερές (ii) Χαρακτήρα 'a' '0' '$' Ειδικοί χαρακτήρες \n αλλαγή γραµµής \' απόστροφος \\ χαρακτήρας \ (backslash) \t αλλαγή στήλης (tab) \" εισαγωγικό \0 χαρακτήρας µε ASCII = 0 (null) \037» µε ASCII = 37 (οκταδικό) \x1f» µε ASCII = 1f (δεκαεξαδικό) 6

7 Σταθερές (iii) Συµβολοσειρές "abc" "Hello world!\n" "a\"51\"" ηλώσεις σταθερών const int size = 10, num = 5; const double pi = ; const char newline = '\n'; Σχόλια Μεταξύ /* και */ #include <stdio.h> /* This simple program greets the world by saying "hello" */ void main () { printf( /* eh? */ "Hello world!\n"); Το παρακάτω είναι λάθος /* Nested /* comments */ are wrong! */ 7

8 Εκτύπωση µε την printf Απλοί τύποι δεδοµένων int %d char %c double %lf string %s Παράδειγµα printf("%d %lf %c %s\n", 42, 1.2, 'a', "hello"); Αποτέλεσµα a hello Εισαγωγή µε την scanf Ίδιοι κωδικοί για τους απλούς τύπους Παράδειγµα int n; double d; char c; scanf("%d", &n); scanf("%lf", &d); scanf("%c", &c); 8

9 Ένα πιο σύνθετο παράδειγµα #include <stdio.h> void main () { int celcius; double farenheit; printf("give the temperature (C): "); scanf("%d", &celcius); farenheit = 9.0 * celcius / ; printf("%d degrees Celcius "is %lf degrees Farenheit", celcius, farenheit); Τελεστές και εκφράσεις (i) Αριθµητικοί τελεστές + - * / % Σχεσιακοί τελεστές ==!= < > <= >= Λογικοί τελεστές π.χ. && λογική σύζευξη (και) λογική διάζευξη (ή)! λογική άρνηση (όχι) (x % 3!= 0) &&!finished 9

10 Τελεστές και εκφράσεις (ii) Τελεστές bit προς bit (bitwise) & σύζευξη bit (AND) διάζευξη bit (OR) ^ αποκλειστική διάζευξη bit (XOR) ~ άρνηση (NOT) << ολίσθηση bit αριστερά >> ολίσθηση bit δεξιά Παράδειγµα (0x0101 & 0xfff0) << 2 0x0400 Τελεστές και εκφράσεις (iii) Τελεστής συνθήκης (a >= b)? a : b Τελεστής παράθεσης a-1, b+5 Τελεστές ανάθεσης a = b+1 a += x ισοδύναµο µε a = a + x Τελεστές αύξησης και µείωσης a++ a-- τιµή πριντηµεταβολή ++a --a τιµή µετά τη µεταβολή 10

11 Eντολές και έλεγχος ροής (i) Κενή εντολή ; Εντολή έκφρασης a = b+5; a++; Εντολή if if (a >= b) max = a; else max = b; Eντολές και έλεγχος ροής (ii) Σύνθετη εντολή if (a >= b) { min = b; max = a; else { max = b; min = a; Ορίζει νέα εµβέλεια if (x < y) { int temp = x; x = y; y = temp; 11

12 Eντολές και έλεγχος ροής (iii) while (συνθήκη) εντολή Εντολή while int i = 1, s = 0; while (i <= 10) { s += i; i++; συνθήκη αληθής εντολή ψευδής Eντολές και έλεγχος ροής (iv) do εντολή while (συνθήκη); εντολή Εντολή do-while int i = 1, s = 0; do s += i++; while (i <= 10); συνθήκη ψευδής αληθής 12

13 Eντολές και έλεγχος ροής (v) for (αρχικοποίηση ; συνθήκη ; βήµα) εντολή Εντολή for int i, s; for (i=1, s=0; i <= 10; i++) s += i; αρχικοποίηση ψευδής συνθήκη αληθής εντολή βήµα Eντολές και έλεγχος ροής (vi) Εντολή break int s; for (i=0, s=0; i < 10; i++) { int x; scanf("%d", &x); if (x < 0) break; s += x; printf("sum is: %d\n", s); 13

14 Eντολές και έλεγχος ροής (vii) Εντολή continue int s; for (i=0, s=0; i < 10; i++) { int x; scanf("%d", &x); if (x < 0) continue; s += x; printf("sum is: %d\n", s); Eντολές και έλεγχος ροής (viii) Εντολή switch switch (ch) { case 'a': printf("alpha\n"); break; case 'b': case 'c': printf("beta or c\n"); break; default: printf("other\n"); 14

15 Eντολές και έλεγχος ροής (ix) Ετικέτες και εντολή goto int i = 1, s = 0; loop: s += i++; if (i < 10) goto loop; printf("the sum is %d\n", s); Όχι goto: δοµηµένος προγραµµατισµός! οµή του προγράµµατος Το πρόγραµµα αποτελείται από: συναρτήσεις καθολικές µεταβλητές 15

16 C και Pascal ιαφορές από την Pascal: κύριο πρόγραµµα, διαδικασίες και συναρτήσεις δε διαφοροποιούνται το κύριο πρόγραµµα ονοµάζεται main οι διαδικασίες έχουν αποτέλεσµα void όλες οι συναρτήσεις στο ίδιο επίπεδο δεν επιτρέπονται φωλιασµένες συναρτήσεις µόνο πέρασµα κατάτιµή (call by value) Παράδειγµα int f (int x, int y) { return x * y; int a; void p (int x) { a = f(x, x+1); void main () { p(6); 16

17 Πίνακες (arrays) (i) Ακολουθία µεταβλητών µε τοίδιοόνοµα, µε τον ίδιο τύπο δεδοµένων, σε συνεχόµενες θέσεις µνήµης. Παράδειγµα int a[50]; double d1[5], d2[10]; Ηαρίθµηση αρχίζει από το 0! for (i = 0; i < 50; i++) a[i] = i; Πίνακες (arrays) (ii) Αρχικοποίηση πινάκων int a[3] = {6, 7, 42; char c[] = {'a', 'b', 'c', 'd', 'e'; Συµβολοσειρές Είναι πίνακες χαρακτήρων char s[6] = "abcde"; Τερµατίζονται µε τον κενό χαρακτήρα '\0' char s[6] = {'a', 'b', 'c', 'd', 'e', '\0'; 17

18 Πίνακες (arrays) (iii) Παράδειγµα int a[3] = {5, 6, 7; int b[3] = {2, 3, 1; int i; for (i = 0; i < 3; i++) printf("%d times %d is %d\n", a[i], b[i], a[i]*b[i]); 5 times 2 is is times 3 is is times 1 is is 7 Πολυδιάστατοι πίνακες(i) Παράδειγµα int a[3][5]; char c[5][10][4]; Αρχικοποίηση int i[3][3] = { {1, 0, 0, {0, 1, 0, {0, 0, 1 ; char s[][10] = { "my", "name", "is", "joe" ; 18

19 Πολυδιάστατοι πίνακες(ii) Πολλαπλασιασµός πινάκων double a[3][4] =..., b[4][5] =..., c[3][5]; int i, j, k; for (i=0; i<3; i++) for (j=0; j<5; j++) { c[i][j] = 0.0; for (k=0; k<4; k++) c[i][j] += a[i][k] * b[k][j]; οµές δεδοµένων (i) Αλγόριθµος Πεπερασµένο σύνολο εντολών που, όταν εκτελεστούν, επιτυγχάνουν κάποιο επιθυµητό αποτέλεσµα εδοµένα εισόδου και εξόδου Κάθε εντολή πρέπει να είναι: καλά ορισµένη απλή Η εκτέλεση πρέπει να σταµατά 19

20 οµές δεδοµένων (ii) Πολυπλοκότητα Μέτρο εκτίµησης της απόδοσης αλγορίθµων ως συνάρτηση του µεγέθους του προβλήµατος που επιλύουν Χρόνος εκτέλεσης Χωρητικότητα µνήµης που απαιτείται Ακριβής µέτρηση πολυπλοκότητας t = f(n) Τάξη µεγέθους, συµβολισµοί Ο, Ω, Θ t = O(f(n)) οµές δεδοµένων (iii) Ορισµός των κλάσεων Ο, Ω, Θ Άνω όριο g = O(f) c. n 0. n > n 0. g(n) < c f(n) Κάτω όριο g = Ω(f) c. n 0. n > n 0. g(n) > c f(n) Τάξη µεγέθους g = Θ(f) c 1, c 2. n 0. n > n 0. c 1 f(n) < g(n) < c 2 f(n) ιάταξη µερικών κλάσεων πολυπλοκότητας O(1) < O(logn) < O( n) < O(n) < O(nlogn) < O(n 2 ) < O(n 3 ) < O(2 n ) < O(n!) < O(n n ) 20

21 οµές δεδοµένων (iv) Αφαίρεση δεδοµένων (data abstraction) ιαχωρισµός ιδιοτήτων και υλοποίησης Ιδιότητες ενός τύπου δεδοµένων: οτρόποςµε τον οποίο δηµιουργεί κανείς και χρησιµοποιεί δεδοµένα αυτού του τύπου Υλοποίηση ενός τύπου δεδοµένων: ο τρόπος µε τον οποίο αναπαρίστανται τα δεδοµένα στη µνήµη του υπολογιστή και προγραµµατίζονταιοιδιαθέσιµες πράξεις οµές δεδοµένων (v) Οι λεπτοµέρειες υλοποίησης επηρεάζουν την πολυπλοκότητα των αλγορίθµων Είναι συχνή εποµένως η αλλαγή τρόπου υλοποίησης κάποιου τύπου δεδοµένων Η αφαίρεση δεδοµένων ελαχιστοποιεί τις αλλαγές που απαιτούνται στο πρόγραµµα που χρησιµοποιεί έναν τύπο δεδοµένων, όταν αλλάξει ο τρόπος υλοποίησης 21

22 Αφηρηµένοι τύποι δεδοµένων Αφηρηµένος τύπος δεδοµένων ΑΤ (abstract data type) καθορίζει τις ιδιότητες του τύπου δεδοµένων δεν καθορίζει την υλοποίησή του Αλγεβρικός ορισµός ΑΤ σύνταξη: όνοµα τουτύπουκαι επικεφαλίδες των πράξεων σηµασιολογία: κανόνες που περιγράφουν τη λειτουργία των πράξεων Παράδειγµα ΑΤ : Σύνολα (i) Σύνταξη Όνοµα τύπου: set (σύνολα ακεραίων) Επικεφαλίδες πράξεων: const set empty; set add (int x, set s); boolean member (int x, set s); set union (set s1, set s2); boolean subset (set s1, set s2); boolean equal (set s1, set s2); Θεωρούµε ότι έχει οριστεί ο τύπος boolean. 22

23 Παράδειγµα ΑΤ : Σύνολα (ii) Σηµασιολογία Αξιωµατικός ορισµός member: member(x, empty) = false member(x, add(x, s)) = true member(x, add(y, s)) = member(x, s) αν x!= y Αξιωµατικός ορισµός union: union(empty, s) = s union(add(x, s1), s2) = add(x, union(s1, s2)) Παράδειγµα ΑΤ : Σύνολα (iii) Σηµασιολογία Αξιωµατικός ορισµός subset: subset(empty, s) = true subset(add(x, s1), s2) = band(member(x, s2), subset(s1, s2)) Αξιωµατικός ορισµός equal: equal(s1, s2) = band(subset(s1, s2), subset(s2, s1)) 23

24 Συγκεκριµένοι τύποι δεδοµένων Συγκεκριµένος τύπος δεδοµένων ΣΤ (concrete data type) καθορίζει τις ιδιότητες του τύπου δεδοµένων καθορίζει επακριβώς την υλοποίησή του Κάθε γλώσσα προγραµµατισµού υποστηρίζει ορισµένους ΣΤ, π.χ. απλοί τύποι: ακέραιοι αριθµοί, πραγµατικοί αριθµοί, χαρακτήρες, λογικές τιµές σύνθετοι τύποι: πίνακες (arrays), εγγραφές (records), δείκτες (pointers), σύνολα (sets) Σχέση ΑΤ και ΣΤ (i) ΑΤ set: σύνολα ακεραίων s = { 1, 3, 7, 9 Υλοποίηση 1: πίνακας από boolean false true false true false false false true false true false s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9] s[10] Υλοποίηση 2: bits ενός πίνακα από int s[1] s[3] s[7] s[9] Στατικός τρόπος υλοποίησης ΣΤ 24

25 Σχέση ΑΤ και ΣΤ (ii) Υλοποίηση 3: απλά συνδεδεµένη λίστα υναµικός τρόπος υλοποίησης ΣΤ Υλοποίηση 4: συµβολοσειρά που περιέχει το µαθηµατικό ορισµό του συνόλου "{x x=1 \/ x=3 \/ x=7 \/ x=9" "{x 1<=x<=10 /\ x%2=1 /\ x<>5" ύσκολη η υλοποίηση των πράξεων Απειροσύνολα: "{x x > 100" Πίνακες ως ΑΤ (i) Βασική πράξη: προσπέλαση στοιχείου a[i] Συνήθως υλοποιούνται µε κάποιοστ πινάκων (arrays) Κόστος προσπέλασης: O(1) 25

26 Πίνακες ως ΑΤ (i) Ο ΣΤ του µονοδιάστατου πίνακα επαρκείγιατηνυλοποίησηκάθεατ πίνακα Συνάρτηση loc υπολογίζει τη θέση ενός στοιχείου του ΑΤ πίνακα στο µονοδιάστατο ΣΤ πίνακα της υλοποίησης Πίνακες ως ΑΤ (ii) ΑΤ πίνακα δύο διαστάσεων n m i = 1 i = i = j = loc (n, m, i, j) = m (i 1) + j 1 Αρίθµηση κατά στήλες loc (n, m, i, j) = n (j 1) + i 1 n = 3 m = 6 26

27 Πίνακες ως ΑΤ (iii) ΑΤ κάτω τριγωνικού πίνακα n n i = 1 i = 2 i = 3 i = 4 i = j = n = 5 loc (n, i, j) = i (i 1) / 2 + j 1 Οµοίως για συµµετρικούς πίνακες Πίνακες ως ΑΤ (iv) ΑΤ τριδιαγώνιου πίνακα n n i = i = i = i = i = j = loc (n, i, j) = 2 i + j 3 n = 5 27

28 Πίνακες ως ΑΤ (v) ΑΤ αραιού πίνακα n m Υλοποίηση µε δυαδικό πίνακα Υλοποίηση µε τρεις πίνακες row = [ 1, 2, 3, 3, 4 ] col = [ 1, 3, 2, 3, 5 ] val = [ a 1, a 2, a 3, a 4, a 5 ] i = 1 i = 2 a 1 a 2 i = 3 i = 4 a 3 a 4 j = a 5 n = 4 m = 5 Αναζήτηση σε πίνακες (i) Σειριακή αναζήτηση Τα στοιχεία διατρέχονται κατά σειρά Κόστος: O(n) (1) (2) (3) (4) (5) n = 8 x = 42 Βελτίωση: στοιχείο φρουρός (sentinel) n = 8 x = 7 28

29 Αναζήτηση σε πίνακες (ii) Υλοποίηση σε C int ssearch (int a[], int n, int x) { int i; for (i = 0; i < n; i++) if (a[i] == x) return i; return -1; Αναζήτηση σε πίνακες (iii) Υλοποίηση σε Cµεφρουρό int ssearch_s (int a[], int n, int x) { int i; a[n] = x; for (i = 0; a[i]!= x; i++); return (i < n)? i : -1; 29

30 Αναζήτηση σε πίνακες (iv) υαδική αναζήτηση Ο πίνακας πρέπει να είναι ταξινοµηµένος Κόστος: O(logn) n = 8 x = 42 (1) (3) (2) Άλλες µέθοδοι αναζήτησης Μικρότερο κόστος περισσότερος χώρος Πίνακες κατακερµατισµού (hash tables) Ταξινόµηση πινάκων (i) Ταξινόµηση επιλογής (selection sort) Ιδέα: για κάθε i κατ αύξουσα σειρά βρες το µικρότερο των στοιχείων µετά το a[i] αντιµετάθεσέ το µετοa[i] Κόστος: Ο(n 2 ) Βελτίωση: στοιχείο φρουρός 30

31 Ταξινόµηση πινάκων (ii) Ταξινόµηση επιλογής, υλοποίηση σε C void ssort (int a[], int n) { int i, j; for (i = 0; i < n-1; i++) { int min = a[i], minj = i; for (j = i+1; j < n; j++) if (a[j] < min) min = a[minj = j]; a[minj] = a[i]; a[i] = min; Ταξινόµηση πινάκων (iii) Ταξινόµηση εισαγωγής (insertion sort) Χρησιµοποιούµε αυτό τον τρόπο όταν ταξινοµούµε ταχαρτιάµιας τράπουλας Ιδέα: για κάθε i από το δεύτερο και κατ αύξουσα σειρά τοποθέτησε το a[i] στη σωστή του θέση µεταξύ των στοιχείων που είναι πριν από αυτό Κόστος: Ο(n 2 ) Βελτιώσεις: στοιχείο φρουρός δυαδική εισαγωγή 31

32 Ταξινόµηση πινάκων (iv) Ταξινόµηση εισαγωγής, υλοποίηση σε C void isort (int a[], int n) { int i, j; for (i = 1; i < n; i++) { int x = a[i]; for (j = i-1; j >= 0; j--) if (x < a[j]) a[j+1] = a[j]; else break; a[j+1] = x; Ταξινόµηση πινάκων (v) Ταξινόµηση φυσαλίδας (bubble sort) Ιδέα: για κάθε i κατ αύξουσα σειρά για κάθε j > i κατά φθίνουσα σειρά αν a[j-1] > a[j] αντιµετάθεσε τα a[j-1] και a[j] Κόστος: Ο(n 2 ) Βελτιώσεις: σταµατά αν σε ένα πέρασµα δεν γίνει αντιµετάθεση σε ποιο σηµείο έγινε η τελευταία αντιµετάθεση αλλαγή κατεύθυνσης µεταξύ διαδοχικών περασµάτων (shake sort) 32

33 Ταξινόµηση πινάκων (vi) Ταξινόµηση φυσαλίδας, υλοποίηση σε C void bsort (int a[], int n) { int i, j; for (i = 0; i < n; i++) for (j = n-1; j > i; j--) if (a[j-1] > a[j]) { int temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; Ταξινόµηση πινάκων (vii) Ταξινόµηση µε διαµέριση (quick sort) Ιδέα: διάλεξε ένα τυχαίο στοιχείο x του πίνακα διαµέρισε τον πίνακα, µεταφέροντας: τα στοιχεία µικρότερα του x στην αρχή τα στοιχεία µεγαλύτερα του x στο τέλος αναδροµικά, ταξινόµησε τα δύο µέρη Κόστος:Ο(n 2 ) στη χειρότερη περίπτωση Ο(n logn) κατά µέσο όρο 33

34 Ταξινόµηση πινάκων (viii) Quick sort, υλοποίηση σε C void qsort (int a[], int n) { qsort_auxil(a, 0, n-1); void qsort_auxil (int a[], int lower, int upper) { if (lower < upper) { int x = a[(lower + upper) / 2]; int i, j; for (i = lower, j = upper; i <= j; i++, j--) { while (a[i] < x) i++; while (a[j] > x) j--; Ταξινόµηση πινάκων (ix) Quick sort, υλοποίηση σε C(συνέχεια) if (i <= j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; qsort_auxil(a, lower, j); qsort_auxil(a, i, upper); 34

35 Ταξινόµηση πινάκων (x) Άλλοιτρόποιταξινόµησης Ταξινόµηση του Shell (shell sort), κόστος: Ο(n 2 ) Ταξινόµηση σε σωρό (heap sort), κόστος: Ο(n logn) Ταξινόµηση µε συγχώνευση (merge sort), κόστος: Ο(n logn) Ορισµοί τύπων Συνώνυµα απλών τύπων typedef double real; real x, y; Συνώνυµα σύνθετων τύπων typedef double vector [10]; vector v; for (i = 0; i < 10; i++) v[i] = i; 35

36 Απαριθµήσεις (enumerations) Οτύποςenum enum color_tag { GREEN, RED, BLUE, WHITE, BLACK ; enum color_tag c; c = GREEN; typedef enum { GREEN, RED, BLUE, WHITE, BLACK color; color c = WHITE; οµές (structures) (i) Οτύποςstruct struct complex_tag { double re, im; ; struct complex_tag z; z.re = 1.0; z.im = -1.0; z re im typedef struct complex_tag complex; complex z; complex zs [100]; 36

37 οµές (structures) (ii) Παράδειγµα complex complement (complex z) { complex result; result.re = z.re; result.im = -z.im return result; οµές (structures) (iii) Παράδειγµα typedef struct { char firstname [30]; char lastname [50]; char phone [10]; int age; double salary; record; record r [1000]; r[423].age = 32; 37

38 Ενώσεις (unions) Ο τύποςunion union number_tag { int i; double d; ; union number_tag n; n.d = 1.2; printf("%lf\n", n.d); n.i = 42; printf("%d\n", n.i); printf("%lf\n", n.d); /* wrong! */ n i d είκτες (pointers) (i) Μεταβλητές που δεν περιέχουν µια τιµή κάποιου απλού τύπου δεδοµένων αλλά τη διεύθυνση µιας άλλης µεταβλητής Παράδειγµα int x, *p; x δ247 p δ124 δ

39 είκτες (pointers) (ii) εικτοδότηση: & ηδιεύθυνσηµιας µεταβλητής p = &x; Αποδεικτοδότηση: * το περιεχόµενο µιας διεύθυνσης printf("%d", *p); *p = 7; δ124 x 42 δ247 p δ124 Πίνακες και δείκτες Αριθµητική δεικτών int a[3] = {7, 6, 42; int *p; p = &(a[0]); p = &a; p = a; (i) a δ124 7 δ125 6 δ printf("%d\n", *p); printf("%d\n", *(p+1)); p = p+2; printf("%d\n", *p); δ247 p δ124 39

40 Πίνακες και δείκτες (ii) Ισοδυναµία πινάκων και δεικτών Ένας πίνακας είναι ένας δείκτης στο πρώτο στοιχείο. a[i] ισοδύναµο µε *(a+i) Οι πίνακες όµως είναι σταθεροί δείκτες, δηλαδή δεν µπορούν να αλλάξουν τιµή int a[3] = {7, 6, 42; int *p = &a; p++; /* correct */ a++; /* wrong! */ Πίνακες και δείκτες (iii) Παράδειγµα: αντιγραφή πινάκων int a[10], b[10]; int *p = a, *q = b, i; /* assume b initialized */ for (i=0; i<10; i++) *p++ = *q++; 40

41 Πίνακες και δείκτες (iv) Παράδειγµα: εκτύπωση συµβολοσειράς void putchar (char c); char s[] = "Hello world!\n"; char *p; for (p = s; *p!= '\0'; p++) putchar(*p); Κενός δείκτης, δείκτης σε κενό Οκενόςδείκτης: NULL Απαγορεύεται να αποδεικτοδοτηθεί! int *p = NULL; *p = 42; /* wrong! */ Ο µόνος δείκτης που αντιστοιχεί στην ψευδή λογική τιµή, όταν χρησιµοποιείται σε συνθήκη Ο δείκτης σε κενό: void * Γενική µορφή δείκτη Απαγορεύεται να αποδεικτοδοτηθεί! Απαγορεύεται η αριθµητική δεικτών! 41

42 είκτες αντί περάσµατος µε αναφορά Κώδικας Pascal procedure inc (var x : integer); begin x := x+1 end;... inc(a)... Ισοδύναµος κώδικας C void inc (int * px) { (*px)++;... inc(&a)... είκτες σε εγγραφές Συντοµογραφία p->x είναι ισοδύναµο µε (*p).x Παράδειγµα struct { int x, y; coordinates, *p; coordinates.x = 1; coordinates.y = 3; p = &coordinates; printf("%d\n", p->x); printf("%d\n", p->y); 42

43 Μετατροπές τύπων(i) Έµµεσες (coercions) double d = 3; int x = 3.14; int f (int x); f(3.14); Άµεσες (type casting) ( τύπος ) έκφραση (double) 3 (int) 3.14 (int *) NULL (µε ανάθεση) (µε πέρασµα παραµέτρου) Μετατροπές τύπων(ii) Πρόβληµα: πώς µπορώ να τυπώσω το αποτέλεσµα τηςπραγµατικής διαίρεσης δυο ακεραίων αριθµών, χωρίς νέες µεταβλητές; int x = 5, y = 3; Λάθος λύση #1: printf("%d", x/y); Λάθος λύση #2: printf("%lf", x/y); Σωστές λύσεις: printf("%lf", 1.0 * x / y); printf("%lf", (double) x / (double) y); printf("%lf", (double) x / y); 43

44 υναµική παραχώρηση µνήµης Συναρτήσεις βιβλιοθήκης <stdlib.h> void * malloc (size_t n); υναµική παραχώρηση µνήµης µήκους n bytes. Το αποτέλεσµα πρέπει να µετατραπεί στο σωστό τύπο. Επιστρέφεται NULL αν εξαντληθεί η µνήµη. void free (void * p); Αποδέσµευση της µνήµης στην οποία δείχνει το p. Το p πρέπει να έχει δηµιουργηθεί µε προηγούµενη κλήση στη malloc. Πόσα bytes χρειάζονται; sizeof(type) π.χ. sizeof(int) sizeof(variable) π.χ. sizeof(x) υναµική παραχώρηση µνήµης Παράδειγµα int *p; int i; p = (int *) malloc(sizeof(int)); *p = 42; free(p); p = (int *) malloc(10 * sizeof(int)); for (i = 0; i < 10; i++) p[i] = 42; free(p); Το αποτέλεσµα τηςmalloc πρέπει να ελεγχθεί ότι δεν είναι NULL! 44

45 υναµικοί ΣΤ (i) Χρησιµοποιούνται για την υλοποίηση ΑΤ Παραδείγµατα συνδεδεµένες λίστες δέντρα γράφοι Πώς υλοποιούνται στη C; µε κατάλληλο συνδυασµό δοµών (struct) και δεικτών (pointers), και µε δυναµική παραχώρηση µνήµης υναµικοί ΣΤ (ii) Πλεονεκτήµατα έναντι στατικών ΣΤ εν επιβάλλουν περιορισµούς στο µέγιστο πλήθος των δεδοµένων Η µνήµη που χρησιµοποιείται είναι ανάλογη του πραγµατικού πλήθους των δεδοµένων Κάποιες πράξεις υλοποιούνται αποδοτικότερα Μειονεκτήµατα έναντι στατικών ΣΤ Για σταθερό και γνωστό πλήθος δεδοµένων, χρησιµοποιούν συνήθως περισσότερη µνήµη Κάποιες πράξεις υλοποιούνται λιγότερο αποδοτικά 45

46 υναµικοί ΣΤ (iii) Ιδέα Κατασκευάζεται ένα σύνολο κόµβων Κάθε κόµβος περιέχει πληροφορίες και συνδέσµους προς άλλους κόµβους Π Σ Απλά συνδεδεµένες λίστες (i) Είναι γραµµικές διατάξεις Κάθε κόµβος περιέχει ένα σύνδεσµο στον επόµενο κόµβο Ο τελευταίος κόµβος έχει κενό σύνδεσµο 46

47 Απλά συνδεδεµένες λίστες (ii) Παράδειγµα: λίστα ακεραίων struct node_tag { int data; struct node_tag * next; ; typedef struct node_tag Node, * LinkedList; Κενή λίστα Απλά συνδεδεµένες λίστες (iii) Προσθήκη στοιχείων απόφαση πού θα προστεθεί δηµιουργία νέου κόµβου αντιγραφή πληροφορίας σύνδεση νέου κόµβου i εδώ 47

48 Απλά συνδεδεµένες λίστες (iv) Αφαίρεση στοιχείων απόφαση ποιο στοιχείο θα αφαιρεθεί καταστροφή κόµβου σύνδεση υπόλοιπων κόµβων αυτό Ουρές (i) First In First Out (FIFO) ό,τι µπαίνει πρώτο, βγαίνει πρώτο Ουρά ακεραίων ΑΤ : queue const queue queueempty; void queueinsert (queue * qp, int t); int queueremove (queue * qp); int queuehead (queue q); 48

49 Ουρές (ii) Υλοποίηση µε απλά συνδεδεµένη λίστα first last Υλοποίηση ουράς σε C(i) Υλοποίηση µε απλάσυνδεδεµένη λίστα typedef struct list_tag { int data; struct list_tag * next; ListNode; Τύπος queue typedef struct { ListNode * first; ListNode * last; queue; 49

50 Υλοποίηση ουράς σε C (ii) Άδεια ουρά const queue queueempty = { NULL, NULL ; Εισαγωγή στοιχείου void queueinsert (queue * qp, int t) { ListNode * n = (ListNode *) malloc(sizeof(listnode)); if (n == NULL) { printf("out of memory\n"); exit(1); Υλοποίηση ουράς σε C (iii) Εισαγωγή στοιχείου (συνέχεια) n->data = t; n->next = NULL; if (qp->last == NULL) qp->first = qp->last = n; else { qp->last->next = n; qp->last = n; 50

51 Υλοποίηση ουράς (iv) Αφαίρεση στοιχείου int queueremove (queue * qp) { ListNode * n; int result; if (qp->first == NULL) { printf("nothing to remove" " from an empty queue\n"); exit(1); Υλοποίηση ουράς (v) Αφαίρεση στοιχείου (συνέχεια) n = qp->first; result = qp->first->data; qp->first = qp->first->next; free(n); if (qp->first == NULL) qp->last = NULL; return result; 51

52 Υλοποίηση ουράς (vi) Εξέταση στοιχείου int queuehead (queue q) { if (q.first == NULL) { fprintf(stderr, "Nothing to see" " in an empty queue\n"); exit(1); return q.first->data; Στοίβες(i) Last In First Out (LIFO) ό,τι µπαίνει τελευταίο, βγαίνει πρώτο Στοίβα ακεραίων ΑΤ : stack const stack stackempty; void stackpush (stack * sp, int t); int stackpop (stack * sp); int stacktop (stack s); 52

53 Στοίβες(ii) Υλοποίηση µε απλά συνδεδεµένη λίστα top Υλοποίηση στοίβας σε C (i) Τύπος stack typedef ListNode * stack; Άδεια στοίβα const stack stackempty = NULL; Εισαγωγή στοιχείου void stackpush (stack * sp, int t) { ListNode * n = (ListNode *) malloc(sizeof(listnode)); if (n == NULL) { printf("out of memory\n"); exit(1); 53

54 Υλοποίηση στοίβας σε C (ii) Εισαγωγή στοιχείου (συνέχεια) n->data = t; n->next = *sp; *sp = n; Αφαίρεση στοιχείου int stackpop (stack * sp) { ListNode * n; int result; if (*sp == NULL) { printf("nothing to remove" " from an empty stack\n"); exit(1); Υλοποίηση στοίβας σε C (iii) Αφαίρεση στοιχείου (συνέχεια) n = *sp; result = (*sp)->data; *sp = (*sp)->next; free(n); return result; 54

55 Υλοποίηση στοίβας σε C (iv) Εξέταση στοιχείου int stacktop (stack s) { if (s == NULL) { printf("nothing to see" " in an empty stack\n"); exit(1); return s->data; ιπλά συνδεδεµένες λίστες (i) Επίσης γραµµικές διατάξεις υο σύνδεσµοι σε κάθε κόµβο, προς τον επόµενο και προς τον προηγούµενο Γενική µορφή, π.χ. για υλοποίηση ουράς: first last 55

56 ιπλά συνδεδεµένες λίστες (ii) Τύπος κόµβου DListNode typedef struct DListNode_tag { int data; struct DListNode_tag * next; struct DListNode_tag * prev; DListNode; Τύπος dlist typedef struct { DListNode * first; DListNode * last; dlist; Άδεια λίστα const dlist dlistempty = { NULL, NULL ; ιπλά συνδεδεµένες λίστες (iii) Τύπος κόµβου DListNode typedef struct DListNode_tag { int data; struct DListNode_tag * next; struct DListNode_tag * prev; DListNode; Τύπος dlist typedef struct { DListNode * first; DListNode * last; dlist; first last 56

57 ιπλά συνδεδεµένες λίστες (iv) Εισαγωγή στοιχείου στην αρχή first last ιπλά συνδεδεµένες λίστες (v) Εισαγωγή στοιχείου στην αρχή void dlistinsert (dlist * lp, int t) { DListNode * n = (DListNode *) malloc(sizeof(dlistnode)); if (n == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); n->data = t; 57

58 ιπλά συνδεδεµένες λίστες (vi) Εισαγωγή στοιχείου στην αρχή (συνέχεια) if (lp->first == NULL) { n->prev = n->next = NULL; lp->first = lp->last = n; else { n->prev = NULL; n->next = lp->first; lp->first->prev = n; lp->first = n; n ιπλά συνδεδεµένες λίστες (vii) if (lp->first == NULL) { n->prev = n->next = NULL; lp->first = lp->last = n; else { n->prev = NULL; n->next = lp->first; lp->first->prev = n; lp->first = n; first last 58

59 Κυκλικές λίστες first (i) last Τύπος clist typedef struct { ListNode * first; ListNode * last; clist; Άδεια λίστα const clist clistempty = { NULL, NULL ; Κυκλικές λίστες (ii) Εισαγωγή στοιχείου void clistinsert (clist * lp, int t) { ListNode * n = (ListNode *) malloc(sizeof(listnode)); if (n == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); n->data = t; 59

60 Κυκλικές λίστες (iii) Εισαγωγή στοιχείου (συνέχεια) if (lp->first == NULL) { lp->first = lp->last = n; n->next = n; else { n->next = lp->first; lp->last->next = n; lp->last = n; Κυκλικές λίστες (iv) if (lp->first == NULL) { lp->first = lp->last = n; n->next = n; else { n->next = lp->first; lp->last->next = n; lp->last = n; first last n 60

61 Κυκλικές λίστες (v) Αφαίρεση στοιχείου int clistremove (clist * lp) { int result; if (lp->first == NULL) { fprintf(stderr, "Nothing to remove" " from empty list\n"); exit(1); result = lp->first->data; Κυκλικές λίστες (vi) Αφαίρεση στοιχείου (συνέχεια) if (lp->first == lp->last) { free(lp->first); lp->first = lp->last = NULL; else { lp->first = lp->first->next; free(lp->last->next); lp->last->next = lp->first; return result; 61

62 Κυκλικές λίστες (vii) if (lp->first == lp->last) { free(lp->first); lp->first = lp->last = NULL; else { lp->first = lp->first->next; free(lp->last->next); lp->last->next = lp->first; return result; first last Κυκλικές λίστες (viii) Εκτύπωση στοιχείων void clistprint (clist l) { ListNode * n; for (n = l.first; n!= NULL; n = n->next) { printf("%d\n", n->data); 62

63 Κυκλικές λίστες (ix) Εκτύπωση στοιχείων (σωστό!) void clistprint (clist l) { ListNode * n; for (n = l.first; n!= NULL; n = n->next) { printf("%d\n", n->data); if (n->next == l.first) break; Ταξινοµηµένες λίστες (i) Τύπος slist typedef ListNode * slist; Άδεια λίστα const slist slistempty = NULL; Εισαγωγή στοιχείου void slistinsert (slist * lp, int t) { ListNode * n = (ListNode *) malloc(sizeof(listnode)); if (n == NULL) { printf("out of memory\n"); exit(1); 63

64 Ταξινοµηµένες λίστες (ii) Εισαγωγή στοιχείου (συνέχεια) n->data = t; while (*lp!= NULL && (*lp)->data < t) lp = &((*lp)->next); n->next = *lp; *lp = n; n 20 lp Ταξινοµηµένες λίστες (iii) Αφαίρεση στοιχείου void slistremove (slist * lp, int t) { ListNode * n; while (*lp!= NULL && (*lp)->data < t) lp = &((*lp)->next); if (*lp == NULL) { printf( %d was not found\n, t); exit(1); n = *lp; *lp = (*lp)->next; free(n); 64

65 Ταξινοµηµένες λίστες (iv) void slistremove (slist * lp, int t) { ListNode * n; t=24 lp while (*lp!= NULL && (*lp)->data < t) lp = &((*lp)->next); if (*lp == NULL) { printf( %d was not found\n, t); exit(1); n = *lp; *lp = (*lp)->next; free(n); lp n Παράµετροι προγράµµατος (i) Επικεφαλίδα του προγράµµατος int main (int argc, char * argv[]); Παράµετροι argc ο αριθµός των παραµέτρων argv[i] η i-οστή παράµετρος argv[0] το όνοµα του προγράµµατος Αποτέλεσµα ακέραιος αριθµός που επιστρέφεται στο λειτουργικό σύστηµα συνήθως 0 για επιτυχή τερµατισµό 65

66 Παράµετροι προγράµµατος (ii) Παράδειγµα int main (int argc, char * argv[]) { int i; printf("program %s called with " "%d parameters:\n", argv[0], argc-1); for (i = 1; i < argc; i++) printf(" %s", argv[i]); printf("\nand will return 0\n"); return 0; Συναρτήσεις εισόδου-εξόδου (i) Βασικές συναρτήσεις εισόδου-εξόδου int printf (const char * format,...); int scanf (const char * format,...); Ειδικοί χαρακτήρες στο format Ακέραιοι αριθµοί %d στοδεκαδικόσύστηµα %u χωρίς πρόσηµο στο δεκαδικό σύστηµα %o χωρίς πρόσηµο στο οκταδικό σύστηµα %x χωρίς πρόσηµο στο δεκαεξαδικό σύστηµα 66

67 Συναρτήσεις εισόδου-εξόδου (ii) Ειδικοί χαρακτήρες στο format Αριθµοί κινητής υποδιαστολής %f σε µορφή: [-]ddd.dddddd %e σε µορφή: [-]ddd.dddddd e [+/-]ddd %g σε µορφή %f ή %e Άλλοι τύποι %c χαρακτήρες %s συµβολοσειρές %p δείκτες Συναρτήσεις εισόδου-εξόδου (iii) Παραλλαγές στο format Μέγεθος αριθµών %h αριθµοί short π.χ. %hd, %hx %l αριθµοί long ή double π.χ. %ld, %lf %L αριθµοί long double π.χ. %Lf Μήκος αποτελέσµατος %8d αριθµός σε µήκος 8 χαρακτήρων %20s συµβολοσειρά σε µήκος 20 χαρακτήρων %+8d αριθµός σε µήκος 8 χαρακτήρων µε + %08d αριθµός σε µήκος 8 χαρακτήρων, τα πρώτα 0 %-8d όπως το %8d µε στοίχιση αριστερά 67

68 Συναρτήσεις εισόδου-εξόδου (iv) Είσοδος-έξοδος χαρακτήρων int putchar (int c); int getchar (); Είσοδος-έξοδος συµβολοσειρών int puts (const char * s); char * gets (char * s); Έλεγχος τέλους δεδοµένων int eof (); ΗσταθεράEOF παριστάνει το τέλος των δεδοµένων και έχει τύπο int. Παράδειγµα Αντιγραφή δεδοµένων οι χαρακτήρες που διαβάζονται εκτυπώνονται, µέχρι να παρουσιαστεί τέλος δεδοµένων void main () { int c; while ((c = getchar())!= EOF) putchar(c); 68

69 Συναρτήσεις διαχείρισης αρχείων (i) Τύπος αρχείου FILE * fp; Άνοιγµα αρχείων FILE * fopen (const char * filename, const char * mode); Παράµετρος mode r w a t b ανάγνωση (read) εγγραφή (write) προσθήκη (append) κείµενο (text) δυαδικά δεδοµένα (binary) Συναρτήσεις διαχείρισης αρχείων (ii) Κλείσιµο αρχείων int fclose (FILE * fp); Είσοδος-έξοδος χαρακτήρων int fputc (int c, FILE * fp); int fgetc (FILE * fp); Είσοδος-έξοδος συµβολοσειρών int fputs (const char * s, FILE * fp); char * fgets (char * s, int n, FILE * fp); 69

70 Συναρτήσεις διαχείρισης αρχείων (iii) Βασικές συναρτήσεις εισόδου-εξόδου int fprintf (FILE * fp, const char * format,...); int fscanf (FILE * fp, const char * format,...); Έλεγχος τέλους αρχείου int feof (FILE * fp); Συναρτήσεις διαχείρισης αρχείων (iv) Είσοδος-έξοδος πολλών δεδοµένων size_t fwrite (const void * p, size_t size, size_t num, FILE * fp); size_t fread (void * p, size_t size, size_t num, FILE * fp); Οακέραιοςτύποςsize_t χρησιµοποιείται για τη µέτρηση χώρου µνήµης σε bytes. 70

71 Παράδειγµα (i) Αντιγραφή δυαδικών αρχείων int main (int argc, char * argv[]) { FILE * fin, * fout; unsigned char buffer[1000]; size_t count; fin = fopen(argv[1], "rb"); if (fin == NULL) return 1; fout = fopen(argv[2], "wb"); if (fout == NULL) return 2; Παράδειγµα (ii) (συνεχίζεται) while (!feof(fin)) { count = fread(buffer, 1, 1000, fin); fwrite(buffer, 1, count, fout); fclose(fin); fclose(fout); return 0; 71

72 Συναρτήσεις βιβλιοθήκης (i) Είσοδος και έξοδος <stdio.h> Περιέχει όλες τις συναρτήσεις εισόδου-εξόδου Προκαθορισµένα αρχεία FILE * stdin; τυπική είσοδος FILE * stdout; τυπική έξοδος FILE * stderr; τυπική έξοδος σφαλµάτων Ισοδυναµίες printf(...) fprintf(stdout,...) scanf(...) fscanf(stdin,...) κ.λπ. Συναρτήσεις διαχείρισης αρχείων µε τυχαία πρόσβαση (random access) Συναρτήσεις βιβλιοθήκης (ii) ιαχείριση συµβολοσειρών <string.h> size_t strlen (const char * s); Μέτρηση αριθµού χαρακτήρων της συµβολοσειράς s. char * strcpy (char * s1, const char * s2); Αντιγραφή της συµβολοσειράς s2 στην s1. char * strcat (char * s1, const char * s2); Προσθήκη της συµβολοσειράς s2 στο τέλος της s1. int strcmp (const char * s1, const char * s2); Σύγκριση των συµβολοσειρών s1 και s2. 72

73 Συναρτήσεις βιβλιοθήκης (iii) Μετατροπή συµβολοσειρών <stdlib.h> int atoi (const char * s); Μετατροπή της συµβολοσειράς s σε int. long int atol (const char * s); Μετατροπή της συµβολοσειράς s σε long int. double atof (const char * s); Μετατροπή της συµβολοσειράς s σε double. Παράδειγµα Μια δυνατή υλοποίηση της strcmp int strcmp (const char * s1, const char * s2) { while (*s1 == *s2 && *s1!= '\0') { s1++; s2++; return (*s1)-(*s2); Υπόθεση: οι τιµές του τύπου char είναι στο διάστηµα (όχι αρνητικές) while (*s1 && *s1++ == *s2++); 73

74 Προεπεξεργαστής (preprocessor) (i) Εντολή #include #include <stdio.h> #include "myheader.h" Εντολή #define #define MAX_CHARS 1000 char s[max_chars]; #define INC(x) ((x)++) INC(a); INC(*p); Προεπεξεργαστής (preprocessor) (ii) Εντολές #ifdef, #ifndef, #else και #endif #define DEBUG #ifdef DEBUG printf("debugging is on\n"); #else printf("debugging is off\n") #endif #ifndef DEBUG printf("optimizations allowed\n"); #endif 74

75 υαδικά δένδρα (i) Binary trees υο σύνδεσµοι σε κάθε κόµβο αριστερό και δεξί παιδί Κάθε κόµβος έχει 0, 1 ή 2 παιδιά Ρίζα: ο αρχικόςκόµβος του δένδρου Φύλλα: κόµβοι χωρίς παιδιά Βάθος κόµβου: αριθµός συνδέσµων από τη ρίζα υαδικά δένδρα (ii) Τύπος κόµβου TreeNode typedef struct TreeNode_tag { int data; struct TreeNode_tag * left; struct TreeNode_tag * right; TreeNode; Τύπος tree typedef TreeNode * tree; Κενό δένδρο const tree treeempty = NULL; 75

76 υαδικά δένδρα (iii) Εισαγωγή σε δένδρα Καθοριστική απόφαση: σε ποιο σηµείο του δένδρου θα εισαχθεί ο νέος κόµβος Ισοζυγισµένα δένδρα (balanced trees): το βάθος δυο φύλλων διαφέρει το πολύ κατά 1 Συνάρτηση µέγιστου βάθους int treedepth (tree t) { if (t == NULL) return 0; return 1 + max(treedepth(t->left), treedepth(t->right)); υαδικά δένδρα (iv) Εισαγωγή σε ισοζυγισµένα δένδρα void treebalancedinsert (tree * t, int d) { if (*t == NULL) { *t = (TreeNode *) malloc(sizeof(treenode)); if (*t == NULL) { printf("out of memory\n"); exit(1); (*t)->data = d; (*t)->left = (*t)->right = NULL; 76

77 υαδικά δένδρα (v) Εισαγωγή σε ισοζυγισµένα δένδρα (συνέχεια) else { int d1 = treedepth((*t)->left); int d2 = treedepth((*t)->right); if (d1 <= d2) treebalancedinsert( &((*t)->left), d); else treebalancedinsert( &((*t)->right), d); ένδρα γενικής µορφής Κάθε κόµβος k έχει n k απογόνους, όπου n k Ν Κωδικοποίηση µε δυαδικά δένδρα

78 ιάσχισηδυαδικώνδένδρων(i) Σειρά µε την οποία διασχίζονται οι κόµβοι κατά βάθος (depth first) 42 κατά πλάτος (breadth first) Κατά βάθος , 10, 7, 14, 12, 30, 50, 55, Κατά πλάτος 42, 10, 50, 7, 14, , 12, 30, 52 ιάσχισηδυαδικώνδένδρων(ii) Εκτύπωση κατά βάθος πολύ απλά, µε χρήση αναδροµής Υλοποίηση void treeprintdf (tree t) { if (t!= NULL) { printf("%d ", t->data); treeprintdf(t->left); treeprintdf(t->right); 78

79 ιάσχιση δυαδικών δένδρων (iii) Εκτύπωση κατά πλάτος µε τη βοήθεια ουράς για την αποθήκευση δεικτών προς τους κόµβους που δεν έχουµε επισκεφθεί Υλοποίηση void treeprintbf (tree t) { queue q = queueempty; if (t!= NULL) queueinsert(&q, t); ιάσχιση δυαδικών δένδρων (iv) Εκτύπωση κατά πλάτος, υλοποίηση (συνέχεια) while (!queueisempty(q)) { TreeNode * n = queueremove(&q); printf("%d ", n->data); if (n->left!= NULL) queueinsert(&q, n->left); if (n->right!= NULL) queueinsert(&q, n->right); 79

80 Αριθµητικές εκφράσεις(i) Παράδειγµα 3 * (24 / 2) + (9-3) Παράσταση σε µορφή δυαδικού δένδρου οι αριθµοί στα φύλλα οι τελεστές στους υπόλοιπους κόµβους ιάσχιση κατά βάθος + * 3 / Αριθµητικές εκφράσεις(ii) Ενθεµατική παράσταση infix notation ο τελεστής ανάµεσα στα τελούµενα διφορούµενη: χρειάζονται παρενθέσεις ησυνήθηςµορφή για τον άνθρωπο Αποτέλεσµα (3 * (24 / 2)) + (9-3) + * 3 /

81 Αριθµητικές εκφράσεις(iii) Προθεµατική παράσταση prefix notation ο τελεστής πριν τα τελούµενα όχι διφορούµενη, δε χρειάζονται παρενθέσεις απλή µηχανική ανάγνωση 24 Αποτέλεσµα + * 3 / * 3 / Αριθµητικές εκφράσεις(iv) Επιθεµατική παράσταση postfix notation ο τελεστής µετά τα τελούµενα όχι διφορούµενη, δε χρειάζονται παρενθέσεις απλή µηχανική αποτίµηση Αποτέλεσµα / * * 3 /

82 υαδικά δένδρα αναζήτησης (i) Binary search trees υαδικά δένδρα µε τις παρακάτω ιδιότητες για κάθε κόµβο: όλοι οι κόµβοι του αριστερού παιδιού έχουν τιµές µικρότερεςήίσες της τιµής του κόµβου όλοι οι κόµβοι του δεξιού παιδιού έχουν τιµές µεγαλύτερες ή ίσες της τιµής του κόµβου υαδικά δένδρα αναζήτησης (ii) Τα δυαδικά δένδρα αναζήτησης διευκολύνουν την αναζήτηση στοιχείων Αναδροµική αναζήτηση αν η τιµή που ζητείται είναι στη ρίζα, βρέθηκε αν είναι µικρότερη από την τιµή της ρίζας, αρκεί να αναζητηθεί στο αριστερό παιδί αν είναι µεγαλύτερη από την τιµή της ρίζας, αρκεί να αναζητηθεί στο δεξί παιδί Κόστος αναζήτησης: O(log n) υπό την προϋπόθεση το δένδρο να είναι ισοζυγισµένο 82

83 υαδικά δένδρα αναζήτησης(iii) Αναζήτηση TreeNode * treesearch (tree t, int key) { if (t == NULL) return NULL; /* not found */ if (t->data == key) return t; /* found */ if (t->data > key) return treesearch(t->left, key); else return treesearch(t->right, key); είκτες σε συναρτήσεις Παράδειγµα 1 int f (int n); int (*p) (int n); p = &f; printf("%d", (*p)(3)); Παράδειγµα 2 double (*q) (double) = &sqrt; είκτες ισοδύναµοι µε συναρτήσεις p = f; printf("%d", p(3)); 83

84 Ολοκλήρωση double integral (double a, double b, double (*f) (double)) { const double step = 1e-6; double result = 0.0; double x; κακός αλγόριθµος! for (x=a; x<=b; x += step) result += f(x) * step; return result;... result = integral(0, , sin); Ταξινόµηση φυσαλίδας (i) Τα δεδοµένα: void * a πού βρίσκονται int n πόσα είναι int size τί µέγεθος έχει καθένα comparison f πώς γίνεται η σύγκριση Η σύγκριση των δεδοµένων typedef int (*comparison) (void * x, void * y); 84

85 Ταξινόµηση φυσαλίδας (ii) void bsort (void * a, int n, comparison f, int size) { int i, j; for (i = 0; i < n; i++) for (j = n-1; j > i; j--) { unsigned char * px = (unsigned char *) a + (j-1) * size; unsigned char * py = (unsigned char *) a + j * size; Ταξινόµηση φυσαλίδας (iii) (συνέχεια) if (f(px, py) > 0) { int k; for (k = 0; k < size; k++) { unsigned char temp = *px; *px++ = *py; *py++ = temp; 85

86 Ταξινόµηση φυσαλίδας (iv) Συνάρτηση σύγκρισης για ακέραιους int intcompare (void * x, void * y) { return *((int *) x) - *((int *) y); Κλήση για πίνακα ακεραίων int x[] = { 44, 55, 12, 42,... ;... bsort(x, n, intcompare, sizeof(int)); έντρα δυαδικής αναζήτησης ενδρικές δοµές δεδοµένων στις οποίες Ολα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι µικρότερα από την ρίζα Ολαταστοιχείαστοδεξίυποδέντροτης ρίζας είναι µεγαλύτερα ή ίσα µε τηνρίζα Το αριστερό και το δεξί υποδέντρο είναι δέντρα δυαδικής αναζήτησης Binary Search Trees - BSTs 86

87 έντρα δυαδικής αναζήτησης Η γενική εικόνα ενός τέτοιου δέντρου >= Παραδείγµατα δέντρων BST Εγκυρα δέντρα 87

88 Παραδείγµατα δέντρων BST Μη-έγκυρα δέντρα ιάσχισηδυαδικώνδέντρων Preorder: Postorder: Inorder:

89 Ζύγισµα δέντρωνbst Ανάλογα µε τησειράάφιξηςτων στοιχείων και τον τρόπο δηµιουργίας του δέντρου BST, γιαταίδιαστοιχεία δεν προκύπτει πάντα το ίδιο δέντρο Το ύψος του δέντρου σχετίζεται µε το χρόνο αναζήτησης ενός στοιχείου µέσα στο δέντρο Ζύγισµα δέντρωνbst Αναζήτηση µε πολυπλοκότητα Από Ο(Ν) [χειρότερη περίπτωση] Μέχρι Ο(Log 2 N) [καλύτερη περίπτωση] 89

90 Ζύγισµα δέντρωνbst Προκειµένου µια αναζήτηση να διατρέχει όσο το δυνατόν µικρότερο µέρος του δέντρου, αυτό πρέπει να είναι «ζυγισµένο» «Ζυγισµένο»: το βάθος του αριστερού υποδέντρου δεν διαφέρει περισσότερο από 1 απόαυτότουδεξιού(ιδανικά: είναι ίσα) Αν κατά την προσθήκη νέων στοιχείων στο δέντρο η ζυγαριά «γείρει» δεξιά ή αριστερά, απαιτείται διόρθωση του δέντρου Παραδείγµατα ζυγισµένων δέντρων

91 Ζυγισµένα δέντρα Η περίπτωση όπου το ύψος του αριστερού υποδέντρου είναι ακριβώς ίσο µε το ύψος του δεξιού, δεν επιτυγχάνεται εύκολα Αν από την παραπάνω περίπτωση υπήρχαν «µικρές» αποκλίσεις, οι επιδόσεις του δέντρου στην αναζήτηση δεν θα επηρεάζονταν ιδιαίτερα έντρα AVL Ενα δέντρο AVL (Adelson-Velskii and Landis) είναι ένα δέντρο BST του οποίου το ύψος του αριστερού υποδέντρου διαφέρει από αυτό του δεξιού το πολύ κατά 1 Το δεξί και αριστερό υποδέντρο ενός δέντρου AVL είναι επίσης δέντρα AVL Το κενό δέντρο είναι δέντρο AVL Οι ιδιότητες αυτές διατηρούνται µε παρεµβάσεις (αναδιάταξη) καθώς νέα στοιχεία προστίθενται στο δέντρο 91

92 έντρα AVL έντρα AVL Ενα δέντρο AVL λέγεται «ψηλό από αριστερά» όταν το ύψος του αριστερού υποδέντρου είναι µεγαλύτερο από αυτό του δεξιού (κατά πόσο;;;) Αντίστοιχα για το «ψηλό από δεξιά» Υπάρχουν αρκετοί τρόποι µε τους οποίους η προσθήκη ή η διαγραφή στοιχείων σε ένα δέντρο AVL παραβιάζει τη συνθήκη χαρακτηρισµού του 92

93 Αναδιάταξη δέντρων AVL Η χαρακτηριστική ιδιότητα ενός δέντρου AVL µπορεί να παύει να ισχύει µε την προσθήκη νέων στοιχείων Η επαναφορά της ιδιότητας σε ισχύ, γίνεται µε περιστροφή του δέντρου, ανάλογα µε την περίπτωση αναδιάταξης που συντρέχει Απλή περιστροφή k2 k1 k1 k2 Z h X X Y New Item Y Z New item 93

94 ιπλή περιστροφή (α) k3 k2 k1 k1 k3 k2 D h A A B C D B C ιπλή περιστροφή (β) k3 k3 k1 k2 A k2 D k1 C D B C A B 94

95 ιπλή περιστροφή (γ) k2 k3 D k2 k1 C k1 k3 A B A B C D Αναδιάταξη δέντρων AVL Περιπτώσεις αναδιάταξης ΑΑ: ένα αριστερό υποδέντρο ενός δέντρου AVL που είναι ψηλό από αριστερά, γίνεται επίσης ψηλό από αριστερά (left of left) : τα αντίστοιχα για το δεξί υποδέντρο (right of right) Α: ένα υποδέντρο ενός δέντρου AVL ψηλού από αριστερά, γίνεται ψηλό από δεξιά (right of left) Α : ένα υποδέντρο ενός δέντρου AVL ψηλού από δεξιά, γίνεται ψηλό από αριστερά (left of right) 95

96 Περιπτώσεις αναδιάταξης (α) Περιπτώσεις αναδιάταξης (β) 96

97 Αναδιάταξη σε περίπτωση ΑΑ Αναδιάταξη σε περίπτωση 97

98 Αναδιάταξη σε περίπτωση Α Αναδιάταξη σε περίπτωση Α 98

99 Υλοποίηση δέντρων AVL στη C Μια δοµή δεδοµένων Node key <keytype> data <datatype> left <pointer to Node> right <pointer to Node> bal <LeftH, EvenH, RightH> End Node Εισαγωγή σε δέντρα AVL H εισαγωγή νέων στοιχείων γίνεται στα φύλλα, όπως στα δέντρα BST Εντοπίζεται το φύλλο στο οποίο θα γίνει ηεισαγωγήκαιδηµιουργείται νέος κόµβος Γίνεται οπισθοδρόµηση µέχρι την κορυφή του δέντρου, µε έλεγχοτης ισχύοςτηςσυνθήκηςισορροπίαςavl σε κάθε βήµα προςταπίσω, και επαναφορά σε ισορροπία, όπου απαιτείται 99

100 Εισαγωγή σε δέντρα AVL ιάγραµµα κλήσης µιας αναδροµικής συνάρτησης εισαγωγής ΑΛΓΟΡΙΘΜΟΣ AVLInsert( ref root <tree pointer>, val newptr <tree pointer>, ref taller <Boolean>) 1 if (root null) 1 root = newptr 2 taller = true 3 return root 2 end if 3 if (newptr->key < root->key) 1 root->left = AVLInsert (root->left, newptr, taller) 2 if (taller) // Left subtree is taller 1 if (root left-high) 1 root = leftbalance (root, taller) 2 elseif (root even-high) 1 root->bal = left-high 3 else //Was right high -- now even high 1 root->bal = even-high 2 taller = false 4 end if 4 else // New data >= root data 100

101 (Συνέχεια) AVLInsert( ref root <tree pointer>, val newptr <tree pointer>, ref taller <Boolean>)... 4 else // New data >= root data 1 root-> right = AVLInsert (root->right, newptr, taller) 2 if (taller) // Right subtree is taller 1 if (root left-high) 1 root->bal = even-high 2 taller = false 2 elseif (root even-high) // Was balanced -- now right high 1 root->bal = right-high 3 else 1 root = rightbalance (root, taller) 4 end if 3 end if 5 end if 6 return root end AVLInsert ΑΛΓΟΡΙΘΜΟΣ leftbalance (ref root <tree pointer>, ref taller <Boolean>) 1 lefttree = root-> left 2 if (lefttree left-high) // Case 1: Left of left. Single rotation right. 1 rotateright (root) 2 root->bal = even-high 3 lefttree->bal = even-high 4 taller = false 3 else // Case 2: Right of left. Double rotation required. 1 righttree = lefttree->right // adjust balance factors 2 if (righttree->bal left-high) 1 root->bal = right-high 2 lefttree->bal = even-high 3 elseif (righttree->bal = even-high) 1 lefttree->bal = even-high 4 else 101

102 (Συνέχεια) leftbalance (ref root <tree pointer>, ref taller <Boolean>) 4 else // righttree->bal is right-high 1 root->bal = even-high 2 lefttree->bal = left-high 5 end if 6 righttree->bal = even-high 7 root->left = rotateleft (lefttree) 8 root = rotateright (root) 9 taller = false 4 end if 5 return root end leftbalance 102

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

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

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

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Υλικό από τις σηµειώσεις Ν. Παπασπύρου, 2006 Δέντρα δυαδικής αναζήτησης Δενδρικές δοµές δεδοµένων στις οποίες Όλα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι

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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #4

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

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

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

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

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

Η ιστορία της C. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world!

Η ιστορία της C. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world! ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) (nickie@softlab.ntua.gr) Βασίλης Βεσκούκης (bxb@cs.ntua.gr) Πέτρος Στεφανέας

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

DRAFT ιαφάνειες παρουσιάσεων

DRAFT ιαφάνειες παρουσιάσεων ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) (nickie@softlab.ntua.gr) Βασίλης Βεσκούκης (bxb@cs.ntua.gr) DRAFT ιαφάνειες

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

Χαρακτηριστικά της C

Χαρακτηριστικά της C ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://courses.softlab.ntua.gr/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) (nickie@softlab.ntua.gr) Βασίλης Βεσκούκης (bxb@cs.ntua.gr) ιαφάνειες παρουσιάσεων

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

Ηιστορία της C. ιαφάνειες παρουσιάσεων. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world!

Ηιστορία της C. ιαφάνειες παρουσιάσεων. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world! ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://courses.softlab.ntua.gr/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) (nickie@softlab.ntua.gr) Βασίλης Βεσκούκης (bxb@cs.ntua.gr) ιαφάνειες παρουσιάσεων

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

Αλγόριθμοι. Χρυσόστομος Στύλιος. Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής. Δομές Δεδομένων & Αλγόριθμοι 1

Αλγόριθμοι. Χρυσόστομος Στύλιος. Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής. Δομές Δεδομένων & Αλγόριθμοι 1 Αλγόριθμοι Χρυσόστομος Στύλιος stylios@teiep.gr Πληροφορικής Αλγόριθμοι 1 Εργασία Αντικείμενο: υλοποίηση αλγορίθμων και δομών δεδομένων σε 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

#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 πίνακας

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

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

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

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

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

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

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

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

Δομές Δεδομένων & Αλγόριθμοι - Πίνακες 1 Πίνακες Οι πίνακες έχουν σταθερό μέγεθος και τύπο δεδομένων. Βασικά πλεονεκτήματά τους είναι η απλότητα προγραμματισμού τους και η ταχύτητα. Ωστόσο δεν παρέχουν την ευελιξία η οποία απαιτείται

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

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

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

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

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

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

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #11

ιαφάνειες παρουσίασης #11 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

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

AVL-trees C++ implementation

AVL-trees C++ implementation Τ Μ Η Μ Α Μ Η Χ Α Ν Ι Κ Ω Ν Η / Υ Κ Α Ι Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ AVL-trees C++ implementation Δομές Δεδομένων Μάριος Κενδέα 31 Μαρτίου 2015 kendea@ceid.upatras.gr Εισαγωγή (1/3) Δυαδικά Δένδρα Αναζήτησης:

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

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

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

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

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

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

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

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης Γλώσσες Προγραμματισμού Εργαστήριο 2ο Τύποι Δεδομένων - Είσοδος / Έξοδος Εργαστήριο 2ο Περίγραμμα Εργαστηριακής Άσκησης Εργαστήριο 2ο...1 Θεωρία εργαστηρίου...2 Τύποι δεδομένων...2 Η συνάρτηση printf()...3

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

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

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

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

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

Τύποι Δεδομένων Είσοδος/Έξοδος

Τύποι Δεδομένων Είσοδος/Έξοδος Εργαστήριο 2 ο Τύποι Δεδομένων Είσοδος/Έξοδος Εισαγωγή Σκοπός του εργαστηρίου αυτού είναι η εισαγωγή μας στους τύπους δεδομένων της C και η εξοικείωση μας με συναρτήσεις του ρεπερτορίου της ANSI C σχετικές

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

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33 ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος του συγγραφέα... 13 Πρόλογος του καθηγητή Τιμολέοντα Σελλή... 15 ΚΕΦΑΛΑΙΟ 1: Εργαλεία γλωσσών προγραμματισμού...17 1.1 Γλώσσες προγραμματισμού τρίτης γεννεάς... 18 τι είναι η γλώσσα

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Συναρτήσεις εισόδου/εξόδου, τελεστές Η συνάρτηση scanf() είσοδος δεδομένων Διαβάζει από το πληκτρολόγιο (stdin) μορφοποιημένες τιμές μεταβλητών. scanf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, δείκτης_μεταβλητής-1,

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

Επανάληψη για τις Τελικές εξετάσεις Επανάληψη για τις Τελικές εξετάσεις ( ιάλεξη 21) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Εισαγωγή Το µάθηµα EPL032 έχει ως βασικό στόχο την επίλυση προβληµάτων πληροφορικής µε την χρήση της γλώσσας προγραµµατισµού

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

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

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

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

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

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

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

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

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

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 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 Το αποτέλεσµα είναι η αντιστοιχία των

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράµµατα «γράφονται» χρησιµοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαµβάνει

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

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

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2 Εισαγωγή στην C Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Σύνταξη και Σηµασιολογία της C Σχολιασµός Μεταβλητές / Σταθερές Τύποι εδοµένων και Τελεστές Βιβλίο µαθήµατος: Chapter 2,, Sec.

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Αριθμητική Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Δεύτερο Πρόγραμμα 1 / * Second Simple Program : add 2 numbers * / 2

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

Η Γλώσσα C Μία Σφαιρική Ανασκόπηση

Η Γλώσσα C Μία Σφαιρική Ανασκόπηση Η Γλώσσα C Μία Σφαιρική Ανασκόπηση Η γλώσσα C αναπτύχθηκε το 1972 από τον Dennis Ritchie στα ΑΤ & Τ Laboratories. Οδηγίες προς τον προεπεξεργαστή Εισδοχή Βιβλιοθηκών #include #include

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( ) Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 23 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 2ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος I/O 24 Βασική βιβλιοθήκη συναρτήσεων εισόδου/εξόδου #include Η συνάρτηση εξόδου printf printf("συμβολοσειρά

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C: (Διαλέξεις 3-4)

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C: (Διαλέξεις 3-4) Κεφάλαιο 2.1-2.4: Εισαγωγή στην C (Διαλέξεις 3-4) Περιεχόμενα Εισαγωγή στην C: Σύνταξη και Σημασιολογία σχόλια μεταβλητές και σταθερές τύποι δεδομένων Μετά αυτές τις δυο διαλέξεις θα μπορείτε να γράψετε

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

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

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

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

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

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα Η ΓΛΩΣΣΑ C Η C είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε στις αρχές της δεκαετίας του 70 από τον Dennis Ritchie στα Bell Labs. Η σημερινή μορφή της γλώσσας ακολουθεί το πρότυπο

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

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

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

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

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

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

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

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

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

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

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

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

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

Επεξεργασία Αρχείων Κειµένου

Επεξεργασία Αρχείων Κειµένου Επεξεργασία Αρχείων Κειµένου Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αρχεία Κειµένου Γενικά Συναρτήσεις Επεξεργασίας Αρχείων Κειµένου ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Αρχεία Γενικά

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

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

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή Απλές Δοµές Δεδοµένων Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23 Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική

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

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις Ενώσεις δεδομένων (union) τι και γιατί Συσκευές με μικρή μνήμη => ανάγκη εξοικονόμησης πόρων Παρατήρηση: αχρησιμοποίητη μνήμη. Έστω

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

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

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

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Η ΓΛΩΣΣΑ PASCAL ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Απλοί ή στοιχειώδης Τ.Δ. Ακέραιος τύπος Πραγματικός τύπος Λογικός τύπος Χαρακτήρας Σύνθετοι Τ.Δ. Αλφαριθμητικός 1. Ακέραιος (integer) Εύρος: -32768 έως 32767 Δήλωση

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

Γεώργιος Δημητρίου Προσαρμογή Εισαγωγικού Μαθήματος από Prof. Stephen A. Edwards (Columbia University)

Γεώργιος Δημητρίου Προσαρμογή Εισαγωγικού Μαθήματος από Prof. Stephen A. Edwards (Columbia University) Η γλώσσα C Γεώργιος Δημητρίου Προσαρμογή Εισαγωγικού Μαθήματος από Prof. Stephen A. Edwards (Columbia University) Η γλώσσα C Σήμερα η πιο διαδεδομένη γλώσσα προγραμματισμού για ενσωματωμένα συστήματα Συμβολική

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

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 2.1-2.4: Εισαγωγή στην C ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγή στην C: Σύνταξη και Σηµασιολογία σχόλια µεταβλητές και σταθερές τύποι δεδοµένων Μετά αυτές τις δυο διαλέξεις

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

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

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

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V Γράφοι Ορολογία γράφος ή γράφηµα (graph) Ορισµός: G = (V, E) όπου V:ένα σύνολο E:µια διµελής σχέση στο V Ορολογία (συνέχεια) κάθε v V ονοµάζεται κορυφή (vertex) ή κόµβος (node) κάθε (v 1, v 2 ) Ε ονοµάζεται

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C) Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr

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

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

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

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

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

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13) Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις Επανάληψη για την ενδιάμεση εξέταση (Διάλεξη 13) 13-1 Πρόβλημα 1 Γράψετε τον ορισμό μίας συνάρτησης η οποία υπολογίζει το μέγιστο 2 ακεραίων αριθμών και

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

Επανάληψη. Εντολές while, for, do-while

Επανάληψη. Εντολές while, for, do-while Επανάληψη Εντολές while, for, do-while Απροσδιόριστη Επανάληψη ή Επανάληψη υπό συνθήκη (while, do-while) Απαριθµητή Επανάληψη (for) Εντολή while while (συνθήκη) εντολή C? ναι όχι S Σηµασιολογία Εάν από

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

4 C Θεωρία και Πράξη. 6.8 Συναρτήσεις και στατικές μεταβλητές Αναδρομικές συναρτήσεις 119

4 C Θεωρία και Πράξη. 6.8 Συναρτήσεις και στατικές μεταβλητές Αναδρομικές συναρτήσεις 119 Προλεγόμενα 9 1 Εισαγωγή 15 1.1 Χαρακτηριστικά της γλώσσας 15 1.2 Διαδικασία προγραμματισμού υπό το Unix 17 1.3 Προγραμματίζοντας στην C 19 2 Υπολογιστική 23 2.1 Μεταβλητές και σταθερές 23 2.2 Τύποι δεδομένων

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

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

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

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

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

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Τελεστές - Κατηγορίες Εκφράσεις - Κατηγορίες Υπολογισμός εκφράσεων Προτάσεις - Κατηγορίες

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

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

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

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

Ι Ανασκόπηση και εμβάθυνση Μερικά πιο προχωρημένα θέματα. ΙΙ Τα αρχεία δεδομένων στη C

Ι Ανασκόπηση και εμβάθυνση Μερικά πιο προχωρημένα θέματα. ΙΙ Τα αρχεία δεδομένων στη C Ι Ανασκόπηση και εμβάθυνση Μερικά πιο προχωρημένα θέματα ΙΙ Τα αρχεία δεδομένων στη C Τελεστές αύξησης/μείωσης (++, --) Λειτουργία βάσει θέσης: ++x διάφορο του x++!!! Παράδειγμα 1 (postfix): Ισοδυναμεί

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

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C Τεχνολογία και Προγραμματισμός Υπολογιστών Η γλώσσα προγραμματισμού C Με μια ματιά Τύπος Πίνακα Μεταβλητές με ενδείκτη Αλφαριθμητικά - Πίνακες Δισδιάστατος Πολυδιάστατος Πίνακας 2 2 Τύπος Πίνακα Σύνθετος

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

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

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

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

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

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

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

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

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

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Εκφράσεις και Λίγες Εντολές Οι εκφράσεις της C Τελεστές Απλές και σύνθετες εντολές Εντολές ελέγχου (επιλογής) Εισαγωγή σε

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

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 6. Δυαδικά Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 18/11/2016 Εισαγωγή Τα

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

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

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

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

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

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

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