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

Σχετικά έγγραφα
Προγραμματισμός Ι (ΗΥ120)

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

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

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

Η γλώσσα C. Προγραµµατισµός Ι 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

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

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

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

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

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

ΑΣΚΗΣΗ 2: ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΣΤΗ C

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

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

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

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

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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #6 (β)

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

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

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

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

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

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

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

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

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

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

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

LAB1 ΛΥΣΗ. Ευρετήριο απαντήσεων ανά τµήµα: Ευρετήριο απαντήσεων ανά µήνυµα λάθους/προειδοποίησης

Διάλεξη 8η: Αλφαριθμητικά (strings)

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

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

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

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

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

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

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

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

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

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

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

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

TMHMA TEXNΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛ/ΝΙΩΝ Προγραμματισμός Ι ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ , Α ΕΞΑΜΗΝΟ Βασίλης Μποζαντζής. Βασίλης Μποζαντζής

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Transcript:

Προγραµµατισµός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών

ΑΝΑΚΟΙΝΩΣΕΙΣ 2 Από την επόµενη εβδοµάδα αλλάζουν οι ώρες των εργαστηρίων. Οι νέες ώρες θα ανακοινωθούν σήµερα στη σελίδα του µαθήµατος Τα τελικά τµήµατα (συµπεριλαµβανοµένων των φοιτητών από µετεγγραφή) θα ανακοινωθούν αύριο στη σελίδα του µαθήµατος και στον τέταρτο όροφο της σχολής. Οι φοιτητές που είναι από µετεγγραφή, θα πάρουν προσωρινούς προσωπικούς κωδικούς για τα εργαστήρια, την Παρασκευή µετά το φροντιστήριο.

Επανάληψη: Στοιχεία ενός προγράµµατος 3 Literal / κυριολεκτικό Μια συγκεκριµένη τιµή που εµφανίζεται σε ένα πρόγραµµα (πχ. 3, Hello, 5.19) Variable / µεταβλητή Μια ονοµασµένη θέση στη µνήµη, όπου αποθηκεύεται µια τιµή. Η τιµή που αποθηκεύεται σε µια µεταβλητή µπορεί να αλλαχθεί κατά την εκτέλεση του προγράµµατος. Constant / σταθερά Μια ονοµασµένη θέση στη µνήµη όπου αποθηκεύεται µια τιµή. Η τιµή που αποθηκεύεται σε µια σταθερά ΔΕ µπορεί να αλλαχθεί κατά την εκτέλεση του προγράµµατος

Επανάληψη: Στοιχεία ενός προγράµµατος 4 Expression / έκφραση Οτιδήποτε µπορεί να αποτιµηθεί Μια έκφραση συνήθως αποτελείται από ένα συνδυασµό µεταβλητών, literals και τελεστών Αργότερα θα δούµε κι άλλα είδη εκφράσεων. Statement / εντολή Μια οδηγία, στο πρόγραµµα, η οποία µπορεί να εκτελεστεί. Κάθε έκφραση γίνεται εντολή όταν βάλουµε στο τέλος της το ερωτηµατικό.

Επανάληψη: Στοιχεία ενός προγράµµατος 5 Function / συνάρτηση Ένα ονοµασµένο γκρουπ (block) εντολών, που κάνουν µια καλά ορισµένη λειτουργία (πχ. εκτύπωση µηνύµατος στην οθόνη) Μια συνάρτηση µπορεί να δέχεται κάποια δεδοµένα ως παραµέτρους και να επιστρέφει κάποια τιµή. Library / βιβλιοθήκη Μια συλλογή συναρτήσεων που υλοποιούν παρεµφερείς λειτουργίες Η stdio είναι µια συλλογή συναρτήσεων για είσοδο και έξοδο δεδοµένων (πχ είσοδο από πληκτρολόγιο, έξοδο στην οθόνη)

Μια ιεραρχία των στοιχείων ενός προγράµµατος 6 Literals Μεταβλητές Τελεστές Εκφράσεις Εντολές Συναρτήσεις Βιβλιοθήκες Πρόγραµµα

Βασικοί τύποι της C 7 Όνοµα Τύπος / Κωδικοποίηση Μέγεθος char Χαρακτήρας 1 (bytes) int Ακέραιος 2 ή 4 (*) float Πραγµατικός απλής ακρίβειας 4 double Πραγµατικός διπλής ακρίβειας 8 void Τίποτα (*) Εξαρτάται από την αρχιτεκτονική του επεξεργαστή

Προσδιοριστές µεγέθους / πεδίου τιµών 8 Όνοµα Τύποι / Ερµηνεία Μέγεθος (bytes) short «Μικρός» int 1 ή 4 (*) long «Μεγάλος» int 2 ή 8 (*) long «Μεγάλος» double 12 ή 16 (*) (*) Εξαρτάται από την αρχιτεκτονική του επεξεργαστή short / long χωρίς τύπο: υπονοείται int Όνοµα Τύποι Πεδίο Τιµών signed int / char µε πρόσηµο [-2 Ν-1...2 Ν-1-1] unsigned int / char χωρίς πρόσηµο [0...2 Ν -1] Ν: αριθµός bits Τύπος χωρίς signed / unsigned: υπονοείται signed

Τύποι / Μεγέθη / Πεδία τιµών (σε επεξεργαστές Intel x86) 9 unsigned char 1 byte 0... 255 char 1 byte -128... 127 unsigned int 4 bytes 0... 4,294,967,295 short int 2 bytes -32,768... 32,767 int 4 bytes -2,147,483,648... 2,147,483,647 unsigned long 4 bytes 0... 4,294,967,295 long 4 bytes -2,147,483,648... 2,147,483,647 float 4 bytes 1.17549435 * (10^-38)... 3.40282347 * (10^+38) double 8 bytes 2.2250738585072014 * (10^-308)... 1.7976931348623157 * (10^+308) long double 12 bytes 3.4 * (10^-4932)... 1.1 * (10^4932)

Και πώς τα βρίσκω;;; 10 /* εκτύπωση µεγέθους βασικών τύπων */ #include <stdio.h> int main(int argc, char *argv[]) { printf("sizeof(char)=%d bytes\n",sizeof(char)); printf("sizeof(short)=%d bytes\n",sizeof(short); printf("sizeof(int)=%d bytes\n",sizeof(int)); printf("sizeof(long)=%d bytes\n", sizeof(long)); printf("sizeof(float)=%d bytes\n",sizeof(float)); printf("sizeof(double)=%d bytes\n",sizeof(double)); printf("sizeof(long double) = %d bytes\n", sizeof (long double)); printf("\n"); } return(0);

Ερµηνεία Δυαδικών Δεδοµένων 11 Το υλικό του Η/Υ δεν γνωρίζει την σηµασία των δεδοµένων που αποθηκεύονται στην µνήµη. Τα bits ερµηνεύονται µε βάση την κωδικοποίηση που αντιστοιχεί στον τύπο που έχει η µεταβλητή µέσω της οποίας προσπελαύνεται η µνήµη. Π.χ.: 01100001: 'a' (char) ή 193 (short) 11111111: -1 (short) ή 255 (unsigned short) Η ερµηνεία των περιεχοµένων της µνήµης πρέπει να γίνεται µε πλήρη επίγνωση και ιδιαίτερη προσοχή διαφορετικά: σηµασιολογικά λάθη.

Δηλώσεις Μεταβλητών 12 Οι δηλώσεις µεταβλητών δίνονται πριν από (σχεδόν) όλες τις υπόλοιπες εντολές ενός προγράµµατος. Mορφή των εκφράσεων δήλωσης είναι: <τύπος> <όνοµα> ; <τύπος> <όνοµα>,..., <όνοµα> ; <τύπος> <όνοµα> = <τιµή> ; Κάθε µεταβλητή (και συνάρτηση) πρέπει να έχει διαφορετικό όνοµα. Κατά την δήλωση της, µια µεταβλητή µπορεί προαιρετικά να λάβει και µια αρχική τιµή. Το πρόθεµα const σε συνδυασµό µε την ανάθεση αρχικής τιµής υποδηλώνει ότι η τιµή της µεταβλητής δε µπορεί να αλλάξει κατά την διάρκεια της εκτέλεσης.

char c; /* µεταβλητή χαρακτήρα µε όνοµα c */ short si=1; /* µεταβλητή µικρού ακεραίου µε όνοµα si και (literal) τιµή 1 */ 13 const float pi=3.1415; /* µεταβλητή πραγµατικού αριθµού απλής ακριβείας µε όνοµα pi και (literal) τιµή 3.1415 */ int c; /* µεταβλητή ακεραίου µε όνοµα c */ ο µεταγλωττιστής θα διαµαρτυρηθεί, καθώς το όνοµα c χρησιµοποιείται $ gcc var_decl_mistake.c -o var_decl_mistake var_decl_mistake.c: In function `main': var_decl_mistake.c:11: error: conflicting types for 'c' var_decl_mistake.c:2: error: previous declaration of 'c' was here

Μεταβλητές και Μνήµη Κατά την εκτέλεση του προγράµµατος, η δήλωση µιας µεταβλητής οδηγεί στην δέσµευση αντίστοιχου χώρου µνήµης για την αποθήκευση των τιµών της. Η δέσµευση µνήµης γίνεται όταν «ενεργοποιείται» η δήλωση της µεταβλητής Λίγη υποµονή... Οι µεταβλητές ενός προγράµµατος καταλαµβάνουν (συνήθως) συνεχόµενες περιοχές µνήµης: εκεί που τελειώνει η περιοχή της µεταβλητής που δηλώθηκε πρώτη, αρχίζει η περιοχή της µεταβλητής που δηλώθηκε δεύτερη, κλπ. Αυτό δεν ισχύει πάντα. Εξαρτάται από την υλοποίηση του µεταφραστή ή/και του περιβάλλοντος εκτέλεσης της γλώσσας 14

Η Βιβλιοθήκη stdio 15 Οι συναρτήσεις εισόδου/εξόδου υλοποιούνται στην βιβλιοθήκη stdio Τα «πρωτότυπα» των συναρτήσεων της stdio υπάρχουν στο αρχείο κεφαλίδων stdio.h η χρήση της οποίας πρέπει να δηλώνεται στην αρχή του προγράµµατος µε την εντολή #include <stdio.h> Περιέχει και πολλές άλλες συναρτήσεις Καλό σας διάβασµα Περισσότερα για το τι είναι και πως φτιάχνεται µια βιβλιοθήκη πολύ πολύ αργότερα...

Εντολές Εισόδου / Εξόδου Οι εντολές εισόδου/εξόδου είναι ειδικές συναρτήσεις που βρίσκονται στην βιβλιοθήκη stdio Οι δηλώσεις βρίσκονται στο αρχείο επικεφαλίδων stdio.h και πρέπει να συµπεριληφθούν στο πρόγραµµα Εντολή: #include <stdio.h> getchar: διαβάζει ένα (τον επόµενο) χαρακτήρα από την είσοδο του προγράµµατος (πληκτρολόγιο). putchar: γράφει ένα χαρακτήρα στην έξοδο του προγράµµατος (οθόνη). scanf: διαβάζει από την είσοδο χαρακτήρες και αναθέτει τιµές σε συγκεκριµένες µεταβλητές Διαβάζονται όσοι χαρακτήρες είναι απαραίτητοι για να ανατεθεί τιµή στις «συγκεκριµένες» µεταβλητές. printf: εκτυπώνει στην έξοδο κείµενο καθώς και τιµές από συγκεκριµένες µεταβλητές. 16

Ένα Παράδειγµα #include <stdio.h> int main(int argc, char* argv[]) { } putchar('h'); putchar('e'); putchar('l'); putchar('l'); putchar('o'); putchar(' '); putchar('w'); putchar('o'); putchar('r'); putchar('l'); putchar('d'); putchar('\n'); return(0); >./myprog<enter> hello world > 17

Κι Άλλο Παράδειγµα #include <stdio.h> int main(int argc, char* argv[]) { } putchar('5'); putchar(' '); putchar('+'); putchar(' '); putchar('2'); putchar(' '); putchar('='); putchar('='); putchar(' '); putchar('7'); putchar('\n'); return(0); >./myprog<enter> 5 + 2 == 7 > 18

#include <stdio.h> int main(int argc, char* argv[]) { char c1,c2,c3; } putchar('3'); putchar(' '); putchar('c'); putchar('h'); putchar('a'); putchar('r'); putchar('s'); putchar(':'); putchar('\n'); c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3); putchar('\n'); return(0); >./myprog<enter> 19 3 chars: a2$<enter> a2$ > >./myprog<enter> 3 chars: a bcdefg<enter> a b > το πρόγραµµα δεν διαβάζει τα «επιπλέον» δεδοµένα αφού δεν υπάρχουν αντίστοιχες εντολές στον κώδικα

H printf() Δέχεται µια παράµετρο σε µορφή συµβολοσειράς από εκτυπώσιµους χαρακτήρες ASCII Προαιρετικά και έναν απεριόριστο αριθµό «εκφράσεων αποτίµησης». Η πρώτη παράµετρος περιέχει Το κυριολεκτικό κείµενο προς εκτύπωση, και Τους προσδιορισµούς εκτύπωσης (format specifiers) για τις τιµές κάθε µιας έκφρασης που δίνεται ως επιπλέον παράµετρος. Για τις συµβάσεις των προσδιορισµών εκτύπωσης δείτε (οπωσδήποτε) το εγχειρίδιο της γλώσσας! 20

Η printf() 21 Αν οι εκφράσεις αποτίµησης είναι λιγότερες από τους προσδιορισµούς εκτύπωσης, ο µεταγλωττιστής δεν εµφανίζει λάθος! Αν οι προσδιορισµοί εκτύπωσης δεν είναι συµβατοί µε τους αντίστοιχους τύπους των εκφράσεων αποτίµησης, ο µεταγλωττιστής δίνει µόνο προειδοποίηση!

Σε απλά ελληνικά 22 #include <stdio.h> int main(int argc, char* argv[]) { int a=1,b=2; } printf("a is %d, b is %d and a+b is %d\n,a, b, a+b); return(0); >./myprog<enter> a is 1, b is 2 and a+b is 3 >

Η scanf 23 Δέχεται µια παράµετρο σε µορφή συµβολοσειράς από εκτυπώσιµους χαρακτήρες ASCII, και έναν απεριόριστο αριθµό διευθύνσεων µεταβλητών. Η πρώτη παράµετρος περιέχει τους προσδιορισµούς ανάγνωσης για τις τιµές κάθε µιας µεταβλητής η διεύθυνση της οποίας δίνεται ως παράµετρος. Για τις συµβάσεις των προσδιορισµών εκτύπωσης δείτε (οπωσδήποτε) το εγχειρίδιο της γλώσσας! Αν οι προσδιορισµοί ανάγνωσης δεν είναι συµβατοί µε τους τύπους των αντίστοιχων εκφράσεων αποτίµησης που δίνονται ως παράµετροι, τότε ο µεταγλωττιστής δίνει προειδοποίηση.

Και για να συνεννοηθούµε #include <stdio.h> 24 int main(int argc, char* argv[]) { int a,b; printf("enter 2 int values: "); scanf("%d %d",&a,&b); προσοχή: πάντα να υπάρχει το & πριν το όνοµα της µεταβλητής (επεξήγηση προσεχώς ) } printf("a is %d and b is %d\n",a,b); return(0); >./myprog<enter> enter 2 int values: 5 10 15<enter> a is 5 and b is 10 > το πρόγραµµα δεν διαβάζει τα «επιπλέον» δεδοµένα αφού δεν υπάρχουν αντίστοιχες εντολές στον κώδικα

Ανακατεύθυνση Εισόδου/Εξόδου Οι πράξεις εισόδου / εξόδου διαβάζουν / γράφουν από την είσοδο / έξοδο του προγράµµατος. Συνήθως η είσοδος αντιστοιχεί στο πληκτρολόγιο (µε εκτύπωση των χαρακτήρων που εισάγονται στην οθόνη) και η έξοδος στην οθόνη. Τόσο η είσοδος όσο και η έξοδος ενός προγράµµατος µπορούν να ανακατευθυνθούν Π.χ. σε αρχεία έτσι ώστε οι πράξεις εισόδου να διαβάζουν δεδοµένα από ένα αρχείο και οι πράξεις εξόδου να γράφουν δεδοµένα σε ένα αρχείο. Τα αρχεία που δίνονται για είσοδο πρέπει να είναι αρχεία κειµένου (ASCII) και τα αρχεία που δηµιουργούνται είναι ASCII. 25

είσοδος πρόγραµµα 26 πρόγραµµα αρχείο αρχείο πρόγραµµα αρχείο πρόγραµµα αρχείο

Παράδειγµα Ανακατεύθυνσης #include <stdio.h> int main(int argc, char* argv[]) { char c1,c2,c3; } c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3); return(0); διάβασµα abcd efgh 27 >./myprog < in.txt <enter> abc > ανακατεύθυνση εισόδου γράψιµο abc αρχείο out.txt αρχείο in.txt >./myprog > outtxt <enter> abcdefghij<enter> > ανακατεύθυνση εξόδου

Πώς δουλεύει; 28 Όταν το πρόγραµµα φτάσει σε µια εντολή εισόδου (π.χ. getchar ή scanf) τότε η εκτέλεση σταµατά µέχρι να υπάρξουν δεδοµένα έτοιµα προς ανάγνωση. Αν τα δεδοµένα εισάγονται από το πληκτρολόγιο οι χαρακτήρες «στέλνονται» στο πρόγραµµα αφού πατηθεί το πλήκτρο <enter> (µέσω του οποίου δηµιουργείται αυτόµατα και ο χαρακτήρας '\n'). Αν τα δεδοµένα εισόδου δίνονται µέσω ενός αρχείου (µε ανακατεύθυνση), και το πρόγραµµα επιχειρήσει να διαβάσει χωρίς να υπάρχουν άλλα δεδοµένα τότε επιστρέφεται η τιµή (σταθερά) EOF (end of file). Το πρόγραµµα πρέπει να κάνει κατάλληλο έλεγχο.

char a; int b; float c; διεύθυνση 0 1 2 3 4 5 6 7 8 περιεχόµενα 29 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0......

Κάτω από το καπώ: Αποθήκευση ακεραίων στη µνήµη 30 Πολλοί προκαθορισµένοι τύποι έχουν µέγεθος αποθήκευσης πάνω από 1 byte. Με ποιά σειρά αποθηκεύονται τα bytes στην µνήµη; Σύστηµα big endian: τα πιο σηµαντικά bytes αποθηκεύονται στις µικρότερες θέσεις µνήµης. Σύστηµα little endian: τα λιγότερο σηµαντικά bytes αποθηκεύονται στις µικρότερες θέσεις µνήµης. Ο προγραµµατιστής δεν καταλαβαίνει τη διαφορά όσο χρησιµοποιεί κανονικές πράξεις πρόσβασης. Το καταλαβαίνει κανείς όταν χρησιµοποιεί γλώσσα µηχανής ή/και προσπελαύνει τα δεδοµένα που βρίσκονται στη µνήµη µε άµεσο τρόπο Και πάλι λίγη υποµονή...

int a=1; 1 ο πιο «χαµηλό» byte 2 ο πιο «χαµηλό» byte little endian 0 1 2 3 4 0 0 0 1 0 0 0 1 31 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0... int a=1; big endian 0 1 2 3 4 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0......