Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C: ΑΣΚΗΣΕΙΣ

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

Download "Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C: ΑΣΚΗΣΕΙΣ"

Transcript

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΑ ΤΜΗΜΑ ΣΤΑΤΙΣΤΙΚΗΣ ΚΑΙ ΑΣΦΑΛΙΣΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C: ΑΣΚΗΣΕΙΣ Για τους φοιτητές του µαθήµατος «Εισαγωγή στην Πληροφορική» Ε. Κοφίδης Ιούνιος 2005

2 Θα βρείτε εδώ έναν αριθµό ασκήσεων (µε και χωρίς απαντήσεις) που θα σας βοηθήσουν στη µελέτη του προγραµµατισµού σε C. Είναι ποικίλης δυσκολίας και περιλαµβάνουν από απλές ερωτήσεις έως ολοκληρωµένα προγράµµατα και βιβλιοθήκες συναρτήσεων. Συνιστάται να µελετηθούν όλες προσεκτικά και να γίνει προσπάθεια κατανόησης όλων των απαντήσεων. Αν είναι δυνατό, θα βοηθούσε και ο µεταγλωττισµός και η εκτέλεση των δοσµένων (και ζητούµενων) προγραµµάτων σε κάποιο προγραµµατιστικό περιβάλλον C. Καλή µελέτη! Άσκηση 1 Γράψτε το µικρότερο δυνατό πρόγραµµα C. Θα µπορούσαµε επίσης να παραλείψουµε και την εντολή return, χρησιµοποιώντας τον τύπο void µια και η main δεν θα επιστρέφει πλέον τίποτε: void É Άσκηση 2 Πέρα από την ορθότητα ενός κώδικα C, σηµαντικό ρόλο στη χρησιµότητά του παίζει και ο τρόπος γραφής του. Ξαναγράψτε τον παρακάτω κώδικα ώστε να είναι πιο ευανάγνωστος. int x,y;printf( \n ώστε δύο αριθµούς: );scanf( %d %d,&x,&y);printf( \n\nο %d είναι µεγαλύτερος.\n,(x>y)?x:y); int x,y; printf( \n ώστε δύο αριθµούς: ); scanf( %d %d,&x,&y); printf( \n\nο %d είναι µεγαλύτερος.\n,(x > y)? x : y); 1

3 É Άσκηση 3 a) Γράψτε µια εντολή if που να καταχωρεί την τιµή της µεταβλητής x στη µεταβλητή y αν η x έχει τιµή µεταξύ 1 και 20. ιαφορετικά, αφήστε την y αµετάβλητη. b) Χρησιµοποιείστε τον τελεστή συνθήκης για να κάνετε το ίδιο. a) if (x >= 1 && x <= 20) y = x; b) y = (x >= 1 && x <= 20)? x : y; Παρατήρηση: Οι παρενθέσεις στο b) δεν είναι απαραίτητες (γιατί;). É Άσκηση 4 Έστω ότι οι µεταβλητές x, y, z έχουν τιµές 1, 2, και 2, αντίστοιχα. Σε ποια τιµή υπολογίζεται καθεµιά από τις ακόλουθες εκφράσεις; α. (1 + 2 * 3) β. ((1 + 2) * 3) γ. 10 % 3 * 3 (1 + 2) δ. 10 % (3 * 3) (1 + 2) ε. (5 == 5) στ. x = y ζ. x == y η. x == y == z θ. x!= z ι. x = y = z ια. x = y!= z α. 7 β. 9 γ. 0 δ. 2 ε. 1 στ. 2 ζ. 0 η. 0 θ. 1 ι. 2 ια. 0 É Άσκηση 5 Έστω ότι οι µεταβλητές x, y, z έχουν τιµές 1, 3, και 4, αντίστοιχα. Για καθεµιά από τις παρακάτω εκφράσεις βρείτε αν είναι αληθής (Α) ή ψευδής (Ψ): α. x β. x + y γ. x + y == z δ. y % 2!= z % 2 ε.!(x + y == z) (y == z) στ. (z / x == z / y) (y > z && z < x) (x + y!= z) 2

4 Μια έκφραση στη C είναι αληθής αν έχει τιµή µη-µηδενική. Είναι ψευδής µόνο αν είναι µηδέν. α. Α β. Α γ. Α δ. Α ε. Ψ στ. Ψ É Άσκηση 6 Γράψτε συνάρτηση που να επιστρέφει 1 ή 0 ανάλογα µε το αν το ακέραιο όρισµά της είναι άρτιος ή περιττός (Υπόδειξη: Μπορείτε να χρησιµοποιήσετε τον bitwise τελεστή &). Ένας τρόπος να δει κανείς αν ένας ακέραιος είναι άρτιος ή περιττός είναι να εξετάσει αν το τελευταίο ψηφίο (bit) στη δυαδική του αναπαράσταση είναι 0 ή 1, αντίστοιχα Αυτό µπορεί να γίνει µε τη βοήθεια του τελεστή &. Υπενθυµίζουµε ότι ένα bit στη δυαδική αναπαράσταση του x & y είναι 1 αν και µόνο αν τα αντίστοιχα bits των x, y είναι και τα δύο 1. Για να ελέγξουµε εποµένως αν το τελευταίο bit του x είναι 0 ή 1, αρκεί να υπολογίσουµε το & του x µε τον αριθµό µε δυαδική αναπαράσταση , που είναι ο 1. Παρακάτω χρησιµοποιούµε την οκταδική αναπαράσταση του 1, που γράφεται προτάσσοντας ένα 0. iseven(int x) return(!(x & 01)); É Άσκηση 7 ιορθώστε τυχόν λάθη στον παρακάτω κώδικα. Μπορείτε να τον κάνετε πιο αποδοτικό; int x: printf( ώστε έναν ακέραιο αριθµό: ); scanf(%d, x); if (x = 1) printf(ο αριθµός είναι 1.\n); if (x!= 1) printf(ο αριθµός δεν είναι 1.\n); Τα λάθη και οι παραλείψεις σηµειώνονται παρακάτω µε κόκκινο χρώµα: int x; 3

5 printf( ώστε έναν ακέραιο αριθµό: ); scanf( %d, &x); if (x == 1) printf( Ο αριθµός είναι 1.\n ); else printf( Ο αριθµός δεν είναι 1.\n ); Παρατήρηση: Με τη βοήθεια της else αποφεύγεται ο επανέλεγχος της ισότητας της x µε το 1, που δεν είναι απαραίτητος.é Άσκηση 8 Γράψτε πρόγραµµα που να υπολογίζει το πλήθος των δευτερολέπτων ενός έτους. (Θεωρείστε ότι το έτος έχει 365 ηµέρες.) #define DAYS_PER_YR 365L #define HRS_PER_DAY 24L #define MINS_PER_HR 60L #define SECS_PER_MIN 60L printf( Ένα έτος έχει %ld δευτερόλεπτα.\n, DAYS_PER_YR * HRS_PER_DAY * MINS_PER_HR * SECS_PER_MIN); Η απάντηση είναι δευτερόλεπτα, αριθµός πολύ µεγάλος για να χωρέσει σε int. Γι αυτό το λόγο, οι σταθερές που πολλαπλασιάζουµε ορίζονται να είναι τύπου long (µε την κατάληξη L) και η printf εµφανίζει το αποτέλεσµα ως τύπου long (µε το προσδιοριστικό µετατροπής ld). Επίσης, αν και οι σταθερές εδώ δεν υπάρχει περίπτωση ν αλλάξουν σε κάποια µεταγενέστερη έκδοση του κώδικα (µια ηµέρα θα έχει πάντα 24 ώρες, κ.ο.κ.), η χρήση συµβολικών σταθερών κάνει τον κώδικα πιο ευανάγνωστο και κατανοητό. É Άσκηση 9 Γράψτε πρόγραµµα που να διαβάζει δύο (το πολύ τριψήφιους) φυσικούς αριθµούς και να εµφανίζει στην οθόνη το άθροισµα και τη διαφορά τους. Τα αποτελέσµατα θα δίνονται όπως στο παράδειγµα:

6 short x, y; printf( ώστε δύο φυσικούς (το πολύ τριψήφιους) αριθµούς: ); scanf( %d %d, &x, &y); printf( %5d\t\t%5d\n +%3d\t\t -%3d\n------\t\t \n%5d\t\t%5d\n, x, x, y, y, x + y, x y); Παρατήρηση: εν έχουµε συµπεριλάβει έλεγχο ορθότητας των εισαχθέντων αριθµών. Συµπληρώστε τον κώδικα ώστε το πρόγραµµα να αποκρίνεται κατάλληλα σε περίπτωση που εισαχθεί αριθµός που δεν είναι φυσικός ή είναι τετραψήφιος και πάνω. Παρατηρήστε ότι χρησιµοποιήσαµε τον τύπο short, µια και οι ακέραιοι που περιµένουµε δεν παίρνουν µεγάλες τιµές. É Άσκηση 10 Γράψτε πρόγραµµα που να υπολογίζει την ενέργεια στην οποία θα µετασχηµατιζόταν µια 2 8 δοσµένη µάζα m σύµφωνα µε το γνωστό τύπο του Einstein, E = mc, όπου c = 3 10 m/s είναι η ταχύτητα του φωτός. /* ήλωση συναρτήσεων εισόδου/εξόδου */ #define LIGHTSPEED 3.0e08 /* συµβολική σταθερά για το c */ /* ορίζεται να επιστρέφει int */ float m; double E; /* πρέπει να είναι double ώστε να χωράει µεγάλες τιµές */ printf("αυτό το πρόγραµµα υλοποιεί τον τύπο του Einstein \ E=m*c^2.\n\n"); printf(" ώστε τη µάζα m (σε γραµµάρια):"); scanf("%f", &m); if (m < 0) fprintf(stderr, "Η µάζα δεν µπορεί να είναι αρνητική!\n"); return(1); /* επιστροφή κωδικού 1 όταν συνέβει λάθος */ E = m * LIGHTSPEED * LIGHTSPEED; printf("e=%g Joules\n", E); /* %g σηµαίνει απλή ή εκθετική µορφή,όποια καταλαµβάνει λιγότερο χώρο */ 5

7 /* επιστροφή κωδικού 0 όταν όλα πήγαν καλά */ Με χρήση συναρτήσεων και µακροεντολών, το παραπάνω πρόγραµµα θα µπορούσε να ξαναγραφτεί ως εξής: double einstein(float); /* δήλωση της συνάρτησης einstein */ float m; printf("αυτό το πρόγραµµα υλοποιεί τον τύπο του Einstein \ E=m*c^2.\n\n"); printf(" ώστε τη µάζα m (σε γραµµάρια):"); scanf( %f, &m); if (m < 0) fprintf(stderr, Η µάζα δεν µπορεί να είναι αρνητική!\n ); return(1); printf( E=%g\n, einstein(m)); /* Τα παρακάτω θα µπορούσαν να βρίσκονται σε διαφορετικό αρχείο */ #define LIGHTSPEED 3.0e08 /* µακροεντολή για τον υπολογισµό τετραγώνου */ #define sqr(x) ((x) * (x)) /* ορισµός συνάρτησης einstein */ double einstein(float m) return(m * sqr(lightspeed)); É Άσκηση 11 Να γραφτεί πρόγραµµα που να επιλύει µια εξίσωση πρώτου βαθµού της µορφής ax + b = 0, όπου οι σταθερές a, b δίνονται από το χρήστη. Να εξετάζονται όλες οι ειδικές περιπτώσεις. 6

8 float a, b; printf("επίλυση της εξίσωσης ax+b=0 ως προς x.\n\n"); printf(" ώστε το a:"); scanf("%f", &a); printf(" ώστε το b:"); scanf("%f", &b); if (a==0) if (b==0) printf("απειρία λύσεων.\n"); return(1); else printf(" εν έχει λύση!\n"); return(2); /* φτάνουµε εδώ µόνο αν το a δεν είναι µηδέν */ printf("λύση x=%g\n", -b / a); É Άσκηση 12 Γράψτε την ακόλουθη εντολή if-else µε χρήση του τελεστή συνθήκης: if (x > 0) s = 1; else if (x < 0) s = -1; else s = 0; s = x > 0? 1 : x < 0? 1 : 0; Για να γίνει πιο κατανοητή η παραπάνω έκφραση, µπορούµε να προσθέσουµε (δεν είναι απαραίτητο) παρενθέσεις: s = (x > 0)? 1 : ((x < 0)? 1 : 0); É Άσκηση 13 Ξαναγράψτε τον παρακάτω κώδικα χρησιµοποιώντας την εντολή switch. Υποθέστε ότι τα MONDAY, TUESDAY, κ.λπ. είναι συµβολικές σταθερές που έχουν οριστεί παραπάνω. if (day == MONDAY day == TUESDAY day == WEDNESDAY day == THURSDAY day == FRIDAY) 7

9 printf( Εργασία...\n ); else if (day == SATURDAY day == SUNDAY) printf( Αργία!\n ); else printf( Λάθος ηµέρα!\n ); switch (day) case MONDAY: case TUESDAY: case WEDNESDAY: case THURSDAY: case FRIDAY: printf( Εργασία...\n ); break; case SATURDAY: case SUNDAY: printf( Αργία!\n ); break; default: printf( Λάθος ηµέρα \n ); break; É Άσκηση 14 Να γραφτεί πρόγραµµα για τον υπολογισµό του παραγοντικού ενός δοσµένου φυσικού αριθµού n. Να χρησιµοποιηθεί συνάρτηση µε και χωρίς αναδροµή. double factorial(int); int n; /* double µια και το n! µπορεί να είναι πολύ µεγάλος αριθµός */ printf("υπολογίζει το n! για δοσµένο n.\n\n"); printf(" ώστε τον n:"); scanf("%d", &n); /* Ο n δεν µπορεί να είναι αρνητικός */ if (n < 0) fprintf(stderr, "Ο n δεν µπορεί να είναι αρνητικός!\n"); return(1); printf("n!=%.0g\n", factorial(n)); 8

10 /* Μη-αναδροµική υλοποίηση */ double factorial(int n) double fact = 1; register int i; for (i = 2; i <= n; i++) /*Τι αποτέλεσµα έχει αυτό για n=1 ή 2; */ fact *= i; return(fact); /* Αναδροµική υλοποίηση (Προφανώς δεν µπορούν να είναι και οι δύο αυτές συναρτήσεις στο ίδιο project) */ double factorial(int n) if (n == 0) return(1); /* Από σύµβαση ισχύει ότι 0!=1 */ else return(factorial(n - 1) * n); Παρατήρηση: Η αναδροµή (recursion) συχνά διευκολύνει τη συγγραφή συναρτήσεων, ιδιαίτερα όταν πρόκειται για υπολογισµό ποσότητας, εξαρτώµενης από µια παράµετρο, τέτοιας ώστε να µπορεί να υπολογιστεί ξεκάθαρα κι εύκολα από την ίδια ποσότητα για µικρότερη (ή µεγαλύτερη) τιµή της παραµέτρου. Για παράδειγµα, η τιµή της συνάρτησης παραγοντικού f ( n) = 1 2 L n = n! υπολογίζεται εύκολα από την τιµή της στο n 1: f ( n) = f ( n 1) n. ηλαδή η συνάρτηση χρησιµοποιεί τιµές του εαυτού της σε µικρότερα ορίσµατα. Ο κανόνας αυτός επαναλαµβάνεται: f ( n 1) = f ( n 2) ( n 1), κ.ο.κ. Γνωρίζοντας τον κανόνα που µας δίνει την f (n) από την f ( n 1) καθώς και την τιµή της συνάρτησης στην ελάχιστη δυνατή τιµή της παραµέτρου, δηλαδή f ( 0) = 1, µπορούµε να υπολογίσουµε την f (n) σε οποιαδήποτε τιµή της παραµέτρου n. Ας δούµε n και το παράδειγµα της συνάρτησης g ( n) = a, όπου a µη-µηδενική σταθερά και n φυσικός αριθµός. Για να υλοποιήσουµε αναδροµικά τη συνάρτηση χρειαζόµαστε: 1) έναν (απλό) κανόνα που να µας δίνει τη g (n) από τη g ( n 1) και 2) την τιµή της g(n) για n = 0. Είναι φανερό ότι 1) g ( n) = a g( n 1) και 2) g ( 0) = 1. Να πώς θα γράφαµε τότε τη συνάρτηση σε γλώσσα C: double dpow(float a, int n) if (n == 0) return(1); else return(a * dpow(a, n - 1)); 9

11 Εύκολα µπορούµε να συµπεριλάβουµε και αρνητικούς εκθέτες: double dpow(float a, int n) if (n == 0) return(1); else if (n > 0) return(a * dpow(a, n - 1)); else return(dpow(a, n + 1) / a); Η χρήση αναδροµής θα πρέπει παρόλα αυτά να γίνεται µε µέτρο και µόνο σε περιπτώσεις που ταιριάζει αυτός ο τρόπος κλήσης. Κάτι που πρέπει να γνωρίζουµε καλά για τις αναδροµικές συναρτήσεις είναι ότι, λόγω του ότι οι κλήσεις της συνάρτησης στον εαυτό της αποθηκεύονται προσωρινά σε µια ειδική περιοχή µνήµης (στοίβα stack) αναµένοντας τις επιστροφές από την τελευταία προς την πρώτη, µεγάλες τιµές των παραµέτρων αναδροµής (n στα παραπάνω παραδείγµατα) µπορούν να προκαλέσουν υπερχείλιση αυτής της µνήµης (stack overflow) και ακαριαίο τερµατισµό του προγράµµατος. οκιµάστε, π.χ. να υπολογίσετε µε την αναδροµική συνάρτηση factorial το παραγοντικό του 300. É Άσκηση 15 n Γράψτε συνάρτηση που να υπολογίζει το διωνυµικό συντελεστή = k Μπορείτε να χρησιµοποιήσετε τη συνάρτηση της προηγούµενης άσκησης. n!. k!( n k)! double binomial(int n, int k) return(factorial(n) / (factorial(k) * factorial(n k))); Φυσικά, πριν τον ορισµό της συνάρτησης αυτής θα πρέπει να υπάρχει ο ορισµός ή δήλωση της factorial. É Άσκηση 16 Τι κάνει το παρακάτω πρόγραµµα; Ξαναγράψτε το χωρίς να χρησιµοποιήσετε εντολή goto. int x = 5; 10

12 start: if (x--) printf( %d\n, x); goto start; Το πρόγραµµα εµφανίζει τη φθίνουσα ακολουθία , έναν αριθµό σε κάθε γραµµή. Εναλλακτικά µπορεί να γραφτεί µε τη βοήθεια της εντολής while, ως εξής: int x = 5; while (x--) printf( %d\n, x); Άσκηση 17 Ένας φυσικός αριθµός είναι πρώτος (prime) αν δεν διαιρείται από κανέναν άλλον αριθµό εκτός, φυσικά, από το 1 και τον εαυτό του. Για παράδειγµα οι αριθµοί 1, 2, 3, 5, 7 είναι πρώτοι, ενώ οι 4, 6, 8, 9 δεν είναι. Γράψτε ένα πρόγραµµα που να ελέγχει αν ένας αριθµός που εισάγεται από το χρήστη είναι πρώτος ή όχι. Το πρόγραµµα ελέγχει, για δοσµένο αριθµό N, αν υπάρχει διαιρέτης του µεταξύ των αριθµών 2, 3,..., Ν-1. unsigned N; register int i; /* είναι πρώτος µέχρι αποδείξεως του αντιθέτου */ char prime = 1; printf( ώστε έναν φυσικό αριθµό: ); scanf( %u, &N); for (i = 2; i < N; i++) if (N % i == 0) prime = 0; /* υπάρχει διαιρέτης, άρα δεν είναι πρώτος */ 11

13 break; /* δεν χρειάζεται να ψάξουµε κι άλλο */ /* προσέξτε τη χρήση του τελεστή?: */ printf( Ο αριθµός %u%s είναι πρώτος.\n, N, prime? : δεν ); Άσκηση 18 Τι θα εµφανίσει το παρακάτω πρόγραµµα; void set(void), pa(void); float avg(int, int); float a; int x, y; int x, y; x = y = 4; set(); a = avg(x, y); pa(); printf( a = %f\n, a); void set(void) x = 10; y = 20; void pa(void) a = 0; printf( x = %d y = %d\n, x, y); float avg(int k, int l) float average; average = (k + l) / 2.0; return(average); 12

14 Οι µεταβλητές οι τοπικές στη main υπερισχύουν των εξωτερικών µε τα ίδια ονόµατα. Συνεπώς, η a υπολογίζεται σε (4 + 4) / 2=4. Όµως, αφού η a είναι εξωτερική, µηδενίζεται µέσα στην pa κι εποµένως αυτή η τιµή (µηδέν) είναι που εµφανίζεται στην οθόνη. Επίσης, η pa θα εµφανίσει τις τιµές 10 και 20 για τις x και y αφού στο χώρο της συνάρτησης αυτά τα ονόµατα αναφέρονται στις εξωτερικές µεταβλητές και οι τελευταίες έχουν τεθεί σε 10 και 20 µέσα στη set. É Άσκηση 19 Ποιό είναι το µέγεθος σε bytes καθενός από τους ακόλουθους πίνακες; Υποθέστε ότι ένας int καταλαµβάνει 2 bytes κι ένας double 8 bytes. char a[] = E, x, a, m, p, l, e ; char b[] = Example ; int c[2][3]; double d[10][10][10]; Ο πίνακας a έχει 7 στοιχεία χαρακτήρες. εδοµένου ότι πάντα ένας χαρακτήρας καταλαµβάνει 1 byte, ο a έχει µέγεθος 7 bytes. Ο b διαφέρει από τον a στο ότι είναι αλφαριθµητικό, δηλαδή έχει κι ένα 8 ο στοιχείο, το χαρακτήρα τερµατισµού \0. Έχει εποµένως µέγεθος 8 bytes. Ο c έχει 6 στοιχεία µεγέθους 2 bytes το καθένα, άρα συνολικό µέγεθος 12 bytes. Ο πίνακας d έχει 1000 στοιχεία, καθένα από τα οποία καταλαµβάνει 8 bytes. Έχει συνεπώς µέγεθος 8000 bytes. É Άσκηση 20 Γράψτε συνάρτηση που να βρίσκει τον ελάχιστο ενός δοσµένου πλήθους ακεραίων αριθµών. Οι αριθµοί αποθηκεύονται σε πίνακα. Να γραφτεί και πρόγραµµα δοκιµής της συνάρτησης. 1 #define MAX_N 100 /* µέγιστο πλήθος αριθµών */ int min(int [], int); /* δήλωση συνάρτησης */ int nums[max_n], /* πίνακας αριθµών */ N; /* πλήθος αριθµών */ register int i; /* µετρητής */ printf("αυτό το πρόγραµµα βρίσκει τον ελάχιστο ενός \ δοσµένου πλήθους ακεραίων.\n\n"); printf("πόσοι είναι οι αριθµοί? (το πολύ %d) ", MAX_N); 1 Ένα τέτοιο πρόγραµµα, που σκοπό έχει τη δοκιµή µιας συνάρτησης, καλείται και πρόγραµµα οδηγός (driver). 13

15 scanf("%d", &N); if (N <= 0) fprintf(stderr, "Άντε γειά!\n"); return(1); else if (N > MAX_N) fprintf(stderr, "Είναι πάρα πολλοί!\n"); return(2); printf(" ώστε τους αριθµούς:\n"); for (i = 0; i < N; i++) printf("αριθµός %3d:", i + 1); scanf("%d", &nums[i]); printf("\nο ελάχιστος είναι: %d\n", min(nums, N)); /* ορισµός συνάρτησης εύρεσης ελαχίστου */ /* Παρατηρείστε ότι οι τυπικές παράµετροι (a,n) δεν έχουν απαραίτητα το ίδιο όνοµα µε τις αντίστοιχες πραγµατικές (nums,n) µια και οι πρώτες είναι τοπικές στη min() ενώ οι δεύτερες στη. Για τον ίδιο λόγο, η µεταβλητή i στην πρώτη συνάρτηση δεν έχει καµία σχέση µε την οµώνυµή της στη δεύτερη. */ int min(int a[], int n) int min_a; register int i; É min_a = a[0]; for (i = 1; i < n; i++) if (a[i] < min_a) min_a = a[i]; return(min_a); Άσκηση 21 Γράψτε πρόγραµµα που να υπολογίζει το ιστόγραµµα των γραµµάτων σ ένα κείµενο, δηλαδή πόσες φορές εµφανίζεται κάθε γράµµα σ αυτό. 14

16 #include <ctype.h> register int ch; int hist[26] = 0; /* αρχικοποίηση σε µηδέν */ printf( Βρίσκει το ιστόγραµµα των γραµµάτων σ ένα κείµενο που εισάγει ο χρήστης.\nεισάγετε το κείµενο (τέλος µε Ctrl+Z):\n\n ); while ((ch = getchar())!= EOF) if (!isalpha(ch)) continue; /* µας ενδιαφέρουν µόνο τα γράµµατα */ /* ανεξάρτητα από το αν είναι κεφαλαία ή µικρά */ ch = tolower(ch); hist[ch - 'a']++; /* η έκφραση ch - 'a' παίρνει ακέραιες τιµές µεταξύ 0 και 25 */ printf("\n Να το αποτέλεσµα:\n\n"); for (ch = 0; ch < 26; ch++) /* αν κάποιο γράµµα εµφανίζεται καµία ή περισσότερες της µιας φορές, τότε το γράφουµε στον πληθυντικό, π.χ. a s */ printf("%3d %c%s\n", hist[ch], ch + 'a', (hist[ch]!= 1)? "'s" : ""); Παρατηρήσεις: 1. Χρησιµοποιούνται συναρτήσεις βιβλιοθήκης που κάνουν έλεγχο και µετατροπή είδους χαρακτήρα. Αυτές δηλώνονται στο αρχείο-επικεφαλίδα <ctype.h>. 2. Σηµειώστε ότι µπορείτε να τρέξετε αυτό το πρόγραµµα και µε τη χρήση της επανακατεύθυνσης (του DOS ή του UNIX). Π.χ. αν θέλετε να υπολογίσετε το ιστόγραµµα για το περιεχόµενο του αρχείου text κι έχετε ονοµάσει το εκτελέσιµο πρόγραµµα letter_hist, µπορείτε απλά να γράψετε τη διαταγή letter_hist<text. Το αποτέλεσµα είναι να επανακατευθύνθεί η είσοδος της getchar() ώστε να µην είναι πια το πληκτρολόγιο (συµβολικό αρχείο stdin) αλλά το αρχείο text. 3. Αξίζει να προσέξετε τη χρήση του τελεστή συνθήκης στην τελευταία printf. É Άσκηση 22 Γράψτε συνάρτηση που να υπολογίζει το άθροισµα δύο δισδιάστατων πινάκων τύπου float, δοσµένου µεγέθους. Γράψτε και πρόγραµµα δοκιµής της. 15

17 #define NROWS 3 /* πλήθος γραµµών */ #define NCOLS 3 /* πλήθος στηλών */ float A[NROWS][NCOLS], B[NROWS][NCOLS], C[NROWS][NCOLS]; register int i, j; /* δήλωση (πρωτότυπο) συνάρτησης άθροισης */ void addmtx(float [][NCOLS], float [][NCOLS], float [][NCOLS], int); printf( Πρόσθεση πινάκων %d X %d\n, NROWS, NCOLS); printf( Πρώτος πίνακας:\n ); /* ανάγνωση πρώτου πίνακα */ for (i = 0; i < NROWS; i++) printf( Γραµµή %d\n, i); for (j = 0; j < NCOLS; j++) scanf("%f", &A[i][j]); printf( εύτερος πίνακας:\n ); /* ανάγνωση δεύτερου πίνακα */ for (i = 0; i < NROWS; i++) printf( Γραµµή %d\n, i); for (j = 0; j < NCOLS; j++) scanf("%f", &B[i][j]); /* άθροιση δοσµένων πινάκων */ addmtx(a, B, C, NCOLS); printf( Άθροισµα:\n ); /* εµ φάνιση αποτελέσµατος */ for (i = 0; i < NROWS; i++) for (j = 0; j < NCOLS; j++) printf("%6.2f%c", C[i][j], (j < NCOLS 1)? '\t' : '\n'); /* ορισµός συνάρτησης άθροισης */ void addmtx(float a[][ncols], float b[][ncols], float c[][ncols], int nrows) register int i, j; for (i = 0; i < nrows; i++) for (j = 0; j < NCOLS; j++) c[i][j] = a[i][j] + b[i][j]; 16

18 Παρατηρήσεις: 1. Οι διαστάσεις των πινάκων έχουν θεωρηθεί σταθερές. Θα µπορούσαµε να επιτρέπουµε στο χρήστη να καθορίζει το ακριβές τους µέγεθος. Οι πίνακες θα µπορούσαν τότε να ορίζονται όπως παραπάνω (δηλαδή ως arrays µε µέγιστες επιτρεπτές διαστάσεις) ή ως δείκτες σε δείκτες και να καταλαµβάνουν χώρο στη µνήµη δυναµικά (µε τη βοήθεια των συναρτήσεων malloc ή calloc). 2. Οι εντολές ανάγνωσης για τους δύο πίνακες που πρόκειται να αθροιστούν είναι ίδιες. Κάτι τέτοιο υπαγορεύει να γράψουµε συνάρτηση που να διαβάζει πίνακα δοσµένου µεγέθους. Το ίδιο θα µπορούσε να γίνει (για λόγους κοµψότητας του κώδικα) και για την εµφάνιση πίνακα στην οθόνη. 3. Παρατηρείστε στη δήλωση και τον ορισµό της συνάρτησης ότι το πλήθος των στηλών των πινάκων, σε αντίθεση µε το πλήθος των γραµµών που είναι παράµετρος, δίνεται ρητά. Για να δούµε γιατί κάτι τέτοιο είναι απαραίτητο, ας θυµηθούµε πώς αποθηκεύεται στη C ένας δισδιάστατος πίνακας: οι γραµµές του αποθηκεύονται σε µια µεγαλύτερη γραµµή, η µία µετά την άλλη. Η πληροφορία που παρέχεται στη συνάρτηση από το όνοµα του πίνακα που περνιέται ως όρισµα είναι µόνο το πού αρχίζει στη µνήµη αυτός ο χώρος. Απαιτείται να καθοριστεί (ως σταθερά κι όχι ως παράµετρος) και το πού τελειώνει µία γραµµή κι αρχίζει η επόµενη, δηλαδή το πλήθος των στηλών. Αλλιώς, πώς µπορεί να ξέρει ποιό είναι π.χ. το στοιχείο a[1][0]; 4. Η εµφάνιση του πίνακα αποτελέσµατος γίνεται στη µορφή που γράφουµε τους πίνακες και στο χαρτί, δηλαδή τη µια γραµµή κάτω από την άλλη. Αυτό επιτυγχάνεται µε το να γράφεται µεταξύ δύο στοιχείων ένας κενός χαρακτήρας ( \t στο παράδειγµα) εκτός αν πρόκειται για το τέλος µιας γραµµής οπότε γράφεται ο χαρακτήρας νέας γραµµής ( \n ). Ο έλεγχος αυτός γίνεται µε τον τελεστή συνθήκης. Άσκηση 23 Η παρακάτω συνάρτηση υποτίθεται ότι ανταλλάσσει τις τιµές των παραµέτρων της. Για παράδειγµα, αν οι µεταβλητές a, b έχουν τιµές 1, 2 αντίστοιχα, µετά την κλήση swap(a, b) θα έχουν τιµές 2, 1. Είναι πράγµατι αυτό το αποτέλεσµα; Αν όχι, ξαναγράψτε τη συνάρτηση ώστε να εκτελεί σωστά αυτή τη λειτουργία. void swap(int x, int y) int temp; temp = x; x = y; y = temp; Είναι γνωστό ότι τα ορίσµατα σε µια συνάρτηση C περνιούνται µε τιµή (by value) και οι παράµετροι της συνάρτησης είναι µεταβλητές τοπικές σ αυτή, δηλαδή οποιεσδήποτε αλλαγές γίνονται σ αυτές δεν φαίνονται εκτός της συνάρτησης. Αυτό σηµαίνει ότι στην κλήση swap(a, b) οι παράµετροι x, y θα πάρουν τις τιµές 1, 2, µέσα στη swap θα αλλάξουν τις τιµές τους σε 2, 1, αλλά οι a, b δεν θα επηρεαστούν απ αυτό, αφού η swap 17

19 ξέρει µόνο τις τιµές των ορισµάτων a, b, και τίποτε παραπάνω. Για να επιτευχθεί το swap των a, b, θα πρέπει η συνάρτηση να µάθει κάτι παραπάνω γι αυτές από τις τιµές τους µόνο. Αν ξέρει τις διευθύνσεις τους, τότε µπορεί να αλλάξει και τις τιµές τους, αφού θα ξέρει πού βρίσκονται στη µνήµη αυτές οι µεταβλητές. Άρα οι παράµετροι της συνάρτησης δεν θα είναι πλέον ακέραιες µεταβλητές αλλά µεταβλητές δείκτη σε ακέραιες µεταβλητές και η κλήση θα είναι κλήση µε αναφορά (by reference): void swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp; Η κλήση της swap θα είναι τώρα swap(&a, &b). É Άσκηση 24 Τι εµφανίζει στην οθόνη το παρακάτω πρόγραµµα; int y = 1; void test(float [], int *, int); int x = 2, y = 3, z = 4; float a[3] = 0; test(a, &x, z); printf( %.1f %.1f %d %d %d\n, a[0], a[1], x, y, z); void test(float A[], int *w, int u) u++; *w += u; A[0] = *w / u; Η έξοδος θα είναι: To a[0] υπολογίζεται στην test ως 7/5, που δίνει 1 αφού και ο διαιρετέος και ο διαιρέτης είναι ακέραιοι. Αν επιθυµούσαµε πραγµατική διαίρεση, θα έπρεπε να 18

20 γράψουµε A[0] = (float)*a / b;. Το στοιχείο 1 του πίνακα είναι µηδέν, αφού ο πίνακας έχει αρχικοποιηθεί σε µηδενικά και η συνάρτηση µετέβαλε µόνο το πρώτο του στοιχείο. Η τιµή της µεταβλητής x µεταβάλλεται στη συνάρτηση λόγω του ότι περνάµε τη διεύθυνσή της (call by reference). Έτσι, στο σώµα της συνάρτησης, *w είναι η x και η *w += u; αλλάζει το περιεχόµενο της x. Αντίθετα, η τιµή της u δεν επηρεάζει το περιεχόµενο της z, αφού την τελευταία την περνάµε στη συνάρτηση µε τιµή (call by value). Αξίζει να υπενθυµίσουµε ότι το όνοµα του πίνακα a είναι η διεύθυνση της αρχής του, εποµένως το A[0] στη συνάρτηση ισοδυναµεί µε a[0], γι αυτό και αλλάζει η τιµή του a[0]. Τέλος, η τιµή που εµφανίζεται για την y είναι η 3 κι όχι η 1. Αν και υπάρχει εξωτερική µεταβλητή µ αυτό το όνοµα και τιµή 1, µέσα στη main υπερισχύει η τοπική µεταβλητή µε το ίδιο όνοµα. É Άσκηση 25 Είναι σωστό το ακόλουθο απόσπασµα κώδικα; int a[10];... a += 2; Το όνοµα ενός πίνακα είναι δείκτης στο πρώτο στοιχείο του. Ο ορισµός int a[10]; δεσµεύει 10 διαδοχικές θέσεις ακεραίων στη µνήµη και συνδέει το όνοµα a µε τη διεύθυνση της πρώτης θέσης. εν έχουµε δικαίωµα ν αλλάξουµε τη διεύθυνση αυτή. Η εντολή a += 2;, αν ήταν επιτρεπτή, θα σήµαινε µετατόπιση ολόκληρου του πίνακα δυο θέσεις προς τα δεξιά. É Άσκηση 26 Υποθέστε ότι p είναι ένας δείκτης τύπου float ο οποίος δείχνει στη θέση µνήµης Έστω ότι ο τύπος float απαιτεί 4 bytes για την αποθήκευσή του. Ποια θα είναι η τιµή του p αφού εκτελεστεί η εντολή p = p + 5; Το πρώτο byte του float στον οποίο δείχνει αρχικά ο p έχει διεύθυνση Η εντολή καταχώρησης αυξάνει τον p κατά 5 θέσεις float. Η νέα του τιµή δεν είναι =1005. Τώρα δείχνει στο πρώτο byte της θέσης float που βρίσκεται 5 θέσεις µετά την αρχική. εδοµένου ότι κάθε τέτοια θέση καταλαµβάνει 4 bytes, η νέα τιµή του p θα είναι x4=1020. Αυτό το παράδειγµα µας δείχνει το γιατί χρειάζεται να ξέρουµε σε τι τύπου θέσεις δείχνει ένας δείκτης. Έτσι, αν ο p ήταν δείκτης τύπου int κι ο τύπος int απαιτούσε 2 bytes, η εντολή p = p + 5; θα έδινε τιµή x2=1010. É Άσκηση 27 Τι θα εµφανίσει στην οθόνη το ακόλουθο απόσπασµα κώδικα; (Χρησιµοποιείστε το χαρακτήρα υπογράµµισης, _, για να δηλώσετε ένα κενό διάστηµα.) int a[] = 10, 23, 18, 5, -2; int *p; 19

21 p = a; printf( %5d, *(p + 2)); Θα εµφανιστεί το στοιχείο του πίνακα a που βρίσκεται 2 θέσεις µετά το πρώτο, έτσι ώστε να καταλαµβάνει τουλάχιστον 5 θέσεις, δηλαδή 3 κενά και µετά το 18: 18 É Άσκηση 28 Είναι σωστό το ακόλουθο απόσπασµα κώδικα; #define MAX MIN+100 #define MIN 10 Όχι, διότι ο ορισµός της συµβολικής σταθεράς MIN είναι µετά τον ορισµό της MAX που χρειάζεται αυτόν της MIN. É Άσκηση 29 Η C δεν διαθέτει τύπο για µιγαδικούς αριθµούς. ηµιουργείστε το δικό σας τύπο και χρησιµοποιείστε τον για να γράψετε συναρτήσεις για βασικές πράξεις µε µιγαδικούς: πραγµατικό µέρος, φανταστικό µέρος, µέτρο, συζυγής, πρόσθεση, αφαίρεση, πολλαπλασιασµός, διαίρεση. Ένας µιγαδικός αριθµός z = x + iy = ( x, y) δεν είναι παρά ένα διατεταγµένο ζεύγος πραγµατικών αριθµών, δηλαδή ένα σηµείο στο πραγµατικό επίπεδο. Τι πιο κατάλληλο εποµένως για τύπο µιγαδικών δεδοµένων από µια δοµή µε δύο πραγµατικά µέλη; ίνονται παρακάτω ο ορισµός του τύπου Complex και οι συναρτήσεις υλοποίησης των βασικών πράξεων. Υπενθυµίζεται ότι, για δύο µιγαδικούς αριθµούς z = x + iy, w = u + iv, έχουµε: Re( z) = x, Im( z) = y, z = x 2 + y 2, z = x iy, z + w = ( x + u) + i( y + v), z w = ( x u) + i( y v), z w = xu yv + i( xv + yu), z / w = zw typedef struct double real; /* πραγµατικό µέρος */ double imag; /* φανταστικό µέρος */ Complex; #define sqr(x) ((x) * (x)) /* τετράγωνο πραγµατικού αριθµού */ #include <math.h> /* περιέχει τη δήλωση της sqrt() */ /* πραγµατικό µέρος */ double Re(Complex z) w 2 20

22 return(z.real); /* φανταστικό µέρος */ double Im(Complex z) return(z.imag); /* µέτρο */ double cabs(complex z) return(sqrt(sqr(z.real)+sqr(z.imag))); /* συζυγής */ double conj(complex z) z.imag = -z.imag; return(z); /* µιγαδική πρόσθεση */ Complex cadd(complex z, Complex w) z.real += w.real; z.imag += w.imag; return(z); /* µιγαδική αφαίρεση */ Complex csubtr(complex z, Complex w) z.real -= w.real; z.imag -= w.imag; return(z); /* µιγαδικός πολλαπλασιασµός */ Complex cmult(complex z, Complex w) Complex q; q.real = z.real * w.real z.imag * w.imag; q.imag = z.real * w.imag + z.imag * w.real; return(q); /* µιγαδική διαίρεση */ Complex cdiv(complex z, Complex w) 21

23 Complex q; double absw2; q = cmult(z, conj(w)); absw2 = sqr(cabs(w)); q.real /= absw2; q.imag /= absw2; return(q); Ας σηµειωθεί ότι θα µπορούσαµε να χρησιµοποιήσουµε στις συναρτήσεις τις Re, Im, αντί των z.real, z.imag, κ.λπ. É Άσκηση 30 Γράψτε πρόγραµµα που θα µετράει τον αριθµό των bytes που περιέχει ένα αρχείο. Το όνοµα του αρχείου θα δίνεται από το χρήστη. char filename[20]; FILE *fp; register long count = 0; /* long: για µεγάλα αρχεία */ printf( ώστε το όνοµα του αρχείου: ); scanf( %s, filename); /* άνοιξε το αρχείο */ if ((fp = fopen(filename, r )) == NULL) fprintf(stderr, εν υπάρχει τέτοιο αρχείο!\n ); return(1); while (getc(fp)!= EOF) count++; /* αύξησε κατά 1 το µετρητή για κάθε χαρακτήρα */ /* κλείσε το αρχείο */ fclose(fp); printf( Το αρχείο %s περιέχει %ld bytes.\n, filename, count); Άσκηση 31 22

24 Να γραφτεί πρόγραµµα που να διαβάζει από το πληκτρολόγιο τα στοιχεία των φοιτητών ενός τµήµατος και να τα αποθηκεύει σ έναν πίνακα δοµών. Κάθε δοµή θα αποτελείται από τα εξής µέλη: Ονοµατεπώνυµο Κωδικός αριθµός Έτος (1 4) Μετά την καταχώρηση των δεδοµένων, ο χρήστης πρέπει να έχει τη δυνατότητα να ζητάει την εµφάνιση των στοιχείων των φοιτητών που φοιτούν σ ένα δεδοµένο έτος. #define MAX_NUMSTUDS 1000 /* µέγιστο πλήθος φοιτητών */ typedef struct char name[20]; short id; short year; Student; /* δοµή εγγραφής φοιτητή */ Student students[250]; /* πίνακας δοµών */ int numstuds; /* αριθµός φοιτητών */ short yea r; /* ζητούµενο έτος */ register int i; /* µετρητής */ printf( Πόσοι είναι οι φοιτητές; (< %d), MAX_NUMSTUDS); scanf( %d, &numstuds); if (numstuds <= 0 numstuds > MAX_NUMSTUDS) fprintf(stderr, Μη αποδεκτός αριθµός!\n ); return(1); printf( \nεισάγετε στοιχεία των φοιτητών:\n ); for (i = 0; i < numstuds; i++) printf( Φοιτητής %d\n, i + 1); printf( Ονοµατεπώνυµο: ); scanf( %s, students[i].name); printf( Κωδικός: ); scanf( %hd, &students[i].id); printf( Έτος: ); scanf( %hd, &students[i].year); printf( Ποιό έτος θέλετε να δείτε; ); scanf( %hd, &year); for (i = 0; i < numstuds; i++) 23

25 if (students[i].year!= year) continue; printf( %3hd %20s\n, students[i].id, students[i].name); Παρατηρήσεις: 1. Στο παραπάνω πρόγραµµα η προσπέλαση µιας εγγραφής φοιτητή γίνεται µε δείκτη θέσης στον πίνακα των φοιτητών. Εναλλακτικά θα µπορούσαµε να ορίσουµε δείκτη σε δοµή Student (Student *p) που αρχικά να δείχνει στο πρώτο στοιχείο (p = students) και να αναφερόµαστε στα µέλη κάθε στοιχείου του πίνακα µε τη βοήθεια του δείκτη (π.χ. p->name). 2. Θα έπρεπε να υπάρχει και έλεγχος της ορθότητας του έτους σπουδών που εισάγεται, δηλαδή αν είναι αριθµός µεταξύ 1 και Όπως έχει το πρόγραµµα δεν είναι και πολύ χρήσιµο. Μια πιο ρεαλιστική του µορφή θα περιελάµβανε εγγραφή σε αρχείο των εισαγόµενων φοιτητών, καθώς και δυνατότητα αναζήτησης των φοιτητών όχι ενός έτους µόνο αλλά και περισσοτέρων, για όσες φορές επιθυµεί ο χρήστης. É Άσκηση 32 Στο πρόγραµµα της προηγούµενης άσκησης, ο χώρος που καταλαµβάνει στη µνήµη ο πίνακας των φοιτητών είναι σταθερός (MAX_NUMSTUDS επί το µέγεθος της δοµής Student), ανεξάρτητα από το πραγµατικό πλήθος των φοιτητών, κάτι που µπορεί να οδηγεί σε σπατάλη χώρου. Επιπλέον, αυτός ο χώρος µπορεί να αποδειχθεί ανεπαρκής αν ο χρήστης επιθυµεί να εισάγει πάνω από ΜΑΧ_NUMSTUDS εγγραφές φοιτητών. είξτε πώς µπορεί ν αντιµετωπιστεί αυτό το πρόβληµα χρησιµοποιώντας δυναµική (αντί της στατικής) κατανοµή µνήµης. υναµική κατανοµή µνήµης, δηλαδή δέσµευση του χώρου που καταλαµβάνει ο πίνακας κατά την εκτέλεση του προγράµµατος κι όχι εξαρχής, µπορεί να επιτευχθεί µε τη βοήθεια των σχετικών συναρτήσεων της C, malloc και calloc. Επειδή τα πρωτότυπα (δηλώσεις) αυτών των συναρτήσεων βρίσκονται στο αρχείο-επικεφαλίδα <stdlib.h>, αυτό θα πρέπει να συµπεριληφθεί (#include <stdlib.h>) στο πρόγραµµα, µαζί µε το <stdio.h>. Παρακάτω δίνονται τα σηµεία του κώδικα που θα αλλάξουν. #include <stdlib.h>... Student *students;... 24

26 if ((students = (Student *)malloc(numstuds * sizeof(student))) == NULL) fprintf(stderr, Ανεπαρκής µνήµη!\n ); return(2); /* εναλλακτικά, ειδικά αν πρόκειται για πίνακες όπως εδώ, χρησιµοποιείται η calloc: if ((students = (Student *)calloc(numstuds, sizeof(student))) == NULL) fprintf(stderr, Ανεπαρκής µνήµη!\n ); return(2); */... /* απελευθέρωση δεσµευµένης µνήµης */ free(students); Ασκήσεις χωρίς απαντήσεις Άσκηση Α.1 Κάντε την Άσκηση 6 χρησιµοποιώντας τον τελεστή υπολοίπου ακέραιας διαίρεσης, % (Για απλότητα, θεωρείστε ότι ο αριθµός είναι µη-αρνητικός). Χρησιµοποιείστε το γεγονός ότι ένας αριθµός είναι άρτιος αν και µόνο αν το υπόλοιπο της διαίρεσής του µε το 2 είναι µηδέν. Άσκηση Α.2 Κάντε την Άσκηση 16 για το παρακάτω πρόγραµµα. Ποιά εντολή βρόχου θα χρησιµοποιούσατε εδώ; int x = 5; start: printf( %d\n, x); if (x--) goto start; 25

27 Άσκηση Α.3 Γράψτε συνάρτηση που, δοσµένου ενός πλήθους συχνοτήτων, να υπολογίζει τις αντίστοιχες δεξιόστροφες αθροιστικές συχνότητες. (Υπόδειξη: Τοποθετείστε τις συχνότητες σε πίνακες.) Άσκηση Α.4 Ποιο είναι το λάθος στο ακόλουθο απόσπασµα κώδικα; int i, *ip; ip = &i; ip *= 3; Άσκηση Α.5 Ξαναγράψτε το πρόγραµµα της Άσκησης 22 λαµβάνοντας υπόψη τις Παρατηρήσεις 1, 2. Άσκηση Α.6 Κάντε την Άσκηση Α.5 µε γινόµενο πινάκων αντί αθροίσµατος. Να συµπεριλάβετε έλεγχο συµφωνίας των διαστάσεων των πινάκων (Υπενθύµιση: Στο γινόµενο AB ο Β πρέπει να έχει τόσες γραµµές όσες στήλες έχει ο Α.). Άσκηση Α.7 Ξαναγράψτε τις συναρτήσεις µιγαδικής αφαίρεσης και διαίρεσης εκµεταλλευόµενοι τις συναρτήσεις µιγαδικής πρόσθεσης και πολλαπλασιασµού, αντίστοιχα. Θα χρειαστεί να γράψετε συναρτήσεις που να επιστρέφουν τον αντίθετο και τον αντίστροφο ενός µιγαδικού αριθµού. (Υπενθύµιση: z = x iy και 1/ z = z / z. ) Άσκηση Α.8 Ξαναγράψτε το πρόγραµµα της Άσκησης 30 λαµβάνοντας υπόψη τις Παρατηρήσεις που το συνοδεύουν. Άσκηση Α.9 Τι λάθος/παράλειψη υπάρχει στο παρακάτω απόσπασµα κώδικα; float *a; register int i; int N; printf( Πόσοι αριθµοί; ); scanf( %d, &N); printf( Εισάγετε τους αριθµούς: ); for (i = 0; i < N; i++); scanf( %f, a + i); 2 26

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

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

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

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

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

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

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

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

scanf() scanf() stdin scanf() printf() int float double %lf float

scanf() scanf() stdin scanf() printf() int float double %lf float Εισαγωγή Στον Προγραµµατισµό «C» Είσοδος Δεδοµένων Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Η συνάρτηση scanf() Η συνάρτηση

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟ ΟΣ: ΙΟΥΝΙΟΥ 5 Ι ΑΣΚΩΝ: Ε. ΚΟΦΙ ΗΣ Όλα τα ερωτήµατα είναι ισοδύναµα. Καλή επιτυχία! ΘΕΜΑ ο a) Βρείτε την αναπαράσταση

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 2 ο Τύποι Δεδοµένων Δήλωση Μεταβλητών Έξοδος Δεδοµένων Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Μνήµη και Μεταβλητές Σχέση Μνήµης Υπολογιστή και Μεταβλητών Η µνήµη (RAM) ενός

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

Κεφάλαιο 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 (); Πρότυπο ( ήλωση) Συνάρτησης (

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 4η σειρά ασκήσεων. Κοζάνη, 1 Νοεμβρίου 2007. Πρόγραμμα p4-1 (μεταγλώττιση και εκτέλεση) Πολύ απλό το πρώτο, για προθέρμανση! Πριν πατήσετε enter

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι δείκτες στη C Η έννοια του δείκτη Την έννοια του δείκτη τη συναντήσαμε σε προηγούμενα μαθήματα. Η συνάρτηση scanf(), καταχωρίζει τιμές σε μεταβλητές χρησιμοποιώντας τον τελεστή

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1) Strings στη C Ένα string είναι µία ακολουθία αλφαριθµητικών χαρακτήρων, σηµείων στίξης κτλ. Π.χ.

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

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

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8 Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 1000 1001 1002 1003 1004 1005 12 9.8 9976 3 1010 26 1006 1007 1008 1009 1010 1011 16 125 1299 a 13 1298 Δήλωση Δήλωση Τύπος

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

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές: Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

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

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

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

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

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Χαρακτήρες Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Χαρακτήρες - Εισαγωγή Έως τώρα έχουμε κατά κύριο λόγο χρησιμοποιήσει τους αριθμητικούς τύπους

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

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 8.7 Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 17-1 Εισαγωγή Στις προηγούµενες διαλέξεις µάθαµε πώς να δηλώνουµε, αρχικοποιούµε και να επεξεργαζόµαστε πίνακες. Σήµερα θα µελετήσουµε

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ Σκοπός της Άσκησης Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C Εργαστήριο 2 Τµήµα Πληροφορικής και Τηλεπικοινωνιών οµή προγράµµατος Οδηγίες προεπεξεργαστή #include... # define... τµήµα δηλώσεων ηλωσεις και ορισµοί µεταβλητών. ηλωσεις συναρτήσεων

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εντολές ελέγχου ροής προγράμματος (if-else & switch) Η εντολή if-else Η εντολή if-else υπάρχει σχεδόν σε όλες τις γλώσσες προγραμματισμού. Χρησιμοποιείται για τον έλεγχο της

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

for for for for( . */

for for for for( . */ Εισαγωγή Στον Προγραµµατισµό «C» Βρόχοι Επανάληψης Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Ο βρόχος for Η εντολή for χρησιµοποιείται

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

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C Τµήµα Πληροφορικής και Τηλεπικοινωνιών Περιεχόµενα Εισαγωγή Πρόγραµµα Φάσεις Υλοποίησης µε χρήση του εργαλείου DEV C + + οµή Προγράµµατος Η συνάρτηση main Μεταβλητές Τι είναι

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

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 5 Δομές Ελέγχου Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Δομές Ελέγχου Οι Boehm και Jacopini απέδειξαν ότι οποιοσδήποτε αλγόριθμος

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C Οι συναρτήσεις τι είναι Πρόκειται για ανεξάρτητα τμήματα ενός προγράμματος (υποπρογράμματα) που επιτελούν συγκεκριμένες εργασίες. Καλούνται από το κυρίως

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

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

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Σκοπός του μαθήματος Σκοπός του παρόντος μαθήματος είναι να μάθετε να κάνετε εισαγωγή δεδομένων σε πίνακες και περαιτέρω επεξεργασία

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

Γλώσσα Προγραμματισμού C

Γλώσσα Προγραμματισμού C Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C Οι συναρτήσεις τι είναι Πρόκειται για ανεξάρτητα τμήματα ενός προγράμματος (υποπρογράμματα) που επιτελούν συγκεκριμένες εργασίες. Καλούνται από το κυρίως

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΝΟΜΑΤΕΠΩΝΥΜΟ: AEM: ΜΕΡΟΣ Α: ΕΡΩΤΗΣΕΙΣ ΠΟΛΛΑΠΛΩΝ ΕΠΙΛΟΓΩΝ [15 µονάδες] ΣΗΜΑΝΤΙΚΕΣ ΔΙΕΥΚΡΙΝΙΣΕΙΣ: Επιλέξτε ΜΙΑ σωστή απάντηση για κάθε ερώτηση. Λάθος απαντήσεις βαθµολογούνται αρνητικά Σε ερωτήσεις που

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

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

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

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

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 9η εβδομάδα. Κοζάνη, 2 Δεκεμβρίου 2008. Δίνονται παραδείγματα που αποσαφηνίζουν και συμπληρώνουν όσα αναφέρθηκαν στο μάθημα σχετικά με τις δομές

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

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

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

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

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

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

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

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

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Προχωρημένα Θέματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ανακατεύθυνση Εισόδου/Εξόδου Συνήθως η τυπική είσοδος ενός προγράμματος (stdin) προέρχεται

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

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

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

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

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

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

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

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

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

Η δήλωση πού δηµιουργεί αποθήκευση τών δεδοµένων ονοµαζεται ορισµός τής µεταβλητής.

Η δήλωση πού δηµιουργεί αποθήκευση τών δεδοµένων ονοµαζεται ορισµός τής µεταβλητής. Από το βιβλίο C: Βήµα-Πρός-Βήµα, Κεφάλαιο 3ο Συγγραφείς: Οµάδα Waite, Mitchell Waite και Stephen Prata Εκδότης: Μ. Γκιούρδας Ανατύπωση σε ηλεκτρονική µορφή: Αλέξανδρος Στεφανίδης 3.4 Τύποι εδοµένων τής

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 5ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Πίνακες 77 Στατική δομή αποθήκευσης δεδομένων (το μέγεθος ορίζεται εξαρχής και δεν αλλάζει) Αποθήκευση πολλών μεταβλητών

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

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης Στο εργαστήριο αυτό, θα εξοικειωθούμε με τους τύπους δεδομένων που μας παρέχει η γλώσσα C, θα χρησιμοποιήσουμε τις δομές επανάληψης (for, while, do...while),

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

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 8.1-8.3 Πίνακες Ι ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 15-1 Πίνακες (Arrays) Σε αυτή την ενότητα θα µιλήσουµε για την δοµή δεδοµένων Πίνακας: 1. Εισαγωγή & Σύνταξη 2. ήλωση Πίνακα 3. Αρχικοποίηση

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

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δομές Δεδομένων και Κυρίως Πρόγραμμα Δομές δεδομένων εκτός από πίνακες: Structs Unions Enums Κυρίως πρόγραμμα Παράμετροι που

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

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

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19) Κεφάλαιο 8.7 Πολυδιάστατοι Πίνακες (Διάλεξη 19) Πολυδιάστατοι πίνακες Μέχρι τώρα μιλούσαμε για Μονοδιάστατους Πίνακες. ή π.χ. int age[5]= {31,28,31,30,31; για Παράλληλους πίνακες, π.χ. int id[5] = {1029,1132,1031,9991,1513;

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

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

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

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

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

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

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

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

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

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές. οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1 Παράδειγµα Πρόβληµα: Να γράψετε

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εντολές ελέγχου ροής προγράμματος (if-else & switch) Η εντολή if-else Η εντολή if-else υπάρχει σχεδόν σε όλες τις γλώσσες προγραμματισμού. Χρησιμοποιείται για τον έλεγχο της

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

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

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

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή παράσταση_1 = Παράσταση Αρχικοποίησης παράσταση_2 = Παράσταση Ελέγχου Επανάληψης παράσταση_3 = Παράσταση Ενημέρωσης

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

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων

Συναρτήσεις. Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων Συναρτήσεις Κατασκευαστικά Τεµάχια για τη ηµιουργία Αρθρωτών Προγραµµάτων ιεπαφή Συναρτήσεων (Πρωτότυπα Συναρτήσεων function prototypes): εδοµένα εισόδου (παράµετροι parameters): πέρασµα δια τιµής ή µέσω

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011 Τελεστής σύντοµης ανάθεσης Τελεστής σύντοµης ανάθεσης (shorthand assignment operator) µεταβλητή = µεταβλητή τελεστής

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

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

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

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ασκήσεις Επανάληψης Άσκηση 1 Το παρακάτω πρόγραμμα περιέχει μια δομή επανάληψης τύπου for. Να ξαναγραφεί ώστε να έχει ακριβώς την ίδια λειτουργία, χρησιμοποιώντας

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

Γλώσσα Προγραμματισμού C

Γλώσσα Προγραμματισμού C Προγραμματισμός ΗΥ: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες. Η C, όπως έχουμε αναφέρει, είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε για πρώτη φορά το 1972 από τον Dennis Ritchie στα AT&T Bell

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

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

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

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. Ερωτήσεις προόδου C Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. #include // δίνει οδηγία στον compiler να // συμπεριλάβει την βιβλιοθήκη stdio int

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

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C Master Mind εφαρμογή στη γλώσσα προγραμματισμού C Φεβρουάριος/Μάρτιος 2013 v. 0.1 Master-mind: κανόνες παιχνιδιού Στο master mind χρειάζεται να παράγονται κάθε φορά 4 τυχαία σύμβολα από ένα πλήθος 6 διαφορετικών

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

Γλώσσα Προγραμματισμού C

Γλώσσα Προγραμματισμού C Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

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

ΗΥ-150. Προγραμματισμός

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

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

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

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

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

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

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

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