Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 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 είναι ένας κατάλογος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 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;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Τρίτη Διάλεξη Εντολές Επιλογής και Επανάληψης Εντολές επιλογής Εντολή if Η πιο απλή μορφή της if συντάσσεται ως εξής: if ( συνθήκη ) Οι εντολές μέσα στα άγκιστρα αποτελούν

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

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

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

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

Κεφάλαιο 5ο: Εντολές Επανάληψης

Κεφάλαιο 5ο: Εντολές Επανάληψης Χρήστος Τσαγγάρης ΕΕ ΙΠ Τµήµατος Μαθηµατικών, Πανεπιστηµίου Αιγαίου Κεφάλαιο 5ο: Εντολές Επανάληψης Η διαδικασία της επανάληψης είναι ιδιαίτερη συχνή, αφού πλήθος προβληµάτων µπορούν να επιλυθούν µε κατάλληλες

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

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

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

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

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

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

Πρόλογος... 11. 1. Εισαγωγικά Στοιχεία... 13

Πρόλογος... 11. 1. Εισαγωγικά Στοιχεία... 13 ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος... 11 1. Εισαγωγικά Στοιχεία... 13 Το πρώτο πρόγραμμα... 15 Οι βασικοί τύποι δεδομένων και ο χειρισμός τους... 19 Σταθερές και Μεταβλητές... 19 Σταθερές τύπου ακεραίου... 19 Μεταβλητές

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

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

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

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

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

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

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

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

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

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

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα Απλά Προγράμματα Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα Οι Βασικοί κανόνες Κατανόηση

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

Κ. ΒΑΣΙΛΑΚΗΣ Γ. ΛΕΠΟΥΡΑΣ

Κ. ΒΑΣΙΛΑΚΗΣ Γ. ΛΕΠΟΥΡΑΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΛΟΠΟΝΝΗΣΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΣΗΜΕΙΩΣΕΙΣ ΓΙΑ ΤΗ ΓΛΩΣΣΑ C Κ. ΒΑΣΙΛΑΚΗΣ Γ. ΛΕΠΟΥΡΑΣ - 1 - ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ 1. ΣΥΓΓΡΑΦΗ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ C 1 2. ΤΙ ΕΙΝΑΙ ΕΝΑ ΠΡΟΓΡΑΜΜΑ

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

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

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

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

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

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Προεπεξεργαστής Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Διαδικασία Μεταγλώττισης πρόγραµµα επεξεργασίας κειµένου if a

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

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

Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C

Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C Η C, όπως όλες οι γλώσσες προγραμμστισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές λειτουργίες.

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

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

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

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

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

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

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

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

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

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

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Email: liliadis@fmenr.duth.gr 1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Τα προγράµµατα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό επεξεργαστή που προσφέρει και το Περιβάλλον της Visual C++. Οι εντολές

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

Διάλεξη 5η: Εντολές Επανάληψης

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

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

ΑΣΚΗΣΗ 1. Structural Programming

ΑΣΚΗΣΗ 1. Structural Programming ΑΣΚΗΣΗ 1 Structural Programming Στην άσκηση αυτή θα υλοποιήσετε σε C ένα απλό πρόγραµµα Βάσης εδοµένων το οποίο θα µπορούσε να χρησιµοποιηθεί από την γραµµατεία ενός πανεπιστηµίου για την αποθήκευση και

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

Αρχιτεκτονική Υπολογιστών Ι

Αρχιτεκτονική Υπολογιστών Ι Αρχιτεκτονική Υπολογιστών Ι ΥΠΟΔΕΙΞΕΙΣ ΓΙΑ ΤΗ ΛΥΣΗ ΤΩΝ ΕΡΓΑΣΤΗΡΙΑΚΩΝ ΑΣΚΗΣΕΩΝ Από το βιβλίο Αρχιτεκτονική Υπολογιστών & Προγραμματισμός Assembly (Συγγραφέας / Εκδότης : Παναγιώτης Παπάζογλου) Δρ. Παναγιώτης

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

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 5 ο Έλεγχος Προγράµµατος Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Η εντολή if (Ι) Η εντολή if είναι µία από τις βασικότερες δοµές ελέγχου ροής στη C, αλλά και στις περισσότερες

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ 1) Πότε χρησιμοποιείται η δομή επανάληψης

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

Να εκτυπωθούν οι πρώτες Ν σειρές του τριγώνου, χρησιµοποιώντας ένα πίνακα µεγέθους Ν στοιχείων (η Ν-οστή σειρά περιέχει Ν στοιχεία).

Να εκτυπωθούν οι πρώτες Ν σειρές του τριγώνου, χρησιµοποιώντας ένα πίνακα µεγέθους Ν στοιχείων (η Ν-οστή σειρά περιέχει Ν στοιχεία). Παράδειγµα: Το τρίγωνο του Pascal 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Να εκτυπωθούν οι πρώτες Ν σειρές του τριγώνου, χρησιµοποιώντας ένα πίνακα µεγέθους Ν στοιχείων (η Ν-οστή σειρά περιέχει Ν στοιχεία).

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

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

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

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

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

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

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

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29. 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29. 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή (Πρόχειρο σχέδιο - Μαθήµατος 3) p23-29 5. ΣΥΝΑΡΤΗΣΕΙΣ 5.1 Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή Η συνάρτηση είναι void, δεν επιστρέφει κάποια τιµή. //Oρισµός συνάρτησης χωρίς παραµέτρους // 12.

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

Τα δεδομένα στη C++ χωρίζονται σε 3 κατηγορίες: τους αριθμούς (numbers), τους χαρακτήρες (characters) και τις συμβολοσειρές (strings).

Τα δεδομένα στη C++ χωρίζονται σε 3 κατηγορίες: τους αριθμούς (numbers), τους χαρακτήρες (characters) και τις συμβολοσειρές (strings). Για να λύσουμε ένα πρόβλημα στη C++ χρειαζόμαστε δυο βασικές έννοιες. Η μια είναι οι οδηγίες εντολές, ο αλγόριθμος δηλαδή, που πρέπει να ακολουθήσουμε για να λύσουμε το πρόβλημά μας και η άλλη είναι τα

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

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη Επιλογή και επανάληψη Η ύλη που αναπτύσσεται σε αυτό το κεφάλαιο είναι συναφής µε την ύλη που αναπτύσσεται στο 2 ο κεφάλαιο. Όπου υπάρχουν διαφορές αναφέρονται ρητά. Προσέξτε ιδιαίτερα, πάντως, ότι στο

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

Εισαγωγή στις Συναρτήσεις

Εισαγωγή στις Συναρτήσεις Εισαγωγή στις Συναρτήσεις Η φιλοσοφία σχεδίασης της C βασίζεται στη χρήση των συναρτήσεων. Έχουμε ήδη δει και χρησιμοποιήσει πολλές συναρτήσεις που έχει το σύστημα, όπως είναι οι printf(), scanf(),αλλά

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

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

2 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C Δημοκρίτειο Πανεπιστήμιο Θράκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Παραγωγής & Διοίκησης Ακαδ. έτος 2015-2016 Τομέας Συστημάτων Παραγωγής Εξάμηνο A Αναπληρωτής Καθηγητής Στέφανος Δ. Κατσαβούνης 20 ΟΚΤ 2015

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Εισαγωγή Οι αριθμητικές πράξεις που εκτελούνται στον υπολογιστή αποτελούν το

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

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

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

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

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

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

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

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 15: Αναδρομή (Recursion) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Η έννοια της αναδρομής Μη αναδρομικός / Αναδρομικός Ορισμός Συναρτήσεων Παραδείγματα Ανάδρομης Αφαίρεση της Αναδρομής

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

Β. Να εξηγήσετε τι σηµαίνει ολίσθηση ενός δυαδικού αριθµού 3 θέσεις αριστερά. 5 4 3 µπορεί να είναι: Α: ουρά Β:στοίβα Γ:και τα δυο :τίποτα

Β. Να εξηγήσετε τι σηµαίνει ολίσθηση ενός δυαδικού αριθµού 3 θέσεις αριστερά. 5 4 3 µπορεί να είναι: Α: ουρά Β:στοίβα Γ:και τα δυο :τίποτα ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΙΑΓΩΝΙΣΜΑ κ ΘΕΜΑ 1 A. Σηµειώστε ποιες από τις παρακάτω προτάσεις είναι σωστές και ποιες λάθος: 1. Κάθε δοµή επιλογής κλείνει µε την εντολή τέλος_αν 2. Κάθε υποπρόγραµµα µπορεί να υλοποιηθεί

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

Διάλεξη 6: Δείκτες και Πίνακες

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

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

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

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

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

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr I ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ i e ΜΕΡΟΣ Ι ΟΡΙΣΜΟΣ - ΒΑΣΙΚΕΣ ΠΡΑΞΕΙΣ Α Ορισμός Ο ορισμός του συνόλου των Μιγαδικών αριθμών (C) βασίζεται στις εξής παραδοχές: Υπάρχει ένας αριθμός i για τον οποίο ισχύει i Το σύνολο

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

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων. Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων. Έως τώρα σε ένα πρόγραμμα έχουμε μάθει να εισάγουμε δεδομένα από το πληκτρολόγιο χρησιμοποιώντας την συνάρτηση scanf() και να εκτυπώνουμε δεδομένα

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

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση: ΠΡΟΓΡΜΜΑΤΑ ΣΕ C Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση: int b_to_d(int dyad[16]) που δέχεται ως είσοδο έναν θετικό ακέραιο δυαδικό αριθμό με τη μορφή πίνακα δυαδικών ψηφίων και επιστρέφει τον

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

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

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

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

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

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

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

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΠΟΛΛΕΣ ΕΝΤΟΛΕΣ ΕΠΙΣΤΡΟΦΗΣ Να γραφτεί ένα πρόγραμμα που να διπλασιάζει ένα ποσό που του δίνει ο χρήστης μεταξύ 0 και 1000. Να ελέγχει εάν το ποσό που εισήχθη

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

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

Πληρουορική Γ Γσμμασίοσ

Πληρουορική Γ Γσμμασίοσ Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015 1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα:

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

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

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

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να αναπτύξουν ένα πρόγραμμα όπου θα επαναλάβουν τα βήματα ανάπτυξης μιας παραθυρικής εφαρμογής.

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

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι Α λ γ ό ρ ι θ μ ο ι Αριθμητικοί τελεστές Οι αριθμητικοί τελεστές είναι: πρόσθεση, αφαίρεση, πολλαπλασιασμός και διαίρεση +,-,*,/ ύψωση σε δύναμη ^ πηλίκο ακέραιης διαίρεσης δύο ακεραίων αριθμών div υπόλοιπο

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

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

Λογικό και (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0) 0ι Λογικοί Τελεστές: Πρόκειται για τελεστές που μας επιτρέπουν να συνδυάσουμε απλές εκφράσεις συσχετισμού και να δημιουργήσουμε πιό πολύπλοκες λογικές εκφράσεις. Εχουμε λοιπόν: && Λογικό "και" (AND) μας

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

ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑ Ρ Μ Α ΜΑΤΙ Τ ΣΜΟΣ

ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑ Ρ Μ Α ΜΑΤΙ Τ ΣΜΟΣ Τμήμα Εφαρμοσμένης Πληροφορικής ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εξάμηνο Α' Φύλλο Ασκήσεων 3 ΔΟΜΕΣ ΕΠAΝΑΛΗΨΗΣ Διδάσκοντες: Μάγια Σατρατζέμη, Αλέξανδρος Χατζηγεωργίου, Ηλίας Σακελλαρίου, Στέλιος Ξυνόγαλος

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΟΙΚΗΣΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΟΙΚΗΣΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΙΑΧΕΙΡΙΣΗ Ε ΟΜΕΝΩΝ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ (Β ΕΞΑΜΗΝΟ) ιδάσκων: Επ. Καθηγητής Γρηγόρης Χονδροκούκης ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

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

Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα:

Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: υναµικός Προγραµµατισµός Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Σχεδιασµός αλγορίθµων µε υναµικό Προγραµµατισµό Το πρόβληµα του πολλαπλασιασµού πινάκων ΕΠΛ 3 Αλγόριθµοι και Πολυπλοκότητα 3- υναµικός

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

Αναδρομικοί Αλγόριθμοι

Αναδρομικοί Αλγόριθμοι Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας ένα ή περισσότερα στιγμιότυπα του ίδιου προβλήματος. Αναδρομικός αλγόριθμος (recursive algorithm) Επιλύει ένα πρόβλημα λύνοντας

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C Ιανουάριος 2013 Τι είναι ένα πρόγραμμα; Πρόγραμμα είναι μία σειρά από οδηγίες που δίνουμε στον υπολογιστή προκειμένου αυτός να κάνει κάποια συγκεκριμένη εργασία Πώς

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

Visual Basic Βασικές Έννοιες

Visual Basic Βασικές Έννοιες Visual Basi Βασικές Έννοιες «Είδα στον ύπνο µου ότι η ζωή είναι χαρά. Ξύπνησα και είδα ότι είναι χρέος. Αγωνίστηκα και είδα ότι τo χρέος είναι χαρά.» Ραµπριτανάθ Ταγκόρ Κουλλάς Χρίστος www.oullas.om oullas

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) 2004

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) 2004 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΗΡΕΣΙΩΝ) 2004 ΘΕΜΑ 1ο ΕΚΦΩΝΗΣΕΙΣ Α. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Θέµα 1 ο Α. Να απαντήσετε τις παρακάτω ερωτήσεις τύπου Σωστό Λάθος (Σ Λ) 1. Σκοπός της συγχώνευσης 2 ή περισσοτέρων ταξινοµηµένων πινάκων είναι η δηµιουργία

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

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

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

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

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή Δημιουργία Νέου αρχείου Από το μενού προγραμμάτων ανοίγετε το DEV C++ Επιλέγετε File-> New-> Source File (συντόμευση πληκτρολογίου Ctrl+N)

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

ΑΣΚΗΣΕΙΣ Ακολουθίας. Πίνακας τιµών µεταβλητών Χ Α Β α 5 20 8 10 23 15 15 23 8 β 3 18 4 8 17 13 13 17 4 γ

ΑΣΚΗΣΕΙΣ Ακολουθίας. Πίνακας τιµών µεταβλητών Χ Α Β α 5 20 8 10 23 15 15 23 8 β 3 18 4 8 17 13 13 17 4 γ ΑΣΚΗΣΕΙΣ Ακολουθίας Η δοµή Ακολουθίας είναι η πιο απλή δοµή του δοµηµένου προγραµµατισµού. Η κάθε εντολή ακολουθεί κάποια άλλη. Οι εντολές εκτελούνται ακριβώς µε τη σειρά όπως θα δοθούν στον αλγόριθµο

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

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

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 8.6 Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 16-1 Πίνακες - Επανάληψη Στην προηγούµενη διάλεξη κάναµε µια εισαγωγή στην δοµή δεδοµένων Πίνακας Σε ένα πίνακα ένα σύνολο αντικειµένων

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

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