2. Μεταβλητές Είσοδος/έξοδος προγράμματος Εκφράσεις και Τελεστές

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

Download "2. Μεταβλητές Είσοδος/έξοδος προγράμματος Εκφράσεις και Τελεστές"

Transcript

1 2. Μεταβλητές Είσοδος/έξοδος προγράμματος Εκφράσεις και Τελεστές Σύνοψη Στο κεφάλαιο αυτό ο αναγνώστης εισάγεται στην έννοια και τη χρήση της μεταβλητής στον προγραμματισμό. Αναλύονται τα είδη μεταβλητών στη γλώσσα C, η εσωτερική απεικόνισή τους και τα λειτουργικά χαρακτηριστικά τους. Ακολούθως, περιγράφονται οι βασικές συναρτήσεις ανάγνωσης και εκτύπωσης δεδομένων της γλώσσας C, οι οποίες επιτελούν την επικοινωνία του προγράμματος με το εξωτερικό περιβάλλον (συσκευές εισόδου και εξόδου). Στη συνέχεια, παρουσιάζονται οι κατηγορίες εκφράσεων και μελετώνται τα είδη των τελεστών: αύξησης μείωσης, ανάθεσης, συσχετιστικοί και λογικοί τελεστές, καθώς και ο τελεστής sizeof. Ακολουθεί η ανάλυση των εννοιών και των ιδιοτήτων της προτεραιότητας και της προσεταιριστικότητας και το κεφάλαιο ολοκληρώνεται με τις διαδικασίες της ρητής και της έμμεσης μετατροπής τύπων. Λέξεις κλειδιά μεταβλητή, σταθερά, τύπος χαρακτήρα, τύπος ακεραίου, τύπος αριθμού κινητής υποδιαστολής, εκφράσεις, σημειολογίες τελεστών, αριθμητικοί τελεστές, λογικοί τελεστές, συσχετιστικοί τελεστές, τελεστές αύξησης μείωσης, προτεραιότητα και προσεταιριστικότητα τελεστών, ρητή έμμεση μετατροπή τύπου, scanf, printf, puchar, getchar, sizeof Προαπαιτούμενη γνώση Λεξιλόγιο της γλώσσας C στάδια υλοποίησης προγράμματος 2.1. Η έννοια της μεταβλητής Ένα από τα πλέον βασικά πλεονεκτήματα του ηλεκτρονικού υπολογιστή είναι η δυνατότητά του να διαχειρίζεται πληροφορία σε μορφή αριθμητικών δεδομένων, γραμμάτων ή ακολουθίας γραμμάτων. Τα δεδομένα αποθηκεύονται στη μνήμη και θα πρέπει να μπορούν να είναι προσβάσιμα από τα προγράμματα, να εισαχθούν σε υπολογισμούς και να δημιουργήσουν νέα δεδομένα. Αρχικά, οι προγραμματιστές χειρίζονταν τα δεδομένα δουλεύοντας με τις διευθύνσεις μνήμης, στις οποίες ήταν αποθηκευμένα. Με την αύξηση του μεγέθους και της πολυπλοκότητας των προγραμμάτων, αυτός ο τρόπος διαχείρισης έθετε πολλούς περιορισμούς και αποτελούσε πηγή προβλημάτων. Η λύση στο πρόβλημα της αναφοράς σε δεδομένα και στη διαχείρισή τους δόθηκε με την εισαγωγή της έννοιας των μεταβλητών, οι οποίες διαχειρίζονται δεδομένα. Το όνομα μίας μεταβλητής είναι άμεσα συνδεδεμένο με τη διεύθυνση στην οποία είναι αποθηκευμένο το δεδομένο. Με τον τρόπο αυτό ο προγραμματιστής μπορεί να χειριστεί δεδομένα χωρίς να γνωρίζει την ακριβή διεύθυνση της μνήμης όπου αυτά τοποθετούνται. Επιγραμματικά, η χρήση των μεταβλητών είναι ίδια με εκείνη της άλγεβρας, π.χ. η παράσταση y= 3*x+5 ισχύει τόσο στα μαθηματικά όσο και στις γλώσσες προγραμματισμού, με τα x και y να είναι μεταβλητές. Ωστόσο, στον προγραμματισμό η χρήση της είναι γενικευμένη: η μεταβλητή είναι μία θέση μνήμης για ένα δεδομένο. Δημιουργείται, όταν δηλώνεται, και η τιμή της δεν είναι καθορισμένη, έως ότου χρησιμοποιηθεί για πρώτη φορά από το πρόγραμμα. Η γλώσσα C απαιτεί δήλωση μίας μεταβλητής πριν τη χρήση της, καθότι η δήλωση συνεπάγεται τον προσδιορισμό του τύπου δεδομένου που θα χειρίζεται και, συνακόλουθα, τη μνήμη που θα πρέπει να της ανατεθεί. Συνήθως οι μεταβλητές δηλώνονται στην αρχή της -11-

2 συνάρτησης, ως επί το πλείστον αμέσως μετά το εισαγωγικό άγκιστρο ({). Ωστόσο, το πρότυπο της γλώσσας C99 επιτρέπει τη δήλωση σε οποιοδήποτε σημείο του κώδικα, πάντοτε όμως πριν την πρώτη χρήση τους Δήλωση μεταβλητής Οι μεταβλητές δηλώνονται με πρόταση ορισμού, η οποία τελειώνει πάντοτε με (;). Η μορφή της δήλωσης είναι: data_type var, var, ; π.χ. int counter1, counter2; Οι μεταβλητές δηλώνονται στην αρχή μίας συνάρτησης. Η δήλωση γνωστοποιεί στον μεταγλωττιστή το όνομα της μεταβλητής και τον τύπο δεδομένου που θα χειρίζεται. Μία δήλωση έχει ως αποτέλεσμα τη σύνδεση του ονόματος της μεταβλητής με: τον ανάλογο τύπο δεδομένων, γεγονός που λαμβάνει χώρα στον χρόνο μεταγλώττισης (compile time), μία θέση μνήμης κατάλληλου μεγέθους, γεγονός που λαμβάνει χώρα στον χρόνο εκτέλεσης (run time) Ονομασία μεταβλητής Σε ό,τι αφορά την ονοματολογία, ακολουθούνται οι εξής κανόνες: Στη γλώσσα C τα ονόματα των μεταβλητών σχηματίζονται από: (α) τα γράμματα του αλφαβήτου, (β) τα ψηφία 0 έως 9, (γ) τον χαρακτήρα υπογράμμισης _ (underscore). Το όνομα πρέπει να ξεκινά με γράμμα ή με χαρακτήρα υπογράμμισης (στη δεύτερη περίπτωση ο επόμενος χαρακτήρας πρέπει να είναι μικρό γράμμα). Το όνομα δεν πρέπει να είναι ίδιο με δεσμευμένη λέξη. Τα όνομα μίας μεταβλητής πρέπει να είναι ενδεικτικό της ιδιότητάς της ή του τύπου δεδομένου που αντιπροσωπεύει, έτσι ώστε να δίνει πληροφορία στον προγραμματιστή. Στην περίπτωση που το όνομα μίας μεταβλητής περιέχει περισσότερες από μία λέξεις, συνιστάται το πρώτο γράμμα κάθε λέξης να είναι κεφαλαίο. Με βάση τα παραπάνω, ακολουθούν ενδεικτικές περιπτώσεις ονοματολογίας: Έγκυρα ονόματα μεταβλητών: totalarea max_amount counter1 Counter1 _temp_in_f Μη έγκυρα ονόματα μεταβλητών: $product total% 3rd Απαράδεκτα ονόματα μεταβλητών: j x2 max_number_of_students_in_my_class Σημείωση: Στην πορεία ανάγνωσης του κειμένου ο αναγνώστης θα παρατηρήσει ότι οι ονομασίες των μεταβλητών δε συνάδουν πάντοτε με τους κανόνες που αναφέρονται, καθώς χρησιμοποιούνται μεταβλητές με ένα ή δύο γράμματα. Η χρήση τους γίνεται συγγραφική αδεία, επιβληθείσα για λόγους πρακτικούς, έτσι ώστε να μη διευρύνεται ο κώδικας Τύποι μεταβλητών Οι μεταβλητές της γλώσσας C ανήκουν σε δύο κατηγορίες. Η κατηγορία των βαθμωτών τύπων περιλαμβάνει: o Τους ακέραιους (integers), οι οποίοι δηλώνονται με την κωδική λέξη int. o Τους πραγματικούς, οι οποίοι χωρίζονται στους αριθμούς κινητής υποδιαστολής με κωδική λέξη float και τους αριθμούς διπλής ακρίβειας με κωδική λέξη double. -12-

3 o Τη μεταβλητή χαρακτήρα (character, char). o Τους δείκτες (pointers). o Τον απαριθμητικό τύπο (enumerated, enum). Στο πρότυπο της γλώσσας C99 προστέθηκε και ο τύπος bool, ο οποίος εμφανίζει δύο τιμές (true που αντιστοιχεί στον ακέραιο 1 και false που αντιστοιχεί στον ακέραιο 0). Επειδή όμως στην πραγματικότητα αυτός ο τύπος είναι τεχνητός, υπό την έννοια ότι τα αποτελέσματα προκύπτουν μέσα από επεξεργασία ακεραίων από μακροεντολές, δεν θα μελετηθεί. Στην κατηγορία των συναθροιστικών τύπων ανήκουν οι πίνακες, οι δομές (struct) και οι ενώσεις (union). Στη συνέχεια του κεφαλαίου γίνεται αναφορά στους βασικούς τύπους της C: char, int, float, double και στο Κεφάλαιο 5 αναπτύσσονται οι πίνακες. Οι άλλοι τύποι μεταβλητών θα μελετηθούν στο Κεφάλαιο Ο τύπος του χαρακτήρα Ο τύπος του χαρακτήρα (char) παριστάνει χαρακτήρες του αλφάβητου της γλώσσας. Βρίσκεται ανάμεσα σε εισαγωγικά (π.χ. 'C', '2', '*', ')'). Η δήλωση της μεταβλητής χαρακτήρα ακολουθεί τον εξής φορμαλισμό: char <όνομα_μεταβλητής>; π.χ. char choice; Υπάρχει η δυνατότητα ταυτόχρονα με τη δήλωση να αποδοθεί αρχική τιμή στη μεταβλητή: char choice='α'; Η εισαγωγή τιμών στις μεταβλητές χαρακτήρα γίνεται με χρήση της συνάρτησης scanf() και του προσδιοριστή %c (character). Η πρόταση scanf( "%c", &choice ); διαβάζει από την κύρια είσοδο (πληκτρολόγιο) έναν χαρακτήρα και τον αποδίδει στη μεταβλητή choice. Θα πρέπει να προσεχθεί η χρήση του & πριν από τη μεταβλητή. Ονομάζεται τελεστής διεύθυνσης και προηγείται των μεταβλητών στη συνάρτηση scanf() (με εξαίρεση τα ονόματα μεταβλητών που αφορούν σε πίνακες, για τους οποίους θα γίνει σχετικός σχολιασμός στο Κεφάλαιο 5). Η εκτύπωση μεταβλητών χαρακτήρα γίνεται με χρήση της συνάρτησης printf() και του προσδιοριστή %c. Η πρόταση printf( "The character is %c\n", choice ); θα τυπώσει (θεωρώντας ότι στη choice εισήχθη ο 'Α') The character is Α Παρατήρηση: Επειδή κάθε χαρακτήρας του κώδικα ASCII (American Standard Code for Information Interchange) αντιστοιχεί σε έναν οκταψήφιο δυαδικό αριθμό, εάν αντί του %c χρησιμοποιηθεί ο προσδιοριστής %d (decimal), η printf() θα εμφανίσει τον ASCII κωδικό τού χαρακτήρα. Η πρόταση θα τυπώσει printf( "The ASCII Code of %c is %d\n", choice,choice); The ASCII Code of A is 65 όπου 65 είναι το δεκαδικό ισοδύναμο του δυαδικού κωδικού ASCII για τον χαρακτήρα 'Α'. Ο μεταγλωττιστής απαιτεί 1 byte μνήμης για την αποθήκευση της τιμής μίας μεταβλητής χαρακτήρα. Στο Σχήμα 2.1 παρουσιάζονται οι διαδικασίες της αποθήκευσης και ανάκλησης για τον χαρακτήρα Α. Η τιμή της μεταβλητής μετατρέπεται σε ακέραιο (ενέργεια 1 του Σχήματος 2.1), ο οποίος αποθηκεύεται (ενέργεια 2). Στην περίπτωση ανάκλησης της τιμής, εκτελείται η αντίστροφη διεργασία. Ο αριθμός μετατρέπεται σε χαρακτήρα μέσω του προσδιοριστή %c και ακολούθως είτε τυπώνεται ο χαρακτήρας (ενέργεια 3) είτε -13-

4 τυπώνεται το δεκαδικό ισοδύναμο μέσω του προσδιοριστή %d (ενέργεια 4). Σε κάθε περίπτωση, ο μεταγλωττιστής είναι υπεύθυνος για το ότι ο υπολογιστής διαχειρίζεται τα bits και bytes σύμφωνα με τους τύπους που δηλώνονται. Σχήμα 2.1 Αποθήκευση και ανάκληση ASCII χαρακτήρα O κώδικας (πίνακας) ASCII Ο κώδικας ASCII αντιστοιχεί χαρακτήρες στις 256 καταστάσεις που μπορεί να περιέχει ένα byte. Η τυπική κωδικοποίηση ASCII χρησιμοποιεί τις πρώτες 128 καταστάσεις, με κωδικούς από το δεκαδικό 0 (δυαδική απεικόνιση σε byte: ) έως το δεκαδικό 127 (δυαδική απεικόνιση σε byte: ). Οι υπόλοιπες 128 καταστάσεις (128 έως 255 ή ισοδύναμα στο δυαδικό σύστημα έως ) αποτελούν επέκταση του πρότυπου κώδικα (extended ASCII code) και διαφέρουν ανάλογα με το σύστημα. Oι πρώτες 31 θέσεις του πίνακα ASCII είναι μη εκτυπούμενοι χαρακτήρες και χρησιμοποιούνται ως χαρακτήρες ελέγχου. Στον Πίνακα 2.1 απεικονίζεται ο πρότυπος πίνακας ASCII, όπου δίπλα στον κωδικό ASCII εμφανίζεται ο αντίστοιχος χαρακτήρας. ASCII ASCII ASCII ASCII ASCII ASCII ASCII ASCII P p ! A 81 Q 97 a 113 q « B 82 R 98 b 114 r C 83 S 99 c 115 s $ D 84 T 100 d 116 t % E 85 U 101 e 117 u & F 86 V 102 f 118 v G 87 W 103 g 119 w ( H 88 X 104 h 120 x ) I 89 Y 105 i 121 y * 58 : 74 J 90 Z 106 j 122 z ; 75 K 91 [ 107 k 123 { , 60 < 76 L 92 \ 108 l = 77 M 93 ] 109 m 125 } > 78 N 94 ^ 110 n 126 ~ / 63? 79 O 95 _ 111 o 127 Πίνακας 2.1 Ο κώδικας ASCII Ο τύπος του ακεραίου Ο τύπος του ακεραίου (int από τη λέξη integer) χρησιμοποιείται, για να παραστήσει ακέραιους αριθμούς. Η περιοχή τιμών εξαρτάται από την αρχιτεκτονική του μηχανήματος. Για έναν υπολογιστή που διαθέτει 4 bytes (32 bits) για κάθε ακέραιο, το σύνολο των δυνατών τιμών είναι Εάν θεωρηθεί ότι τις -14-

5 μισές τιμές θα καταλάβουν αρνητικοί ακέραιοι και τις υπόλοιπες μισές θετικοί, η περιοχή τιμών του τύπου int είναι από , με την ακόλουθη αντιστοιχία δυαδικής και δεκαδικής τιμής: ( ) 2 ( ) 10 ( ) 2 ( 1) 10 ( ) 2 (0) 10 ( ) 2 ( ) 10 Η δήλωση της μεταβλητής ακεραίου ακολουθεί τον εξής φορμαλισμό: int όνομα_μεταβλητής; π.χ. int num; Υπάρχει η δυνατότητα ταυτόχρονα με τη δήλωση να αποδοθεί αρχική τιμή στη μεταβλητή: int num=46; Εάν πριν από τη λέξη int τοποθετηθεί ο προσδιοριστής long, τότε οι ακέραιοι long int εξασφαλίζουν τον ίδιο αποθηκευτικό χώρο με τον απλό ακέραιο. Ωστόσο, στο πρότυπο C99 έχει προστεθεί ο τύπος long long int, για τις μεταβλητές του οποίου διατίθεται χώρος 64 bits. Επιπλέον, ο προσδιοριστής unsigned χρησιμοποιείται πριν από τη λέξη int, για να χαρακτηρίσει τη μεταβλητή χωρίς πρόσημο. Το πεδίο τιμών ενός μη προσημασμένου ακέραιου μήκους n bits εκτείνεται από 0 έως 2 n 1. Η εισαγωγή τιμών στις ακέραιες μεταβλητές γίνεται με χρήση της συνάρτησης scanf() και του προσδιοριστή %d (από τη λέξη decimal). Η πρόταση scanf( "%d", &num ); διαβάζει από το πληκτρολόγιο έναν ακέραιο και τον αποδίδει στη μεταβλητή num. Η εκτύπωση ακέραιων μεταβλητών γίνεται με χρήση της συνάρτησης printf() και των προσδιοριστών %d, %o, %x για την εμφάνιση σε δεκαδική, οκταδική και δεκαεξαδική μορφή, αντίστοιχα. Οι προσδιοριστές l (long), h (short), και u (unsigned) τοποθετούνται πριν από τους d, o, x. H πρόταση printf( "dec=%d, octal=%o, hex=%x", num,num,num ); θα τυπώσει (θεωρώντας ότι η num λαμβάνει την τιμή 46) dec=46, octal=56, hex=2e Παρατηρήσεις: 1. Υπάρχει η δυνατότητα να καθοριστεί ο αριθμός των ψηφίων που θα τυπωθούν, τοποθετώντας τον επιθυμητό αριθμό ανάμεσα στο % και το d. Εάν ο αριθμός είναι μικρότερος από τον απαιτούμενο αριθμό ψηφίων του ακέραιου, η επιλογή δεν θα ληφθεί υπόψη. Στην αντίθετη περίπτωση, στις πλεονάζουσες θέσεις θα τοποθετηθούν κενά. Για τον λόγο αυτό, ο αριθμός που τοποθετείται στον προσδιοριστή %d, ονομάζεται καθοριστικό ελάχιστου πλάτους πεδίου. Με αυτόν τον τρόπο, σε διαδοχικές printf() θα υπάρξει ευθυγράμμιση των αποτελεσμάτων κατά στήλες. Οι προτάσεις printf( "dec=%1d, octal=%4o, hex=%4x", num,num,num ); printf( "dec=%4d, octal=%4o, hex=%4", num,num,num ); θα τυπώσουν αντίστοιχα dec=46, octal= 56, hex= 2e dec= 46, octal= 56, hex= 2e 2. Όταν γράφεται ένας αριθμός στον πηγαίο κώδικα χωρίς δεκαδικό ή εκθετικό μέρος, ο μεταγλωττιστής τον χειρίζεται ως ακέραια σταθερά. Η σταθερά 245 αποθηκεύεται ως int, ενώ η σταθερά αποθηκεύεται ως long int. Εάν οριστεί η σταθερά 8965 ως 8965LL, ο μεταγλωττιστής αναγκάζεται να δεσμεύσει χώρο για long long int. -15-

6 Παράδειγμα Να καταστρωθεί πρόγραμμα που να εξετάζει τα μήκη και τα πεδία τιμών των διάφορων παραλλαγών του τύπου ακεραίου. #include <stdio.h> #include <limits.h> int main() { /* INT_MAX είναι ο μέγιστος int: ορίζεται στο αρχείο κεφαλίδας limits.h. Ο τελεστής sizeof δίνει το μέγεθος ενός τύπου δεδομένου ή μίας μεταβλητής */ printf( "The size of type int is %d bytes\n",sizeof(int) ); printf( "The size of type short is %d bytes\n",sizeof(short) ); printf( "The size of type long is %d bytes\n",sizeof(long) ); printf( "The size of type long long is %d bytes\n",sizeof(long long) ); printf( "\nmin int: %d, max int: %d\n",int_min,int_max ); printf( "\nmin short: %d, max short: %d\n",shrt_min,shrt_max ); printf( "\nmin long: %d, max long: %d\n",long_min, LONG_MAX ); } return 0; Eικόνα 2.1 Η έξοδος του προγράμματος του παραδείγματος Από τα αποτελέσματα προκύπτει ότι ταυτίζονται τα bytes για int και long, ενώ ο πλέον εκτεταμένος τύπος ακεραίου long long int καταλαμβάνει 8 bytes Παράδειγμα Να καταστρωθεί πρόγραμμα που να επιτελεί τα παρακάτω: Ζήτησε από τον χρήστη έναν χαρακτήρα Πάρε από τον χρήστη τον χαρακτήρα Τύπωσε τον χαρακτήρα και τον ASCII κωδικό του Βρες τον επόμενο χαρακτήρα Τύπωσέ τον μαζί με τον κωδικό του #include <stdio.h> int main() { -16-

7 char charvar,nextchar; printf( "\twrite a character:\t" ); scanf( "%c",&charvar ); printf( "\tthe ASCII code of char %c is %d\n", charvar, charvar ); nextchar = charvar + 1; /* βρίσκει τον επόμενο χαρακτήρα */ printf( "\tthe ASCII code of char %c is %d\n", nextchar, nextchar ); } return 0; Eικόνα 2.2 Η έξοδος του προγράμματος του παραδείγματος Τύποι πραγματικών αριθμών Οι πραγματικοί αριθμοί είναι οι αριθμοί που διαθέτουν κλασματικό μέρος και εκφράζονται συνήθως στις μορφές του Πίνακα 2.2: Αριθμός με δεκαδικά Επιστημονική σημειογραφία Εκθετική σημειογραφία x e x e x e+04 Πίνακας 2.2 Σημειογραφίες των πραγματικών αριθμών Η γλώσσα C διαθέτει δύο τύπους για αναπαράσταση πραγματικών αριθμών. Τον τύπο float για αριθμούς κινητής υποδιαστολής απλής ακρίβειας και τον τύπο double για αριθμούς κινητής υποδιαστολής διπλής ακρίβειας. Ένας νεότερος τύπος εκτεταμένης ακρίβειας είναι ο long double. Η δήλωση της μεταβλητής float ή double ακολουθεί τον εξής φορμαλισμό: float όνομα_μεταβλητής; π.χ. float plank=6.63e-34; Όπως και στις περιπτώσεις των τύπων του χαρακτήρα και του ακεραίου, επιτρέπεται η αρχικοποίηση ταυτόχρονα με τη δήλωση μίας μεταβλητής κινητής υποδιαστολής. Η εισαγωγή τιμών στις μεταβλητές κινητής υποδιαστολής γίνεται με χρήση της συνάρτησης scanf() και του προσδιοριστή %f (από τη φράση floating point). Η πρόταση scanf( "%f", &num ); διαβάζει από το πληκτρολόγιο έναν πραγματικό αριθμό και τον αποδίδει στη μεταβλητή num. Εάν πρόκειται να αναγνωσθεί αριθμός διπλής ακριβείας, απαιτείται η χρήση του προσδιοριστή %lf, ενώ στην ανάγνωση αριθμού εκτεταμένης ακριβείας ο προσδιοριστής %f αντικαθίσταται από τον προσδιοριστή %Lf. Η εκτύπωση πραγματικών μεταβλητών γίνεται με χρήση της συνάρτησης printf() και των προσδιοριστών %f για εμφάνιση σε δεκαδική μορφή, %e για εμφάνιση σε εκθετική μορφή και %g, για να ανατεθεί στο σύστημα να επιλέξει μεταξύ των δύο προηγουμένων, με προτεραιότητα στη μορφή με το μικρότερο μέγεθος. Σε ό,τι αφορά τον χώρο που καταλαμβάνουν στη μνήμη, ως συνηθισμένα μεγέθη αναφέρονται για τους μεν float τα 32 bits, για τους δε double τα 64 bits. Θα πρέπει να σημειωθεί ότι, σε αντιδιαστολή με τους ακέραιους αριθμούς, δεν υπάρχει αντιστοιχία ένα προς ένα ανάμεσα στους πραγματικούς αριθμούς και στις απεικονίσεις τους στις γλώσσες προγραμματισμού. Οι αριθμοί που αντιστοιχούν στους πραγματικούς αριθμούς είναι προσεγγίσεις αυτών και ονομάζονται αριθμοί μηχανής, εξαιτίας της ανάγκης να -17-

8 απεικονιστούν με πεπερασμένο αριθμό ψηφίων πραγματικοί αριθμοί που θεωρητικά μπορούν να περιέχουν άπειρο αριθμό κλασματικών ψηφίων. Σε μία μεταβλητή τύπου float των 32 bits, τα 8 bits χρησιμοποιούνται για τον εκθέτη, ένα για το πρόσημο και τα υπόλοιπα 23 για το κλασματικό μέρος, που ονομάζεται mantissa. Η μορφή του αριθμού είναι η ακόλουθη: (. dd d23 ) 2 e όπου τα ψηφία d 1... d 23 είναι δυαδικά και το e είναι το δεκαδικό ισοδύναμο του οκταψήφιου δυαδικού εκθέτη. Κατά σύμβαση, d1 1. Το δεκαδικό ισοδύναμο της ανωτέρω μορφής είναι: e e i i i 1 ( d 2 ) ( d 2 )... ( d 2 ) 2 2 d 2 Κατά συνέπεια, με βάση το παραπάνω σύστημα απεικόνισης, το μέγεθος της κλασματικής ακριβείας ενός αριθμού κινητής υποδιαστολής καθορίζεται από τον αριθμό των κλασματικών ψηφίων. 8 Ο οκταψήφιος δυαδικός εκθέτης αντιστοιχεί σε δυνατές τιμές. Από αυτές οι 127 δίνονται σε αρνητικούς ακεραίους και οι υπόλοιπες 129 σε θετικούς, με την ακόλουθη αντιστοιχία δυαδικής και δεκαδικής τιμής: emin ( ) 2 emin ( 127) 10 emax ( ) 2 emax (128) 10 Με βάση τα παραπάνω, η μέγιστη απόλυτη τιμή πραγματικών αριθμών που μπορεί να επιτευχθεί με μεταβλητή τύπου float των 32 bits είναι: max (1 2 ) (1 2 )... (1 2 ) e 38 Στους αριθμούς διπλής ακριβείας δεσμεύονται 64 bits, εκ των οποίων τα 11 δίνονται στον εκθέτη, ένα στο πρόσημο και 52 στο κλασματικό μέρος. Παρατηρήσεις: 1. Όπως σημειώθηκε στους ακέραιους, έτσι και στους πραγματικούς υπάρχει η δυνατότητα να καθορισθεί ο αριθμός των ψηφίων που θα εκτυπωθούν, τοποθετώντας τον επιθυμητό αριθμό ανάμεσα στο % και το f. Μάλιστα ο αριθμός θα είναι της μορφής a.b, με το a να δηλώνει τον συνολικό αριθμό των ψηφίων συμπεριλαμβανομένου του προσήμου και το b να δηλώνει τον αριθμό των δεκαδικών ψηφίων. Οι προτάσεις float num=46.37; printf( "num=%8.4f, num=%12.1f\n", num,num ); οδηγούν στην εμφάνιση στην οθόνη των ακόλουθων αποτελεσμάτων: num= , num= 46.4 Eίναι φανερό ότι στην περίπτωση που ο αριθμός των δεκαδικών ψηφίων που ζητούνται είναι μικρότερος από τον απαιτούμενο, γίνεται στρογγυλοποίηση (το 37 στρογγυλοποιείται στο 40 και παρελείπεται το 0). 2. Πραγματικοί αριθμοί, όπως οι: e-5 24e e-08 όταν εμφανίζονται στον πηγαίο κώδικα αποτελούν τις πραγματικές σταθερές. Θεωρούνται από τον μεταγλωττιστή ως double και δεσμεύουν τον αντίστοιχο χώρο Παράδειγμα Να καταστρωθεί πρόγραμμα που να εξετάζει τα μήκη και τα πεδία τιμών των τύπων κινητής υποδιαστολής μονής και διπλής ακρίβειας. #include <stdio.h> #include <float.h> /* για τα όρια του float */ int main() { -18-

9 printf( "The size of type float is %d bytes\n",sizeof(float) ); printf( " The size of type double is %d bytes\n",sizeof(double) ); printf( "\nmin float: %e, max float: %e\n",flt_min,flt_max); printf( "\nmin double: %e, max double: %e\n",dbl_min,dbl_max); printf( "\n\npress any key to continue" ); } return 0; Eικόνα 2.3 Η έξοδος του προγράμματος του παραδείγματος Ο προσδιοριστής const Στη γλώσσα C μπορούν να οριστούν και να αρχικοποιηθούν μεταβλητές, για τις οποίες δεν επιτρέπεται η μεταβολή της τιμής τους. Τέτοιες μεταβλητές δηλώνονται, όπως και οι υπόλοιπες, με την προσθήκη του προσδιοριστή const στα αριστερά του τύπου τους: const double numdouble= ; const int numint=46; const int numchar='g'; Στις παραπάνω προτάσεις δηλώνονται και αρχικοποιούνται οι μεταβλητές τριών διαφορετικών τύπων numdouble, numint και numchar. Οι μεταβλητές αυτές δεν μπορούν να λάβουν άλλη τιμή καθ όλη τη διάρκεια εκτέλεσης του προγράμματος Είσοδος/Έξοδος προγράμματος Η είσοδος/έξοδος προγράμματος (input/output) αναφέρεται στις λειτουργίες που γίνονται στις συσκευές εισόδου (συνήθως το πληκτρολόγιο) και εξόδου (συνήθως η οθόνη) του υπολογιστή. Η γλώσσα C δεν διαθέτει εντολή επικοινωνίας με το εξωτερικό περιβάλλον και το έργο αυτό το επιτελούν συναρτήσεις. Προηγουμένως, χρησιμοποιήθηκε το ζεύγος των scanf() και printf(), οι οποίες αποτελούν τις μορφοποιούμενες Ι/Ο κονσόλας, διότι μπορούν να διαβάζουν και να τυπώνουν δεδομένα σε διάφορες μορφές. Πέραν αυτών, οι συναρτήσεις getch(), getchar(), putchar() διαβάζουν και τυπώνουν με απλούστερο τρόπο δεδομένα τύπου χαρακτήρα, χωρίς όμως να διαθέτουν δυνατότητες μορφοποίησης Η συνάρτηση printf() Στη γλώσσα C η έξοδος των δεδομένων προς το εξωτερικό περιβάλον (συσκευές εξόδου) γίνεται μέσω ροών (αρχείων) εξόδου. Ως προκαθορισμένη ή πρότυπη ροή εξόδου (standard output stream stdout) έχει τεθεί η οθόνη. Η συνάρτηση printf() (print formatted data) χρησιμοποιείται για την εμφάνιση μορφοποιούμενης πληροφορίας στην οθόνη. Τυπικά η printf() εμφανίζει στην οθόνη το περιεχόμενο του ορίσματός της, που περικλείεται μέσα στις παρενθέσεις που την ακολουθούν. Το πρωτότυπο της συνάρτησης έχει την ακόλουθη μορφή: -19-

10 int printf(const char *content, argument_1, argument_2,..., argument_n); Η συνάρτηση printf() εκτυπώνει κατά βάση μία συμβολοσειρά, η οποία εναλλακτικά καλείται αλφαριθμητικό (στο ανωτέρω πρωτότυπο της printf() το αλφαριθμητικό το διαχειρίζεται ο δείκτης content περισσότερες πληροφορίες για τους δείκτες στο Κεφάλαιο 6 ). Ωστόσο, η ισχύς της printf() όπως διαπιστώθηκε στις προηγούμενες παραγράφους έγκειται στη δυνατότητα που προσφέρει να αντικατασταθούν τμήματα του αλφαριθμητικού από δεδομένα μέσω των προσδιοριστών ή προσδιοριστικών μετατροπής (conversion specifiers) %d, %c, %f κ.λπ. Οι τιμές των δεδομένων, τα οποία αντιστοιχούν στα ορίσματα argument_1,..., argument_n, μπορούν να απεικονιστούν με συγκεκριμένο αριθμό ψηφίων. Επιπρόσθετα, παρέχεται η δυνατότητα να εκτελεστούν περαιτέρω λειτουργίες μορφοποίησης, όπως η αλλαγή γραμμής ή η μετακίνηση κατά μία θέση στηλοθέτη. Σε περίπτωση επιτυχημένης εκτέλεσης, η συνάρτηση printf() επιστρέφει τον αριθμό των χαρακτήρων που εκτυπώνει, αλλιώς επιστρέφει αρνητική τιμή. Στην παρακάτω γραμμή κώδικα x=printf( "This is test no %6d",213 ); η ακέραια μεταβλητή x δέχεται τον αριθμό των χαρακτήρων που εκτύπωσε η printf(), δηλαδή τον αριθμό 22, καθόσον το αλφαριθμητικό "This is test no " περιέχει 17 χαρακτήρες και ο προσδιοριστής %6d απαίτησε να εκτυπωθεί ο ακέραιος 213 με 6 χαρακτήρες (3 κενά και ακολούθως οι χαρακτήρες 2, 1 και 3). Για να χρησιμοποιηθεί η συνάρτηση printf() απαιτείται η ενσωμάτωση στο πρόγραμμα μέσω της εντολής προεπεξεργαστή include του αρχείου κεφαλίδας stdio.h, καθώς σε αυτό το αρχείο βρίσκεται το πρότυπό της Μη εκτυπούμενοι χαρακτήρες και σημαίες Οι σταθερές τύπου χαρακτήρα «νέα γραμμή (new-line)» και «στηλοθέτης (tab)» ανήκουν στην κατηγορία των μη εκτυπούμενων χαρακτήρων, τους οποίους η C αναπαριστά με τις «ακολουθίες διαφυγής (escape sequences)» \n και \t αντίστοιχα. Η παρακάτω πρόταση δίνεται ως παράδειγμα χρήσης χαρακτήρων διαφυγής: printf( "Write, \" a \\ is a backslash. \"\n" ); Η πρόταση θα εμφανίσει στην κύρια έξοδο (οθόνη): 2.3: Write, " a \ is a backslash. " Οι μη εκτυπούμενοι χαρακτήρες και οι αντίστοιχες ακολουθίες διαφυγής παρατίθενται στον Πίνακα Χαρακτήρας Ακολουθία Χαρακτήρας Ακολουθία συναγερμός (κουδούνι) \a πλάγια γραμμή \\ οπισθοχώρηση μία θέση \b λατινικό ερωτηματικό \? αλλαγή σελίδας \f μονό εισαγωγικό \' νέα γραμμή \n διπλό εισαγωγικό \" επαναφορά κεφαλής \r οκταδικός αριθμός \ooo οριζόντιος στηλοθέτης \t δεκαεξαδικός αριθμός \xhhh κατακόρυφος στηλοθέτης \v μηδενικός χαρακτήρας(με ASCII κωδικό 0) \0 Πίνακας 2.3 Μη εκτυπούμενοι χαρακτήρες και αντίστοιχες ακολουθίες διαφυγής Ένα επιπλέον εργαλείο μορφοποίησης των εκτυπούμενων δεδομένων αποτελούν οι σημαίες (flags), που παρατίθενται στον Πίνακα 2.4. Aριστερά από κάθε σημαία απαιτείται η προσθήκη του συμβόλου %. Σημαία Λειτουργία Αριστερή στοίχιση της εξόδου στο πεδίο πλάτους - (η προκαθορισμένη στοίχιση είναι στα δεξιά) + Προσθήκη του προσήμου στις θετικές τιμές -20-

11 #ο Προσθήκη του 0 μπροστά από οκταδικούς #x Προσθήκη του 0x μπροστά από δεκαεξαδικούς αριθμούς #X Προσθήκη του 0X μπροστά από δεκαεξαδικούς αριθμούς 0 Προσθήκη των απαιτούμενων μηδενικών μπροστά από την τιμή, ώστε να καλυφθεί το πεδίο πλάτους. κενός χαρακτήρας Προσθήκη του κενού χαρακτήρα μπροστά από τις μηδενικές τιμές Πίνακας 2.4 Σημαίες Παράδειγμα Στο πρόγραμμα που ακολουθεί χρησιμοποιούνται διάφορες σημαίες: #include <stdio.h> int main() { int x=323; printf( "1:\t%-5d\n",x ); printf( "2:\t%+5d\n",x ); printf( "3:\t% d\n",x ); printf( "4:\t%#o\n",x ); printf( "5:\t%#x\n",x ); printf( "6:\t%#X\n",x ); printf( "7:\t%05d\n",x ); } return 0; Eικόνα 2.4 Η έξοδος του προγράμματος του παραδείγματος Κάθε printf() αρχικά εμφανίζει στην οθόνη τους ακέραιους αριθμούς 1,2,...,7, ακολουθούμενους από τον χαρακτήρα ':'. Στη συνέχεια, εμφανίζεται το περιεχόμενο της ακέραιας μεταβλητής x, όπως αυτό μορφορποιείται σύμφωνα με την εκάστοτε σημαία. Συγκεκριμένα: Η πρώτη printf()εμφανίζει την τιμή 323 στοιχισμένη στα αριστερά. Στη δεύτερη printf()το πλάτος πεδίου είναι 5 και γίνεται χρήση της σημαίας +. Εφόσον το 323 καταλαμβάνει 3 θέσεις, στην οθόνη εμφανίζεται ένας κενός χαρακτήρας και ακολούθως το Στην τρίτη printf()η χρήση της σημαίας κενού χαρακτήρα οδηγεί στην εμφάνιση ενός κενού αριστερά της τιμής 323. Στην τέταρτη printf()το 323 εμφανίζεται σε οκταδική μορφή. Στην πέμπτη και έκτη printf()το 323 εμφανίζεται σε δεκαεξαδική μορφή. Στην τελευταία printf()προστίθενται δύο μηδενικά πριν το

12 Η συνάρτηση scanf() Αντίστοιχα με την έξοδο δεδομένων, και η είσοδος πληροφορίας από το εξωτερικό περιβάλον (συσκευές εισόδου) γίνεται μέσω ροών εισόδου. Ως προκαθορισμένη ή πρότυπη ροή εισόδου (standard input stream stdin) έχει τεθεί το πληκτρολόγιο. Η συνάρτηση scanf() (scan formatted data) χρησιμοποιείται για την ανάγνωση δεδομένων από το πληκτρολόγιο και την αποθήκευσή τους σε μεταβλητές, σύμφωνα με τους προσδιοριστές που αντιστοιχούν στα ορίσματα της συνάρτησης. Το πρωτότυπο της συνάρτησης έχει την ακόλουθη μορφή: int scanf(const char *content, argument_1, argument_2,..., argument_n); Θα πρέπει να προσεχθεί ότι τα ορίσματα argument_1,..., argument_n, δεν είναι μεταβλητές αλλά οι διευθύνσεις μνήμης των μεταβλητών, στις οποίες θα αποθηκευτούν τα δεδομένα. Το αλφαριθμητικό μορφοποίησης που διαχειρίζεται ο content περιέχει τόσα προσδιοριστικά όσα είναι και τα προς ανάγνωση δεδομένα. Αντίστοιχος είναι και ο αριθμός των ορισμάτων argument_1,..., argument_n. Κατά συνέπεια, η ακόλουθη γραμμή κώδικα scanf( "%d %d",&x,&y ); θα έχει ως αποτέλεσμα να αναγνωσθούν δύο ακέραιοι και να αποθηκευτούν στις θέσεις μνήμες που καταλαμβάνουν οι ακέραιες μεταβλητές x και y. Για να γίνει η εκχώρηση τιμής στη μεταβλητή, επιβάλλεται η εισαγωγή του τελεστή διεύθυνσης & πριν το όνομα της μεταβλητής (με εξαίρεση τα ονόματα αλφαριθμητικών, στα οποία θα αναφερθούμε στο Κεφάλαιο 5). Σε περίπτωση επιτυχημένης εκτέλεσης, η συνάρτηση scanf() επιστρέφει τον αριθμό των αναγνωσθέντων δεδομένων. Εάν κάποιο δεδομένο δεν μπορεί να αναγνωσθεί, η scanf() τερματίζεται και οι μη αναγνωσθείσες τιμές παραμένουν στο stdin. Το πρωτότυπο της συνάρτησης βρίσκεται στο αρχείο κεφαλίδας stdio.h. Η συνάρτηση scanf() απαιτεί προσοχή στη χρήση της, καθώς παρουσιάζει ορισμένα ιδιαίτερα χαρακτηριστικά: Η κλήση της συνάρτησης scanf() διακόπτει τη ροή εκτέλεσης του προγράμματος, έως ότου ο χρήστης πληκτρολογήσει τα δεδομένα και πατήσει το πλήκτρο επαναφοράς (ENTER). Εάν στο τέλος του αλφαριθμητικού μορφοποίησης προστεθεί η ακολουθία διαφυγής αλλαγής γραμμής ('\n'), τότε η συνάρτηση scanf()υποχρεώνεται να προχωρήσει στην ανάγνωση του επόμενου μη κενού χαρακτήρα. Κατά συνέπεια, η ακόλουθη γραμμή κώδικα scanf( "%d\n",&x ); οδηγεί στην ανάγνωση ενός ακεραίου και στην παύση της εκτέλεσης του προγράμματος, καθώς αναμένεται η εισαγωγή από τον χρήστη ενός μη κενού χαρακτήρα. Όταν η συνάρτηση scanf() χρησιμοποιείται για την ανάγνωση αριθμητικών τιμών, οι «λευκοί χαρακτήρες» που πιθανόν υπάρχουν πριν την αριθμητική τιμή (οι χαρακτήρας του κενού, της αλλαγής γραμμής και του στηλοθέτη), αγνοούνται. Επιτρέπεται η χρήση προσδιοριστή πλάτους μέσα στο αλφαριθμητικό μορφοποίησης. Κατά συνέπεια, στην ακόλουθη γραμμή κώδικα scanf( "%4d",&x ); εάν ο χρήστης πληκτρολογήσει , θα αποθηκευτούν στην ακέραια μεταβλητή x οι τιμές των πρώτων τεσσάρων ψηφίων, δηλαδή το περιεχόμενο της x θα γίνει Η συνάρτηση scanf() μπορεί να λάβει προδιαγραφές μετατροπής, δηλαδή να θέσει περιορισμούς στους χαρακτήρες που μπορεί να αναγνώσει, μέσω του προσδιοριστή [ ]. Επιπλέον, με χρήση του συμβόλου μπορούν να προσδιοριστούν ομάδες αποδεκτών χαρακτήρων, ενώ με χρήση του συμβόλου ^ μπορούν να αποκλειστούν χαρακτήρες. Για παράδειγμα, ο προσδιοριστής μορφοποίησης %[Κ-W] επιτρέπει την -22-

13 καταχώρηση μόνο των χαρακτήρων 'Κ','L',...,'W', ενώ ο προσδιοριστής %[^Κ-W] δεν επιτρέπει την ανάγνωση των χαρακτήρων αυτών. Εάν μπροστά από έναν προσδιοριστή τοποθετηθεί αστερίσκος *, τότε το δεδομένο που θα δοθεί από το πληκτρολόγιο θα αναγνωσθεί μεν, ωστόσο δεν θα αποθηκευτεί στο αντίστοιχο όρισμα της συνάρτησης. Η συνάρτηση scanf() μπορεί να εμφανίσει προβληματική συμπεριφορά, όταν επιχειρηθεί η ανάγνωση δεδομένων τύπου χαρακτήρα με διαδοχικές κλήσεις της. Αυτό οφείλεται στο ότι κατά την πληκτρολόγηση του ENTER, ο χαρακτήρας αλλαγής γραμμής αποθηκεύεται στο stdin και η επόμενη κλήση της scanf() τον ανασύρει και τον αποθηκεύει στο όρισμα εκείνο, το οποίο ανέμενε να αποθηκεύσει τον χαρακτήρα που θα πληκτρολογούσε ο χρήστης Παράδειγμα Στο πρόγραμμα που ακολουθεί αποτυπώνεται η χρήση της συνάρτησης scanf() με διάφορους τρόπους: #include <stdio.h> #include <stdlib.h> int main() { int v1,v2; char c1,c2; /* 1 η ομάδα προτάσεων */ printf( "\n\tgive two integers: " ); scanf(" \t%d,%d",&v1,&v2 ); printf(" \n\tv1=%d, v2=%d",v1,v2 ); /* 2 η ομάδα προτάσεων */ printf( "\n\n\tgive a character: " ); scanf( "\t%c",&c1 ); printf( "\n\tc1=%c",c1 ); /* 3 η ομάδα προτάσεων */ printf( "\n\n\tgive another integer: " ); scanf( "\t%d",&v1 ); printf( "\n\tv1=%d",v1 ); /* 4 η ομάδα προτάσεων */ printf( "\n\n\tgive two new characters: " ); scanf( "%c",&c1 ); scanf( "%c",&c2 ); printf( "\n\tc1=%c\tc2=%c",c1,c2 ); } return 0; Στην πρώτη ομάδα προτάσεων η συνάρτηση scanf()διαβάζει δύο ακεραίους, τις τιμές των οποίων αποδίδει στις ακέραιες μεταβλητές v1 και v2. Στη δεύτερη ομάδα προτάσεων αναγιγνώσκεται ένας χαρακτήρας και αποθηκεύεται στη μεταβλητή τύπου χαρακτήρα c1. Στην τρίτη ομάδα προτάσεων γίνεται η ανάγνωση και αποθήκευση ενός ακεραίου. Στην τέταρτη ομάδα προτάσεων αναδεικνύεται το πρόβλημα στη λειτουργία της scanf() που διατυπώθηκε προηγουμένως: ενώ επιχειρείται να αναγνωσθούν οι χαρακτήρες 'C',...,'J', στη μεταβλητή c1 αποθηκεύεται ένας κενός χαρακτήρας και στη μεταβλητή c2 αποθηκεύεται το 'C'. Το παράδοξο αποτέλεσμα εξηγείται από το γεγονός ότι στο τέλος της τρίτης σειράς προτάσεων, η πληκτρολόγηση του ENTER μετά την τιμή -438 οδήγησε την αποθήκευση του χαρακτήρα αλλαγής γραμμής στο stdin. Όταν, -23-

14 ακολούθως, πληκτρολογήθηκαν οι χαρακτήρες 'C',...,'J', αυτοί τοποθετήθηκαν με τη σειρά στο stdin. Έτσι, όταν έγιναν οι εκχωρήσεις τιμής, πρώτα αποδόθηκε στη μεταβλητή c1 ο αποθηκευθείς λευκός χαρακτήρας της αλλαγής γραμμής, μετά αποθηκεύτηκε στη μεταβλητή c2 ο χαρακτήρας 'C', ενώ ο χαρακτήρας 'J' παρέμεινε στο stdin. Eικόνα 2.5 Η έξοδος του προγράμματος του παραδείγματος Η συνάρτηση getch() H συνάρτηση getch() διαβάζει έναν χαρακτήρα από την προκαθορισμένη είσοδο. Αναμένει, έως ότου πατηθεί ένα πλήκτρο, και στη συνέχεια επιστρέφει την τιμή του, χωρίς όμως να εμφανίζεται στην οθόνη το πλήκτρο που πατήθηκε. Το πρωτότυπο της συνάρτησης getch() βρίσκεται στο αρχείο κεφαλίδας stdio.h και η δήλωσή της είναι int getche(void); H συνάρτηση getch() επιστρέφει μεν έναν ακέραιο, αλλά μόνο στο πρώτο byte (byte χαμηλής τάξης) περιέχεται ο χαρακτήρας. Η χρήση ακεραίων γίνεται για λόγους συμβατότητας με τον αρχικό μεταγλωττιστή της UNIX C Οι συναρτήσεις getchar() putchar() Oι συναρτήσεις getchar() (get character) και putchar() (put character) είναι το αρχικό ζεύγος εισόδου εξόδου χαρακτήρων και βασίζονται στο UNIX. Tα πρωτότυπά τους βρίσκονται στο αρχείο κεφαλίδας stdio.h και οι δηλώσεις τους είναι int getchar(void); int putchar(int c); Η συνάρτηση getchar() διαβάζει έναν χαρακτήρα από την προκαθορισμένη είσοδο και τον επιστρέφει στο πρόγραμμα. Αποτελεί παραλλαγή της getch(). Ένα μειονέκτημα της συνάρτησης αυτής είναι ότι κρατά την είσοδο στην περιοχή προσωρινής αποθήκευσης, μέχρι να πατηθεί ENTER. Έτσι, μετά την επιστροφή της getchar() περιμένουν ένας ή περισσότεροι χαρακτήρες στην ουρά εισόδου του stdin. H συνάρτηση putchar() εμφανίζει στην οθόνη τον χαρακτήρα που έχει ως όρισμα, στην τρέχουσα θέση του δρομέα. Επιστρέφει μεν έναν ακέραιο, αλλά το byte χαμηλής τάξης είναι αυτό που περιέχει τον χαρακτήρα. Όπως συνέβη και με τις προηγούμενες συναρτήσεις, η χρήση ακεραίων γίνεται για λόγους συμβατότητας με τον αρχικό μεταγλωττιστή της UNIX C. -24-

15 Παράδειγμα Στο πρόγραμμα που ακολουθεί αποτυπώνεται η χρήση των συναρτήσεων getch(), getchar()και putchar(): #include <stdio.h> int main() { char c1,c2,c3; c1=getch(); putchar(c1); printf( "\n" ); c2=getchar(); printf( "\n" ); putchar(c2); c3=getchar(); printf( "\nc2=%c\tc3=%c",c2,c3 ); } return 0; Eικόνα 2.6 Η έξοδος του προγράμματος του παραδείγματος H συνάρτηση getch() διαβάζει τον χαρακτήρα 'F' και τον αποδίδει στη μεταβλητή c1, αλλά δεν τον εμφανίζει. Η εμφάνισή του οφείλεται στη χρήση της putchar() με όρισμα τη μεταβλητή c1. Ακολούθως, η getchar() διαβάζει τον χαρακτήρα 'V' και τον εμφανίζει στην οθόνη. Η δεύτερη εμφάνιση του 'V' είναι αποτέλεσμα της putchar(c2). H πρόταση c3=getchar() θα έπρεπε να έχει ως αποτέλεσμα την εκ νέου ανάγνωση χαρακτήρα, ωστόσο τα αποτελέσματα δεν είναι τα αναμενόμενα: από την προηγούμενη χρήση της getchar() παρέμενε αποθηκευμένος στον χώρο προσωρινής αποθήκευσης ο λευκός χαρακτήρας αλλαγής γραμμής, που αντιστοιχεί στο πλήκτρο ΕΝΤΕR. Αυτός ο χαρακτήρας αποδόθηκε στη μεταβλητή c3, γεγονός που αναδεικνύει το ζήτημα που ανακύπτει σε διαδοχικές εκχωρήσεις τιμών σε μεταβλητές με χρήση της getchar(). Ένας τρόπος να ξεπεραστεί το πρόβλημα, είναι να παρεμβληθεί η εντολή fflush(stdin) ανάμεσα στις προτάσεις c2=getchar() και c3=getchar(). Η fflush() καθαρίζει τον χώρο προσωρινής αποθήκευσης. Ωστόσο, επειδή σύμφωνα με το πρότυπο της γλώσσας C η συμπεριφορά της fflush() είναι απροσδιόριστη, μία άλλη λύση είναι να παρεμβληθεί μία getchar() χωρίς να εκχωρεί το αναγνωσθέν δεδομένο σε κάποια μεταβλητή, ώστε να διαβάσει τον αποθηκευμένο χαρακτήρα αλλαγής γραμμής: #include <stdio.h> int main() { -25-

16 char c1,c2,c3; c1=getch(); putchar(c1); printf( "\n" ); c2=getchar(); printf( "\n" ); putchar(c2); getchar(); c3=getchar(); printf( "\nc2=%c\tc3=%c",c2,c3 ); } return 0; Eικόνα 2.7 Η νέα έξοδος του προγράμματος του παραδείγματος Η συνάρτηση kbhit() H συνάρτηση kbhit() (keyboard hit) ελέγχει κατά πόσο ο χρήστης έχει πατήσει κάποιο πλήκτρο. Εφόσον έχει πατήσει κάποιο πλήκτρο, η συνάρτηση επιστρέφει ως αληθής (δηλαδή επιστρέφεται μη μηδενικός ακέραιος), σε αντίθετη περίπτωση επιστρέφει ως ψευδής (δηλαδή επιστρέφεται το μηδέν). Η συνάρτηση kbhit() χρησιμοποιείται κυρίως για να διακόπτει ο χρήστης τη ροή του προγράμματος κατά το δοκούν. Το πρωτότυπο της kbhit() βρίσκεται στο αρχείο κεφαλίδας stdio.h και η δήλωσή της είναι int kbhit(void); Η συνάρτηση exit() H συνάρτηση exit() επιτρέπει τον άμεσο τερματισμό ενός προγράμματος. Οι προτάσεις που βρίσκονται κάτω από την exit() δε θα εκτελεστούν. Το πρωτότυπο της exit() βρίσκεται στο αρχείο κεφαλίδας stdlib.h και η δήλωσή της είναι void exit(int status); Η μεταβλητή status υποδηλώνει κατά πόσο ο τερματισμός είναι κανονικός ή όχι. Σε περίπτωση κανονικού τερματισμού η exit() καλείται ως exit(0); ή exit(exit_success); ενώ στην περίπτωση τερματισμού λόγω σφάλματος καλείται ως exit(exit_failure); Θα πρέπει να σημειωθεί ότι το πρότυπο της γλώσσας C συσχετίζει μόνο το EXIT_FAILURE με την περίπτωση τερματισμού λόγω σφάλματος, ωστόσο από τους προγραμματιστές χρησιμοποιούνται και μη μηδενικοί ακέραιοι (συνήθως 1 και -1) για να υποδηλώσουν τις ενδεχόμενες περιπτώσεις σφάλματος. -26-

17 2.4. Η έννοια της έκφρασης και του τελεστή στη γλώσσα C Στον προγραμματισμό οι τελεστές (operators) έχουν την ίδια έννοια που έχουν και στα μαθηματικά, αποτελώντας σύμβολα ή λέξεις που αναπαριστούν συγκεκριμένες διεργασίες, οι οποίες εκτελούνται επί ενός ή περισσότερων δεδομένων. Τα δεδομένα καλούνται τελεστέοι (operands) και μπορούν να είναι μεταβλητές, σταθερές ή ακόμη και κλήσεις συναρτήσεων. Οι τελεστές χρησιμοποιούνται για τον σχηματισμό εκφράσεων. Μία έκφραση, εν γένει, αποτελείται από έναν ή περισσότερους τελεστέους και από έναν ή περισσότερους τελεστές. Κάθε έκφραση έχει μία τιμή, η οποία υπολογίζεται με ορισμένους κανόνες. Για παράδειγμα, στην έκφραση num+12 ο χαρακτήρας + αναπαριστά τη διεργασία της πρόσθεσης των δύο τελεστέων, οι οποίοι είναι η μεταβλητή num και η σταθερά 12. Οι τελεστές ταξινομούνται, ανάλογα με τον αριθμό των τελεστέων στους οποίους δρουν, σε μοναδιαίους (unary), δυαδικούς (binary) και τριαδικούς (ternary). Μία δεύτερη κατηγοριοποίηση επιτελείται με βάση τη διεργασία που εκτελούν, οδηγώντας στις κατηγορίες του Πίνακα 2.5: Κατηγορία Ενδεικτικοί τελεστές αριθμητικοί + - * / λογικοί &&! συσχετιστικοί > >= = =!= διαχείρισης bits >> &! ^ διαχείρισης μνήμης & [ ]. -> Πίνακας 2.5 Κατηγορίες τελεστών Τα σύμβολα των συνηθέστερων δυαδικών τελεστών στη C παρατίθενται στον Πίνακα 2.6: Δυαδικός τελεστής Σύμβολο Δυαδικός τελεστής Σύμβολο μικρότερο < πρόσθεση + μικρότερο ή ίσο <= αφαίρεση - ίσο = = πολλαπλασιασμός * διάφορο!= διαίρεση πραγματικών / μεγαλύτερο > πηλίκο διαίρεσης ακεραίων / μεγαλύτερο ή ίσο >= υπόλοιπο διαίρεσης ακεραίων % Πίνακας 2.6 Σύμβολα δυαδικών τελεστών Κατηγορίες τελεστών σημειογραφία Η γλώσσα C δίνει τη δυνατότητα να επιτυγχάνονται διαφορετικές λειτουργίες στην ίδια έκφραση ανάλογα με τη θέση των τελεστών ανάμεσα στους τελεστέους. Για τον λόγο αυτό, έχουν αναπτυχθεί τρεις σημειογραφίες για τους δυαδικούς τελεστές: Η σημειογραφία ένθεσης ή ένθετου τελεστή (infix notation), όταν ο τελεστής τοποθετείται μεταξύ των τελεστέων στους οποίους ενεργεί, όπως στην έκφραση x + y. Η σημειογραφία πρόθεσης ή προπορευόμενου τελεστή (prefix notation), όταν αυτός τοποθετείται πριν από τους τελεστέους, όπως στην έκφραση + x. Η σημειογραφία παρελκόμενου τελεστή (postfix notation), όταν ο τελεστής τοποθετείται μετά από τους τελεστέους, όπως στην έκφραση x +. Παρατηρήσεις: 1. Οι τελεστές είναι προτιμότερο να μην χρησιμοποιούνται σε μεικτούς τύπους. Για παράδειγμα, η έκφραση -27-

18 out_int=my1_int+my2_int δεν παρουσιάζει κανένα πρόβλημα, σε αντιδιαστολή με τον ακόλουθο μεικτό τύπο out_float=my_double/my_int 2. Στη γλώσσα C υπάρχει διάκριση ανάμεσα στη διαίρεση ακεραίων και στη διαίρεση αριθμών κινητής υποδιαστολής. Στη διαίρεση ακεραίων το αποτέλεσμα προέρχεται από το σχήμα (Διαιρετέος = Πηλίκο*Διαιρέτης + Υπόλοιπο), επομένως η διαίρεση του 5 με το 2 παράγει το ακέραιο πηλίκο 2 κι όχι το 2.5. Για να ληφθεί ως αποτέλεσμα αριθμός κινητής υποδιαστολής, τουλάχιστον ένας από τους τελεστέους πρέπει να είναι αριθμός κινητής υποδιαστολής: η έκφραση 5.0/2 υπολογίζεται ως Kατηγορίες εκφράσεων της γλώσσας C προτεραιότητα και προσεταιριστικότητα Οι εκφράσεις της γλώσσας C μπορούν να καταταγούν στις παρακάτω κατηγορίες: Σταθερές εκφράσεις. Είναι εκφράσεις που περιέχουν μόνο σταθερές τιμές. Ακέραιες εκφράσεις και εκφράσεις κινητής υποδιαστολής. Είναι εκφράσεις, οι οποίες μετά από όλες τις άμεσες και έμμεσες μετατροπές τύπων δίνουν αποτέλεσμα ακέραιου τύπου ή τύπου κινητής υποδιαστολής αντίστοιχα. Εκφράσεις δείκτη. Είναι εκφράσεις με τιμή μία διεύθυνση. Περιλαμβάνουν μεταβλητές δείκτη (η έννοια του δείκτη θα αναλυθεί στο κεφάλαιο 6), τον τελεστή διεύθυνσης &, αλφαριθμητικές σταθερές και ονόματα πινάκων. Ο υπολογισμός μίας έκφρασης δεν είναι πάντοτε απλή υπόθεση, ιδιαίτερα στην περίπτωση που υπάρχουν ένθετες (nested) εκφράσεις, δηλαδή εκφράσεις που είναι φωλιασμένες μέσα σε άλλες. Στην έκφραση (((n+9)>=k) && j) η έκφραση n+9 είναι φωλιασμένη στην έκφραση (n+9)>=k, η οποία με τη σειρά της είναι φωλιασμένη στη συνολική έκφραση. Μία άλλη περίπτωση δυσχέρειας στον υπολογισμό είναι η διαδοχική παράθεση τελεστών: 4*9-12, η οποία μπορεί να υπολογιστεί είτε ως (4*9) 12=24 είτε ως 4*(9 12)=-12, οδηγώντας σε διαφορετικά αποτελέσματα. Για να αντιμετωπιστούν οι ανωτέρω δυσχέρειες έχει υιοθετηθεί μία σειρά εφαρμογής των τελεστών, η επονομαζόμενη εφαρμοστική σειρά (applicative order), η οποία στηρίζεται στις έννοιες της προτεραιότητας (precedence) και της προσεταιριστικότητας (associativity) των τελεστών. Οι τελεστές ταξινομούνται σε επίπεδα προτεραιότητας, με τη σύμβαση ότι οι τελεστές υψηλότερου επιπέδου προτεραιότητας δρουν επί των τελεστέων πριν από τους τελεστές χαμηλότερου επιπέδου. Η ύπαρξη περισσότερων τελεστών στο ίδιο επίπεδο προτεραιότητας επιβάλλει τον προσδιορισμό της κατεύθυνσης εφαρμογής, με την κατεύθυνση από τα αριστερά προς τα δεξιά να είναι ευρύτερα χρησιμοποιούμενη. Ένας τελεστής καλείται αριστερής προσεταιριστικότητας (left associative), όταν σε εκφράσεις που περιέχουν πολλά στιγμιότυπα του τελεστή η ομαδοποίηση γίνεται από τα αριστερά προς τα δεξιά. Έτσι, η έκφραση υπολογίζεται ως (9 3)-2. Οι τελεστές +, -,*, / είναι όλοι αριστερής προσεταιριστικότητας. Για τη γλώσσα C παράδειγμα δεξιάς προσεταιριστικότητας αποτελεί η ύψωση σε δύναμη και ο τελεστής ανάθεσης (=). Στην έκφραση num1=num2=10 εφαρμόζεται πρώτα ο δεξιός τελεστής ανάθεσης, με αποτέλεσμα η num2 να αποκτήσει την τιμή 10. Ακολούθως, εφαρμόζεται ο αριστερός τελεστής ανάθεσης, έτσι ώστε η num1 εξισώνεται με τη num2 και αποκτά την τιμή 10. Η προτεραιότητα και το είδος προσεταιριστικότητας των τελεστών παρατίθενται στον Πίνακα 2.7, όπου οι τελεστές έχουν τεθεί με σειρά φθίνουσας προτεραιότητας: Τελεστές Είδος προσεταιριστικότητας () [] -> από αριστερά προς τα δεξιά! * & από δεξιά προς τα αριστερά -28-

19 (τύπος) sizeof * / % (αριθμητικοί τελεστές) από αριστερά προς τα δεξιά + - (αριθμητικοί τελεστές)» << >>» < <= > >=» = =! =» &» ^»» &&»»?: από δεξιά προς τα αριστερά = += -= *= %= &= ^= =» <<= >>= από αριστερά προς τα δεξιά Πίνακας 2.7 Προτεραιότητα και προσεταιριστικότητα τελεστών Με βάση τα προαναφερθέντα, είναι προφανές ότι με τους κανόνες προτεραιότητας και προσεταιριστικότητας δεν είναι πάντοτε απαραίτητη η χρήση παρενθέσεων για τον προσδιορισμό του τρόπου υπολογισμού της τιμής των εκφράσεων. Ωστόσο, οι παρενθέσεις χρησιμοποιούνται για τους ακόλουθους λόγους: Για να προσδιοριστεί συγκεκριμένη σειρά εφαρμογής, όπως στην έκφραση (2-3)*4. Για να καταστεί μία έκφραση ευανάγνωστη, όπως στην έκφραση 2-(3*4), παρά το γεγονός ότι στην τελευταία περίπτωση αποτελεί πλεονασμό. Στην περίπτωση ένθετων παρενθέσεων ο μεταγλωττιστής εφαρμόζει πρώτα τις εσωτερικές παρενθέσεις. Για παρενθέσεις, όμως, που βρίσκονται στο ίδιο βάθος ένθεσης, δεν ορίζεται η σειρά υπολογισμού Παράδειγμα Με χρήση του Πίνακα 2.7 να υπολογιστούν οι εκφράσεις: (α) x=17-2*8 (β) y= (α) Βάσει της προτεραιότητας, πρώτα θα εκτελεστεί ο πολλαπλασιασμός 2*8 και το γινόμενο που θα προκύψει θα αποτελέσει τελεστή στην αφαίρεση από το 17. Το τελικό αποτέλεσμα 1 ανατίθεται στη μεταβλητή x που βρίσκεται αριστερά του τελεστή ανάθεσης =. x=17-(2*8)=17 16=1 (β) Εφόσον εμφανίζονται δύο στιγμιότυπα του τελεστή -, οι κανόνες προσεταιριστικότητας καθορίζουν την εκτέλεση των πράξεων από τα αριστερά προς τα δεξιά: y=(17-2) 8=15 8= Τελεστές μοναδιαίας αύξησης και μείωσης Ο τελεστής μοναδιαίας αύξησης (increment operator) συμβολίζεται ++. Με χρήση αυτού του τελεστή η έκφραση num=num+1 είναι ισοδύναμη με την έκφραση num++. Αντίστοιχα, ο τελεστής μοναδιαίας μείωσης (decrement operator) συμβολίζεται -- και η έκφραση num=num 1 είναι ισοδύναμη με την έκφραση num

20 Παράδειγμα Προπορευόμενοι και παρελκόμενοι τελεστές μοναδιαίας αύξησης και μείωσης: να υπολογιστούν οι τιμές των x και y στις προτάσεις του Πίνακα 2.8, οι οποίες εκτελούνται διαδοχικά. Πρόταση Τιμή x Τιμή y int x=10, y=15; x; y=--x; 10 5 y=x-- + y; 9 15 y=y x--; 8 6 Πίνακας Παράδειγμα Να προσδιοριστεί η τιμή των x, y και z μετά την εκτέλεση καθεμιάς από τις παρακάτω προτάσεις, θεωρώντας ότι πριν την εκτέλεση της κάθε πρότασης οι τιμές των x και y είναι το 10 και το 15 αντίστοιχα. (α) z=++x + y; (β) z=--x + y; (γ) z=x++ + y; (δ) z=x-- + y; (ε) z=x y; (στ) z=++x + y--; Στην περίπτωση του προπορευόμενου τελεστή, το σύστημα πρώτα εκτελεί την αύξηση ή μείωση και μετά χρησιμοποιεί τη νέα τιμή της μεταβλητής στον υπολογισμό της τιμής της έκφρασης (προτάσεις (α) και (β)). Αντίθετα, στην περίπτωση του παρελκόμενου τελεστή το σύστημα πρώτα χρησιμοποιεί την τιμή της μεταβλητής για τον υπολογισμό της τιμής της έκφρασης και μετά εκτελεί την αύξηση ή μείωση της τιμής της μεταβλητής (προτάσεις (γ) και (δ)). Στις προτάσεις (ε) και (στ) εμφανίζονται και προπορευόμενος και παρελκόμενος τελεστής, οπότε το σύστημα χειρίζεται την κάθε περίπτωση ξεχωριστά, σύμφωνα με τους προαναφερθέντες κανόνες. Τα αποτελέσματα παρατίθενται στον Πίνακα 2.9: Πρόταση Τιμή x Τιμή y Τιμή z z=++x + y; z=--x + y; z=x++ + y; z=x-- + y; z=x y; z=++x + y--; Πίνακας

21 2.7. Τελεστές ανάθεσης Οι τελεστές ανάθεσης (assignment operators) εκτελούν μία πράξη ανάμεσα στους τελεστέους και εκχωρούν το αποτέλεσμα σε έναν από τους τελεστέους: x*=100; Εκτελεί την πράξη του πολλαπλασιασμού μεταξύ των x και 100 και εκχωρεί το αποτέλεσμα στον τελεστέο x. Αντιστοιχεί στην πρόταση x=x*100; x*=y+12; Αντιστοιχεί στην πρόταση x=x*(y+12); κι όχι στην πρόταση x=x*y+12; Τελεστές ανάθεσης δημιουργούν και οι τελεστές διαχείρισης δυαδικών ψηφίων. Οι τελεστές αυτοί είναι: >>=, <<=, &=, ^=, και = (βλ. 2.10). Οι τελεστές ανάθεσης σε συνδυασμό με τους τελεστές μοναδιαίας αύξησης/μείωσης γίνονται αιτία δημιουργίας παρενεργειών, για τον λόγο αυτό αναφέρονται και ως παρενεργοί τελεστές (side effect operators). Οι παρενέργειες αυτές έχουν ως αποτέλεσμα την απροσδιόριστη συμπεριφορά του συστήματος ως προς τον τρόπο υπολογισμού της τιμής της μεταβλητής x σε εκφράσεις, όπως x= ++x + 4; 2.8. Συσχετιστικοί τελεστές Οι συσχετιστικοί τελεστές (relational operators) συγκρίνουν δύο τελεστέους. Οι βασικοί τελεστές της κατηγορίας αυτής παρατίθενται στον Πίνακα 2.10: Τελεστής Δράση < μικρότερο από > μεγαλύτερο από <= μικρότερο ή ίσον από >= μεγαλύτερο ή ίσον από == ίσο!= διάφορο Πίνακας 2.10 Σύμβολα συσχετιστικών τελεστών Το αποτέλεσμα της χρήσης των συσχετιστικών τελεστών είναι είτε ΑΛΗΘΕΣ (true) είτε ΨΕΥΔΕΣ (false). Για παράδειγμα, η τιμή της έκφρασης (3<2) είναι ψευδής ενώ η τιμή της έκφρασης (2==2) είναι αληθής. Στη γλώσσα C (και σε πολλές άλλες γλώσσες προγραμματισμού) η τιμή ΑΛΗΘΗΣ αντιστοιχεί στον ακέραιο 1 και η τιμή ΨΕΥΔΗΣ αντιστοιχεί στον ακέραιο 0. Παρατήρηση: Συγκρίνοντας τους αριθμητικούς με τους συσχετιστικούς τελεστές προκύπτει ότι και οι δύο χρησιμοποιούν αριθμητικούς τελεστέους, π.χ. (num+10) και (num<10), όπου num είναι μία ακέραια μεταβλητή. Ωστόσο, οι αριθμητικοί τελεστές μπορούν να δώσουν ως αποτέλεσμα οποιονδήποτε αριθμό (για κάθε τιμή του num η πρόταση (num+10) δίνει μία άλλη τιμή), ενώ οι συσχετιστικοί τελεστές έχουν δίτιμη έξοδο (για κάθε τιμή του num μικρότερη του 10 η πρόταση (num<10) δίνει TRUE (1) και για όλες τις άλλες τιμές του num δίνει FALSE (0)) Λογικοί τελεστές Οι λογικοί τελεστές δρουν επί ενός ή δύο τελεστέων και λειτουργούν με βάση τη δίτιμη άλγεβρα Boole. Τόσο οι είσοδοι όσο και οι έξοδοι μπορούν να λάβουν μόνο δύο τιμές, TRUE και FALSE. Οι τελεστές της κατηγορίας αυτής παρατίθενται στον Πίνακα 2.11, ενώ στον Πίνακα 2.12 περιγράφεται ο τρόπος λειτουργίας τους (πίνακας αληθείας): Τελεστής && Δράση λογικό AND -31-

22 λογικό OR! λογικό NOT Πίνακας 2.11 Σύμβολα λογικών τελεστών x y x && y x y!x True True True True False True False False True False True False True True False False False False Πίνακας 2.12 Πίνακας αληθείας των λογικών τελεστών Παράδειγμα Για x=16 και y=-6 να υπολογιστούν οι εκφράσεις: (α) (x+9)<(13 y) (β) (x<5) (y>10) (γ) (x>=7) && (!((x-15)<y)) Αντικαθιστώντας τις αριθμητικές τιμές προκύπτει: (α) (16+9)<(13 (-6)) 25<19 FALSE (β) (16<5) (-6>10) FALSE FALSE FALSE (γ) (16>=7) && (!((16-15)<(-6))) TRUE && (!(1<(-6))) TRUE && (!FALSE) TRUE && TRUE TRUE Παράδειγμα Να εξαχθεί η έξοδος του ακόλουθου προγράμματος: #include <stdio.h> int main() { int x1=4,x2=-17,x3=10,x4; /* 1 η ομάδα προτάσεων */ x3=++x1 - --x2; printf("x1=%d, x2=%d, x3=%d\n",x1,x2,x3); /* 2 η ομάδα προτάσεων */ x4=((x1<1000)!((x2-x3)>(x1=x1+8))); printf("x1=%d, x4=%d, %d\n",x1,x4,((x1>3) &&!(x4/x2))); } return 0; Eικόνα 2.8 Η έξοδος του προγράμματος του παραδείγματος

23 Στην πρώτη ομάδα προτάσεων, λόγω των προπορευόμενων τελεστών η αρχική τιμή της x1 αυξάνεται κατά 1 και της x2 μειώνεται κατά 1, με αποτέλσμα οι νέες τιμές τους να είναι 5 και -18. Οι τιμές αυτές αφαιρούνται μεταξύ τους και το αποτέλεσμα ( 5 - ( -18 ) = 23 ) εκχωρείται στη μεταβλητή x3. Στη δεύτερη ομάδα προτάσεων οι έλεγχοι οδηγούν στα ακόλουθα: x1<1000 5<1000 TRUE (x2-x3)>(x1=x1+8)) (-18-23)>(x1=5+8)) -41>13 FALSE!((x2-x3)>(x1=x1+8))!FALSE TRUE x4=true TRUE TRUE, δηλαδή 1 Ο τελευταίος προσδιοριστής στην printf() της δεύτερης ομάδας προτάσεων αντιστοιχεί στο αποτέλεσμα του ελέγχου: ((x1>3) &&!(x4/x2)) ((5>3) &&!(1/23)) ΤRUE &&!0 ΤRUE &&!FALSE ΤRUE && TRUE TRUE, δηλαδή Τελεστές διαχείρισης δυαδικών ψηφίων Στη γλώσσα C υπάρχουν έξι τελεστές διαχείρισης δυαδικών ψηφίων (bitwise operators), οι οποίοι επιτρέπουν την εκτέλεση πράξεων σε επίπεδο bit. Οι τελεστές αυτοί βρίσκουν εφαρμογή στα πεδία της κωδικοποίησης και της συμπίεσης δεδομένων. Οι τελεστές της κατηγορίας αυτής παρατίθενται στον Πίνακα 2.13, ενώ στον Πίνακα 2.14 περιγράφεται ο τρόπος λειτουργίας τους (πίνακας αληθείας): Τελεστής Δράση & λογικό AND λογικό OR ~ συμπλήρωμα ως προς 1 ^ exclusive OR << ολίσθηση προς τα αριστερά >> ολίσθηση προς τα δεξιά Πίνακας 2.13 Σύμβολα τελεστών διαχείρισης δυαδικών ψηφίων x y x & y x y x ^ y ~x Πίνακας 2.14 Πίνακας αληθείας των τελεστών διαχείρισης δυαδικών ψηφίων Η ολίσθηση προς τα αριστερά (bit left shift) μετατοπίζει όλα τα bits του αριστερού τελεστέου κατά τόσες θέσεις προς τα αριστερά, όση είναι η τιμή του δεξιού τελεστέου. Τα bits που απομένουν άνευ περιεχομένου στο δεξί τμήμα του τελεσταίου, συμπληρώνονται με μηδενικά. Η ολίσθηση αυτή πολλαπλασιάζει την υφιστάμενη τιμή του αριστερού τελεστέου επί 2 n, όπου n είναι ο αριθμός των θέσεων ολίσθησης. Η ολίσθηση προς τα δεξιά (bit right shift) μετατοπίζει όλα τα bits του αριστερού τελεστέου κατά τόσες θέσεις προς τα δεξιά, όση είναι η τιμή του δεξιού τελεστέου. Τα bits που απομένουν άνευ περιεχομένου στο αριστερό τμήμα του τελεσταίου, συμπληρώνονται με μηδενικά. Η ολίσθηση αυτή διαιρεί την υφιστάμενη τιμή του αριστερού τελεστέου διά 2 n, όπου n είναι ο αριθμός των θέσεων ολίσθησης. Όταν χρησιμοποιούνται τελεστές ολίσθησης, είναι προτιμότερο να εφαρμόζεται σε μη προσημασμένες μεταβλητές, καθώς η εφαρμογή τους σε αρνητικούς αριθμούς εξαρτάται από τον εκάστοτε μεταγλωττιστή. -33-

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr 1 Πώς δημιουργούμε πρόγραμμα Η/Υ; 1. Ανάλυση του προβλήματος 2. Επινόηση & Σχεδιασμός

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

Προγραμματισμός Ι. Θεματική ενότητα 3: Tελεστές. εκφράσεις

Προγραμματισμός Ι. Θεματική ενότητα 3: Tελεστές. εκφράσεις Θεματική ενότητα 3: Tελεστές εκφράσεις Τελεστές (operators) Εκφράσεις (expressions) Σύμβολα ή λέξεις που αναπαριστούν συγκεκριμένες διεργασίες, οι οποίες εκτελούνται πάνω σε ένα ή περισσότερα δεδομένα.

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

Προγραμματισμός Ι. Θεματική ενότητα 2: Μεταβλητές σταθερές Ι/Ο κονσόλας

Προγραμματισμός Ι. Θεματική ενότητα 2: Μεταβλητές σταθερές Ι/Ο κονσόλας Θεματική ενότητα 2: Μεταβλητές σταθερές Ι/Ο κονσόλας Μεταβλητές Ίδια χρήση με εκείνη της άλγεβρας: 3x + 5 = y x και y είναι οι μεταβλητές Αλλά γενικευμένη: η μεταβλητή είναι μία θέση μνήμης για ένα δεδομένο.

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

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

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

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

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

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

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

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

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

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2 Οικονόμου Βαγγέλησ Διάλεξη Νο 2 Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2 1 Η έννοια τησ μεταβλητήσ έδωςε λύςη ςτο πρόβλημα τησ αναφοράσ ςτην κύρια μνήμη του υπολογιςτή. Οι γλώςςεσ προγραμματιςμού υποςτηρίζουν

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

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

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

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

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

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 2: Τύποι μεταβλητών Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

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

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

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

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

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

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

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

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

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

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

Διαδικασία Ανάπτυξης Λογισμικού

Διαδικασία Ανάπτυξης Λογισμικού Διαδικασία Ανάπτυξης Λογισμικού Ανάλυση Απαιτήσεων (προϋποθέτει κατανόηση του προβλήματος και τη συλλογή πληροφοριών και των απαιτήσεων από το σύστημα) Σχεδιασμός (ορισμός διεργασιών για να ικανοποιηθούν

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

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

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

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

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

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

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

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

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

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

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ.

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ. Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας Πληροφορική Ι Αναπαράσταση αριθμών στο δυαδικό σύστημα Δρ. Γκόγκος Χρήστος Δεκαδικό σύστημα αρίθμησης Ελληνικό - Ρωμαϊκό Σύστημα αρίθμησης

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 3ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΕΚΤΥΠΩΣΗ ΚΕΙΜΕΝΟΥ Ένα κείμενο μπορεί να εκχωρηθεί ως τιμή μιας μεταβλητής

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Μεταβλητές 2 Δήλωση μεταβλητών Η δήλωση (declaration) πληροφορεί το μεταγλωττιστή για το όνομα και

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

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

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

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

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 4: Τελεστές Τελεστές: Τελεστής Ανάθεσης 2 Το σύμβολο της ανάθεσης είναι το = Προσοχή: το σύμβολο ελέγχου ισότητας είναι το ==. Η μορφή των προτάσεων ανάθεσης είναι:

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

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

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

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

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

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

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

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

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

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

TEI Σερρών - Τμήμα Πληροφορικής & Επικοινωνιών

TEI Σερρών - Τμήμα Πληροφορικής & Επικοινωνιών Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Διαδικαστικός Προγραμματισμός Δρ. Πάρις Μαστοροκώστας Αναπληρωτής Καθηγητής Σέρρες 2006 ΠΕΡΙΕΧΟΜΕΝΑ Περιεχόμενα i Κεφάλαιο 1:

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

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

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

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

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

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

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

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

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

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

Εισαγωγή στον δομημένο προγραμματισμό Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στον δομημένο προγραμματισμό Ενότητα 2 η : Συντακτικό της γλώσσας C, Μεταβλητές Σταθερές Τύποι Δεδομένων Τελεστές Εκφράσεις Προτάσεις Αν. καθηγητής

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

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

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

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

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

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

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

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

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ I Τίτλος Μαθήματος ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ I ΠΑΡΙΣ ΜΑΣΤΟΡΟΚΩΣΤΑΣ Καθηγητής ΣΕΡΡΕΣ, ΣΕΠΤΕΜΒΡΙΟΣ 2015

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

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

5 &6. Τύποι δεδομένων, τελεστές και

5 &6. Τύποι δεδομένων, τελεστές και Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 5 &6. Τύποι δεδομένων, τελεστές και αριθμητικές εκφράσεις Ιωάννης Κατάκης Σήμερα o Τύποι δεδομένων int, char, float, double o Τελεστές = + - * / % o Αριθμητικές

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Δεύτερη Διάλεξη Βασικά στοιχεία της γλώσσας προγραμματισμού C Μία γλώσσα προγραμματισμού όπως και μια ανθρώπινη γλώσσα μπορεί να μελετηθεί ως προς το αλφάβητό της,

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

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

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

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

3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Ο τύπος int Ο τύπος δεδομένων τύπου int αναφέρεται στα ακέραια μεγέθη. Σταθερές, μεταβλητές, παραστάσεις και

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

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

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

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

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ ) Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ. 147 159) Για τις γλώσσες προγραμματισμού πρέπει να έχουμε υπόψη ότι: Κάθε γλώσσα προγραμματισμού σχεδιάζεται για συγκεκριμένο σκοπό, δίνοντας ιδιαίτερη

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

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα 2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ 2.1 Αριθμητικά συστήματα Κάθε πραγματικός αριθμός χ μπορεί να παρασταθεί σε ένα αριθμητικό σύστημα με βάση β>1 με μια δυναμοσειρά της μορφής, -οο * = ± Σ ψ β " (2 1) η - ν

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

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

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

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

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

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

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

Αριθμητικά Συστήματα

Αριθμητικά Συστήματα Αριθμητικά Συστήματα Οργάνωση Δεδομένων (1/2) Bits: Η μικρότερη αριθμητική μονάδα ενός υπολογιστικού συστήματος, η οποία δείχνει δύο καταστάσεις, 0 ή 1 (αληθές η ψευδές). Nibbles: Μονάδα 4 bit που παριστά

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

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Εισαγωγή στην Πληροφορική Ενότητα 6: Αλγόριθμοι / Προγραμματισμός Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

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

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

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

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

Δεδομένα, Τύποι και Τιμές

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

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

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

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

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

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ Λογικός τύπος ( ) Ο τύπος είναι κατάλληλoς για την αναπαράσταση ποσοτήτων που μπορούν να πάρουν δύο μόνο τιμές (π.χ. ναι/όχι, αληθές/ψευδές, ). Τιμές ή Δήλωση Εκχώρηση Ισοδυναμία με ακέραιους

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

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

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13) Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις Επανάληψη για την ενδιάμεση εξέταση (Διάλεξη 13) 13-1 Πρόβλημα 1 Γράψετε τον ορισμό μίας συνάρτησης η οποία υπολογίζει το μέγιστο 2 ακεραίων αριθμών και

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

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

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

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

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

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Κων. Κόκκινος Μεταβλητές-1 Οι μεταβλητές αποτελούν θέσεις μνήμης στις οποίες αποθηκεύονται τιμές αντίστοιχες

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

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++ Εντολές εισόδου - εξόδου Εισαγωγή στη C++ Το πρώτο πρόγραμμα //my first program #include using namespace std; int main(){ cout

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

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

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

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

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

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

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

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

1η+2η εβδομάδα. 1 Ιστορία της C. 5 Μαρτίου 2012

1η+2η εβδομάδα. 1 Ιστορία της C. 5 Μαρτίου 2012 1η+2η εβδομάδα 5 Μαρτίου 2012 1 Ιστορία της C Η γλώσσα C επινοήθηκε στα εργαστήρια Bell της AT&T την περίοδο από το 1969 έως το 1973 κατά κύριο λόγο από τον Dennis Ritchie. Εκείνη τη χρονική περίοδο υπήρχαν

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

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

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

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

Εισαγωγή στην επιστήμη των υπολογιστών

Εισαγωγή στην επιστήμη των υπολογιστών Εισαγωγή στην επιστήμη των υπολογιστών Υπολογιστές και Δεδομένα Κεφάλαιο 3ο Αναπαράσταση Αριθμών www.di.uoa.gr/~organosi 1 Δεκαδικό και Δυαδικό Δεκαδικό σύστημα 2 3 Δεκαδικό και Δυαδικό Δυαδικό Σύστημα

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

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

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

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

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

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

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

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

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

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος 2012-13 Κων/νος Φλώρος Απλοί τύποι δεδομένων Οι τύποι δεδομένων προσδιορίζουν τον τρόπο παράστασης των

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΚΕΦΑΛΑΙΟ 2 2.4 Βασικές συνιστώσες/εντολές ενός αλγορίθμου 2.4.1 Δομή ακολουθίας ΚΕΦΑΛΑΙΟ 7 7.1 7.9 Σταθερές (constants): Προκαθορισμένες τιμές που παραμένουν

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

Στόχοι και αντικείμενο ενότητας. Συντακτικό Γλώσσας. Αλφάβητο. #2.. Εισαγωγή στη C (Μέρος Πρώτο)

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

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

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

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

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

Ψηφιακά Κυκλώματα Ι. Μάθημα 1: Δυαδικά συστήματα - Κώδικες. Λευτέρης Καπετανάκης

Ψηφιακά Κυκλώματα Ι. Μάθημα 1: Δυαδικά συστήματα - Κώδικες. Λευτέρης Καπετανάκης ΤΛ2002 Ψηφιακά Κυκλώματα Ι Μάθημα 1: Δυαδικά συστήματα - Κώδικες Λευτέρης Καπετανάκης ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΡΗΤΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ Άνοιξη 2011 ΤΛ-2002: L1 Slide 1 Ψηφιακά Συστήματα ΤΛ-2002:

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

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βασικές Έννοιες Προγραμματισμού Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Αριθμητικά συστήματα Υπάρχουν 10 τύποι ανθρώπων: Αυτοί

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