Τμήμα Τεχνολογίας Πληροφορικής και Τηλεπικοινωνιών / ΤΕΙ Λάρισας Προγραμματισμός Ι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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

ΣΥΝΑΡΤΗΣΕΙΣ (Functions) ΣΥΝΑΡΤΗΣΕΙΣ (Functions) Δομή Συνάρτησης τύπος όνομα ( λίστα τυπικών παραμέτρων ) Δηλώσεις μεταβλητών εντολή_1 εντολή_2 : εντολή_ν Σώμα της συνάρτησης Δομή της Λίστας Τυπικών Παραμέτρων τύπος_1 τύπος_2

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

Η βασική συνάρτηση προγράμματος main()

Η βασική συνάρτηση προγράμματος main() Η βασική συνάρτηση προγράμματος main() HEADER FILES main(){ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ (σειριακές, επιλογής ή επανάληψης) ΕΠΙΣΤΡΕΦΟΜΕΝΟΣ ΤΥΠΟΣ (return 0;) Συναρτήσεις Η συνάρτηση είναι ένα υποπρόγραμμα

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

12. Συναρτήσεις (Μέρος ΙI)

12. Συναρτήσεις (Μέρος ΙI) Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 12. Συναρτήσεις (Μέρος ΙI) Ιωάννης Κατάκης Σήμερα o Συναρτήσεις χωρίς παραμέτρους o Συναρτήσεις με παραμέτρους Χωρίς επιστροφή τιμής Με επιστροφή τιμής o Εμβέλεια

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

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

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

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

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

Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Συναρτήσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι Συναρτήσεις - Εισαγωγή Μία συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα, που εκτελεί μία

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει Συναρτήσεις της βιβλιοθήκης math.h h (1/5) int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει την απόλυτη

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

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

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

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

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

Εισαγωγή στον δομημένο προγραμματισμό

Εισαγωγή στον δομημένο προγραμματισμό Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 12 η : Δυναμική Ανάθεση Θέσης Αν. καθηγητής Στεργίου Κώστας e-mail: kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής

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

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

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

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

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

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

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

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

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

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Α Β Γ static; printf(%c\n, putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf(*); ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2016 (1/2/2016) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ηβασικήσυνάρτηση προγράμματος main()

Ηβασικήσυνάρτηση προγράμματος main() Ηβασικήσυνάρτηση προγράμματος main() HEADER FILES main(){ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ (σειριακές, επιλογής ή επανάληψης) ΕΠΙΣΤΡΕΦΟΜΕΝΟΣ ΤΥΠΟΣ (return 0;) Συναρτήσεις Ησυνάρτησηείναι ένα υποπρόγραμμα που

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

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

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

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

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

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

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

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

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

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 1 ο ΣΥΝΟΛΟ ΑΣΚΗΣΕΩΝ Οι ασκήσεις αυτού του φυλλαδίου καλύπτουν τα

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 1 ο ΣΥΝΟΛΟ ΑΣΚΗΣΕΩΝ Οι ασκήσεις αυτού του φυλλαδίου καλύπτουν τα

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

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

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

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

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

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

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

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

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

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014 Πίνακες 0 Μαρτίου 014 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα του συγκεκριμένου τύπου. Στην περίπτωση που θέλουμε

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια: Εργαστήριο 6: 6.1 Δομές Επανάληψης Βρόγχοι (Loops) Όταν θέλουμε να επαναληφθεί μια ομάδα εντολών τη βάζουμε μέσα σε ένα βρόχο επανάληψης. Το αν θα (ξανα)επαναληφθεί η εκτέλεση της ομάδας εντολών καθορίζεται

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

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

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

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

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

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

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

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

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Εργαστήριο 3: 3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting) Η C++, όπως όλες οι γλώσσες προγραμματισμού, χρησιμοποιεί τελεστές για να εκτελέσει τις αριθμητικές και λογικές λειτουργίες.

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

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

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

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

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

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

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

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

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Σύντομες εισαγωγικές σημειώσεις για την. Matlab Σύντομες εισαγωγικές σημειώσεις για την Matlab Δήλωση Μεταβλητών Για να εισάγει κανείς δεδομένα στη Matlab υπάρχουν πολλοί τρόποι. Ο πιο απλός είναι στη γραμμή εντολών να εισάγουμε αυτό που θέλουμε και

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

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

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

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

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

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

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

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

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

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

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

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

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

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

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

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

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

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012 ο σετ σημειώσεων 19 Μαρτίου 01 1 Εντολές εκτέλεσης υπό συνθήκη Μπορούμε να εκτελέσουμε εντολές της γλώσσας σε περίπτωση που κάποια συνθήκη ισχύει χρησιμοποιώντας την εντολή if. Συντάσσεται ως εξής: 1 if

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Εργαστήριο 4: 4.1 Η Δομή Ελέγχου if Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη. Γενική Μορφή: Παρατηρήσεις:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2 Εισαγωγή στον προγραμματισμό Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2 Δομή Προγράμματος Όλα τα προγράμματα που γράψαμε έχουν λίγο πολύ την ακόλουθη μορφή: Κάποιος κώδικας εδώ main( ) {

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

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

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

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

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

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

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