Τμήμα Τεχνολογίας Πληροφορικής και Τηλεπικοινωνιών / ΤΕΙ Λάρισας Προγραμματισμός ΙI

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

Download "Τμήμα Τεχνολογίας Πληροφορικής και Τηλεπικοινωνιών / ΤΕΙ Λάρισας Προγραμματισμός ΙI"

Transcript

1 ΤΕΧΝΟΛΟΓΙΚΟ ΙΔΡΥΜΑ ΛΑΡΙΣΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΣΗΜΕΙΩΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ ( Γλώσσα Προγραμματισμού C ) Δρ. Ηλίας Κ. Σάββας ΛΑΡΙΣΑ, Ιανουάριος 2005 Η. Κ. Σάββας 1

2 Πίνακας Περιεχομένων Πίνακας Περιεχομένων ΣΥΝΑΡΤΗΣΕΙΣ Ι Συναρτήσεις Καθολικές Τοπικές Μεταβλητές Εμβέλεια (Scope) Μεταβλητών Η Μακροεντολή assert Μαθηματικά και C Προτεινόμενες Ασκήσεις Ασκήσεις ΣΥΝΑΡΤΗΣΕΙΣ ΙΙ - Αναδρομή Αναδρομή Παραγωγή Τυχαίων Αριθμών Προτεινόμενες Ασκήσεις Ασκήσεις ΔΕΙΚΤΕΣ I Δείκτες Συμπεριφορά Δεικτών Δείκτες & Συναρτήσεις Παραδείγματα και Προτεινόμενες Ασκήσεις Ασκήσεις ΔΕΙΚΤΕΣ ΙΙ: Δυναμική Διαχείριση Μνήμης Δυναμική Διαχείριση Μνήμης Δυναμικά Οριζόμενοι Πίνακες H Δομή «Ουρά»: Ένα Παράδειγμα Δυναμικής Διαχείρισης Μνήμης Παραδείγματα και Προτεινόμενες Ασκήσεις Ασκήσεις ΔΟΜΕΣ Δομές Πίνακες Δομών Προτεινόμενες Ασκήσεις Ασκήσεις ΕΝΩΣΕΙΣ & ΑΠΑΡΙΘΜΗΤΟΙ ΤΥΠΟΙ Ενώσεις Απαριθμητοί Τύποι Ορισμός Νέων Τύπων Δεδομένων Προτεινόμενες Ασκήσεις Ασκήσεις ΑΡΧΕΙΑ ΔΟΜΩΝ ΕΓΓΡΑΦΩΝ I (Binary Files) Αρχεία Εγγραφών Διαχείριση Αρχείων Εγγραφών Προτεινόμενες Ασκήσεις Ασκήσεις ΑΡΧΕΙΑ ΕΓΓΡΑΦΩΝ IΙ (Προχωρημένες Τεχνικές) Μετακίνηση του Δείκτη Αρχείου Χρήσιμες Συναρτήσεις Αρχείων Προτεινόμενες Ασκήσεις Ασκήσεις Η. Κ. Σάββας

3 9. ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ Text Files Αρχεία Κειμένου Συναρτήσεις Διαχείρισης Αρχείων Προτεινόμενες Ασκήσεις Ασκήσεις HEADER FILES Οι Βιβλιοθήκες στην C Standard Header Files Παραδείγματα και Προτεινόμενες Ασκήσεις Ασκήσεις ΠΑΡΑΜΕΤΡΟΙ ΣΤΗΝ ΣΥΝΑΡΤΗΣΗ main() Χρήση Παραμέτρων στην main() Διαχείριση Χρόνου Παραδείγματα και Προτεινόμενες Ασκήσεις Ασκήσεις Ο ΠΡΟΕΠΕΞΕΡΓΑΣΤΗΣ ΤΗΣ C Προεπεξεργαστής Παραδείγματα και Προτεινόμενες Ασκήσεις Ασκήσεις ΑΠΟΔΟΣΗ, ΜΕΤΑΦΕΡΣΙΜΟΤΗΤΑ & ΑΠΟΣΦΑΛΜΑΤΩΣΗ Προγραμματιστικές Τεχνικές Απόδοση Προγραμμάτων Μεταφερσιμότητα Προγραμμάτων Σφάλματα & Εντοπισμός τους ΠΑΡΑΡΤΗΜΑ: Λέξεις Κλειδιά & Τελεστές της C ΒΙΒΛΙΟΓΡΑΦΙΑ Η. Κ. Σάββας 3

4 1. ΣΥΝΑΡΤΗΣΕΙΣ Ι Το κλειδί της αποδοτικής επίλυσης προβλημάτων, είναι η διάσπασή τους σε μικρότερα και πιο απλά προβλήματα των οποίων η λύση είναι απλούστερη, και στη συνέχεια η συνένωσή τους ώστε να αποδοθεί η συνολική λύση του όλου προβλήματος. Η C παρέχει τις συναρτήσεις οι οποίες μπορούν να υλοποιήσουν αυτήν την top-down τεχνική προγραμματισμού. Κάθε πρόγραμμα λοιπόν, μπορεί να αποτελείται από ένα σύνολο συναρτήσεων (συμπεριλαμβανομένης και της main). Η εκτέλεση ενός προγράμματος βέβαια αρχίζει και τελειώνει στην main αλλά είναι δυνατή η κλήση άλλων συναρτήσεων μέσα στην main, οι οποίες είτε έχουν συμπεριληφθεί στο πρόγραμμα (όπως η printf για παράδειγμα που συμπεριλαμβάνεται στην βιβλιοθήκη stdio.h), είτε έχουν δημιουργηθεί από τον προγραμματιστή. 1.1 Συναρτήσεις Η C υποστηρίζει την χρήση συναρτήσεων (functions) αλλά όχι διαδικασιών (procedures) όπως άλλες γλώσσες προγραμματισμού. Μία συνάρτηση είναι η περιγραφή μίας διαδικασίας η οποία αποδίδει (επιστρέφει) μία τιμή η και πιθανώς καμία. Η γενική σύνταξη μίας συνάρτησης είναι η ακόλουθη: Τύπος_επιστρεφόμενου_δεδομένου Όνομα_Συνάρτησης(Τύποι δεδομένων των παραμέτρων της συνάρτησης). Σώμα συνάρτησης [Προαιρετικά] return Επιστρεφόμενη τιμή; Παράδειγμα 1.1: int akeraio_megisto(int a, int b) if (a>b) return a; else return b; Δηλαδή η παραπάνω συνάρτηση επιστρέφει έναν ακέραιο αριθμό, το όνομά της είναι akeraio_megisto και οι παράμετροί της είναι δύο ακέραιοι αριθμοί, ο a και ο b. 4 Η. Κ. Σάββας

5 Είναι δυνατόν, μία συνάρτηση να μην επιστρέφει καμία τιμή, ή και να μην έχει καμία παράμετρο η τέλος και τα δύο. Σε αυτή την περίπτωση ο τύπος της συνάρτησης ή των παραμέτρων δηλώνεται σαν void. Παράδειγμα 1.2: void print_stoixeia(void) printf( \n\nνικόλαος Οικονόμου ); printf( \n ); printf( \nτηλ.: ); Εδώ, η συνάρτηση απλά τυπώνει κάποια στοιχεία χωρίς καμία ιδιαίτερη επεξεργασία και προφανώς χωρίς να επιστρέφει κάποια τιμή. H κλήση (χρήση) των συναρτήσεων σε ένα πρόγραμμα (στην main) γίνεται με το ακόλουθο γενικό τρόπο: Όνομα μεταβλητής = όνομα συνάρτησης(πραγματικές παράμετροι); ή στην περίπτωση που η συνάρτηση είναι του τύπου void: όνομα συνάρτησης(πραγματικοί παράμετροι); Εννοείται ότι οι πραγματικοί παράμετροι γράφονται εφόσον υπάρχουν. Για παράδειγμα: x = akeraio_megisto(p, q); ή x = akeraio_megisto(7, 9); ή ακόμη και x = akeraio_megisto(p, 4); Φυσικά η μεταβλητές x, p, q πρέπει να είναι ακέραιες μεταβλητές αλλιώς είναι λάθος. Επίσης είναι δυνατόν να χρησιμοποιούνται αριθμοί ή μεταβλητές ή και τα δύο στις παραμέτρους μίας συνάρτησης. Τέλος, οι μεταβλητές p, και q πρέπει να έχουν πάρει τιμή πριν κληθεί η συνάρτηση. Στην περίπτωση void συνάρτησης, η κλήση της θα μπορούσε να είναι κάπως έτσι: for (i=1; i<=3; i++) print_stoixeia() ; Το αποτέλεσμα θα ήταν να τυπωθούν 3 φορές τα στοιχεία που εκτυπώνει η συνάρτηση print_stoixeia.. Συνήθως (δεν είναι πλέον απαραίτητο αλλά είναι μια καλή προγραμματιστική τεχνική), το πρότυπο της συνάρτησης δηλώνεται πριν την main και η πλήρης περιγραφή των συναρτήσεων αμέσως μετά. Η. Κ. Σάββας 5

6 Παράδειγμα 1.3: #include <stdio.h) int megalytero(int, int); main() int x, p=5, q=4; x = megalytero(p, q); printf( \nμεγαλύτερο των %d και %d είναι ο αριθμός %d\n, p, q, x); int megalytero(int a, int b) if (a>b) return a; else return b; Αποτελεί καλή πρακτική να δηλώνονται τα πρότυπα των συναρτήσεων στην αρχή γιατί ο προγραμματιστής μπορεί εύκολα να ελέγχει ποιες συναρτήσεις υπάρχουν στο πρόγραμμα και με τι τύπους δεδομένων. Κατά την δήλωση του πρότυπου δεν είναι απαραίτητο να γράφονται ονόματα μεταβλητών παρά μόνο οι τύποι δεδομένων τους. Η κλήση μίας συνάρτησης από το κυρίως πρόγραμμα απαιτεί και την χρήση πραγματικών παραμέτρων οι οποίες θα αντικαταστήσουν (κατά την κλήση της και μόνο), τις τυπικές παραμέτρους της συνάρτησης. Στο παραπάνω πρόγραμμα η κλήση x = megalytero(p, q) θα έχει σαν αποτέλεσμα να περάσουν οι τιμές των μεταβλητών p, και q στις a, και b αντίστοιχα. Η κλήση με αυτόν τον τρόπο περνάει τις τιμές των πραγματικών παραμέτρων (και μόνο τις τιμές γι αυτό είναι δυνατόν να χρησιμοποιηθούν και απόλυτοι αριθμοί, πχ x = megalyter(7, -5);) στις αντίστοιχες τυπικές παραμέτρους και ονομάζεται κλήση με τιμή (call by value). 1.2 Καθολικές Τοπικές Μεταβλητές Σε κάθε συνάρτηση χρησιμοποιούνται δύο ειδών μεταβλητές: οι τυπικοί παράμετροι και οι εσωτερικές ή τοπικές μεταβλητές (local variables). Για παράδειγμα στην επόμενη συνάρτηση: int mikrotero(int a, int b) int t; 6 Η. Κ. Σάββας

7 if (a<b) t = a; else t = b; return t; οι τυπικές παράμετροι είναι οι ακέραιες μεταβλητές a και b, ενώ τοπική μεταβλητή της συνάρτησης είναι η ακέραια πάλι μεταβλητή t. Ότι ισχύει με όλες τις συναρτήσεις ισχύει και για την main. Δηλαδή στο προηγούμενο παράδειγμα οι μεταβλητές x, p, και q αποτελούν το σύνολο των τοπικών μεταβλητών της main. Η εμβέλεια (scope) μίας μεταβλητής περιορίζεται στο σώμα της συνάρτησης που θα δηλωθεί ή εάν αποτελεί παράμετρο τότε πάλι στο σώμα της συνάρτησης στην οποία είναι παράμετρος. Με τον όρο εμβέλεια εννοείται που ακριβώς η μεταβλητή είναι ορατή, δηλαδή που μπορεί να χρησιμοποιηθεί. Στην περίπτωση που δύο μεταβλητέ ακόμη και με ίδιο όνομα και τύπο έχουν δηλωθεί σαν τοπικές δύο συναρτήσεων τότε η C αντιμετωπίζει σαν εντελώς διαφορετικές και ξένες μεταξύ τους. Βέβαια εδώ τίθεται το εξής ερώτημα: τι θα γινόταν αν μία μεταβλητή έπρεπε να είναι ορατή σε όλο το πρόγραμμα και σε όλες τις συναρτήσεις του; Για να συμβεί αυτό θα πρέπει η μεταβλητή να δηλωθεί στην αρχή του προγράμματος (αμέσως μετά τα πιθανά include / define). Οι μεταβλητές αυτού του τύπου ονομάζονται καθολικές μεταβλητές (global variables). Παράδειγμα 1.4: int N = 10; int megalytero(int int); main() int x, p, i; for (i=1; i<=n; i++) printf( \nεισαγωγή αριθμού: ); scanf( %d, &p); x = piliko(p) ; printf( \nτο πηλίκο του %d με %d είναι ο αριθμός %d\n, p, N, x); int piliko(int a) int t; t=b / N; return t; Η. Κ. Σάββας 7

8 Στο παραπάνω πρόγραμμα είναι: 1. Τοπικές μεταβλητές: 1.1. x, p, i στην main 1.2. t στην piliko 2. Παράμετροι: a 3. Καθολικές μεταβλητές: Ν H μεταβλητή N, ακριβώς επειδή είναι καθολική μεταβλητή μπορεί να χρησιμοποιηθεί σε όλες τις συναρτήσεις του προγράμματος. 1.3 Εμβέλεια (Scope) Μεταβλητών Κάθε μεταβλητή στην C χαρακτηρίζεται από δύο παραμέτρους: τον τύπος της και την εμβέλειά της. Οι τύποι εμβέλειας είναι οι ακόλουθες τέσσερις auto: Όλες οι μεταβλητές όπως έχουν χρησιμοποιηθεί μέχρι τώρα εκτός των καθολικών. Οι τοπικές μεταβλητές μίας συνάρτησης σε περίπτωση που δεν δηλωθούν διαφορετικά θεωρούνται auto - αυτόματες. extern: Οι μεταβλητές αυτής της τάξης θεωρούνται εξωτερικές μεταβλητές, δηλαδή, σε περίπτωση μετάφρασης πολλών προγραμμάτων C ταυτόχρονα, μπορούν να χρησιμοποιηθούν σε όλα τους και να μην είναι περιορισμένες μόνο στο πρόγραμμα που δηλώθηκαν. register: Υπάρχει περίπτωση κάποιες μεταβλητές να επιδρούν πολλή στην ταχύτητα ενός προγράμματος (για παράδειγμα η μεταβλητή ελέγχου ενός for βρόγχου). Θα ήταν σαφώς ενδεικνυόμενο αυτές οι μεταβλητές να αποθηκευθούν σε μία θέση μνήμης η οποία προσφέρεται για γρηγορότερες προσπελάσεις όπως οι καταχωρητές (registers). Αυτές είναι οι λεγόμενες register μεταβλητές. Βέβαια δεν είναι δυνατόν να δηλωθούν όλες οι μεταβλητές με αυτόν τον τρόπο γιατί είναι περιορισμένος ο αριθμός των καταχωρητών οπότε η C παίρνει την «πρωτοβουλία» και ακυρώνει κάποιες από αυτές τις δηλώσεις. static: Οι στατικές μεταβλητές μοιάζουν με τις αυτόματες αλλά με την εξής διαφορά: Όταν μία συνάρτηση κληθεί έχοντας αυτόματες τοπικές μεταβλητές αυτές με την λήξη της συνάρτησης εξαφανίζονται με αποτέλεσμα εάν αργότερα η συνάρτηση ξανακληθεί να έχει χαθεί η προηγούμενη τιμή τους. Σε αντίθεση, εάν οι τοπικές μεταβλητές έχουν δηλωθεί σαν στατικές δεν χάνουν την τιμή τους ακόμη και μετά την χρήση μίας συνάρτησης με αποτέλεσμα όταν η ίδια συνάρτηση ξανακληθεί να έχουν διατηρήσει την τιμή από την προηγούμενη κλήση της. Παράδειγμα 1.5: 8 Η. Κ. Σάββας

9 int synartisi(); main() int a; register int i; for (i=0; i<5; i++) a = synartisi(); printf("\nγια i=%d το αποτέλεσμα της συνάρτησης είναι %d",i,a); int synartisi() static int k; register i; for (i=0; i<10; i++) k++; return k; Στο παραπάνω πρόγραμμα οι εκτυπώσεις είναι οι ακόλουθες: Για i=1 το αποτέλεσμα της συνάρτησης είναι 10 Για i=2 το αποτέλεσμα της συνάρτησης είναι 20 Για i=3 το αποτέλεσμα της συνάρτησης είναι 30 Για i=4 το αποτέλεσμα της συνάρτησης είναι 40 Για i=5 το αποτέλεσμα της συνάρτησης είναι 50 Ενώ θα περίμενε κανείς συνέχεια το ίδιο αποτέλεσμα της συνάρτησης. Αυτό οφείλεται στο ότι η μεταβλητή k δεν χάνει την τιμή που είχε πάρει από την προηγούμενη κλήση της συνάρτησης και αυτό επειδή έχει δηλωθεί σαν static. Τέλος, οι register μεταβλητές έχουν σαν αποτέλεσμα την ταχύτερη εκτέλεση του προγράμματος. 1.4 Η Μακροεντολή assert Δεν είναι λίγες οι φορές, όπου είναι απαραίτητο να ελέγχονται οι τιμές των παραμέτρων σε μία συνάρτηση πριν αυτές χρησιμοποιηθούν από την ίδια την συνάρτηση. Αυτό βοηθάει ιδιαίτερα στον έλεγχο της ορθότητας των προγραμμάτων. Η C ενπεριέχει στην βιβλιοθήκη <assert.h>, την μακροεντολή assert με την οποία είναι δυνατόν να ελέγχονται οι παράμετροι μίας συνάρτησης εάν πληρούν κάποιες προϋποθέσεις. Για παράδειγμα έστω η ακόλουθη συνάρτηση: float dieresi(int x, int y) Η. Κ. Σάββας 9

10 return (float) x / y; Προφανώς, για να λειτουργήσει σωστά, πρέπει να είναι σίγουρο ότι η δεύτερη παράμετρος δεν είναι 0. Αν και ένας έλεγχος μπορεί να γίνει στο πρόγραμμα πριν κληθεί η συνάρτηση, η C δίνει την δυνατότητα να γίνεται έλεγχος και μέσα στο σώμα της συνάρτησης. Σε περίπτωση που ο έλεγχος αυτός αποτύχει τότε το πρόγραμμα θα τερματισθεί με ένα κατάλληλο μήνυμα. Δηλαδή στο επέμενο πρόγραμμα εάν η παράμετρος y πάρει μηδενική τιμή τότε το πρόγραμμα θα διακοπεί. Παράδειγμα 1.6: #include <assert.h> float dieresi(int, int); main () int a,b; float apot; printf("\neisagvgh 2 ariumon:"); scanf("%d%d",&a,&b); apot = dieresi(a,b); printf("\npiliko = %.2f\n",apot); float dieresi(int x, int y) assert(y!= 0); return (float) x / y; Η γενική σύνταξη της μακροεντολής είναι: assert( συνθήκη ελέγχου ή και συνθήκες); Παράδειγμα: assert(x > 0 && y > 20); Φυσικά, είναι δυνατόν να εμφανίζονται παραπάνω από μία assert σε κάποια συνάρτηση. Σο επόμενο παράδειγμα φαίνεται η χρήση του ελέγχου και πριν 10 Η. Κ. Σάββας

11 χρησιμοποιθούν οι παράμετροι αλλά και μετά ώστε η συνάρτηση να επιστρέψει κάποια ελεγχόμενη σχετικά τιμή. Παράδειγμα 1.7: float synartisi(float a, float b). assert(a>0 && a<10); assert(b!=0);. assert(apot > 0); return(apot); 1.5 Μαθηματικά και C H βιβλιοθήκη math.h περιέχει πολλές έτοιμες συναρτήσεις. Η χρήση της βιβλιοθήκης αυτής απαιτεί τον διακόπτη lm στο τέλος της διαταγής μετάφρασης (για συστήματα UNIX), πχ Μερικές από αυτές είναι οι ακόλουθες: gcc abc.c o abc.out lm. Συνάρτηση Επεξήγηση double cos(double x) Συνημίτονο γωνίας x σε rad double sin(double x) Ημίτονο γωνίας x σε rad double tan(double x) Εφαπτόμενη γωνίας x σε rad double exp(double x) e x double log(double x) Log(x) double log10 (double x ) Log 10 (x) double pow (double x, double y) x y double sqrt(double x) x double cbrt(double x) 3 x int ceil(double x) Επιστρέφει τον μικρότερο ακέραιο που είναι μεγαλύτερος του αριθμού x, δηλ. ceil(2.0011) 3 int floor(double x) Επιστρέφει τον στρογγυλοποιημένο ακέραιο του x, δηλ. floor(2.21) Προτεινόμενες Ασκήσεις Η. Κ. Σάββας 11

12 1. Να γίνει πρόγραμμα που υπολογίζει το μέσο όρο θερμοκρασιών μίας εβδομάδας εάν είναι αποθηκευμένες σε κάποιο πίνακα Α[7][2]. Η πρώτη στήλη του πίνακα υποδηλώνει την μέγιστη και η δεύτερη στήλη την ελάχιστη θερμοκρασία. float mesos_oros(float, float ); main () float a[7][2]=3,4,5,6,7,8,4,5,7,8,9,8,2,3; float mo[31]; int i; for (i=0; i<3; i++) mo[i]=mesos_oros(a[i][0],a[i][1]); printf("%5.2f\n",mo[i]); float mesos_oros(float a, float b) float x; x=(a+b)/2; return x; Παρατηρήσεις: Α. Η εντολή return x θα μπορούσε να αντικατασταθεί από την return (a+b)/2 οπότε η εντολή x=(a+b)/2 θα ήταν περιττή. Β. Η δήλωση του πρωτοτύπου της συνάρτησης δίνεται πριν την συνάρτηση main. Γ. Η περιγραφή της συνάρτησης δίνεται στο τέλος του προγράμματος και δεν παίρνει ερωτηματικό στο τέλος της. Δ. Η μεταβλητή x λέγεται τοπική μεταβλητή και δεν είναι ορατή έξω από το σώμα της συνάρτησης. E. Στη δήλωση του πρωτοτύπου της συνάρτησης δεν είναι απαραίτητη η δήλωση μεταβλητών παρά μόνο ο τύπος τους. 2. Να γραφεί μία συνάρτηση που να εκτυπώνει ένα «χρήσιμο» μήνυμα. void minima() printf( \n Μπλά Μπλά Μπλά \n); Παρατηρήσεις: Α. O τύπος της συνάρτησης είναι void γιατί δεν επιστρέφει κάποια τιμή. Β. Δεν είναι απαραίτητο στο σώμα μίας συνάρτησης να εμφανίζεται η εντολή return. 12 Η. Κ. Σάββας

13 Γ. Η κλήση της συνάρτησης γίνεται με το όνομά της αλλά είναι απαραίτητες οι παρενθέσεις, δηλαδή minima(); 3. (ΚΑΤΙ ΔΕΝ ΠΑΕΙ ΚΑΛΑ!!!) Να γίνει πρόγραμμα που με την βοήθεια μιας συνάρτησης να ανταλλάσσει τιμές σε δύο μεταβλητές. void ant_timon(int, int ); main () int a,b; printf("\n Δώσε 2 ακεραίους:"); scanf("%d%d",&a,&b); printf("πριν: a=%d και b=%d\n\n",a,b); ant_timon(a,b); printf("μετά: a=%d και b=%d\n\n",a,b); void ant_timon(int x, int y) int temp; temp=x; x=y; y=temp; Παρατήρηση: Τόσο πριν όσο και μετά την κλήση της συνάρτησης οι δύο μεταβλητές δεν ανταλλάσσουν τιμές παρά το γεγονός ότι ο κώδικας είναι σωστός και ο compiler δεν βρίσκει λάθος. 1.7 Ασκήσεις 1. Με χρήση συναρτήσεων, να γίνει πρόγραμμα που να υπολογίζει το ελάχιστο και μέγιστο 3 ακεραίων αριθμών. 2. Να γίνει πρόγραμμα που να εκτυπώνει σε ένα αρχείο (trig.dat) ένα πίνακα με τα ημίτονα και συνημίτονα γωνιών από μία έως 360 μοίρες. Υπόδειξη: Να χρησιμοποιήσετε την διαδικασία ανακατεύθυνσης του Unix (>). Η. Κ. Σάββας 13

14 3. Δημιουργήστε μία συνάρτηση ypoteinousa η οποία να υπολογίζει την υποτείνουσα ενός τριγώνου εάν είναι γνωστά τα μήκη των δύο καθέτων πλευρών του. Στη συνέχεια ελέγξτε τη συνάρτηση δημιουργώντας ένα πρόγραμμα που να την χρησιμοποιεί. 4. Ένα parking αυτοκινήτων χρεώνει με την εξής διαδικασία: Ελάχιστη χρέωση: 3 Ευρώ που αντιστοιχεί σε παραμονή του αυτοκινήτου μέχρι 2 ώρες. Για κάθε επιπλέον ώρα η χρέωση είναι 0.5 Ευρώ. Το μέγιστο της χρέωσης δεν μπορεί πάντως να ξεπερνάει τα 10 Ευρώ γνωστού όντας ότι κανένα αυτοκίνητο δεν επιτρέπεται να παρκάρει για πάνω από 24 ώρες. Να γίνει πρόγραμμα που θα υπολογίζει την χρέωση κάθε αυτοκινήτου εάν δέχεται σαν δεδομένα από ένα αρχείο cars.dat με γραμμογράφηση: Αρ. Αυτοκινήτου, Ώρες Παραμονής. Για την χρέωση του κάθε αυτοκινήτου να δημιουργηθεί συνάρτηση με όνομα xreosi. To πρόγραμμα να ελεγχθεί με δεδομένα τα ακόλουθα στοιχεία: ΡΙΑ ΥΙΒ ΡΙΒ Τέλος, η εκτύπωση να δίνεται σε μια μορφή όπως η παρακάτω: Αρ. Αυτοκινήτου Ώρες Παραμονής Χρέωση ΑΑΑ Χ Ευρώ 5. Να γραφεί μία συνάρτηση double dynami(double int) η οποία να υπολογίζει και επιστρέφει την δύναμη ενός double αριθμού υψωμένη σε ακέραιο εκθέτη. 6. Να γραφεί πρόγραμμα που με την βοήθεια συνάρτησης να υπολογίζει την λύση εξισώσεων πρώτου βαθμού. Οι περιπτώσεις του να είναι αδύνατες ή αόριστες να ελέγχονται στο κυρίως πρόγραμμα. 7. Να γραφεί συνάρτηση που να υπολογίζει το Ν-οστό όρο της ακολουθίας Fibonacci. Επίσης, να γραφεί συνάρτηση που να επιστρέφει 1 εάν ένας αριθμός είναι πρώτος ή 0 εάν δεν είναι. Τέλος να γραφεί πρόγραμμα που με χρήση των δύο προηγουμένων συναρτήσεων να υπολογίζει και εκτυπώνει αν κάποιος αριθμός Fibonacci είναι πρώτος αριθμός ή όχι. (Πρώτος λέγεται ένας αριθμός που διαιρείται μόνο με την μονάδα και τον εαυτό του, πχ 1, 2, 3, 5, 7, 11, 13, 17, Η ακολουθία Fibonacci ορίζεται ως εξής: οι πρώτοι δύο όροι της είναι 1 και η γενική της μορφή για τους υπόλοιπους όρους της είναι ότι προκύπτουν από το άθροισμα των δύο προηγουμένων, δηλαδή μερικοί αρχικοί όροι είναι οι: 1, 1, 2, 3, 5, 8, 13, 21, ). 8. Τι πρόκειται να εκτυπώσει το παρακάτω πρόγραμμα; int synartisi1(); 14 Η. Κ. Σάββας

15 int synartisi2(); main() int a, b; register int i; for (i=0; i<5; i++) a = synartisi1(); b = synartisi2(); printf("\nγια i=%d το αποτέλεσμα της 1 ης συνάρτησης είναι %d και της 2 ης είναι %d",i,a,b); int synartisi1() int k=0; register i; for (i=0; i<10; i++) k++; return k; int synartisi2() register i; static k; for (i=0; i<10; i++) k++; return k; 9. Να γραφεί ένα πρόγραμμα που με την βοήθεια δύο συναρτήσεων να κρυπτογραφεί ή αποκρυπτογραφεί ένα κείμενο. Η κρυπτογράφηση / αποκρυπτογράφηση να γίνεται γράμμα προς γράμμα και η συνάρτηση να επιστρέφει το μεθεπέμενο / προ-προηγούμενο του προς κρυπτογράφηση / αποκρυπτογράφηση γράμματος. Δηλαδή η αντιστοιχία κρυπτογράφησης να είναι a c, b d, c d,,z b και αντίστροφα. 10. Σε ένα πλέγμα δύο διαστάσεων (όπως φαίνεται στο παρακάτω σχήμα) κάθε κελί του μπορεί να είναι γεμάτο (1) ή άδειο. Ως ομάδα ορίζεται το σύνολο των κελιών που είναι συνδεδεμένα, δηλαδή αυτών που οριζόντια ή κάθετα είναι συνεχώς γεμάτα. Να γίνει ένα πρόγραμμα που αφού αρχικοποιεί έναν τέτοιο πίνακα, με την βοήθεια μίας συνάρτησης η οποία να δέχεται σαν παραμέτρους τις συντεταγμένες ενός κελιού να υπολογίζει και επιστρέφει το πλήθος των κελιών Η. Κ. Σάββας 15

16 της ομάδας του. Δηλαδή εάν στο πλέγμα του Σχήματος 1 η είσοδος στην συνάρτηση ήταν το κελί 3,2 το επιστρεφόμενο αποτέλεσμα θα έπρεπε να ήταν Σχήμα 1. Πλέγμα 2 διαστάσεων 1 16 Η. Κ. Σάββας

17 Η. Κ. Σάββας 17

18 2. ΣΥΝΑΡΤΗΣΕΙΣ ΙΙ - Αναδρομή 2.1 Αναδρομή Μία συνάρτηση είναι αναδρομική εάν καλεί (χρησιμοποιεί) τον εαυτό της με άμεσο ή έμμεσο τρόπο. Γενικά, αναδρομή σημαίνει ότι ορίζεται κάτι και στον ορισμό χρησιμοποιείται το οριζόμενο. Στα μαθηματικά πάρα πολλές συναρτήσεις ορίζονται αναδρομικά με πλέον γνωστή την συνάρτηση του παραγοντικού ενός ακέραιου αριθμού. Ο μη αναδρομικός ορισμός του παραγοντικού είναι: N! = L N ενώ ο αναδρομικός ορισμός του είναι: N ( N 1)!, N N! = 1, N = 0,1 > 1 Βασικά πρόκειται περί ακριβώς του ίδιου ορισμού με την διαφορά ότι ο αναδρομικός ορισμός χρησιμοποιεί το οριζόμενο (παραγοντικό) στον ορισμό του. Επίσης, μία βασική διαφορά είναι ότι στον αναδρομικό ορισμό μίας συνάρτηση πρέπει οπωσδήποτε να φαίνεται που ακριβώς τελειώνει (στο προκείμενο παράδειγμα εάν το N γίνει 1 ή 0). Στην C όλες οι συναρτήσεις μπορούν να κληθούν αναδρομικά (δηλαδή να καλέσουν τον εαυτό τους), ακόμη και η main. Στο παρακάτω παράδειγμα φαίνεται η κλήση της main από την main σε ένα μάλλον κουτό πρόγραμμα το οποίο τυπώνει άπειρες θεωρητικά φορές το μήνυμα C Programming Language. main() printf( \nc Programming Language ); main(); Παράδειγμα 2.1: 1. Να γίνει πρόγραμμα (με χρήση αναδρομικής συνάρτησης) που να υπολογίζει το παραγοντικό ενός αριθμού Ν, δηλ. Ν=1x2x3x x(n-1)xn. long parag(int); main () 18 Η. Κ. Σάββας

19 int N; Τμήμα Τεχνολογίας Πληροφορικής και Τηλεπικοινωνιών / ΤΕΙ Λάρισας printf("\nδώσε τo N:"); scanf("%d",&n); printf("\n\n\n"); printf("ν!=%10d\n",parag(n)); long parag(int t) if (t<=1) return (1); else return (t*parag(t-1)); Η αναδρομή στο παραπάνω παράδειγμα εκτελείται ως εξής: 5!=5x4! 4!=4x3! 3!=3x2! 2!=2x1! 1!=1 και στη συνέχεια 1! Επιστρέφει 1 2! Επιστρέφει 2x1=2 3! Επιστρέφει 3x2=6 4! Επιστρέφει 4x6=24 5! Επιστρέφει 5x24=120 η οποία είναι και η τελική τιμή. Ένα άλλο απλό παράδειγμα είναι ο υπολογισμός αθροίσματος ακεραίων αριθμών από N 1 N N + i, i > 1 a μέχρι b με χρήση αναδρομής, δηλαδή: i = i= 1. Εδώ αξίζει να i= 1 1, i = 1 προσεχθεί ότι πάλι ορίζεται με σαφήνεια το τέλος της αναδρομής (i=1). int athr(int N); if (N==1) return 1; else return N + athr(n-1); H αναδρομική κλήση της συνάρτησης athroisma(5) φαίνεται καθαρά στο Σχήμα 2. Η. Κ. Σάββας 19

20 athr(5)= 15 5+athr(4)= athr(3)= 3+athr(2)= Σχήμα 2. Αναδρομή 2+athr(1)= Γενικά, οι απλές αναδρομικές συναρτήσεις ακολουθούν κάποιους πρότυπους κανόνες: α) Πάντα πρέπει να υπάρχει ένα τέλος, δηλαδή εκείνο το οριακό σημείο που η αναδρομή τελειώνει (if (t<=1) και if (N==1) στα δύο προηγούμενα παραδείγματα), β) Εκφράζεται η αναδρομή με τον γενικό της τύπο όπου συνήθως είναι η ζητούμενη πράξη σε συνδυασμό με κλήση της ίδιας συνάρτησης αλλά πάντα με μείωση κάποιας από τις παραμέτρους της (return t*parag(t-1) ή return N + athr(n-1) στα δύο προηγούμενα παραδείγματα). 2.2 Παραγωγή Τυχαίων Αριθμών Μία από τις σημαντικότερες εφαρμογές των υπολογιστών είναι η κατασκευή προγραμμάτων εξομοίωσης. Με αυτά εάν τους δοθούν οι κατάλληλοι παράμετροι δημιουργείται ένας εικονικός χώρος εκτέλεσης κάποιας πραγματικής κατάστασης όπως για παράδειγμα εξομοίωση κίνησης μίας καταιγίδας, εκτέλεσης ενός πειράματος κλπ. Για να γίνει όμως κάτι τέτοιο είναι βασικό το να μπορεί μια γλώσσα προγραμματισμού να παράγει με κάποιον μηχανισμό τυχαίους αριθμούς οι οποίοι στη συνέχεια θα αποδίδονται στις παραμέτρους του εξομοιωτή. Αυτή η δυνατότητα βέβαια, μπορεί να φανεί χρήσιμη και σε άλλα προγράμματα που απαιτούν ένα βαθμό τυχαιότητας όπως για παράδειγμα τα παιχνίδια. H C υποστηρίζει την παραγωγή τυχαίων αριθμών με τους ακόλουθους μηχανισμούς (όλα συμπεριλαμβάνονται στην βιβλιοθήκη stdlib.h): Α) Συνάρτηση int rand(void); Επιστρέφει ένα τυχαίο ακέραιο αριθμό στο διάστημα 0 MAX_RAND, όπου MAX_RAND είναι ο μεγαλύτερος επιστρεφόμενος αριθμός (συνήθως τουλάχιστον ο ) Β) Ακέραιος RAND_MAX: O μεγαλύτερος ακέραιος αριθμός που μπορεί να επιστρέψει η rand. Γ) Συνάρτηση void srand(unsigned int); Επειδή η rand() επιστρέφει πάντα την ίδια ακολουθία τυχαίων αριθμών, η srand() την μεταβάλλει ανάλογα με την παράμετρο που θα πάρει. Δηλαδή η srand(5) θα έχει σαν αποτέλεσμα η συνάρτηση rand() να 20 Η. Κ. Σάββας

21 παράγει διαφορετικούς τυχαίους αριθμούς από το εάν είχε υποστηριχθεί από μια διαφορετική srand π.χ. srand(1001). Στο παρακάτω πρόγραμμα φαίνεται η παραγωγή και εκτύπωση 10 τυχαίων αριθμών. Παράδειγμα 2.2: #include <stdlib.h> main() int i, r; for (i=0; i<10; i++) r = rand(); printf( \n%10d,r); Βέβαια όσες φορές και εάν εκτελεσθεί το παραπάνω πρόγραμμα θα δώσει πάντα του ίδιους 10 τυχαίους αριθμούς, οπότε θα ήταν καλό να υποστηριχθεί με την srand. Μία έξυπνη χρήση της srand είναι η ακόλουθη: srand(time(null); Η συνάρτηση time(null) επιστρέφει την ώρα του ρολογιού του υπολογιστή οπότε κάθε φορά η srand παίρνει μία διαφορετική παράμετρο με αποτέλεσμα η rand που ακολουθεί να παράγει διαφορετικές ακολουθίες τυχαίων αριθμών. (ΠΡΟΣΟΧΗ: για να χρησιμοποιηθεί η time πρέπει να συμπεριληφθεί η βιβλιοθήκη time.h) Το μόνο πρόβλημα που δημιουργεί η συνάρτηση rand, είναι ότι παράγει ακέραιους αριθμούς στο διάστημα [0,RAND_MAX]. Οπότε για να παραχθούν ακέραιοι αριθμοί στο διάστημα [0,b], b>0, αρκεί να δοθεί η πράξη rand() % (b +1). Αυτή η πράξη, θα έχει σαν αποτέλεσμα ανεξάρτητα του παραγόμενου αριθμού να επιστρέφει το υπόλοιπό του διαιρώντας τον με το b+1, δηλαδή 0,1,2,,b. Αντίστοιχα, για παραγωγή ακεραίων στο διάστημα [a,b], τότε πρέπει να χρησιμοποιηθεί η rand ως εξής: rand() % (b-a+1) + a 2.3 Προτεινόμενες Ασκήσεις 1. Να γίνει πρόγραμμα που να υπολογίζει τον n-οστό όρο της ακολουθίας Fibonacci. (H ακολουθία Fibonacci ορίζεται αναδρομικά, δηλαδή ο κάθε όρος της είναι το άθροισμα των δύο προηγουμένων και οι δύο πρώτοι όροι είναι 0). Η. Κ. Σάββας 21

22 Fib1.c Συμβατικό Πρόγραμμα long fibon(int); main () int n; printf("\nδώσε τον τελικό όρο:"); scanf("%d",&n); printf("\n\n\n"); printf("%10d\n",fibon(n)); long fibon(int t) int i ; long fa=1, fb=1, fc ; if (t<3) return 1; Fib2.c Χρήση Αναδρομής long fibon(int); main () int n; printf("\nδώσε τον τελικό όρο:"); scanf("%d",&n); printf("\n\n\n"); printf("%10d\n",fibon(n)); long fibon(int t) if (t<=2) return 1; else return (fibon(t-1)+fibon(t-2)); for(i=3; i<=t; i++) fc=fa+fb; fa=fb; fb=fc; return fc; 2. Να γίνει πρόγραμμα που να εξομοιώνει την ρίψη ενός ζαριού 20 φορές. #include <stdlib.h> main () int i; for (i=0; i<20; i++) printf("%5d\n",rand()%6+1); 3. Να γίνει πρόγραμμα που με την βοήθεια μίας αναδρομικής συνάρτησης να υπολογίζει τα πολυώνυμα του Hermite, 22 Η. Κ. Σάββας

23 εάν H 0 (x)=1, H 1 (x)=2x,, H n (x)=2xh n-1 (x)-2(n-1)h n-2 (x). long Hermite(int N, int x); main() int n,x; long h; printf("\nείσοδος N όρου :"); scanf("%d",&n); printf("\nείσοδος μεταβλητής :"); scanf("%d",&x); h=hermite(n,x); printf("\n\nhermite :%10d\n\n",h); long Hermite(int a, int b) if (a==0) return 1; else if (a==1) return 2*b; else return 2*b*Hermite(a-1,b) - 2*(a-1)*Hermite(a-2,b); 4. Ένα υποατομικό σωματίδιο (και λίγη φυσική) κινείται ακολουθώντας τους ακόλουθους κανόνες: Στη χρονική στιγμή t=0, το σωματίδιο βρίσκεται στο σημείο X=0, Y=0 (ορθοκανονικό σύστημα συντεταγμένων). Στις επόμενες χρονικές στιγμές t=1,2,3,4,, το σωματίδιο κάνει ένα τυχαίο βήμα σε κάποια από τις τέσσερις πιθανές κατευθύνσεις, δηλ. x=x+1, ή x=x-1, ή y=y+1, ή τέλος y=y-1. Η κίνηση σταματάει όταν x 2 +y 2 R 2, όπου R κάποια δεδομένη τιμή. Να γίνει πρόγραμμα που να εξομοιώνει αυτή την κίνηση και ταυτόχρονα να παρακολουθούμε τις κινήσεις του σωματιδίου. Η κίνηση να γίνει με την βοήθεια αναδρομικής συνάρτησης η οποία να επιστρέφει τον χρόνο και να τυπώνει πριν την κάθε αναδρομική κλήση της τις νέες συντεταγμένες. Η συνάρτηση να είναι της μορφής int kinisi(int, int, int), όπου οι τρεις παράμετροι είναι το R, και οι αρχικές τιμές των συντεταγμένων Χ, Υ, δηλ. 0 και 0. #include <stdlib.h> Η. Κ. Σάββας 23

24 int swmatidio(int,int,int); main() int R; int time,x=0,y=0; printf("\nδώσε την ακτίνα: "); scanf("%d",&r); time=swmatidio(r,x,y); printf("\nσυνολικός χρόνος: %5d χρονικές μονάδες\n\n\n",time); /* Συναρτήσεις */ int swmatidio(int r,int x,int y) int k; k=rand()%4; switch (k) case 0 : y++; printf("\nδεξιά :"); break; case 1 : y--; printf("\nαριστερά :"); break; case 2 : x++; printf("\nεπάνω :"); break; case 3 : x--; printf("\nκάτω :"); break; printf(" (x,y)=(%d,%d)",x,y); if (x*x+y*y > r*r) printf("\n\nτο σωματίδιο βγήκε από την ακτίνα που ορίσατε\n\n"); return 1; return 1+swmatidio(r,x,y); 5. Μία συνάρτηση (hailstones - χαλάζι) ορίζεται ως εξής: f(n)=n/2 αν το n είναι ζυγός αριθμός, f(n)=3n+1 αν το n είναι περιττός αριθμός και εάν το n=1 τότε η συνάρτηση τερματίζεται. Να γίνει πρόγραμμα που να υπολογίζει τις τιμές της f εάν δοθεί κάποιο n>0. H f να υπολογίζεται με την βοήθεια αναδρομικής συνάρτησης void hailstones(int N). (Η εκτύπωση των τιμών να γίνεται από την συνάρτηση). 24 Η. Κ. Σάββας

25 void hailstones(int); main () int n; printf("εισαγωγή του N:"); scanf("%d",&n); hailstones(n); void hailstones(int N) printf("%5d",n); if (N!= 1) if (N % 2 == 0) hailstones(n/2); else hailstones(3*n+1); 2.4 Ασκήσεις 1. Να γίνει πρόγραμμα (με χρήση αναδρομής) που να υπολογίζει το άθροισμα S= N. 2. Να γραφεί ένα πρόγραμμα με την χρήση μόνο της συνάρτησης main και αναδρομής που θα εκτυπώνει συνεχώς το μήνυμα «Το Σύμπαν Δεν Τελειώνει Ποτέ». 3. Να γίνει πρόγραμμα που αφού δέχεται σαν δεδομένο μία συμβολοσειρά (string) να (με χρήση αναδρομικών συναρτήσεων) : a. Υπολογίζει και εκτυπώνει το μέγεθος της συμβολοσειράς, b. Αντιγράφει μία συμβολοσειρά σε μία άλλη, και c. Να διαπιστώνει εάν η συμβολοσειρά είναι παλινδρομική (ή καρκινικό). Παλινδρομικό ονομάζεται μία συμβολοσειρά που «διαβάζεται» ακριβώς με τον ίδιο τρόπο και ανάποδα, πχ το «ΑΒΓΔΓΒΑ». 4. Εάν υποτεθεί ότι θέλουμε να μελετήσουμε την συχνότητα εμφάνισης του αποτελέσματος ρίψης ενός ζαριού, να γίνει πρόγραμμα που εξομοιώνοντας την ρίψη του ζαριού να μετράει πόσες φορές και σε τι ποσοστό ήρθε 1,2,3,4,5 ή 6. Το πρόγραμμα να ρωτάει κάθε φορά πόσες ρίψεις επιθυμούμε. (Υπόδειξη: Να χρησιμοποιηθεί η εντολή switch). Η. Κ. Σάββας 25

26 5. Να γραφεί ένα εκπαιδευτικό πρόγραμμα για μαθητές δημοτικού που θέλουν να εξασκηθούν στο πολλαπλασιασμό μονοψηφίων ακεραίων. Με χρήση της συνάρτησης rand το πρόγραμμα να ρωτάει για παράδειγμα «Πόσο κάνει 7 επί 3:» και εάν το αποτέλεσμα είναι σωστό να εμφανίζει το μήνυμα «Μπράβο» αλλιώς το μήνυμα «Χρειάζεσαι λίγη εξάσκηση ακόμη! Ξαναπροσπάθησε.» 6. Να γίνει πρόγραμμα που να υπολογίζει την παρακάτω παράσταση (διωνυμική πιθανότητα) κάνοντας χρήση συνάρτησης για τον υπολογισμό το παραγοντικού (η κλήση της στο κυρίως πρόγραμμα θα γίνει 3 φορές) N! X = ( N M )! M! 7. Ένας ακέραιος αριθμός λέγεται τέλειος αν το άθροισμα των παραγόντων του ισούται με τον ίδιο το αριθμός (πχ 6 = 1 x 2 x 3, = 6). Να γίνει πρόγραμμα που με την βοήθεια συνάρτησης να βρίσκει αν ένας αριθμός είναι τέλειος ή όχι. 8. Να γίνει πρόγραμμα που να υπολογίζει την παράσταση y, μπορεί να είναι πρόσθεση, αφαίρεση, πολλαπλασιασμός ή διαίρεση, με χρήση της συνάρτησης float praxi(float, char, float). Ο έλεγχος για μη αποδεκτή πράξη (διαίρεση με μηδέν) να γίνεται στο κυρίως πρόγραμμα. 9. Γράψτε μία συνάρτηση που να επιστρέφει την k οστή ρίζα της int παραμέτρου της ( float k_riza(int, int) όπου η πρώτη παράμετρος είναι η δύναμη της ρίζας και η δεύτερη η υπόριζος ποσότητα). 10. Γράψτε μία συνάρτηση που να υπολογίζει όλους τους παράγοντες ενός αριθμού (πχ 27 = 3 x 3 x 3, 15 = 3 x 5, 11 = πρώτος) 11. Να μετατραπεί η προτεινόμενη άσκηση 4 ώστε: a. Η κίνηση να γίνεται σε χώρο τριών διαστάσεων, b. Η κίνηση πάλι να γίνεται σε χώρο 3 διαστάσεων αλλά με χρήση πολικών συντεταγμένων όπου η γωνία κίνησης θα δίνεται τυχαία. 26 Η. Κ. Σάββας

27 Η. Κ. Σάββας 27

28 3. ΔΕΙΚΤΕΣ I 3.1 Δείκτες Δείκτης είναι μία μεταβλητή στην οποία αποθηκεύεται μία διεύθυνση μνήμης. Συνήθως, αυτή η διεύθυνση είναι η περιοχή μίας άλλης μεταβλητής στην μνήμη. Εάν λοιπόν μία μεταβλητή περιέχει την διεύθυνση που έχει αποθηκευθεί μία άλλη μεταβλητή, τότε η πρώτη μεταβλητή λέγεται ότι «δείχνει» την δεύτερη όπως φαίνεται και στο Σχήμα 3. Διευθύνσεις μνήμης Περιεχόμενο διεύθυνσης Σχήμα 3. H μεταβλητή που βρίσκεται στη θέση 1000 δείχνει την θέση 1003 Η δήλωση μίας μεταβλητής δείκτη γίνεται με τον ακόλουθο τρόπο: Τύπος δεδομένων * Όνομα μεταβλητής; Για παράδειγμα η δήλωση int *p; σημαίνει ότι η μεταβλητή p είναι δείκτης και μάλιστα δείχνει σε ακέραια ποσότητα. Φυσικά, ο τύπος δεδομένων μπορεί να είναι οποιοσδήποτε δεκτός τύπος της C. Ο τύπος δεδομένων υποδηλώνει κατηγορηματικά τον τύπο του αντικειμένου τον οποίο θα δείχνει ο δείκτης. Οι τελεστές που χρησιμοποιούνται στους δείκτες είναι οι μοναδιαίοι τελεστές & και *. Λέγονται μοναδιαίοι επειδή επιδρούν και χρειάζονται μόνο ένα τελεστέο για να επιστρέψουν κάποια τιμή. Ο μεν τελεστής & επιστρέφει την διεύθυνση μνήμης της μεταβλητής που επιδρά και ο δε * επιστρέφει την τιμή που δείχνει η μεταβλητή στην οποία επιδρά. Για παράδειγμα, η δήλωση x = &p; θα έχει σαν αποτέλεσμα να αποδώσει (επιστρέψει) την διεύθυνση της μνήμης που έχει τοποθετηθεί η μεταβλητή p στην μεταβλητή x. Δεν έχει να κάνει καθόλου με την τιμή της p. Για την ακρίβεια, θα μπορούσε να ειπωθεί ότι η μεταβλητή x δέχεται την διεύθυνση της p. Εάν υποτεθεί ότι η p έχει την τιμή 7 και βρίσκεται στην διεύθυνση μνήμης 3000, τότε η x έχει πάρει την τιμή Η. Κ. Σάββας

29 Αντίθετα, η έκφραση: y = *x; σημαίνει ότι η μεταβλητή y θα πάρει την τιμή (και όχι διεύθυνση) που δείχνει η x δηλαδή την τιμή 7. Με άλλα λόγια θα μπορούσε να ειπωθεί ότι η y δέχεται την τιμή που υπάρχει στην διεύθυνση της x. Στο παρακάτω παράδειγμα φαίνεται καθαρά οι διαφορετικοί τρόποι χρήσης των δεικτών. Παράδειγμα 3.1: main() int a = -7; int *p, *q; p = &a; q = p; printf("\nοι τιμές των δεικτών p και q είναι: %d %d",p,q); (Α) printf("\nκαι δείχνουν τις τιμές %d %d \n",*p,*q); a=4; p = &a; q = p; printf("\nοι τιμές των δεικτών p και q είναι: %d %d",p,q); (Β) printf("\n Και δείχνουν τις τιμές %d %d \n",*p,*q); *q = -9; printf("\nοι τιμές των δεικτών p και q είναι: %d %d",p,q); (Γ) printf("\n Και δείχνουν τις τιμές %d %d ",*p,*q); printf("\nη μεταβλητή a έγινε :%d\n", a); ΠΑΡΑΤΗΡΗΣΕΙΣ Εάν υποτεθεί ότι η μεταβλητή a έχει τοποθετηθεί στην μνήμη που έχει διεύθυνση , τότε οι εκτυπώσεις θα δώσουν: (Α) (Β) (Γ) και a = -9 Αξίζει να παρατηρηθεί ότι αλλάζοντας τον δείκτη αλλάζει και η μεταβλητή που δείχνεται από αυτόν (περίπτωση Γ) Η. Κ. Σάββας 29

30 3.2 Συμπεριφορά Δεικτών Οι δείκτες μπορούν να χρησιμοποιηθούν για πράξεις και συγκρίσεις όπως οι κοινές μεταβλητές. Αυτό που χρειάζεται μεγάλη προσοχή είναι το εάν πρέπει στο κάθε πρόγραμμα να χρησιμοποιούνται οι διευθύνσεις που περιέχουν ή οι τιμές που δείχνουν. Επίσης, υπάρχει μία σημαντικότατη διαφορά στην χρήση των μοναδιαίων τελεστών ++ και --. Εδώ, δεν μεταβάλλεται όπως είναι αναμενόμενο κατά μία μονάδα η τιμή που περιέχει ο δείκτης αλλά κατά τόσες μονάδες όσες αντιπροσωπεύουν το αντικείμενο που δείχνει. Στο παρακάτω παράδειγμα φαίνεται καθαρά αυτή η διαφοροποίηση. Παράδειγμα 3.2: struct dokimi char x[50]; char y[100]; ; main() int a = -7, *pa; double b= , *pb; char c='a', *pc; struct dokimi d, *pd; pa = &a; pb = &b; pc = &c; pd = &d; printf("\nοι τιμές των δεικτών είναι: %d %d %d %d",pa,pb,pc,pd); printf("\n Και δείχνουν τις τιμές %d %f %c ",*pa,*pb,*pc); pa++; pb++; pc++; pd++; printf("\nοι τιμές των δεικτών είναι: %d %d %d %d",pa,pb,pc,pd); printf("\n Και δείχνουν τις τιμές %d %f %c ",*pa,*pb,*pc); Τα αποτελέσματα που θα δώσει το παραπάνω πρόγραμμα είναι τα ακόλουθα: Οι τιμές των δεικτών είναι: Και δείχνουν τις τιμές a Οι τιμές των δεικτών είναι: Και δείχνουν τις τιμές NaN + 30 Η. Κ. Σάββας

31 Δηλαδή οι δείκτες μεταβάλλονται κατά τόσες μονάδες όσες και το αντικείμενο που δείχνουν, πχ ο pd κατά 150. Επίσης, οι τιμές που δείχνουν μετά τις πράξεις είναι εντελώς αυθαίρετες και γι αυτό χρειάζεται μεγάλη προσοχή. Φυσικά επιτρέπονται όλες οι πράξεις ή συγκρίσεις εάν χρησιμοποιούνται οι τιμές που δείχνονται από του δείκτες. Στο παρακάτω πρόγραμμα φαίνεται καθαρά οι δυνατότητες πράξεων ή και συγκρίσεων. Παράδειγμα 3.3: main() int a = -7, b, *pa, *pb; pa = &a; pb = pa; printf("\nοι τιμές των δεικτών είναι: %d %d",pa,pb); printf("\n Και δείχνουν τις τιμές %d %d",*pa,*pb); b = 4; pb = &b; printf("\nοι τιμές των δεικτών είναι: %d %d",pa,pb); printf("\n Και δείχνουν τις τιμές %d %d",*pa,*pb); b = 2 * a + (*pb) * 10; printf("\nοι τιμές των δεικτών είναι: %d %d",pa,pb); printf("\n Και δείχνουν τις τιμές %d %d:",*pa,*pb); printf("\nενώ οι a και b έγιναν %d %d:",a,b); if (pa > pb) printf("\n\no δείκτης pa είναι σε υψηλότερη θέση από τον pb"); else printf("\n\no δείκτης pb είναι σε υψηλότερη θέση από τον pa"); if (*pa > *pb) printf("\n\no δείκτης pa δείχνει μεγαλύτερη τιμή από τον pb"); else printf("\n\no δείκτης pb δείχνει μεγαλύτερη τιμή από τον pa\n\n"); Τα αποτελέσματα του παραπάνω προγράμματος είναι: Οι τιμές των δεικτών είναι: Και δείχνουν τις τιμές a Οι τιμές των δεικτών είναι: Η. Κ. Σάββας 31

32 Και δείχνουν τις τιμές NaN + Οι τιμές των δεικτών είναι: Και δείχνουν τις τιμές -7-7 Οι τιμές των δεικτών είναι: Και δείχνουν τις τιμές -7 4 Οι τιμές των δεικτών είναι: Και δείχνουν τις τιμές -7 26: ενώ οι a και b έγιναν -7 26: Ο δείκτης pa είναι σε υψηλότερη θέση από τον pb Ο δείκτης pb δείχνει μεγαλύτερη τιμή από τον pa Ένας δείκτης ο οποίος δεν δείχνει σε καμία διεύθυνση του αποδίδεται από την C η τιμή null. Για την τιμή null (που στην πραγματικότητα είναι 0), η C εγγυάται ότι δεν υπάρχει τίποτα και ποτέ αποθηκευμένο σ αυτήν την διεύθυνση. Επομένως, η αρχικοποίηση ενός δείκτη μπορεί να γίνει με ένα από τους ακόλουθους τρόπους: Μεταβλητή δείκτη = NULL; *Μεταβλητή δείκτη = 0; όπως φαίνεται και στο παράδειγμα που ακολουθεί. Παράδειγμα 3.4: main() int *pa, *pb=0; pa = NULL; printf("\nοι τιμές των δεικτών είναι: %d %d",pa, pb); Αποτελέσματα: Οι τιμές των δεικτών είναι: Δείκτες & Συναρτήσεις Μία από τις πιο σημαντικές εφαρμογές των δεικτών είναι η χρησιμοποίησή τους στις παραμέτρους των συναρτήσεων. Ας υποτεθεί ότι μία συνάρτηση πρέπει να υπολογίζει και φυσικά επιστρέφει την μετατροπή ενός ποσού σε ευρώ σε δολάρια ΗΠΑ και λίρες Αγγλίας (και δεν πρέπει να χρησιμοποιηθούν καθολικές μεταβλητές). Το πρόβλημα έγκειται στο γεγονός ότι μία συνάρτηση επιστρέφει αποκλειστικά μία τιμή ενώ εδώ ζητούνται δύο. Προφανώς μία παράμετρος της συνάρτησης θα είναι η μεταβλητή που 32 Η. Κ. Σάββας

33 αντιπροσωπεύει το ποσό σε ευρώ. Τότε, ας υποτεθεί ότι θα περαστούν οι μεταβλητές που αντιπροσωπεύουν τα δύο άλλα νομίσματα πάλι σαν παράμετροι. Το πρόγραμμα θα μπορούσε να είναι όπως παρακάτω: Παράδειγμα 3.5: void metatropi(float, float, float); main() float e, d, p; printf("\nδώσε το ποσό σε ευρώ:"); scanf("%f",&e); metatropi(e,d,p); printf("τα αντίστοιχα ποσά σε δολάρια και λίρες είναι %10.2f και %10.2f",d,p); /* Συνάρτηση Μετατροπής */ void metatropi(float euro, float dol, float lira) dol = 1.16 * euro; lira = * euro; Φυσικά, το πρόγραμμα είναι λάθος (άσχετα αν ο compiler δεν πρόκειται να διαγνώσει κανένα λάθος) και τα αποτελέσματα που θα έδινε είναι: Δώσε το ποσό σε ευρώ:10 Τα αντίστοιχα ποσά σε δολάρια και λίρες είναι 0.00 και 0.00 Το ζητούμενο είναι ότι άσχετα αν τα ποσά θα υπολογισθούν σωστά και οι παράμετροι περάσουν με τον σωστό τρόπο, οι τιμές τους δεν μεταφέρονται έξω από το σώμα της συνάρτησης. Ο λόγος είναι ιδιαίτερα απλός: οι μεταβλητές περνούν τις τιμές τους στις παραμέτρους (δηλαδή μία εικόνα τους) και κατά συνέπεια παραμένουν άθικτες εκτός συνάρτησης. Η λύση στο ζητούμενο πρόβλημα θα ήταν εάν μπορούσαν να περαστούν σαν παράμετροι οι διευθύνσεις των μεταβλητών ώστε κάθε αλλαγή να επηρέαζε τις ίδιες τις μεταβλητές και όχι απλά και μόνο τις τιμές τους. Η κλήση των συναρτήσεων με αυτό τον τρόπο ονομάζεται κλήση με διεύθυνση (call by reference). Κάνοντας χρήση αυτή τη τεχνική, το σωστό πρόγραμμα στο παραπάνω πρόβλημα είναι το ακόλουθο: Παράδειγμα 3.6: Η. Κ. Σάββας 33

34 void metatropi(float, float *, float *); main() float e, d, p; printf("\n Δώσε το ποσό σε ευρώ:"); scanf("%f",&e); metatropi(e, &d, &p); printf("τα αντίστοιχα ποσά σε δολάρια και λίρες είναι %10.2f και %10.2f",d,p); /* Συνάρτηση Μετατροπής */ void metatropi(float euro, float *dol, float *lira) *dol = 1.16 * euro; *lira = * euro; Αποτελέσματα: Δώσε το ποσό σε ευρώ:10 Τα αντίστοιχα ποσά σε δολάρια και λίρες είναι και 6.17 Η διαφορά αυτού του προγράμματος με το προηγούμενο είναι στον τρόπο περάσματος παραμέτρων στην συνάρτηση. Εδώ η μεταβλητή που αντιπροσωπεύει το ευρώ, η e, περνάει με τον συνηθισμένο τρόπο (κλήση με τιμή call by value) ενώ οι υπόλοιπες, οι d και p) περνούν με τις διευθύνσεις τους (κλήση με διεύθυνση - call by reference) ώστε οι οποιεσδήποτε αλλαγές να γίνονται στις διευθύνσεις τους με αποτέλεσμα να είναι «ορατές» και εκτός της συνάρτησης που τις χρησιμοποιεί. Στην κλήση με διεύθυνση, σαν παράμετροι πρέπει να περνούν δείκτες ενώ στην κλήση της συνάρτηση οι μεταβλητές περνούν με τις διευθύνσεις τους. Δηλαδή: Δήλωση πρότυπου συνάρτησης για κλήση με διεύθυνση: Τύπος_δεδομένων_επιστροφής_ή_void Όνομα συνάρτησης(τύπος δεδομένων *, ); Κλήση συνάρτησης: Όνομα_μεταβλητής_ή_τίποτα(αν είναι void) Όνομα συνάρτησης(&όνομα μεταβλητής, ); 34 Η. Κ. Σάββας

35 3.4 Παραδείγματα και Προτεινόμενες Ασκήσεις 1. Πρόγραμμα χρήσης και επεξεργασίας δεικτών. main() int a=10, *b; b=&a; printf("\n %d",b); printf("\n %d\n\n\n",&b); printf("\n %d\n\n\n",*b); printf("\n %d\n\n\n",&a); Παρατηρήσεις Α) Η δήλωση *b δηλώνει ότι η b είναι μία μεταβλητή δείκτη σε ακέραιο. Β) Η πρόταση b = &a; έχει σαν αποτέλεσμα να αποθηκεύει την διεύθυνση της μεταβλητής a στην διεύθυνση του b. Έτσι, από εκείνο το σημείο και ύστερα στο πρόγραμμα, η ποσότητα *b έχει την τιμή του a. Γ) Τα αποτελέσματα που θα μπορούσαμε να πάρουμε στο παραπάνω πρόγραμμα είναι: , , 10, Δηλαδή, η διεύθυνση του a είναι , του b είναι και 10 είναι η τιμή που δείχνει το b. 2. Ας υποτεθεί ότι έχουν δηλωθεί τα ακόλουθα, int a=1, b=2, *p; Επίσης ας υποτεθεί ότι οι διευθύνσεις των παραπάνω μεταβλητών είναι 1000, 2000 και 3000 αντίστοιχα. Τότε (μέσα στις παρενθέσεις δίνεται η διεύθυνση): a (1000) = 1 b (2000) =2 p (3000) Εντολή Αποτέλεσμα p = &a a (1000) = 1 p (3000) = 1000 b = *p b (2000) = 1 a = p a (1000) = 1000 *p = 9 a (1000) = 9 3. Εάν σε συναρτήσεις είναι επιθυμητή η μεταβολή των παραμέτρων της συνάρτησης ανάλογα με το την χρήση της συνάρτησης τότε πρέπει να περάσουν σαν παράμετροι οι δείκτες των μεταβλητών και η κλήση της συνάρτησης να γίνεται με τις διευθύνσεις τους (call by reference). Για παράδειγμα: Να μετατραπεί το πρόγραμμα του πρώτου κεφαλαίου (η τρίτη λυμένη άσκηση) ώστε να επιτυγχάνεται η ανταλλαγή τιμών στις δύο μεταβλητές. Η. Κ. Σάββας 35

36 ΛΑΘΟΣ void ant_timon(int, int ); main () int a,b; printf("\n Δώσε 2 ακεραίους:"); scanf("%d%d",&a,&b); printf("πριν:a=%d και b=%d\n\n",a,b); ant_timon(a,b); printf("μετά:a=%d και b=%d\n\n",a,b); void ant_timon(int x, int y) int temp; temp=x; x=y; y=temp; ΣΩΣΤΟ void ant_timon(int *, int *); main () int a,b; printf("\n Δώσε 2 ακεραίους:"); scanf("%d%d",&a,&b); printf("πριν: a=%d και b=%d\n\n",a,b); ant_timon(&a, &b); printf("μετά:a=%d καιb=%d\n\n",a,b); void ant_timon(int *x, int *y) int temp; temp=*x; *x=*y; *y=temp; Παρατηρήσεις: Α) Η κλήση της συνάρτησης γίνεται με τις διευθύνσεις των μεταβλητών που θέλουμε να μεταβάλλουν την τιμή τους και έξω από το σώμα της συνάρτησης (call by reference). B) Στην συνάρτηση, οι μεταβλητές που θέλουμε να αλλάξουν τιμές και αυτές οι τιμές να είναι ορατές και έξω από την συνάρτηση, επεξεργάζονται με δείκτες. 4. Να γίνει πρόγραμμα που αφού δέχεται μία συμβολοσειρά να την μετατρέπει ώστε όλα τα γράμματα να είναι κεφαλαία (Υπόδειξη: Η συνάρτηση toupper() της ctype.h μετατρέπει μικρά γράμματα σε κεφαλαία). #include <ctype.h> void mikra_se_kefalaia(char *); main () char x[] = "this is a test this is a test"; printf("πριν: %s \n\n",x); 36 Η. Κ. Σάββας

37 mikra_se_kefalaia(x); printf("μετά: %s \n\n",x); void mikra_se_kefalaia(char *string) while (*string!= '\0') if (*string >= 'a' && *string <='z') *string = toupper(*string); string++; Παρατηρήσεις: Α) Η κλήση της συνάρτησης mikra_se_kefalaia(x) δεν χρειάζεται &x διότι έτσι και αλλιώς η C χρησιμοποιεί σε συμβολοσειρές τις διευθύνσεις τους. Β) Η πρόταση string++ μετακινεί κατά μία θέση δεξιότερα την θέση του δείκτη στη συμβολοσειρά Γ) Η συνθήκη *string!= \0 υποδηλώνει το μη τέλος της συμβολοσειράς. 3.5 Ασκήσεις 1. Εάν έχει γίνει η δήλωση int i, j, *p; τότε εξηγήστε τι τυπώνει το a. i = 3; b. p= &i; c. printf( \n %d %d %d %d \n\n, p, *p+7, **&p, p-(p-2)); 2. Εάν έχει γίνει η δήλωση int i, j, *p, *q; Τότε ποια από τα παρακάτω είναι σωστά ποια όχι και γιατί; a. p = &i p = &*&i i = p q = &p b. q = &j i = (&)j i = *&*&j i = *p++ + *q 3. Να τροποποιηθεί η bubble sort (δεύτερο εργαστήριο) ώστε η ανταλλαγή τιμών να γίνεται με χρήση συνάρτησης (call by reference). 4. Να γίνει πρόγραμμα με χρήση συνάρτησης που αφού δέχεται τις τιμές τριών μεταβλητών a, b, και c να μεταφέρει την τιμή του a στο b, του b στο c και του c στο a. 5. Να γραφεί συνάρτηση που να υπολογίζει την n_στη δύναμη ενός ακεραίου με τον κλασσικό τρόπο αλλά και με την μέθοδο call by reference. Στη συνέχεια να γίνει πρόγραμμα που να ελέγχει την ορθότητα των δύο αυτών συναρτήσεων. 6. Να γίνει πρόγραμμα που με την βοήθεια μίας συνάρτησης να υπολογίζει και επιστρέφει το εμβαδόν και την περίμετρο ενός κύκλου. Η. Κ. Σάββας 37

38 4. ΔΕΙΚΤΕΣ ΙΙ: Δυναμική Διαχείριση Μνήμης 4.1 Δυναμική Διαχείριση Μνήμης Η δυναμική διαχείριση μνήμης στην C επιτυγχάνεται με την χρήση δεικτών (pointers). Δυναμική διαχείριση μνήμης είναι η διαδικασία μέσω της οποίας ένα πρόγραμμα κατά την διάρκεια της εκτέλεσής του καταφέρνει να δεσμεύσει και να διαχειρισθεί μνήμη. Δεν είναι λίγες οι φορές όπου η απαιτούμενη μνήμη σε ένα πρόγραμμα δεν είναι γνωστή εκ των προτέρων. Για παράδειγμα, ένας πίνακας στον οποίο αποθηκεύονται οι πελάτες κάποιας επιχείρησης δεν είναι δυνατόν να είναι γνωστό εκ των προτέρων το μέγεθός του μιας και νέοι πελάτες μπορούν να προστεθούν ανά πάσα στιγμή ή παλιοί να διαγραφούν. Σχήμα 4. Διαχείριση Μνήμης Η μνήμη που διαχειρίζεται με αυτόν τον τρόπο, δηλαδή κατά την διάρκεια της εκτέλεσης του προγράμματος, αποκτάται από μία περιοχή που ονομάζεται heap. Το heap είναι μνήμη που δεν χρησιμοποιείται για κανένα άλλο σκοπό ούτε από τα προγράμματα αλλά ούτε καν από το λειτουργικό σύστημα. Αν και γενικά δεν είναι γνωστό το μέγεθος του heap συνήθως είναι μια αρκετά μεγάλη περιοχή αλλά φυσικά όχι και απεριόριστη. (Στο παραπάνω σχήμα (Σχήμα 4) φαίνεται πως γίνεται η κατανομή της μνήμης του υπολογιστή για ένα πρόγραμμα C.) Οι βασικές συναρτήσεις με τις οποίες γίνεται η δυναμική διαχείριση της μνήμης είναι η malloc() και η free(). Και οι δύο περιέχονται στο header file (βιβλιοθήκη) stdlib.h. Η συνάρτηση malloc() δεσμεύει μνήμη και η free() απελευθερώνει. Το πρότυπο της malloc() είναι το ακόλουθο: 38 Η. Κ. Σάββας

39 void *malloc(μέγεθος μνήμης σε bytes που πρόκειται να δεσμευθεί) Το ότι η συνάρτηση επιστρέφει δείκτη του τύπου void σημαίνει ότι μπορεί να χρησιμοποιηθεί με οποιοδήποτε τύπο δεδομένων. Εάν η κλήση της ήταν επιτυχής, επιστρέφει ένα δείκτη στο πρώτο byte της προς δέσμευση περιοχής. Σε περίπτωση αποτυχίας (δεν υπάρχει τόση διαθέσιμη μνήμη στο heap) τότε επιστρέφει ένα κενό δείκτη. Στο παρακάτω παράδειγμα φαίνεται η δέσμευση bytes: char *x; x = malloc(2000); Μια καλή τεχνική για τον έλεγχο της αποτυχίας δέσμευσης της μνήμης που ζητήθηκε είναι η εξής: if (!x ) printf( \nη μνήμη δεν δεσμεύθηκε \n ); return ; Ανάλογα, η συνάρτηση free(): void free(void *μεταβλητή δείκτη) απελευθερώνει κάποιο τμήμα μνήμης, για παράδειγμα free(x); 4.2 Δυναμικά Οριζόμενοι Πίνακες Ένας δυναμικά οριζόμενος πίνακας είναι ο πίνακας του οποίου το μέγεθος ορίζεται κατά την διάρκεια εκτέλεσης του προγράμματος. Κάνοντας χρήση της συνάρτησης malloc() είναι δυνατόν να ορισθεί το μέγεθος κάποιου πίνακα οποιασδήποτε διάστασης κατά την εκτέλεση του προγράμματος, όπως φαίνεται στον παρακάτω κώδικα για ένα πίνακα p μεγέθους Ν ακεραίων: Παράδειγμα 4.1: int *p; int meg, N; printf("\nεπιθυμητό μέγεθος πίνακα:"); scanf("%d",&n); meg = N * sizeof(int); p = malloc(meg); Η. Κ. Σάββας 39

40 4.3 H Δομή «Ουρά»: Ένα Παράδειγμα Δυναμικής Διαχείρισης Μνήμης H δομή ουρά (queue), είναι μία γραμμική δομή πληροφοριών (σαν τον πίνακα), με την διαφορά ότι οι νέες εισαγωγές τοποθετούνται αποκλειστικά στο τέλος της ουράς, ενώ οι διαγραφές γίνονται από την αρχή της ουράς. Υπάρχουν πάρα πολλά παραδείγματα ουράς στην καθημερινή ζωή: ουρές στα ταμεία τραπεζών, στα ιατρεία, στις στάσεις λεωφορείων κ.α. Συχνά η δομή ονομάζεται και FIFO από τα αρχικά First In First Out, δηλαδή θα εξυπηρετηθεί πρώτος αυτός που μπήκε στην ουρά πρώτος. Στο πρόγραμμα που ακολουθεί εξομοιώνεται μία τέτοια ουρά, μία ουρά από ραντεβού που θα μπορούσε να είναι ραντεβού ιατρείου, ή γενικότερα κάποιου γραφείου όπου η εξυπηρέτηση των πελατών γίνεται με την σειρά προσέλευσής τους. Οι συναρτήσεις που χρησιμοποιούνται είναι για νέα εισαγωγή, διαγραφή, και τέλος για εμφάνιση όλων των αντικειμένων της ουράς. Η ουρά υλοποιείται με ένα μονοδιάστατο πίνακα χαρακτήρων όπου μπορούν να αποθηκεύονται τα ονόματα των νέων εισαγωγών στην ουρά και μάλιστα θεωρείται ότι το πλήθος των ημερησίων ραντεβού δεν μπορεί να υπερβεί τα 10. Στο πρόγραμμα χρησιμοποιούνται δύο καθολικές μεταβλητές, οι arxi και telos οι οποίες κρατούν την πρώτη κενή θέση για νέα εισαγωγή και την θέση της επόμενης διαγραφής αντίστοιχα. Τέλος, οι πιθανές εργασίες με την ουρά περιγράφονται σε ανεξάρτητες συναρτήσεις. Παράδειγμα 4.2: #include <string.h> #include <ctype.h> #include <stdlib.h> #define MIKOS 10 /* Μέγεθος ουράς */ char *p[mikos]; int arxi = 0; int telos = 0; void eisodos(); char *eksodos(); void apothikeusi(char *q); void provoli(); void diagrafi(); main() char s[80]; register int t; 40 Η. Κ. Σάββας

41 /* Αρχικοποίηση */ for (t=0; t<mikos; ++t) p[t] = NULL; do printf("\n\nπίνακας Επιλογών"); printf("\n================\n"); printf("\ne για είσοδος νέου ραντεβού,"); printf("\np για εμφάνιση όλων των ραντεβού,"); printf("\nd για διαγραφή - εξυπηρέτηση"); printf("\nt για τέλος έξοδος από το πρόγραμμα -->"); gets(s); *s = toupper(*s); switch (*s) case 'E' : eisodos(); break; case 'P' : provoli(); break; case 'D' : diagrafi(); break; while (*s!= 'T'); /* ΣΥΝΑΡΤΗΣΕΙΣ */ void eisodos() char s[256], *p; do printf("\n\nεισαγωγή ραντεβού %d:", arxi+1); gets(s); if (*s==0) break; /* Καμία εισαγωγή */ p = (char *) malloc(strlen(s)+1); if (!p) printf("\n\nτα ραντεβού έκλεισαν δεν υπάρχει διαθέσιμος χώρος"); return; strcpy(p, s); if (*s) apothikeusi(p); while (*s); void provoli() register int t; printf("\n\n"); Η. Κ. Σάββας 41

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Τμ. Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών Α Εξεταστική Περίοδος, 25 Ιουνίου 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ Ηλίας. Κ. Σάββας

Τμ. Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών Α Εξεταστική Περίοδος, 25 Ιουνίου 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ Ηλίας. Κ. Σάββας TEI Λάρισας / ΣΤΕΦ Τμ. Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών Α Εξεταστική Περίοδος, 25 Ιουνίου 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ Ηλίας. Κ. Σάββας Α 1) Να δημιουργήσετε ένα header file με όνομα pinakesα.h το

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 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 Η C είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε στις αρχές της δεκαετίας του 70 από τον Dennis Ritchie στα Bell Labs. Η σημερινή μορφή της γλώσσας ακολουθεί το πρότυπο

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις

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

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

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

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

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

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

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

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

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Καθηγητής. Γουνόπουλος Άσκηση 1 Σκοπός της εργασίας αυτής είναι η κατανόηση της εσωτερικής λειτουργίας

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

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55 ΑΝΑ ΡΟΜΗ- ΑΣΚΗΣΕΙΣ Μια µέθοδος είναι αναδροµική όταν καλεί τον εαυτό της και έχει µια συνθήκη τερµατισµού π.χ. το παραγοντικό ενός αριθµού Ν, µπορεί να καλεί το παραγοντικό του αριθµού Ν-1 το παραγοντικό

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

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

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

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

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

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

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

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης Περιεχόμενα Δομές δεδομένων 37. Δομές δεδομένων (θεωρητικά στοιχεία)...11 38. Εισαγωγή στους μονοδιάστατους πίνακες...16 39. Βασικές επεξεργασίες στους μονοδιάστατους πίνακες...25 40. Ασκήσεις στους μονοδιάστατους

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

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

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

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

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

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

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

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

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

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

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

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

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

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

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

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

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

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

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

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

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

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

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

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

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

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

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

Τυπικές χρήσεις της Matlab

Τυπικές χρήσεις της Matlab Matlab Μάθημα 1 Τι είναι η Matlab Ολοκληρωμένο Περιβάλλον Περιβάλλον ανάπτυξης Διερμηνευμένη γλώσσα Υψηλή επίδοση Ευρύτητα εφαρμογών Ευκολία διατύπωσης Cross platform (Wintel, Unix, Mac) Τυπικές χρήσεις

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

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) 133 244 355 a= b= c= 3 read(d,e) 166 277 3888

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) 133 244 355 a= b= c= 3 read(d,e) 166 277 3888 ΕΡΩΤΗΣΕΙΣ 1. Να αναφέρετε μερικά από τα ιδιαίτερα χαρακτηριστικά της Pascal. 2. Ποιο είναι το αλφάβητο της Pascal; 3. Ποια είναι τα ονόματα-ταυτότητες και σε τι χρησιμεύουν; 4. Σε τι χρησιμεύει το συντακτικό

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η 53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η ΠΑΓΚΡΑΤΙ: Φιλολάου & Εκφαντίδου 26 : 210/76.01.470 210/76.00.179 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς

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

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ C Προγραμματιστικές Ασκήσεις, Φυλλάδιο Εκφώνηση: 9/3/0 Παράδοση: 5/4/0,.59 Άσκηση 0 η : Το πρόβλημα της βελόνας του Buffon Θέμα της εργασίας

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

Κεφάλαιο 5.4-5.11: Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Κεφάλαιο 5.4-5.11: Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα Κεφάλαιο 5.4-5.11: Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) 10-1 Εντολές Επανάληψης που θα καλυφθούν σήμερα Διάλεξη 9 - Δευτέρα while() τελεστές postfix/prefix (++, --,...) και σύνθετοι τελεστές

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2013-2014 Επιμέλεια: Ομάδα Διαγωνισμάτων από το Στέκι των Πληροφορικών Θέμα Α A1. Να γράψετε στο τετράδιό σας τους

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

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ Διάλεξη 2 Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις Διοργάνωση : ΚΕΛ ΣΑΤΜ Διαφάνειες: Skaros, MadAGu Παρουσίαση: MadAGu Άδεια: Creative Commons 3.0 2 Internal

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

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

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

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

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

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

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

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Βρόχοι Επανάληψη (Loop) Η επανάληψη ενός συνόλου εντολών για όσες φορές επιθυμούμε ή

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

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

ΛΥΜΕΝΕΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ-ΓΛΩΣΣΑ C ΑΤΕΙ (ΝΑ ΕΚΤΕΛΕΣΤΟΥΝ ΤΑ ΠΑΡΑΚΑΤΩ ΜΕ ΧΡΗΣΗ ΤΟΥ LCC COMPILER)

ΛΥΜΕΝΕΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ-ΓΛΩΣΣΑ C ΑΤΕΙ (ΝΑ ΕΚΤΕΛΕΣΤΟΥΝ ΤΑ ΠΑΡΑΚΑΤΩ ΜΕ ΧΡΗΣΗ ΤΟΥ LCC COMPILER) ΛΥΜΕΝΕΣ ΑΣΚΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ-ΓΛΩΣΣΑ C ΑΤΕΙ (ΝΑ ΕΚΤΕΛΕΣΤΟΥΝ ΤΑ ΠΑΡΑΚΑΤΩ ΜΕ ΧΡΗΣΗ ΤΟΥ LCC COMPILER) 1. Να γραφεί πρόγραµµα το οποίο να αναγνωρίζει αν κάποιος χαρακτήρας είναι ψηφίο, κεφαλαίο γράµµα ή

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

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

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

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

Βασικές Γνώσεις Μαθηματικών Α - Β Λυκείου

Βασικές Γνώσεις Μαθηματικών Α - Β Λυκείου Βασικές Γνώσεις Μαθηματικών Α - Β Λυκείου Αριθμοί 1. ΑΡΙΘΜΟΙ Σύνολο Φυσικών αριθμών: Σύνολο Ακέραιων αριθμών: Σύνολο Ρητών αριθμών: ακέραιοι με Άρρητοι αριθμοί: είναι οι μη ρητοί π.χ. Το σύνολο Πραγματικών

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

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

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

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

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

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

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

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

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

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

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

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

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