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

Σχετικά έγγραφα
scanf() scanf() stdin scanf() printf() int float double %lf float

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

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

printf Οι κωδικοί (format codes) του printf για διάφορους τύπους δεδοµένων είναι:

7. Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου

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

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

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

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

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

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

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

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

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

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

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

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

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

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

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

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

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

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

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

Ενδεικτικές λύσεις και στατιστικά

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

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

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

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

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

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

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

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

Transcript:

Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 3 η Είσοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου Η συνάρτηση scanf() Η συνάρτηση scanf() χρησιμοποιείται για την είσοδο δεδομένων από το πληκτρολόγιο στο πρόγραμμά μας στη βιβλιογραφία το πληκτρολόγιο αναφέρεται ως ρεύμα εισόδου ή αλλιώς stdin (standard input) Η συνάρτηση scanf() διαβάζει τα δεδομένα που εισάγει ο χρήστης σύμφωνα με μία ακολουθία ειδικών χαρακτήρων μετατροπής και εκχωρεί τα δεδομένα εισόδου σε μία ή περισσότερες μεταβλητές του προγράμματος Η scanf() δέχεται δύο τουλάχιστον παραμέτρους Η πρώτη παράμετρος είναι μία ακολουθία ειδικών χαρακτήρων που περιγράφει τη μορφή της εισόδου, σαν τις ακολουθίες ειδικών χαρακτήρων που χρησιμοποιούνται στην printf() (π.χ. %d για ακέραιες μεταβλητές, %f για πραγματικές κτλ...) Η δεύτερη και οι πρόσθετες παράμετροι είναι οι διευθύνσεις των μεταβλητών στις οποίες εκχωρούνται τα εισαγόμενα δεδομένα Προσοχή!!! Κάθε ειδικός χαρακτήρας μετατροπής πρέπει να αντιστοιχεί σε μία διεύθυνση μεταβλητής 2 1

Παράδειγμα 1 Η εκτέλεση της scanf() τερματίζεται όταν ληφθούν όλα τα δεδομένα από το πληκτρολόγιο, τα οποία αντιστοιχίζονται στους ειδικούς χαρακτήρες Π.χ. int i; scanf("%d",&i); Ο χαρακτήρας &, που μπαίνει πριν από το όνομα της μεταβλητής, ονομάζεται τελεστής διεύθυνσης και χρησιμοποιείται για να αποθηκευτεί ο αριθμός που θα εισάγει ο χρήστης στη διεύθυνση μνήμης της μεταβλητής i Περισσότερες λεπτομέρειες για τη σημασία του τελεστή διεύθυνσης & θα δούμε αναλυτικά στους δείκτες της C 3 Παράδειγμα 2 (Ι) Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση scanf() για να διαβάσουμε περισσότερες από μία τιμές από το πληκτρολόγιο και να τις αποθηκεύσουμε ως τιμές σε κάποιες μεταβλητές του προγράμματος Π.χ. int i; float j; scanf("%d%f",&i, &j); H πρώτη παράμετρος της scanf() είναι η ακολουθία ειδικών χαρακτήρων μετατροπής %d%f ενώ οι επόμενες παράμετροι είναι οι διευθύνσεις μνήμης των μεταβλητών i και j αντίστοιχα Το %d αντιστοιχεί στη διεύθυνση της μεταβλητής i Το %f αντιστοιχεί στη διεύθυνση της μεταβλητής j Δηλαδή η αντιστοίχιση γίνεται ένα προς ένα και από αριστερά προς τα δεξιά Για την είσοδο των δεδομένων χρησιμοποιείται το «κενό διάστημα» (space) μεταξύ των διαφορετικών τιμών που εισάγονται 4 2

Παράδειγμα 2 (ΙΙ) Στο προηγούμενο παράδειγμα, αν ο χρήστης εισάγει π.χ. τις τιμές 10 και 4.65, αυτές θα πρέπει να απέχουν μεταξύ τους ένα ή περισσότερα κενά Για να ληφθούν από τη συνάρτηση scanf() πρέπει μετά ο χρήστης να πατήσει Enter Τότε, η τιμή 10 αποθηκεύεται στη μεταβλητή i και η τιμή 4.65 στη μεταβλητή j, αντίστοιχα 5 Παράδειγμα 3 Στο επόμενο παράδειγμα, η scanf() διαβάζει ένα αλφαριθμητικό και το αποθηκεύει στον πίνακα χαρακτήρων str Παρατηρήστε, ότι πριν από τη μεταβλητή str δεν χρησιμοποιείται ο τελεστής &, γιατί - όπως θα δούμε στο κεφάλαιο των Πινάκων της C - το όνομα ενός πίνακα ισοδυναμεί με τη διεύθυνση του πρώτου στοιχείου του char str[100]; scanf("%s",str); Aν ο χρήστης εισάγει το αλφαριθμητικό sample και πατήσει Enter, τότε οι χαρακτήρες του θα αποθηκευτούν στις αντίστοιχες θέσεις του πίνακα str Δηλαδή, η τιμή του str[0] θα γίνει 's', του str[1] θα γίνει 'a', του str[2] θα γίνει 'm', κ.ο.κ. Το παράδειγμα αυτό θα το κατανοήσετε καλύτερα αργότερα, αφού θα μιλήσουμε για πίνακες, χαρακτήρες και αλφαριθμητικά 6 3

Τί επιστρέφει η συνάρτηση scanf()??? Η συνάρτηση scanf() επιστρέφει έναν ακέραιο αριθμό που δηλώνει σε πόσες από τις παραμέτρους της αποθηκεύτηκαν τιμές σύμφωνα με τα δηλωμένα προσδιοριστικά μετατροπής Π.χ. στο παράδειγμα: int i; scanf("%d",i); η συνάρτηση scanf() επιστρέφει την τιμή 1 Ενώ στο παράδειγμα: int i; float j; scanf("%d%f",&i, &j); η συνάρτηση scanf() επιστρέφει την τιμή 2 7 Παρατηρήσεις (Ι) Η συνάρτηση scanf() δεν είναι μία ασφαλής συνάρτηση και πρέπει να τη χρησιμοποιείτε με μεγάλη προσοχή Σε επαγγελματικές εφαρμογές πρέπει να ελέγχετε την τιμή επιστροφής της Σχεδόν σε όλα τα προγράμματα που θα υλοποιήσουμε, όταν χρησιμοποιούμε τη συνάρτηση scanf(), για λόγους απλότητας, δεν θα ελέγχουμε την τιμή επιστροφής της και θα θεωρούμε ότι οι τιμές που εισάγει ο χρήστης θα είναι σε συμφωνία με τα προσδιοριστικά μετατροπής Η συνάρτηση scanf() απαιτεί τον τελεστή διεύθυνσης & πριν από το όνομα κάθε αριθμητικής μεταβλητής (π.χ. int, short, char, float, ) Αντίθετα, όπως θα δούμε αργότερα, δεν απαιτείται ο τελεστής διεύθυνσης &, όταν ο τύπος της μεταβλητής είναι δείκτης 8 4

Παρατηρήσεις (ΙΙ) Στην πιο συνηθισμένη χρήση της, η scanf() περιέχει την ακολουθία των ειδικών χαρακτήρων (π.χ. %d, %f, ) χωρίς να παρεμβάλλονται άλλοι χαρακτήρες μεταξύ των ειδικών χαρακτήρων Ωστόσο, αν παρεμβληθούν κάποιοι χαρακτήρες, τότε πρέπει οι αντίστοιχοι χαρακτήρες να εισαχθούν και από το πληκτρολόγιο Π.χ. στην επόμενη scanf() παρεμβάλλεται ο χαρακτήρας κόμμα (,) #include <stdio.h> int main() { int a,b; scanf("%d, %d",&a,&b); printf("%d %d\n",a,b); return 0; } Για να λειτουργήσει σωστά αυτό το πρόγραμμα πρέπει οι ακέραιες τιμές που θα εισάγει ο χρήστης να διαχωρίζονται μεταξύ τους με κόμμα (,) 9 Παρατηρήσεις (ΙII) Αν αντί για κόμμα (όπως είδαμε στο προηγούμενο παράδειγμα), μεταξύ των ειδικών χαρακτήρων μέσα στην scanf() χρησιμοποιούνταν ο χαρακτήρας 'a', (όπως φαίνεται παρακάτω), θα έπρεπε να εισαχθεί ο χαρακτήρας 'a' μεταξύ των τιμών που θα έδινε ο χρήστης από το πληκτρολόγιο #include <stdio.h> int main() { int a,b; scanf("%da%d",&a,&b); printf("%d %d\n",a,b); return 0; } Αν δηλαδή ο χρήστης επιθυμούσε να εισάγει τις τιμές 12 και 43, θα έπρεπε να πληκτρολογήσει: 12a43 Γενικά, προτείνουμε να μην παρεμβάλλεται κανένας χαρακτήρας μεταξύ των ειδικών χαρακτήρων, έτσι ώστε να μην χρειάζεται να τους εισάγει ο χρήστης από το πληκτρολόγιο (σκεφτείτε επίσης ότι ο τελικός χρήστης του προγράμματος δεν είναι απαραίτητα και ο δημιουργός του προγράμματος) 10 5

Παρατηρήσεις (ΙV) Μην χρησιμοποιείτε τη συνάρτηση scanf() για να διαβάσετε αλφαριθμητικά που αποτελούνται από πολλές λέξεις (και συνεπώς περιέχουν και τον χαρακτήρα του «κενού») Π.χ. αποφύγετε τη χρήση της scanf() για να διαβάσετε το αλφαριθμητικό: This is a text with many words Ο λόγος είναι ότι η scanf() εξ ορισμού (by default) σταματάει το διάβασμα του αλφαριθμητικού όταν συναντήσει τον κενό χαρακτήρα ή τον χαρακτήρα νέας γραμμής - Enter Συνήθως, για διάβασμα αλφαριθμητικών προτιμάται η συνάρτηση gets(), η οποία διαβάζει και τους κενούς χαρακτήρες (την οποία θα τη χρησιμοποιήσουμε στα αλφαριθμητικά) 11 Παρατηρήσεις (V) Η συνάρτηση scanf() δεν θα λειτουργήσει σωστά, αν ο χρήστης δεν εισάγει τα δεδομένα σύμφωνα με την ακολουθία των ειδικών χαρακτήρων που ορίζονται σε αυτήν Στο επόμενο παράδειγμα η scanf() αναμένει μόνο δύο ακέραιες τιμές int i,j; scanf("%d%d",&i,&j); Αν ο χρήστης εισάγει κάτι διαφορετικό, π.χ. μία πραγματική και μία ακέραια τιμή, τότε η scanf() δεν θα λειτουργήσει σωστά και στις μεταβλητές i και j θα αποθηκευτούν απρόβλεπτες τιμές Πρέπει να σημειωθεί επίσης, ότι η συνάρτηση scanf(), όταν χρησιμοποιείται για το διάβασμα αριθμητικών τιμών, αγνοεί όλους τους κενούς χαρακτήρες (π.χ. κενά διαστήματα, tab, χαρακτήρα νέας γραμμής) που μπορεί να υπάρχουν πριν από την αριθμητική τιμή 12 6

Παρατηρήσεις (VΙ) Η συνάρτηση scanf() δεν διαβάζει τον χαρακτήρα νέας γραμμής που πληκτρολογεί ο χρήστης στο τέλος της εισαγωγής δεδομένων Αυτός ο χαρακτήρας θα διαβαστεί στην επόμενη κλήση της scanf() Αν όμως, στην επόμενη κλήση της, η scanf() χρησιμοποιείται για το διάβασμα χαρακτήρων, τότε θα διαβαστεί μόνο αυτός ο χαρακτήρας (της νέας γραμμής) και οι υπόλοιποι θα αγνοηθούν Π.χ. το επόμενο πρόγραμμα δεν θα εκτελεστεί σωστά 13 Παρατηρήσεις (VΙΙ) Αν αντιστρέψουμε στο προηγούμενο παράδειγμα τη σειρά του διαβάσματος, τότε το πρόγραμμα θα εκτελεστεί σωστά, αφού σύμφωνα με προηγούμενη παρατήρηση ο χαρακτήρας νέας γραμμής που υπάρχει πριν από την αριθμητική τιμή αγνοείται Θα δούμε παρακάτω, ότι μπορούμε να χρησιμοποιήσουμε τη συνάρτηση fflush() για τον καθαρισμό της μνήμης του πληκτρολογίου από χαρακτήρες που πιθανόν να έχουν παραμείνει μετά την κλήση της scanf() (όπως π.χ. ο χαρακτήρας νέας γραμμής) 14 7

Παρατηρήσεις (VΙΙΙ) Αν η ακρίβεια των δεκαδικών ψηφίων είναι απολύτως σημαντική στο πρόγραμμά σας, τότε για το διάβασμα πραγματικών αριθμών να χρησιμοποιείτε το προσδιοριστικό %lf (αντί για %f) και μεταβλητή τύπου double (αντί για float) για την αποθήκευση της τιμής 15 8