4-23: Προγραμματισμός σε C. Εισαγωγή. Εισαγωγικά. Εισαγωγικά

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

Download "4-23: Προγραμματισμός σε C. Εισαγωγή. Εισαγωγικά. Εισαγωγικά"

Transcript

1 Εισαγωγή 1 Εισαγωγικά Πρόγραμμα = {δεδομένα + {συναρτήσεις Συναρτήσεις = {main, Δεδομένα = {μεταβλητές, σταθερές Σταθερές = ποσότητες που δεν μεταβάλλονται κατά την εκτέλεση του προγράμματος Π.χ. Pi = 3.14 Μεταβλητές = ποσότητες που μεταβάλλονται Ι/Ο, υπολογισμοί 2 Εισαγωγικά Τα δεδομένα αποθηκεύονται στη μνήμη του υπολογιστή Δηλώνοντας μια μεταβλητή, δεσμεύω θέσεις στη μνήμη και καθορίζω ένα όνομα που χρησιμοποιώ για να αναφερθώ σε αυτή τη θέση μνήμης π.χ. int const n = 10; int a; 3 1

2 Εισαγωγικά Και οι εντολές αποθηκεύονται στη μνήμη του υπολογιστή Ι1 = πρόσθεσε την τιμή της μεταβλητής a με αυτή της b πρόσθεσε τα περιεχόμενα της θέσης 100 στα περιεχόμενα της θέσης 104 I1 I2 I3 Εντολές a b εδομένα 4 Μεταβλητές & τύποι δεδομένων Κάθε μεταβλητή, ή σταθερά έχει ένα τύπο Ο τύπος καθορίζει το μέγεθος του «κουτιού» που θα δεσμευτεί στη μνήμη char: 1 byte int: 4 bytes float: 4 bytes double: 8 bytes Προσδιοριστές short int: 2 bytes long int: 8 bytes long double:.. bytes 5 Μεταβλητές & τύποι δεδομένων Προσδιοριστές: unsigned unsigned int, unsigned char 32 bits, 8 bits , int, char 31 bits, 7 bits , Δυαδικοί αριθμοί (unsigned) = 2 2 = = Με πρόσημο η μεγαλύτερη δύναμη που μπορώ να έχω είναι η

3 Χαρακτήρες Όλα τα δεδομένα σε ένα υπολογιστή κωδικοποιούνται σαν ακολουθίες 0,1 Ένας χαρακτήρας κωδικοποιείται σαν ακολουθία 0, 1 Άρα στην ουσία ο υπολογιστής τον αντιλαμβάνεται σαν ένα αριθμό Ο χαρακτήρας '0' αντιστοιχεί στον αριθμό 48 char ch = 'x'; Λέγοντας ch = 'x' είναι σαν να λέμε: βάλε στη μεταβλητή ch την τιμή (αριθμό) που αντιστοιχεί στο χαρακτήρα 'x' ch++; ASCII 7 Παράδειγμα με printf int main() { char ch ='x'; x; printf("ch = %d, ch = %c\n", ch, ch); return 0; 8 Τελεστές Αριθμητικοί τελεστές +, -, *, /, % (το τελευταίο μόνο για int, long) Συγκριτικοί τελεστές >, <, <=, >=, ==,!= Λογικοί τελεστές &&,,! 9 3

4 Μετατροπές Γενικά μπορούμε να κάνουμε πράξεις με μεταβλητές διαφορετικού τύπου int x; float f; f = f+x; Αυτό που γίνεται είναι μετατροπή των κατώτερων τύπων σε ανώτερους Και το αποτέλεσμα ανώτερου τύπου Τέτοιες μετατροπές γίνονται αυτόματα αλλά μπορούμε να τις ζητήσουμε και εμείς σε ένα πρόγραμμα με το μηχανισμό casting f + i f + (float) i Χρειάζεται κυρίως σε ρουτίνες με τύπο επιστροφής void * π.χ. void *malloc(int size); 10 Τελεστές Τελεστές σύντμησης: ++, --, +=, -=, *=, /= Παράδειγμα ++i και i++ i=i+1 και i+=1 Παράδειγμα i = 3; x = ++i; /* πρώτα γίνεται η αύξηση και μετα η αποτίμηση της εκφρασης */ x = i++; /* πρώτα γίνεται η αποτίμηση της εκφρασης και μετα η αύξηση */ 11 Συνθήκες και εκφράσεις μεταβλητή = συνθήκη? παρ1 : παρ2 Η εκτέλεση ισοδυναμεί με: if (συνθήκη) μεταβλητή = παρ1 else μεταβλητή = παρ2 Παράδειγμα: x = (y > 0)? 1:

5 Εντολές ελέγχου if, for, while, switch break: στη switch και σε loops, exiting the loop continue: σε loops, συνεχίζει στο επόμενο loop if (condition) { statement; else{ statement; while (condition) { statement; 13 Εντολές ελέγχου for (initialization; condition; iteration) { statement; switch (variable) { case const1: statement; tt t break; case const2: default: statement; break; 14 Συναρτήσεις 15 5

6 Συναρτήσεις (Γενικά) Ένα πρόγραμμα = εντολές που επεξεργάζονται δεδομένα πολλές φορές οι ίδιες ακολουθίες εντολών χρησιμοποιούνται για διαφορετικά δεδομένα π.χ. υπολογισμός δύναμης για διαφορετικές μεταβλητές του προγράμματος ταξινόμηση δύο ή περισσότερων πινάκων, κλπ Για καλύτερα προγράμματα μπορώ να φτιάξω μια «σύνθετη» εντολή μια συνάρτηση που ομαδοποιεί τις επαναλαμβανόμενες ακολουθίες εντολών που τις αντικαθιστώ με τη συνάρτηση καθορίζοντας τα δεδομένα στα οποία θα εφαρμοστεί 16 main: int x, y, n, k;. res =.. /* g εντολές υπολογισμού του x^k*/. res =.. /* g εντολές υπολογισμού του y^n*/.. main: int x, y, n, k;. res = power(x, k); /*κάνε τις εντολές της σύνθετης εντολής για τα x, k */.... res = power(y, n); int power(int a, int b): /* g εντολές υπολογισμού του a^b*/ 2*g εντολές 2+ g εντολές 17 Πώς; Ι) Πρωτότυπο = πρώιμη δήλωση (forward declaration) <Τύπος επιστροφής> όνομα (<τύπος παραμέτρου> παράμετρος, ); ΙΙ) Δήλωση και Υλοποίηση <πρωτότυπο> { (I) χωρίς ';' // κώδικας return (<μεταβλητή>); (II') Η return: σταματάει το υποπρόγραμμα και επιστρέφει ένα αποτέλεσμα. Τι σημαίνει επιστρέφει ένα αποτέλεσμα? Αν έχω στη main() : εκτέλεσε τη σύνθετη εντολή power για τα 2, 4 τότε ό,τι τιμή γίνεται return αποθηκεύεται σε μια προσωρινή θέση μνήμης tmp. res = power(2, 4) res = tmp όπου στο tmp έχει μπει το 2^4, δηλ. το 16 Αν η συνάρτηση είναι τύπου void τότε έχουμε σκέτο return; 18 6

7 Πώς; ΙII) Κλήση Μέσα στο πρόγραμμα εκτέλεσε τη σύνθετης εντολή power για τα 2, 4 Πώς: <όνομα> (τιμές ή μεταβλητές για πραγματικές παραμέτρους) 19 int power(int base, int n); int int x, y, k, n, res; x = 2; y=3; k=4; n=2; res = power (x, k); printf("%d \n", res); res = power (y, n); printf("%d \n", res); return 0; /* για κάθε base, n υπολογιζει το base^n */ int power(int base, int n) { int i, p; p =1; for (i =1; i <=n; i++) p = p*base; return p; [Ι] [III] [III] [ΙΙ] [II'] 20 Τι κάνει το πρόγραμμα; Το loop στη main πόσες φορές εκτελείται; Ποια δύναμη του 2 υπολογίζει; Τι είναι συνάρτηση; Α = f(x, y) = x y N NxN 21 7

8 Πόσες συναρτήσεις χρησιμοποιούμε στο συγκεκριμένο πρόγραμμα; power main printf Τι είναι το #include? Τι κερδίζω; Reusability Readability Debugging 22 int power(int base, int n) { int i, p; p =1; for (i =1; i <=n; i++) p = p*base; return p; Πως θα το άλλαζα για να ελέγχει αν το n είναι θετικός; if (n < 0) { return (-1); 23 Πέρασμα Παραμέτρων Οι μεταβλητές βασικού τύπου περνιούνται ως παράμετροι σε μια συνάρτηση δια τιμής (by value). δηλαδή αντιγράφονται οι τιμές τους σε τοπικές μεταβλητές της συνάρτησης. όποιες αλλαγές γίνουν σε αυτές τις τιμές των μεταβλητών στο εσωτερικό της συνάρτησης δεν είναι εμφανείς στο κομμάτι του προγράμματος στο οποίο έγινε η κλήση της συνάρτησης. Αν θέλουμε να ξεπεράσουμε τον παραπάνω περιορισμό, δηλ. ότι αλλαγές γίνουν στις τιμές των μεταβλητών στο εσωτερικό της συνάρτησης να είναι εμφανείς στο κομμάτι του προγράμματος στο οποίο έγινε η κλήση της συνάρτησης, μπορούμε να περάσουμε τις διευθύνσεις των θέσεων μνήμης που έχουν δεσμευθεί για τις μεταβλητές, να κάνουμε όπως λέμε πέρασμα δι' αναφοράς (με χρήση παραμέτρων τύπου pointer). Οι παράμετροι τύπου πίνακα περνιούνται δι' αναφοράς (by reference). όποιες αλλαγές γίνουν στα στοιχεία του πίνακα είναι εμφανείς στο κομμάτι του προγράμματος στο οποίο έγινε η κλήση της συνάρτησης. 24 8

9 void swap (int x, int y); int a,b; a = 6; b = 7; swap(a, b); printf("%d %d\n", a, b); return 0; void swap (int x, int y) { int temp; temp = x; x = y; y = temp; return; swap void swap (int *x1, int *x2); int a,b; a = 6; b = 7; swap(&a, &b); printf("%d %d\n",a,b); return 0; void swap (int *x1, int *x2) { int temp; temp = *x1; *x1 = *x2; *x2 = temp; return; 25 int f(int x); int int res, y; y = 10; res = f(y); return 0; Πέρασμα by value int f(int x) { int y1; x = x + 1; y1 = 2*x; return y; 26 Παράδειγμα πέρασμα by reference με πίνακα void f(int a[]); int i; int x[] = {1, 2; f(x, 2); for (i = 0; i < 2; i++) printf("%d\n", x[i]); void f(int k[], int size) { int i; for (i = 0; i < size; i++) k[i] = k[i]*2; return; Τμήμα Πληροφορικής X[0] X[1] 1 2 4bytes 4bytes By reference By value 27 9

10 stack Για κάθε κλήση συνάρτησης έχω ένα κομμάτι μνήμης αφιερωμένο σε αυτή Δεσμεύεται αυτόματα κατά την είσοδο στη συνάρτηση και αποδεσμεύεται επίσης αυτόματα κατά την έξοδο από αυτή Η χώρος μνήμης που χρησιμοποιείται για το σκοπό αυτό καλείται stack (στοίβα) Το συγκεκριμένο κομμάτι μνήμης για μια συνάρτηση καλείται stack frame Στη μνήμη αυτή (stack frame) δεσμεύονται οι τοπικές μεταβλητές μιας συνάρτησης 28 Εμβέλεια μεταβλητών Τι είναι: Η εμβέλεια του ονόματος μιας μεταβλητής είναι το τμήμα του προγράμματος στο οποίο η μεταβλητή μπορεί να χρησιμοποιηθεί Εμβέλεια τοπικών μεταβλητών δηλώνονται στην αρχή κάθε συνάρτησης και μπορούν να χρησιμοποιηθούν στο block αυτό!! Εμβέλεια καθολικών μεταβλητών από εκεί που δηλώθηκαν μέχρι τέλος αρχείου 29 ιάρκεια Το χρονικό διάστημα για το οποίο δεσμεύεται μνήμη για τις μεταβλητές. Τοπικές μεταβλητές: ως την ολοκλήρωση της συνάρτησης στην οποία είναι ορισμένες Καθολικές: ως την ολοκλήρωση της εκτέλεσης του προγράμματος 30 10

11 int g1, g2; main () { int i, j; i++; g1++; f(); g(); main f g διάρκεια void f() { int i, j; i++; j++; εμβέλεια void g() { int i, j; int g2; i++; g2++; 31 Static μεταβλητές void f(); int f(); f(); void f() { static int x = 1; printf("%d\n", x); x++; 32 Αρχικοποίηση Αρχικοποίηση με τη δήλωση Τοπικές garbage Global 0 Πίνακες: int a[] = {1, 2,.; With size: More than size Error! Less than size garbage or 0 to the rest Without size: compiler calculates this char txt[] = {'A', 'l', 'a', 'l', 'a', '\0'; char txt[] = "Alala"; 33 11

12 scope.c int number; int f(int); int y = 4; number = 1; number = f(number); y=2*number; printf("%d %d\n", number, y); int f(int x) { int y = 0; y = y + x*2 + number; return (y); 34 myscope.h #ifndef MY_SCOPE_H #define MY_SCOPE_H #define SCALE 2 int number; int mynumber; int f(int); #endif fc f.c #include "myscope.h" int f(int x) { int y; extern int mynumber; mynumber = 4; y = x*scale+mynumber; return (y); scope.c #include "myscope.h" extern int number; extern int f(int a); number = 1; number = f(number); printf("%d\n", number); Makefile scope: scope.o f.o myscope.h gcc o scope scope.o f.o f.o: f.c myscope.h gcc c f.c scope.o: scope.c myscope.h gcc c scope.c 35 Πολλά αρχεία Χρήση συναρτήσεων από το ένα στο άλλο Δήλωση prototype Εναλλακτικά, δημιουργία include με prototypes Γενικός ρόλος που παίζουν τα include? Πως τα κάνω compile? Όλα μαζί: gcc *.c Με χρήση Makefile γιατί κάνει trace τι έχει αλλάξει 36 12

13 Makefile scope: scope.o f.o myscope.h gcc o scope scope.o f.o f.o: f.c myscope.h gcc c f.c scope.o: scope.c myscope.h gcc c scope.c Για κάθε αρχείο : gcc c x.c scope.c.c.c.o Prepro Compiler Αρχεία.ο αντικαθιστά #include και #define άλλα αρχεία.ο gcc o scope.exe scope.ο f.o.o a.out Linker 37 void swap (int x, int y); int a,b; a = 6; b = 7; swap(a, b); printf("%d %d\n", a, b); return 0; void swap (int x, int y) { int temp; temp = x; x = y; y = temp; return; swap (λάθος) swap(&a, &b); void swap (int *x1, int *x2) { temp = *x1; *x1 = *x2; *x2 = temp; 38 void swap (int x, int y); int a,b; a = 6; b = 7; swap(a, b); printf("%d %d\n", a, b); return 0; void swap (int x, int y) { int temp; temp = x; x = y; y = temp; return; swap void swap (int *x1, int *x2); int a,b; a = 6; b = 7; swap(&a, &b); printf("%d %d\n",a,b); return 0; void swap (int *x1, int *x2) { int temp; temp = *x1; *x1 = *x2; *x2 = temp; return; 39 13

14 swap (σωστό) void swap (int *x1, int *x2); int a,b; a = 6; b = 7; swap(&a, &b); printf("%d %d\n", a, b); return 0; void swap (int *x1, int *x2) { int temp; temp = *x1; *x1 = *x2; *x2 = temp; return; Όπως θα αναλύσουμε εις βάθος στη συνέχεια: &a είναι η διεύθυνση της μεταβλητής a *x1 είναι το περιεχόμενο της διεύθυνσης μνήμης στην οποία δείχνει ο x1 40 είκτες 41 είκτες - Pointers Δείκτης: τι είναι; Μια μεταβλητή που περιέχει τη διεύθυνση μιας άλλης μεταβλητής Μεταβλητή p int c = 10; int *p; Μεταβλητή c ιευθύνσεις μνήμης p = &c; *p : προσπέλαση του αντικειμένου που δείχνει ο δείκτης p

15 είκτες - Pointers Τα περιεχόμενα του κουτιού στο οποίο δείχνει ο δείκτης p *p Τα περιεχόμενα του p η διεύθυνση του κουτιού Η διεύθυνση στην οποία βρίσκεται ο c &c Μεταβλητή p int c = 10; int *p; Μεταβλητή c p = &c; *p : προσπέλαση του αντικειμένου που δείχνει ο δείκτης p. ιευθύνσεις μνήμης 43 ηλώσεις Δήλωση μεταβλητής: <type> *<name>; Παράδειγμα int x, y; int *p; y = 3; p = &y; x = *p + 1; Προσοχή: η έκφραση a*b δεν περιλαμβάνει δείκτη! 44 Αρχικοποίηση δεικτών Σωστή αρχικοποίηση int c; int *p; p = NULL; p = 0; p = &c; Λάθος p = 100; p = c; 45 15

16 είκτες και πέρασμα παραμέτρων Παραδείγματα: void foo (char *s); void bar (int *result); void *allocate(int size); Γιατί να περάσω δείκτη; Κλήση δια αναφοράς (call by reference) Αν θέλω δηλαδή να κάνω αλλαγές που να φαίνονται (στα πραγματικά δεδομένα-ορίσματα μιας συνάρτησης) Επίσης, αν θέλω να περάσω ως όρισμα μία μεγάλη δομή αποφεύγοντας τη χρονοβόρα αντιγραφή 46 Παραδείγματα Τι ακριβώς συμβαίνει στον παρακάτω κώδικα? Πώς απεικονίζεται στη μνήμη του υπολογιστή; int x = 1, y = 2, z[10]; int *ip, *iq; ip = &x; *ip = *ip + 1; y = *ip + x + 1; ip = &z[7]; iq = ip; 47 Eρωτήματα Τι μεταβλητή χρειάζομαι για να βάλω μέσα τη διεύθυνση ενός δείκτη; Τι ακριβώς κάνουν τα παρακάτω αν βρεθούν σε μια έκφραση; &x; *(&x); &(*x); 48 16

17 Πέρασμα παραμέτρων swap void swap (int x, int y); int a,b; a = 6; b = 7; swap(a, b); printf("%d %d\n", a, b); return 0; void swap (int x, int y) { int temp; temp = x; x = y; y = temp; return; 49 Πέρασμα παραμέτρων swap void swap (int x, int y); int a,b; a = 6; b = 7; swap(a, b); printf("%d %d\n",a,b); return 0; void swap (int x, int y) { int temp; temp = x; x = y; y = temp; return; swap(&a, &b); void swap (int *x1, int *x2) { temp = *x1; *x1 = *x2; *x2 = temp; 50 swap με δείκτες void swap (int *x1, int *x2); int a,b; a = 6; b = 7; swap(&a, &b); printf("%d %d\n", a, b); return 0; void swap (int *x1, int *x2) { int temp; temp = *x1; *x1 = *x2; *x2 = temp; return; 51 17

18 swap με δείκτες (αναλυτικά) void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; Τα a,b έχουν διευθύνσεις a b main () { int x = 10, y = 20; swap(&x, &y); x y swap με δείκτες εναλλακτική κλήση void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; main () { int x = 10, y = 20; int *px, *py; px = &x; py = &y; swap(px, py); 53 Παράδειγμα int max(int x, int y); int a, b, res; a = 5; b = 3; res = max(a, b); int max(int x, int y) { int res; if (x > y) res = x; else res = y; return res; void max(int x, int y, int *res); int a, b, res; a = 5; b = 3; max(a, b, &res); void max(int x, int y, int *res) { if (x > y) *res = x; else *res = x; return; 54 18

19 Παραδείγματα void init(int *x, int *y); int a, b; init(&a, &b); void init(int *x, int *y) { *x = 12; *y = 15; void initarr(int x[], int n); int a[10], n; initarr(a, 10); void initarr(int x[], int n) { int i; for (i = 0; i < n; i++) x[i] = i; 55 Παρατήρηση Δεν έχει νόημα μια συνάρτηση να επιστρέφει δείκτη που δείχνει τοπικά, δηλαδή τη διεύθυνση μιας τοπικής μεταβλητής: int *test1() { int i; return &i; Τι συμβαίνει στην παρακάτω περίπτωση; int *test2() { static int i; return &i; 56 είκτες και Πίνακες Παράδειγμα int *p; int a[10] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50; p = &a[0]; /* διεύθυνση 1 ου στοιχείου του πίνακα */ p = a; /* ισοδύναμο με το παραπάνω */ p[i] <=> a[i] Τι είναι η μεταβλητή a? Είναι ένας const δείκτης που αντιστοιχεί σε μια διεύθυνση a a[0] 10 a[1] 15 a[2] a[9] 57 19

20 Παράδειγμα main(){ int src[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10; int *p, *q; int n = 3; p = & src[0]; q = & src[2]; printf("%d %d\n", *p, p[0]); printf("%d %d\n", *q, q[0]); *(p+n) += 11; printf("%d\n", p[n]); /* */ *(q+n) += 11; printf("%d\n", q[n]); Συνεχίζεται Παράδειγμα main(){ int src[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10; int *p, *q; int n = 3;.. if (q > p) printf("%d\n", q - p); else printf("%d\n", p - q); p++; q+=2; /* */ printf("%d %d\n", *p, p[0]); printf("%d %d\n", *q, q[0]); 59 Αριθμητική δεικτών Μπορούμε να έχουμε εκφράσεις με δείκτες p < q Ποιος δείχνει πιο μπροστά και ποιος πιο πίσω? p + n Το κουτί που βρίσκεται n κουτιά πιο κάτω p n Το κουτί που βρίσκεται n κουτιά πιο πίσω p q Πόσο μακριά βρίσκονται (σε κουτάκια)? Άλλες δυνατές εκφράσεις p = p + m p += n Δεν δουλεύουν! p + q p*

21 είκτες και Πίνακες Παράδειγμα int *p; int a[10]; p = &a[0]; /* ή p = a; */ p++; /* διεύθυνση 2 ου στοιχείου του πίνακα */ Διάφορες εκφράσεις: p++, p--, p+i, p-i p++ : αναλόγως τι τύπου είναι προχωρά τόσα bytes 61 είκτες και Πίνακες Ισχύει: &a[i] a+i Αν έχω εκτελέσει την εντολή: p = a, τότε ισχύει: a[i] *(a+i) p[i] *(p+i) Δεν ισχύουν οι εκφράσεις: a++ και a = p, //παρά μόνο αν το a[] είναι παράμετρος σε μια συνάρτηση 62 Εκτύπωση διεύθυνσης Παράδειγμα int i = 5; int *ptr; ptr = &i; printf("&i = %p\n", &i); printf("ptr = %p\n", ptr); 63 21

22 είκτες και συμβολοσειρές char *amsg = "xxx"; char msg[] = "xxx"; msg = "yyyy"; /* δεν επιτρέπεται! */ amsg = "yyyy"; /* ok */ msg x msg[0] x msg[1] x msg[2] \0 msg[3] 64 str.c char buf[] = { hello ; char *ptr = geia sou ; char *ptr1 = file mou ; buf[2] = '$'; printf( %s\n, buf); ptr[2] = '%'; /* crash */ ptr = ptr1; printf( %s\n, ptr); ptr[2] = '#'; /* crash */ buf = ptr; /* compile error */ ptr = buf; ptr[2] = 'l'; printf( %s\n, ptr); ptr = "bonjour"; printf( %s\n, ptr); 65 Παραδείγματα void strcpy1 (char s[], char d[]); char x[30] = "abcdef"; char y[10]; strcpy1(x, y); printf("%s", y); void strcpy1 (char s[], char d[]) { int i; i = 0; while (s[i]!= '\0') { d[i] = s[i]; i++; d[i] = '\0'; 66 22

23 void strcpy1 (char *s, char *d); char x[30] = "abcdef"; char y[10]; strcpy1(x, y); printf("%s", y); void strcpy1 (char *s, char *d) { int i; i = 0; while (s[i]!= '\0') { d[i] = s[i]; i++; d[i] = '\0'; Παραδείγματα 67 Αντιγραφή Εναλλακτικά void strcpy2 (char *s, char *d); char x[30] = "abcdef"; char y[10]; strcpy2(x, y); printf("%s", y); void strcpy2 (char *s, char *d) { while (*s!= '\0') { *d = *s; s++; d++; *d = '\0'; 68 Αντιγραφή Εναλλακτικά void strcpy3 (char s[], char d[]) { int i = 0; while ((d[i] = s[i])!= '\0') i++; void strcpy4(char *s, char *d) { while ((*d = *s)!= '\0') { s++; d++; 69 23

24 Σύγκριση int strcmp1(char s1[], char s2[]) { int i; for (i = 0; s1[i] == s2[i]; i++) if (s1[i] == '\0') /* και τα δύο ίσα με \0 */ return 0; return s1[i] s2[i]; Η συνάρτηση επιστρέφει: 0 αν ΙΣΑ, < 0 αν s1 < s2, > 0 αν s1 > s2. Παράδειγμα: s1 "abc", s2 "abcd" 70 Σύγκριση - Εναλλακτικά int strcmp2(char *s1, char *s2) { for (; *s1 == *s2; s1++, s2++) if (*s1 == '\0') return 0; return *s1 *s2; char A[N], B[N]; strcmp1(a, B); 71 int strlen1(char s[]) { int i = 0; while (s[i]!= '\0') i++; return i; Μήκος int strlen2(char *s) { char *p = s; while (*p!= '\0') p++; /* προχωράει 1 byte */ return p-s ; 72 24

25 Πίνακες εικτών Τι είναι; Πίνακας που περιέχει δείκτες Πώς δηλώνεται; <type> *<name> [size]; Πώς αρχικοποιείται; int A[10]; int B[20]; int *C[2] = {A, B; Αντί για πίνακα 2 διαστάσεων χρησιμοποιώ πίνακα δεικτών Οικονομία μνήμης όταν η 2 η διάσταση μεταβάλλεται Όταν η 2 η διάσταση είναι άγνωστη 73 Παραδείγματα Πίνακας με strings μεταβλητού μεγέθους char *months[12]={"january","february","march",..; 74 Παράδειγμα char *get_month(int i) { static char *months[12] = {" ", " ", ; return (i < 12 && i>=0)? months[i]: NULL; Τι είναι η τιμή NULL που μπορεί να επιστρέψει η συνάρτηση? Τι θα συμβεί αν βγάλω το static; 75 25

26 Οικονομία μνήμης Έστω ότι θέλω να δημιουργήσω ένα ημερολόγιο και για κάθε μέρα αποθηκεύω τον αριθμό των ραντεβού. Πώς θα το κάνω? int calendar[12][31]; /* μήνες, ημέρες */ Οικονομία μνήμης Ημερολόγιο με πίνακα δεικτών int *calendar[12]; 0 /* μήνες */ Πώς δημιουργώ τους πίνακες των ημερών; 77 υναμική έσμευση Μνήμης 78 26

27 υναμική δέσμευση μνήμης & δείκτες Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται σαν είσοδο από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά τη διάρκεια ενός πειράματος εν συνεχεία ο χρήστης εισάγει στο πρόγραμμα τις επιμέρους τιμές των μετρήσεων σε ένα πίνακα τέλος το πρόγραμμα επεξεργάζεται τα δεδομένα μεταξύ άλλων υπολογίζει το μέσο όρο των μετρήσεων 79 υναμική δέσμευση μνήμης & δείκτες main(){ int n; int i; float mo = 0; float measurements[n]; πώς σας φαίνεται αυτή η υλοποίηση? scanf("%d", &n); for(i=0; i<n; i++) scanf("%f", &measurements[i]); for(i=0; i<n; i++) mo += measurements[i]; mo = mo / n; 80 υναμική δέσμευση μνήμης & δείκτες main(){ int n; int i; float mo = 0; float measurements[n]; η υλοποίηση είναι λάθος!! για κάθε πίνακα που ορίζεται με αυτόν τον τρόπο ΔΕΝ επιτρέπεται να είναι μεταβλητό το μέγεθός του...κάποιοι compilers το scanf("%d", &n); επιτρέπουν... for(i=0; i<n; i++) scanf("%f", &measurements[i]); for(i=0; i<n; i++) mo += measurements[i]; mo = mo / n; 81 27

28 υναμική δέσμευση μνήμης & δείκτες #include <stdlib.h> main(){ int n; int i; float mo = 0; float *measurements; scanf("%d", &n); measurements = (float *) malloc (n* sizeof(float)); if (measurements == NULL) abort(); for(i=0; i<n; i++) scanf("%f", &measurements[i]); for(i=0; i<n; i++) mo += measurements[i]; mo = mo / n; free (measurements); 82 υναμική δέσμευση μνήμης & δείκτες Αρχικοποίηση δεικτών int *p; int x = 10; p = &x; Μεταβλητή p Μεταβλητή x ιευθύνσεις μνήμης 83 υναμική δέσμευση μνήμης Η συνάρτηση malloc int *p; p = (int *) malloc(ν*sizeof(int)); Η malloc δεσμεύει μνήμη για ένα πρόγραμμα και επιστρέφει μια διεύθυνση Το μέγεθος της μνήμης δίνεται σαν όρισμα (bytes) π.χ., στην πράξη θα χρειαστούμε μνήμη για int, μνήμη για float, μνήμη για double, Το μέγεθος της μνήμης δίνεται σαν πολλαπλάσιο των sizeof(int), sizeof(float), sizeof(double), 84 28

29 υναμική δέσμευση μνήμης H malloc μπορεί να επιστρέφει διεύθυνση σε int, float, double, Το πώς θα διαχειριστούμε τη μνήμη καθορίζεται από τον τύπο του pointer που δείχνει σε αυτή... στην κλήση της malloc χρησιμοποιούμε το κατάλληλο casting, π.χ. (int *) γιατί??? 85 Παράδειγμα Άρα αν για ένα μονοδιάστατο πίνακα τύπου <T> (όπου <T> int, float, double, char ) δεν ξέρω τη διάσταση του πριν την εκτέλεση του προγράμματος, τότε ορίζω δείκτη <T*> και χρησιμοποιώ την malloc <T> p[ν] <T*> p= (<T*>) malloc(n*sizeof(<t>)); Π.χ. float p[ν] float * p= (float *) malloc(n*sizeof(float)); 86 υναμική δέσμευση μνήμης & δείκτες Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται σαν είσοδο από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά τη διάρκεια 5 πειραμάτων εν συνεχεία ο χρήστης εισάγει στο πρόγραμμα τις επιμέρους τιμές των μετρήσεων για κάθε πείραμα τέλος το πρόγραμμα επεξεργάζεται τα δεδομένα μεταξύ άλλων υπολογίζει το μέσο όρο των μετρήσεων 87 29

30 υναμική δέσμευση μνήμης & δείκτες #include <stdlib.h> #define N 5 main(){ int n; int i,j; float mo = 0; float *measurements[n]; scanf("%d", &n); for(i=0; i<n; i++){ measurements[i] = (float *) malloc (n* sizeof(float)); if (measurements[i] == NULL) abort(); 88 υναμική δέσμευση μνήμης & δείκτες for(i=0; i<n; i++) for(j=0; j<n; j++){ scanf("%f", &measurements[i][j] ); for(i=0; i<n; i++){ for(j=0; j<n; j++) mo += measurements[i][j]; mo = mo / n; printf("%f\n", mo); for(i=0; i<n; i++) free (measurements[i]); 89 υναμική δέσμευση μνήμης & δείκτες Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται σαν είσοδο από το χρήστη τον συνολικό αριθμό πειραμάτων που έγιναν από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά τη διάρκεια ενός πειράματος εν συνεχεία ο χρήστης εισάγει στο πρόγραμμα τις επιμέρους τιμές των μετρήσεων για κάθε πείραμα τέλος το πρόγραμμα επεξεργάζεται τα δεδομένα μεταξύ άλλων υπολογίζει το μέσο όρο των μετρήσεων 90 30

31 υναμική δέσμευση μνήμης & δείκτες Στο προηγούμενο πρόβλημα γνωρίζαμε των αριθμό των πειραμάτων (#define N 5) και με βάση τον αριθμό των μετρήσεων (int n) κατασκευάσαμε ένα δυσδιάστατο πίνακα measurements [5][n] Στο πρόβλημα αυτό πρέπει να κατασκευάσουμε δυναμικά άένα δυσδιάστατο δ πίνακα measurements [m][n] για τον οποίο τόσο το m όσο και το n είναι μεταβλητές του προγράμματος. 91 #include <stdlib.h> main(){ int n,m; int i,j; float mo = 0; float **measurements; scanf("%d", &m); scanf("%d", &n); Παράδειγμα measurements = (float **) malloc (m* sizeof(float *) ); if(measurements == NULL) abort(); for(i=0; i<m; i++){ measurements[i] = (float *) malloc (n* sizeof(float)); if (measurements[i] == NULL) abort(); 92 for(i=0; i<m; i++) for(j=0; j<n; j++){ scanf("%f", &measurements[i][j]); Παράδειγμα for(i=0; i<m; i++){ for(j=0; j<n; j++) mo += measurements[i][j]; mo = mo / n; printf("%f\n", mo); for(i=0; i<m; i++) free (measurements[i]); free(measurements); 93 31

32 υναμική δέσμευση και πίνακες δεικτών Έστω ότι έχουμε την παρακάτω δήλωση: int *p[n]; Πώς δεσμεύουμε δυναμικά έναν πίνακα δεικτών; α) Έστω ότι ο τύπος <Τ> είναι int * β) Ορίζω ένα δείκτη σε <T> <T> *p (int *) *p int **p γ) Κάνω malloc <Τ>*p = (<Τ>*) malloc(10*sizeof(<τ>)); int **p = (int **) malloc(n*sizeof(int *)); Έχω ένα διπλό δείκτη: μια μεταβλητή στην οποία βάζω τη διεύθυνση ενός δείκτη 94 υναμική δέσμευση και πίνακες δεικτών int **p = (int **) malloc(n*sizeof(int *)); int ** p int *? p[0]? p[1]? p[2]? p[ν-1] 95 υναμική δέσμευση και πίνακες δεικτών Αν στη συνέχεια καλέσω p[i] = (int *) malloc(m*sizeof(int)); Έτσι έχω δημιουργήσει έναν διδιάστατο πίνακα (ΝxM) int * int int ** p 1000 p[0] 1004 p[1] 1008 p[2] M p[ν-1] 96 32

33 Προβλήματα Δημιουργία τριγωνικού πίνακα με 10 γραμμές. Δημιουργία τριγωνικού πίνακα με το χρήστη να καθορίζει κατά το χρόνο εκτέλεσης τον αριθμό των γραμμών 97 Τριγωνικός πίνακας 10x10 (I) #include <stdlib.h> int i, j; int *a[10]; for (i = 0; i < 10; i++) a[i] = (int *)malloc((10-i)*sizeof(int)); for (i = 0; i < 10; i++) for (j = 0; j < 10-i; j++) { a[i][j] = i + j; printf("a(%d,%d)=%d", i, j, a[i][j]); printf("\n"); 98 Τριγωνικός πίνακας 10xN (II) #include <stdlib.h> int i, j, N,*a[10]; scanf("%d", &N); for (i = 0; i < 10; i++) a[i] = (int *)malloc((n-i)*sizeof(int)); for (i = 0; i < 10; i++) for (j = 0; j < N-i; j++) { a[i][j] = i + j; printf("a(%d,%d)=%d", i, j, a[i][j]); printf("\n"); 99 33

34 Τριγωνικός πίνακας NxN #include <stdlib.h> int i, j, N, **a; scanf("%d", &N); a = (int **) malloc(n*sizeof(int *)); for (i = 0; i < N; i++) a[i] = (int *)malloc((n-i)*sizeof(int)); for (i = 0; i < N; i++) for (j = 0; j < N-i; j++) { a[i][j] = i + j; printf("a(%d,%d)=%d", i, j, a[i][j]); printf("\n"); 100 Άλλες κλήσεις διαχείρισης μνήμης void *realloc(void *p, size_t size); Δεσμεύει χώρο και κάνει copy αν χρειαστεί Αν το νέο size είναι μικρότερο τότε κόβονται τα data Αν δεν χρειαστεί copy τότε δεσμεύει στη συνέχεια του ήδη δεσμευμένου block και επιστρέφει την ίδια διεύθυνση void *calloc(size_t n, size_t size); Δεσμεύει χώρο τον οποίο αρχικοποιεί σε μηδέν int * p = calloc(n, sizeof(int)); 101 Παράδειγμα #include <stdlib.h> int *p, *q; p = (int *) malloc(10*sizeof(int)); q = realloc(p, 20*sizeof(int)); printf("%p, %p\n", p, q); /* μπορεί να διαφέρουν */

35 Ορίσματα της main() $ ls $ ls l γενικά σε ένα πρόγραμμα μπορούμε να δώσουμε σαν είσοδο δεδομένα τη στιγμή που ξεκινάει η εκτέλεση του από τη γραμμή εντολών τα δεδομένα που δίνουμε αντιστοιχούν σε παραμέτρους ρ που δέχεται η main μην ξεχνάτε ότι και η main είναι μια συνάρτηση μέχρι τώρα την ορίζαμε χωρίς παραμέτρους παρόλα αυτά είναι δυνατόν να την ορίσουμε με παραμέτρους τα δεδομένα τα δέχεται η main με τη μορφή strings 103 Ορίσματα της main Μέχρι τώρα: int main(void) { Γενικά όμως: int main(int argc, char *argv[]) { ή int main(int argc, char **argv) { Το argv είναι ένας πίνακας δεικτών σε ακολουθίες χαρακτήρων (strings) To argc είναι το πλήθος στοιχείων του πίνακα 104 Ορίσματα της main $ ls l argc: 2 argv[0]: όνομα προγράμματος "ls" argv[1]: ορίσματα προγράμματος "-l" char * argv[0] argv[1] char "ls" "-l"

36 Παράδειγμα (echo program) $ myproc hello world argc:3, argv[0]:"myprog", argv[1]:"hello",argv[2]:"world" Πρόγραμμα main(int argc, char *argv[]) []){ int i; printf("argc = %d\n", argc); printf("argv[0] = %s\n", argv[0]); for (i = 1; i < argc; i++) printf("%s ", argv[i]); printf("\n"); 106 Παράδειγμα (echo program) $ myproc 125 argc:2, argv[0]:"myprog", argv[1]:"125" Πρόγραμμα #include <stdlib.h> main(int argc, char *argv[]) { int i, number = 0; if (argc == 2) number = atoi(argv[1]); printf("%d\n", number); 107 Σύνοψη #include <stdlib.h> void *malloc(size_t size); Δέσμευση μνήμης void *calloc(size_t count, size_t size); Δέσμευση μνήμης αρχικοποιημένης σε 0 void *realloc(void *ptr, size_t size); Επαναδέσμευση μνήμης void free(void *ptr); Αποδέσμευση μνήμης

37 Σύνοψη int *p; p = (int *) malloc(sizeof(int)); int *p; p = (int *) malloc(μ*sizeof(int)); int *p[10]; for (i = 0; i < 10; i++) p[i] = (int *) malloc(μ*sizeof(int)); int **p; p = (int **) malloc(10*sizeof(int *)); for (i = 0; i < 10; i++) p[i] = (int *) malloc(μ*sizeof(int)); 109 Μονοδιάστατοι ιδιάστατοι Πίνακες (Ι) int i, j, Μ, Ν; int *a; scanf("%d", &Ν); scanf("%d", &Μ); a=(int*) malloc(n*m*sizeof(int)); for (i = 0; i < Ν; i++) for (j = 0; j < M; j++) a[i*n+j] = i + j; free(a); 110 Μονοδιάστατοι ιδιάστατοι Πίνακες (ΙΙ) int i, j, Μ, Ν; int *a; #define a(x,y) a[x*n+y] scanf("%d", &Ν); scanf("%d", &Μ); a=(int*) malloc(n*m*sizeof(int)); for (i = 0; i < Ν; i++) for (j = 0; j < M; j++) a(i, j) = i + j; free(a);

38 είκτης σε Συνάρτηση Το πρόβλημα: συνάρτηση f ταξινόμησης στοιχείων πίνακα Για το x[0]: Για κάθε x[i], i > 0 αν (x[i] > x[0]) x[i] x[0] αύξησε το i Βασικά τμήματα του αλγορίθμου ταξινόμησης Σύγκριση: x[i] > x[0] Εναλλαγή: x[i] x[0] Επαναληπτική εκτέλεση (για x[0], x[1], κ.ο.κ) 112 είκτης σε Συνάρτηση Για να έχω βέλτιστα επαναχρησιμοποιήσιμο κώδικα θα ήθελα να έχω μια συνάρτηση ταξινόμησης f() ανεξάρτητη της σύγκρισης Δηλαδή να χρησιμοποιώ την f() για αύξουσα και φθίνουσα ταξινόμηση Πώς το κάνω; Μια λύση είναι να έχω για τη σύγκριση μια συνάρτηση που να τη δίνω σαν παράμετρο στην συνάρτηση ταξινόμησης f() 113 Συνάρτηση Ταξινόμησης void f(int x[], int (*compare)(int, int)) { int i; for (i = 1; i < 10; i++) if ((*compare)(x[0], x[i]) == 0) swap(&x[0], &x[i]); int cmp1(int x, int y) { if (x>y) return 0; return 1; int cmp2(int x, int y) { if (x<y) return 0; return 1;

39 Συνάρτηση Ταξινόμησης #include <stdlib.h> int cmp1(int, int); int cmp2(int, int); void f(int x[], int (*compare)(int, int)); main(int argc, char *argv[]) { int a[10]; int i, choice = 1; for (i = 0; i < 10; i++) a[i] = rand(); if (argc == 2) choice = atoi(argv[1]); if (choice == 1) f(a, cmp1); else f(a, cmp2); 115 ιαχείριση Συμβολοσειρών 116 stdio.h int printf(const char *format,...); format: "...%_ " Ανάμεσα στο %_ έχω το ελάχιστο πλάτος πεδίου <πλάτος πεδίου>.<ακρίβεια> h, l για short, long L για long double

40 printf format: "...%_ " d, i int προσημασμένος ακέραιος o int μη προσημασμένος οκταδικός x int μη προσημασμένος δεκαεξαδικός u c int μη προσημασμένος δεκαδικός char χαρακτήρας s char *, char[] string f double [-]ddd.dddddd e,e double [-]ddd.dddddd e[+/-]ddd p void * pointer % για το % 118 scanf int scanf (const char *format,...); Τα κενά αγνοούνται καθώς και οι αλλαγές γραμμής Τα μη κενά αλφαριθμητικά πρέπει να κάνουν match format: "%d %d", δυνατές είσοδοι: α) 5 10 β) 5 10 γ) 5 10 %*d για να αγνοήσω ένα πεδίο εισόδου 119 gets/puts char *gets(char *s); Η gets διαβάζει την επόμενη γραμμή εισόδου και την αποθηκεύει στο string s. Αντικαθιστά τον τερματικό χαρακτήρα νέας γραμμής με \0. Επιστρέφει s, ή NULL αν συναντηθεί το τέλος του αρχείου (EOF) ή αν συμβεί κάποιο λάθος int puts(const char *s); Η puts γράφει το string s και ένα χαρακτήρα νέας γραμμής ( \n ) στην οθόνη. Επιστρέφει EOF αν συμβεί κάποιο λάθος, διαφορετικά επιστρέφει μη αρνητική τιμή

41 /* gets example */ int char string [256]; printf ("Insert your full address: "); gets (string); printf ("Your address is: %s\n",string); return 0; 121 int main () { char string [] = "Hello world!"; puts (string); 122 Παράδειγμα 1a char test1[5], test2[5]; scanf("%s", test1); printf("test1=%s\n", test1); gets(test2); printf("test2=%s\n", test2); Εκτέλεση: $./aout test1=13131 test2= $... Ισχύει ότι το test2 είναι ίσο με "end of line" από την προηγούμενη είσοδο

42 Παράδειγμα 1b char test1[5], test2[5]; scanf("%s", test1); printf("test1=%s\n", test1); scanf("%s", test2); printf("test2=%s\n", test2); Εκτέλεση: $./aout 1313 test1= test2=1233 $... Χρησιμοποιείται η scanf αντί για την gets. Η scanf αγνοεί την αλλαγή γραμμής αφού παίρνει το πρώτο μη blank και σταματά στο αμέσως επόμενο μη blank 124 char lula[]="lula"; char *ptr = lula; puts(lula); puts(" >"); puts(ptr + 2); printf("%s > %s", lula, ptr+2); Παράδειγμα 2 Εκτέλεση: $./aout lula > la lula > la $... Η gets πετάει το \n ενώ η puts το προσθέτει 125 Παράδειγμα 3 Παραλλαγές της puts που δεν εκτυπώνουν το EOL void myputs(const char *string) { int i = 0; while (string[i]!= '\0') putchar(string[i++]); void myputs(const char *string) { while (*string!= '\0') putchar(*string++);

43 sprintf / sscanf int sprintf(char *s, const char *format,...) Η συνάρτηση αυτή λειτουργεί ακριβώς όπως η printf() με τη διαφορά ότι η έξοδος δεν κατευθύνεται προς την οθόνη αλλά φυλάσεται στο string s στο οποίο τοποθετείται επιπλέον και ο χαρακτήρας '\0'. Επιστρέφεται ο αριθμός των χαρακτήρων που φυλάσσονται στο s πλην του χαρακτήρα '\0'. int sscanf(char *s, const char *format,...) Η συνάρτηση αυτή λειτουργεί ακριβώς όπως η scanf() με τη διαφορά ότι η είσοδος των δεδομένων προέρχεται από το string s και όχι από την οθόνη. Επιστρέφει είτε τον αριθμό των αντικειμένων που ενημερώθηκαν (αν όλα πάνε καλά), είτε EOF (σε περίπτωση λάθους). 127 /* sprintf example */ int main () { char buffer [50]; int n, a=5, b=3; Παράδειγμα $a.out [5 plus 3 is 8] is a 13 char long string n=sprintf (buffer, "%d plus %d is %d", a, b, a+b); printf ("[%s] is a %d char long string\n", buffer, n); return 0; 128 Παράδειγμα int k, m; float f; char *x="2 minutes to 12.0"; char y[20], z[20], w[80]; $./a.out 2 minutes to New order: 2 to 12 minutes with 15 characters (including spaces) k=sscanf(x, "%d%s%s%f", &m, y, z, &f) ; printf("%d\n%s\n%s\n%f\n", m, y, z, f) ; k = sprintf(w, "%d %s %d %s ",m, z, (int) f, y) ; printf("\nnew order: %s\n", w); printf("with %d characters (including spaces)", k);

44 Επαναληπτική κλήση της sscanf int k, m; float f; char x[30]="2 minutes to 12.0"; char *p = x; char y[30]; while ((k=sscanf(p, "%s", y)) > 0) { printf("%s\n", y); p = p + strlen(y) + 1; 130 Επαναληπτική μέτρηση λέξεων int k, count; char x[30], y[30], *p; while (1) { count = 0; gets(x); if (strcmp(x, "EXIT")!= 0) { p = x; while ((k=sscanf(p, "%s", y) > 0) && ((p-x) < strlen(x))) { printf("%s\n", y); p = p + strlen(y) + 1; count++; printf("total number of words: %d\n", count); else break; 131 Επαναληπτική μέτρηση λέξεων (2 η ) int k, count; char x[30], y[30], *p; while (strcmp(gets(x), "EXIT")!= 0) { count = 0; p = x; while ((k=sscanf(p,"%s",y) > 0) && ((p-x) < strlen(x))) { printf("%s\n", y); p = p + strlen(y) + 1; count++; printf("total number of words: %d\n", count);

45 ιαχείριση Συμβολοσειρών Μια συμβολοσειρά (string) είναι ένας πίνακας χαρακτήρων στον οποίο τοποθετείται τελευταίος ο χαρακτήρας '\0', ως ένδειξη του τέλους της συμβολοσειράς Μπορούμε να διαχειριστούμε ένα string με δύο τρόπους Ως έναν πίνακα, το οποίο συνεπάγεται σχετική δυσκολία char line[8]; line[0] = 'H'; line[1] = 'e'; line[2] = 'l'; line[3] = 'l'; line[4] = 'o'; line[5] = '\0'; Μέσω της χρήσης ειδικών συναρτήσεων που παρέχει η C μέσω του αρχείου <string.h> strcpy(line, "Hello"); 133 Συναρτήσεις ιαχείρισης Συμβολοσειρών char *strcpy(s, t); Αντιγράφει το string t στο s, μαζί με τον χαρακτήρα '\0' και επιστρέφει το s Παράδειγμα char *s = malloc(6); strcpy(s, "hello"); Τι γίνεται αν στο s δεν χωράει το t; char *strncpy(s, t, n); Αντιγράφει το πολύ n χαρακτήρες από το t στο s, το t μπορεί να έχει λιγότερους. Επιστρέφει το s char *strcat(s, t); Προσθέτει στο τέλος του s το string t. Επιστρέφει το s. char *strncat(s, t, n); Προσθέτει στο τέλος του s το πολύ n χαρακτήρες του t, και τοποθετεί επίσης και τον χαρακτήρα '\0'. Επιστρέφει το s. 134 Συναρτήσεις ιαχείρισης Συμβολοσειρών int strcmp(s, t); Συγκρίνει λεξικογραφικά τα δύο strings. (βασικό κριτήριο) περιεχόμενο (δευτερεύον κριτήριο) μήκος Επιστρέφει: Αν (s == t) 0 Αν (s > t) > 0 Αν (s < t) < 0 int strncmp(s, t, n); Όπως και παραπάνω αλλά συγκρίνει λεξικογραφικά το πολύ n χαρακτήρες char *strpbrk(s, t); Επιστρέφει ένα δείκτη στην πρώτη εμφάνιση στο s κάποιου (οποιουδήποτε) χαρακτήρα του t, διαφορετικά επιστρέφει NULL εφόσον δεν υπάρχει κανένας τέτοιος χαρακτήρας ( c ε t c ε s)

46 Συναρτήσεις ιαχείρισης Συμβολοσειρών char *strstr(s, t); Επιστρέφει ένα δείκτη στην πρώτη εμφάνιση στο s του t, (διαφορετικά) επιστρέφει NULL αν το t δεν περιέχεται στο s. int strlen(s); Επιστρέφει το μήκος της συμβολοσειράς s. Τι συμβαίνει με τον χαρακτήρα τερματισμού '\0'; 136 Παραδείγματα Έστω: char a[30] = "Καλημέρα, "; char b[20] = "Καλό μάθημα!"; Τότε: strcpy(a,b) printf("%s", a); Καλό μάθημα! strncpy(a,b,4) printf("%s", a); Καλόμέρα, strcat(a,b) printf("%s", a); Καλημέρα, Καλό μάθημα! 137 Παραδείγματα Έστω: int ret; char *p; char a[30] = "Καλημέρα, "; char b[20] = "Καλό μάθημα!"; Τότε: ret = strcmp(a,b); printf("%d", ret); κάποια αρνητική τιμή p = strpbrk(a,"ιημ"); printf("%s", p); ημέρα, p = strstr(a,"ημ") printf("%s", p); ημέρα, printf("%d", strlen(a) );

47 Συναρτήσεις ιαχείρισης Συμβολοσειρών char *strtok(char *s, char *t); Ψάχνει στο s για κομμάτια (tokens) που διαχωρίζονται με τους χαρακτήρες που περιγράφονται στο t. Κάθε διαφορετική κλήση της strtok επιστρέφει και ένα καινούργιο token (κανονικό string με χαρακτήρα τερματισμού). Χή Χρήση: 1 ο token: καλώ tok = strtok(s, t); Επόμενα: καλώ tok = strtok(null, t); Επιστρέφει NULL αν δεν υπάρχουν άλλα tokens στο s. Προσοχή! Η συνάρτηση τροποποιεί το πρώτο όρισμα της Δεν μπορεί να χρησιμοποιηθεί σε σταθερά strings 139 Παράδειγμα strtok char [] = "zas@cs.uoi.gr"; char token[] = "@"; char *c; c = strtok( , token); while ((c = strtok(null, token))!= NULL) Παράδειγμα strtok (1/2) Να γράψετε πρόγραμμα το οποίο λαμβάνει διευθύνσεις ηλεκτρονικού ταχυδρομείου και επιστρέφει τα πεδία από τα οποία αποτελούνται Σχετικό παράδειγμα εκτέλεσης $ myprog type address: zas@cs.uoi.gr fields of address: zas, cs, uoi, gr

48 Παράδειγμα strtok (2/2) #include <string.h> int main(void) { char [80]; char token[] = "@."; char *c; printf("type address:"); scanf("%s", ); printf("fields of address:"); c = strtok( , token); if (c!= NULL) printf("%s", c); while ((c = strtok(null, token))!= NULL) printf(", %s", c); printf("\n"); return 0; 142 Συναρτήσεις Ελέγχου - Μετατροπής <ctype.h> Συναρτήσεις ελέγχου int isalnum(int c); true για γράμμα ή ψηφίο int isalpha(int c); true για γράμμα int isdigit(int c); true για ψηφίο int isspace(int c); true για κενό, tab, \n,... int islower(int c); true για γράμμα μικρό int isupper(int c); true για γράμμα κεφαλαίο Συναρτήσεις μετατροπής int tolower(int c); μετατροπή κεφαλαίου σε μικρό int toupper(int c); μετατροπή μικρού σε κεφαλαίο 143 Συναρτήσεις Ελέγχου - Μετατροπής <stdlib.h> int atoi(char *s); μετατροπή string σε ακέραιο Το string s πρέπει να ξεκινά με κενό ή κάποιον αριθμό Η συνάρτηση σταματά να διαβάζει από το string μόλις βρει κάποιον μη-αριθμητικό χαρακτήρα Αν η μετατροπή δεν μπορεί να συμβεί, επιστρέφει 0 long atol(char *s); μετατροπή string σε long double atof(char *s); μετατροπή string σε double Πώς μετατρέπω αριθμούς σε strings;

49 Παραδείγματα int i; i = atoi( "512" ); i = atoi( " " ); i = atoi( " " ); i = atoi( " " ); i = atoi( " 512 bottles of beer on the wall" ); int i = atoi( " does not work: 512" ); // i == 0 long l = atol( " " ); double x = atof( "42.0is_the_answer" ); 145 Strtol, Strtod <stdlib.h> strtol -> string to long strtoul -> string to unsigned long strtod -> string to double Usage Syntax: <long> = strtol/strtoul (<char>, <remainder of non arithmetic characters>, <base>) <double> = strtod(<char>, <remainder of non arithmetic characters>) 146 Strtol, Strtod #include <stdlib.h> main(){ char test1[20] = "45.46xaxa"; char *remainder; long dec, hex, ff; double db; dec = strtol(test1, &remainder, 10); printf("dekadikoi\tdec: %ld, remains: %s\n", dec, remainder); dec = strtol(test1, &remainder, 16); printf("dekaexadikoi\thex: %ld, remains: %s\n", dec, remainder); db = strtod(test1, &remainder); printf("double\tdb: %.2lf, remains: %s\n", db, remainder);

50 Σύνοψη Βασικές συναρτήσεις εισόδου εξόδου int printf(const char *format,...); int scanf(const char *format,...) Ειδικοί χαρακτήρες στο format τους Ακέραιοι αριθμοί %d στο δεκαδικό σύστημα %u χωρίς πρόσημο στο δεκαδικό σύστημα %o χωρίς πρόσημο στο οκταδικό σύστημα %x χωρίς πρόσημο στο δεκαεξαδικό σύστημα Αριθμοί κινητής υποδιαστολής %f σε μορφή: [-]ddd.dddddd %e σε μορφή: [-]ddd.dddddd e[+/-]ddd %g σε μορφή %f ή %e 148 Σύνοψη Ειδικοί χαρακτήρες στο format τους Άλλοι τύποι %c χαρακτήρες %s συμβολοσειρές %p δείκτες Παραλλαγές στο format Μέγεθος αριθμών %h αριθμοί short, π.χ. %hd, %hx %l αριθμοί long ή double, π.χ. %ld, %lf %L αριθμοί long double, π.χ. %Lf 149 Σύνοψη Παραλλαγές στο format Μήκος αποτελέσματος %8d αριθμός σε μήκος 8 χαρακτήρων %20s συμβολοσειρά σε μήκος 20 χαρακτήρων %+8d αριθμός σε μήκος 8 χαρακτήρων με + %08d αριθμός σε μήκος 8 χαρακτήρων, τα πρώτα εξ' αυτών 0 %-8d όπως το %8d με στοίχιση αριστερά

51 Σύνοψη Διαχείριση χαρακτήρων/συμβολοσειρών int putchar(int c); int getchar(); int puts (const char *s); char *gets (char *s); Διαχείριση συμβολοσειρών <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 στο τέλος της s int strcmp(const char *s1, const char *s2): Σύγκριση των συμβολοσειρών s1 και σ2 151 Σύνοψη Μετατροπή συμβολοσειρών <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. 152 Ταξινόμηση strings (1/3) #include <string.h> #include <stdlib.h> #define SIZE 30 void strbubblesort(char *strings[], int num) { char *temp; int top, seek; for (top = 0; top < num-1; top++) for (seek = top+1; seek < num; seek++) { if (strcmp(strings[top], strings[seek]) > 0) { temp = strings[seek]; strings[seek]= strings[top]; strings[top] = temp;

52 Ταξινόμηση strings (2/3) main(int argc, char *argv[]) { char **array; int i, NumOfStrings; NumOfStrings = atoi(argv[1]); array = (char **) malloc(numofstrings*sizeof(char *)); if (array == NULL) { printf("error!"); exit(1); for (i = 0; i < NumOfStrings; i++) { array[i] = (char *) malloc(size*sizeof(char *)); if (array[i] == NULL) { printf("error!"); exit(1); gets(array[i]); 154 Ταξινόμηση strings (3/3) /* συνέχεια από προηγούμενη διαφάνεια... */ strbubblesort(array, NumOfStrings); puts("\n\nthe sorted list in ascending order is:"); for (i = 0; i < NumOfStrings; i++) { puts(array[i]); 155 printf demo (1/2) int main(void) { int i; // Number to print. double f; // Number to print. printf("enter an integer (use either + or -): "); scanf ("%d", &i); printf("this is the integer... %d \n", i); printf("this is the integer in octal... %o \n", i); printf("octal with leading zero... %#o \n", i); printf("this is the integer in hex... %x or %X \n", i, i); printf("hex with leading 0x... %#x or %#X \n", i, i); printf("forcing a plus or minus sign... %+d \n", i); printf("include space before + numbers... % d \n", i); printf("field width of 3... %3d \n", i); printf("field width of 5... %5d \n", i); printf("field width of 7... %7d \n", i); printf("same as above with left justification. %-7d \n", i); printf("field width of 7 with zero fill... %07d \n", i); printf("at least 3 digits... %.3d \n", i); printf("at least 5 digits... %.5d \n", i); printf("field width of 10, at least 7 digits.. %10.7d \n", i);

53 printf demo (2/2) printf("\nenter a floating point number: "); scanf ("%lf", &f); printf("this is the number... %f \n", f); printf("forcing a plus or minus sign... %+f \n", f); printf("field width of %20f \n", f); printf("0 decimal places... %.0f \n", f); printf("0 decimal places forcing decimal... %#.0f \n", f); printf("3 decimal places... %.3f \n", f); printf("20 decimal places... %.20f \n", f); printf("field width of 20, 3 decimal places... %20.3f \n", f); printf("\nhere is the number in e format:\n"); printf("3 decimal places... %.3e \n", f); printf("5 decimal places & big 'e'... %.5E \n", f); printf("\nhere is the number in g format:\n"); printf("no special requests... %g \n", f); printf("maximum of 1 significant figure... %.1g \n", f); printf("maximum of 4 significant figures... %.4g \n", f); return 0; 157 Αρχεία Κειμένου 158 Εισαγωγή Στη C έχουμε ειδικές συναρτήσεις για να επεξεργαζόμαστε αρχεία κειμένου που αποθηκεύονται στο δίσκο Τα αρχεία είναι σημαντικά για μόνιμη αποθήκευση

54 Εισαγωγή Γενικά, η διασύνδεση προγραμμάτων με συσκευές εισόδου/εξόδου όπως η οθόνη το πληκτρολόγιο και ο δίσκος γίνεται μέσω ρευμάτων εισόδου/εξόδου (streams) ένα ρεύμα εξόδου μπορείτε να το φαντάζεστε σαν χώρο μνήμης στον οποίο το πρόγραμμα αποθηκεύει δεδομένα (χρησιμοποιώντας ώ γνωστές συναρτήσεις printf, fprintf, puts, fputs) τα οποία εν συνεχεία τα παραλαμβάνει το λειτουργικό και τα στέλνει στο δίσκο ή στην οθόνη. ένα ρεύμα εισόδου μπορείτε να το φαντάζεστε σαν χώρο μνήμης στον οποίο το λειτουργικό αποθηκεύει δεδομένα από το δίσκο ή το πληκτρολόγιο και εν συνεχεία το πρόγραμμα μπορεί να παραλάβει αυτά τα δεδομένα για επεξεργασία χρησιμοποιώντας γνωστές συναρτήσεις (scanf, gets, fscanf, fgets ) 160 Ειδικά ρεύματα stdout γράφω σε ρεύμα που γίνεται flush στην οθόνη stdin διαβάζω από ρεύμα στο οποίο γίνονται flush τα δεδομένα που περνάω από το πληκτρολόγιο stdout stdin FILE *fp; printf( );... scanf(.); 161 file pointers για ρεύματα που κατευθύνονται στο δίσκο Για να συνδέσω το πρόγραμμα με ένα αρχείο χρειάζομαι ένα ρεύμα εισόδου/εξόδου το οποίο το δημιουργώ μέσω ενός δείκτη σε FILE FILE *fp; stdout stdin FILE *fp; printf( ); fp = fopen( );... scanf(.); fp

55 Αρχικοποίηση FILE *fopen(char *name, char *mode); name: όνομα αρχείου mode: "r" για ανάγνωση "w" για εγγραφή (αν ήδη, τότε αδειάζουν τα περιεχόμενα) "a" για επέκταση (αν ήδη, τα περιεχόμενα διατηρούνται) Άλλες επιλογές για mode Η πρόσθεση του + μετά από έναν χαρακτήρα σημαίνει οτι επιτρέπεται και η αντίθετη χρήση ταυτόχρονα "r+" για ανάγνωση / εγγραφή στην αρχή "w+" για ανάγνωση / εγγραφή με απόρριψη "a+" για ανάγνωση / εγγραφή στο τέλος 163 Αρχικοποίηση Η συνάρτηση fopen επιστρέφει έναν δείκτη (file pointer) σε ένα ρεύμα που συσχετίζεται με το αρχείο. Αν δεν υπάρχει αρχείο και ανοίγω με mode "w" ή "a", τότε δημιουργείται νέο αρχείο Αν κάτι πάει στραβά, η συνάρτηση επιστρέφει NULL FILE *fp; fp = fopen( ); fprintf(fp,...);... write...data... buffer flush (εγγραφή στο δίσκο) 164 Βασικές Συναρτήσεις int fscanf(file *fp, char *format,...) Λειτουργεί όπως η scanf Επιστρέφει αριθμό στοιχείων που διαβάστηκαν Επιστρέφει EOF σε περίπτωση τέλους αρχείου ή λάθους int fprintf(file *fp, char *format,...) Λειτουργεί όπως η printf μόνο που γράφει στο fp Επιστρέφει αριθμό στοιχείων που γράφτηκαν Επιστρέφει < 0 σε περίπτωση λάθος H printf γράφει στον ειδικό δείκτη αρχείου stdout, επομένως: printf("%d\n", i); fprintf(stdout, "%d\n", i);

56 Κλείσιμο αρχείου int fclose (FILE *fp); Κλείνει το αρχείο (τώρα γίνεται flush ο buffer), εκτός αν πριν κάνω fflush(fp); Επιστρέφει 0 σε περίπτωση επιτυχίας Επιστρέφει EOF σε περίπτωση λάθους Tο σύστημα εκτέλεσης κλείνει όλα τα ανοικτά αρχεία με τον τερματισμό του κυρίου προγράμματος. Αποτελεί καλή προγραμματιστική πρακτική, παρ' όλα αυτά, να κλείνουμε ρητά τα αρχεία που ανοίγουμε. Μπορεί να εκτελεστεί η εντολή fclose(stdout), μετά όμως δεν μπορώ να γράψω. Η fprintf(stdout,...) θα επιστρέφει EOF int ferror(file *fp); Επιστρέφει 0 σε περίπτωση επιτυχίας Επιστρέφει μη μηδενική τιμή σε περίπτωση λάθους σε προηγούμενη προσπέλαση του fp 166 fgets char *fgets(char *line, int maxline, FILE *fp); Διαβάζει το πολύ maxline-1 χαρακτήρες Αν βρει πρώτα αλλαγή γραμμής ('\n') διαβάζει μέχρι εκεί και η αλλαγή γραμμής ('\n') τοποθετείται στο line Το line τερματίζει με το χαρακτήρα τερματισμού '\0' Η συνάρτηση επιστρέφει σε περίπτωση λάθους NULL char *gets (char *s); Η gets διαβάζει 1 γραμμή από το stdin ενώ αντικαθιστά τον τερματικό χαρακτήρα νέας γραμμής με \0. Αν size of line < μέγεθος της γραμμής που διαβάζω από το stdin, τότε έχω undefined behavior Συνιστάται η χρήση της fgets αντί της gets 167 fputs int fputs(char *s, FILE *fp); Γράφει το string s στο fp Η συνάρτηση επιστρέφει τον αριθμό των χαρακτήρων που έγραψε και EOF σε περίπτωση λάθους int puts (char *s); Γράφει το string ti s μαζί με τον χαρακτήρα αλλαγής γραμμής στο stdout

57 Παράδειγμα 1 fgets/fputs FILE *infile, *outfile; int c; char buf[10]; if ((infile = fopen("lala.txt", "r")) == NULL) exit(1); if ((outfile = fopen("outfile.txt", "w")) == NULL) exit(1); while (fgets(buf, 10, infile)!= NULL) { fputs(buf, outfile); //fputs("\n", outfile); /* Προσθέτει μια επιπλέον γραμμή */ fclose(infile); fclose(outfile); 169 Παράδειγμα 2 fscanf/fprintf FILE *infile, *outfile; int c; char buf[81]; if ((infile = fopen("lala.txt", "r")) == NULL) exit(1); if ((outfile = fopen("outfile.txt", "w")) == NULL) exit(1); while (fscanf(infile, "%s", buf)!= EOF) { fprintf(outfile, "%s", buf); /* Όλες οι λέξεις κολλητά */ fprintf(stdout, "%s", buf); /* Εμφάνιση στην οθόνη */ fclose(infile); fclose(outfile); 170 Παράδειγμα 3 fflush/fclose FILE *fp; fp = fopen("alala", "w"); fprintf(fp, "%s", "xxx"); while (1); $./a.out ^C Η εκτέλεση της εντολής "cat alala" κατά την ώρα εκτέλεσης του προγράμματος δεν θα δείξει δεδομένα Το ίδιο θα συμβεί και μετά τον μη ομαλό τερματισμό του προγράμματος (με Control-C) Για την εκτύπωση δεδομένων πρέπει να προστεθεί η fflush() ή η fclose() πριν το while loop

58 Παράδειγμα 4 Εύρεση μέγιστης λέξης #include <string.h> FILE *infile; char buf[101], maxword[101]; int maxlength = 0; if ((infile=fopen("testwords.ascii", "r")) == NULL) exit(1); strcpy(maxword, ""); while (fscanf(infile, "%s", buf)!= EOF) { if (strlen(buf)>maxlength) { strcpy(maxword, buf); maxlength = strlen(buf); fprintf(stdout, "Max string is:%s with length %d\n", maxword,maxlength); 172 Παράδειγμα 4Β Με χρήση stdin /* Άμεση πληκτρολόγηση γραμμών κειμένου και τερματισμός με τον συνδυασμό Control-D (^D), που σηματοδοτεί το EOF */ #include <string.h> char buf[101], maxword[101]; int maxlength = 0; strcpy(maxword, ""); while (fscanf(stdin, "%s", buf)!= EOF) { if (strlen(buf)>maxlength) { strcpy(maxword, buf); maxlength = strlen(buf); fprintf(stdout, "Max string is:%s with length %d\n", maxword,maxlength); 173 Παράδειγμα 5 fgets/sscanf FILE *infile; int counter, k; char s1[20], s2[20]; float f; char buf[81]; $cat testsscanf.txt 2 minutes to days to 1.0 breakdown 3 months to 5 $./a.out 2 minutes to minutes to days to 1.0 breakdown 4 days to months to 5 3 months to if ((infile = fopen("testsscanf.txt", "r")) == NULL) exit(1); while (fgets(buf, 81, infile)!= (char *)NULL) { puts(buf); counter = sscanf(buf, "%d %s %s %f", &k, s1, s2, &f); printf("%d\t%s\t%s\t%f\n", k, s1, s2, f); fclose(infile);

Η γλώσσα C. Διαχείριση Συμβολοσειρών

Η γλώσσα C. Διαχείριση Συμβολοσειρών Η γλώσσα C Διαχείριση Συμβολοσειρών Συμβολοσειρές (strings) Θυμόμαστε: τι είναι οι συμβολοσειρές; Πίνακας χαρακτήρων (με τη σύμβαση ότι στο τέλος έχει \0 ). char str[10]; /* Άρα 9 χαρακτήρες + το \0 */

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

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Χpήσιµες Βιβλιοθήκες της γλώσσας C Χpήσιµες Βιβλιοθήκες της γλώσσας C Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Συναρτήσεις Επεξεργασίας Συµβολοσειρών (strings) που Παρέχονται από τη Βιβλιοθήκη Συναρτήσεις Ελέγχου

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

Προγραμματισμός σε C. Αρχεία κειμένου (Text files) Προγραμματισμός σε C Αρχεία κειμένου (Text files) Εισαγωγή Στη C έχουμε ειδικές συναρτήσεις για να επεξεργαζόμαστε αρχεία κειμένου που αποθηκεύονται στο δίσκο Τα αρχεία είναι σημαντικά για μόνιμη αποθήκευση

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

Προγραμματισμός σε C. Αρχεία κειμένου (Text files) Προγραμματισμός σε C Αρχεία κειμένου (Text files) Εισαγωγή Στη C έχουμε ειδικές συναρτήσεις για να επεξεργαζόμαστε αρχεία κειμένου που αποθηκεύονται στο δίσκο Τα αρχεία είναι σημαντικά για μόνιμη αποθήκευση

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

Προγραμματισμός Συστημάτων

Προγραμματισμός Συστημάτων MYY502 Προγραμματισμός Συστημάτων Β. Δημακόπουλος dimako@cse.uoi.gr http://www.cse.uoi.gr/~dimako Εργαστήρια Μάλλον (!) ξεκινούν την επόμενη εβδομάδα Εγγραφές στο εργαστήριο 2 βάρδιες, 15:00 17:00 και

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

Η γλώσσα C. Δείκτες (pointers)

Η γλώσσα C. Δείκτες (pointers) Η γλώσσα C Δείκτες (pointers) Δείκτες - Pointers Δείκτης: τι είναι; Μια μεταβλητή που περιέχει τη διεύθυνση μιας άλλης μεταβλητής 1000 1028 Μεταβλητή p int c = 10; int *p; p = &c; 1028 10 Μεταβλητή c *p

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

Η γλώσσα C. Δείκτες και Διαχείριση Μνήμης (memory management)

Η γλώσσα C. Δείκτες και Διαχείριση Μνήμης (memory management) Η γλώσσα C Δείκτες και Διαχείριση Μνήμης (memory management) 1 πείραμα = πολλές μετρήσεις Κατασκευάστε ένα πρόγραμμα το οποίο δέχεται ως είσοδο από το χρήστη τον συνολικό αριθμό μετρήσεων που έγιναν κατά

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

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

Η γλώσσα C. Δείκτες (pointers)

Η γλώσσα C. Δείκτες (pointers) Η γλώσσα C Δείκτες (pointers) Δείκτες - Pointers Δείκτης: τι είναι; Μια μεταβλητή που περιέχει τη διεύθυνση μιας άλλης μεταβλητής 1000 1028 Μεταβλητή p int c = 10; int *p; p = &c; 1028 10 Μεταβλητή c *p

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

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

Η γλώσσα C. Διαχείριςη Συμβολοςειρών

Η γλώσσα C. Διαχείριςη Συμβολοςειρών Η γλώσσα C Διαχείριςη Συμβολοςειρών υμβολοςειρζσ (strings) Σι είναι; Πίνακασ χαρακτιρων (με τη ςφμβαςη ότι ςτο τζλοσ ζχει \0 ). char str[10]; /* Άρα 9 χαρακτιρεσ + το \0 */ Με εφκολθ αρχικοποίθςθ: char

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Αλφαριθμητικά και Αρχεία Αλφαριθμητικά (strings) Αρχεία (files) τα βασικά στοιχεία Αλφαριθμητικά της C Συμβολοσειρές (= ακολουθίες

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp) Συναρτήσεις πρότυπης βιβλιοθήκης Στο πρώτο μέρος δίνονται, με αλφαβητική σειρά, μερικές από τις πιο συνηθισμένες συναρτήσεις βιβλιοθήκης που συνοδεύουν τους σύγχρονους μεταγλωττιστές της C. Κάτω από το

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

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

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

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

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

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

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%

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

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

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

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Ένα Ακόμα Παράδειγμα #include int main(int argc, char* argv[]) { } putchar('h'); putchar('e'); putchar('l');

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

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

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

Συναρτήσεις διαχείρισης αλφαριθμητικών

Συναρτήσεις διαχείρισης αλφαριθμητικών Συναρτήσεις διαχείρισης αλφαριθμητικών Όνομα βιβλιοθήκης: string.h Ενδεικτικές συναρτήσεις: char *strcpy(char *s1, char *s2): Αντιγράφει την ακολουθία χαρακτήρων s2 στον πίνακα s1. Επιστρέφεται η τιμή

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

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

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

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο 17.1-17.4, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 4: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής θέματα: Πίνακες Δεικτών, Παραδείγματα, Πολυδιάστατοι πίνακες Πέρασμα παραμέτρων σε προγράμματα C Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες:

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

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

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

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

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

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

Υπολογισμός - Εντολές Επανάληψης

Υπολογισμός - Εντολές Επανάληψης Προγραμματισμός Η/Υ Ι Υπολογισμός - Εντολές Επανάληψης ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συνεχίσουμε τη συζήτησή μας για τα βασικά στοιχεία

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Εισαγωγή στον Προγραµµατισµό Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Συναρτήσεις 19.11.16 Β. Ντουφεξή 2 Προβλήματα: Οσο μεγαλώνουν τα προγράμματα, γίνονται πιο πολύπλοκα.

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

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

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

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

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

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

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε βάση

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

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

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

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

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

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

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

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

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα Αλφαριθμητικά Πίνακες: μια σύντομη εισαγωγή Πίνακες χαρακτήρων: τα "Αλφαριθμητικά" Πίνακες(Arrays): έννοιες και ορισμοί Ορισμός: Πίνακας (array) = σύνολο μεταβλητών του ιδίου τύπου (int, float, char,...) με ένα κοινό

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

Διάλεξη 8η: Αλφαριθμητικά (strings)

Διάλεξη 8η: Αλφαριθμητικά (strings) Διάλεξη 8η: Αλφαριθμητικά (strings) Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) strings CS100, 2016-2017

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Βασικοί τύποι της C 2 Όνομα Τύπος / Κωδικοποίηση Μέγεθος (bytes) char Χαρακτήρας 1 int Ακέραιος 2 ή 4 (*) float Πραγματικός

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

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

Διάλεξη 11η: Δείκτες, μέρος 1

Διάλεξη 11η: Δείκτες, μέρος 1 Διάλεξη 11η: Δείκτες, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Pointers I CS100, 2016-2017

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

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

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

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

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 10 η Αλφαριθμητικά Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

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

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

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

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

C: Από τη Θεωρία στην Εφαρμογή

C: Από τη Θεωρία στην Εφαρμογή Δρ. Γ. Σ. Τσελίκης Δρ. Ν. Δ. Τσελίκας C: Από τη Θεωρία στην Εφαρμογή Ενδεικτικές Ασκήσεις από το Βιβλίο C: Από τη Θεωρία στην Εφαρμογή (Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας) Ενδεικτικές Ασκήσεις του Βιβλίου Ε.Α.1

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

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

Ορισμός μεταβλητών δεικτών και αρχικοποίηση Ορισμός μεταβλητών δεικτών και αρχικοποίηση Η έννοια του δείκτη Κάθε μεταβλητή σχετίζεται με μια θέση στην κύρια μνήμη του Η/Υ η οποία έχει τη δική της ξεχωριστή διεύθυνση Ο δείκτης είναι μια μεταβλητή

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

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

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

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Εισαγωγικές Έννοιες σε Strings - Πίνακες από Strings - Συναρτήσεις

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

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

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

Υπολογισμός - Εντολές Ελέγχου

Υπολογισμός - Εντολές Ελέγχου Προγραμματισμός Η/Υ Ι Υπολογισμός - Εντολές Ελέγχου ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συνεχίσουμε τη συζήτησή μας για τα βασικά στοιχεία

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

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

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

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

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr Συναρτήσεις (1/2) Στη C χρησιμοποιούμε συχνά τις συναρτήσεις (functions), οι οποίες είναι ρουτίνες που επαναλαμβάνονται

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες Στόχοι και αντικείμενο ενότητας Ο τύπος του Πίνακα (βλ. ενότητα #2α) Ορισμός και αρχικοποίηση Αποθήκευση πινάκων στη μνήμη Πολυδιάστατοι πίνακες #6. Πίνακες και Δείκτες Ο τύπος του Δείκτη Η έννοια του

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

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

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

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

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

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,

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

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 7ο Τμήμα Διοίκησης Επιχειρήσεων Παλαιό ΕΠΔΟ α εξάμηνο Β. Φερεντίνος Δείκτες (Pointers) (1) 142 Κάθε μεταβλητή, εκτός από την τιμή της, έχει και μία συγκεκριμένη διεύθυνση

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

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009 Προγραµµατισµός Ι (ΗΥ10) ιάλεξη : Πίνακες, Αλφαριθµητικά Πίνακες Ο πίνακας είναι µια ειδική δοµή για την αποθήκευση µιας σειράς από δεδοµένα του ίδιου τύπου. Η δήλωσηενός πίνακα γίνεται όπως για µια κανονική

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Βασικοί τύποι της C 2 Όνομα Τύπος / Κωδικοποίηση Μέγεθος (bytes) char Χαρακτήρας 1 int Ακέραιος 2 ή 4 (*) float Πραγματικός

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

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

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

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

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

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

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

Διάλεξη 9η: Πίνακες (arrays)

Διάλεξη 9η: Πίνακες (arrays) Διάλεξη 9η: Πίνακες (arrays) Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Arrays CS100, 2016-2017 1 / 17

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

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

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

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

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

Διαδικαστικός Προγραμματισμός Ενότητα 11: Αρχεία κειμένου Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου

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

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

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

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

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

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

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

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

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15) (Κεφάλαιο 2.7 και 12) Αρχεία στην C (Διάλεξη 15) 14-1 Επανάληψη στην Αποθήκευση (Storage) Για να αποθηκεύσουμε δεδομένα από ένα πρόγραμμα, πρέπει να χρησιμοποιήσουμε την Δευτερεύουσα Μνήμη 14-2 Επανάληψη

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

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου (Διάλεξη 7) 1 Είσοδος/ Έξοδος Σε σχεδόν όλα τα προγράμματα πρέπει να πάρουμε κάποια δεδομένα και να δώσουμε αποτέλεσμα Συνάρτηση εισόδου

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι πίνακες στη C (μονοδιάστατοι -συμβολοσειρές) Γενικά για τους πίνακες Ο πίνακας είναι μια αρκετά διαδεδομένη δομή που προσφέρεται από σχεδόν κάθε γλώσσα προγραμματισμού. Πρόκειται

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