hομέας Αʑʐομαʐισμού και Πληροφορικής ......code) σ κάποια...

33
Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής Εφαρμογών ([email protected] ) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr /courses/EL106 Εξάμηνο: Χειμερινό 2018-19 Πέμπτη (5 η ) τρίωρη διάλεξη. Τ εχνολογικό Ε κπαιδευτικό Ί δρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής

Upload: others

Post on 20-Jun-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

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

Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής Εφαρμογών

([email protected])

Ιστοσελίδα Μαθήματος:

https://eclass.chania.teicrete.gr/courses/EL106

Εξάμηνο: Χειμερινό 2018-19

Πέμπτη (5η) τρίωρη διάλεξη.

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής

Page 2: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Υπολογισμός των εκφράσεων

•Μία έκφραση είναι οτιδήποτε που υπολογίζεται σεμία αριθμητική τιμή.

•Η απλούστερη έκφραση της C αποτελείται από ένααπλό στοιχείο: Μία κυριολεκτική σταθερά, μίαμεταβλητή ή συμβολική σταθερά.

•Μία κυριολεκτική σταθερά έχει τη δική της τιμή. Μίασυμβολική σταθερά έχει την τιμή που της έχει δοθείόταν δημιουργήθηκε, π.χ. με #define. Mία μεταβλητήέχει την τρέχουσα τιμή που της εκχωρήθηκε τελευταίααπό το πρόγραμμα.

230/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 3: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Σύνθετες εκφράσειςΟι σύνθετες εκφράσεις αποτελούνται από απλές εκφράσεις συνδεδεμένες με τελεστές.

2+8; x=a+10; x=6+(y=4+5);

330/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

x = 2+3 ;

• Γενικά, ο μεταγλωττιστής δε λαμβάνει υπ’ όψητου κενά διαστήματα (spaces), στηλογνώμονες(tabs) και κενές γραμμές εκτός και αν αποτελούντμήμα συμβολοσειρών κυριολεκτικών σταθερών(ορμαθοί - ακολουθίες χαρακτήρων = strings)(μεταξύ " ").

x

=

2

+

3

;

Page 4: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Μοναδιαίοι τελεστές μεταβολής κατά ένα

++x, --y, z++, w--,

•Πρόσθεση ή αφαίρεση της μονάδας από τον τελεστέο, ισοδύναμες των x=x+1, y=y-1.

Δηλαδή αύξηση ή μείωση του τελεστέου κατά ένα.

•Χρησιμοποιούνται με μεταβλητές, όχι με σταθερές.

430/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 5: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Μοναδιαίοι Τελεστές

•Οι δύο μοναδιαίοι τελεστές μπορούν νατοποθετηθούν πριν από τον τελεστέο (μορφήπροθέματος) ή μετά από τον τελεστέο (μορφήεπιθέματος) και δεν είναι ισοδύναμοι.

•Όταν χρησιμοποιούνται σε προθεματική μορφή,οι τελεστές αύξησης και μείωσης τροποποιούντον τελεστέο τους πριν χρησιμοποιηθεί.

•Όταν χρησιμοποιούνται σε επιθεματική μορφή,οι τελεστές αύξησης και μείωσης τροποποιούντον τελεστέο τους αφού χρησιμοποιηθεί.

530/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 6: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Διαφοροποίηση μοναδιαίων τελεστών

•Παράδειγμα: x = 10; y = x++;

Η τιμή της x θα είναι 11 και της y θα είναι 10.

•Χρησιμοποιούμε και μετά αυξάνουμε.

•Παράδειγμα: x = 10; y = ++x;

Η τιμή της x θα είναι 11 και της y θα είναι 11.

•Αυξάνουμε και μετά χρησιμοποιούμε.

630/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 7: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Παράδειγμα

Αποτέλεσμα:

5 4

4 3

3 2

2 1

1 0

------------------------

Press any key to . . .

730/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

#include <stdio.h>

main()

{ int a, b;

a = b = 5;

/* Αρχικοποιεί τις μεταβλητές a και b ίσες με 5

και ύστερα τις εμφανίζει μειώνοντάς τις κατά ένα

σε κάθε επανάληψη.

Για την a χρησιμοποιείται η επιθεματική μορφή ενώ

για την b χρησιμοποιείται η προθεματική μορφή του

τελεστή αύξησης κατά ένα (++) */

printf("%d %d\n", a--, --b);

printf("%d %d\n", a--, --b);

printf("%d %d\n", a--, --b);

printf("%d %d\n", a--, --b);

printf("%d %d\n", a--, --b);

return 0;

}

Page 8: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Σχηματική Παρουσίαση της Διαδικασίας Προγραμματισμού

Αναλυτής Η/Υ Η/ΥΠρογραμματιστής

Ορισμός του Προβλήματος/Problem Definition

Γνώση της περιοχής του Προβλήματος/Domain Knowledge

Αλγόριθμος/Algorithm

Πηγαίο πρόγραμμα (Source Code) σε κάποια Γλώσσα Προγραμματισμού, π.χ. C

Μεταφραστής και Συμβολομεταφραστής/Compiler/Assembler/Linker

ΓλώσσαΜηχανής

Δεδομένα/Data

Αποτέλεσμα/Result

830/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 9: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Δημιουργώντας τον πηγαίο κώδικα

•Ο υπολογιστής δεν μπορεί να καταλάβει τονπηγαίο κώδικα. Όπως είδαμε ο υπολογιστήςαπαιτεί ψηφιακές ή δυαδικές οδηγίες οιοποίες ονομάζονται γλώσσα μηχανής.

•Η μετάφραση από πηγαίο κώδικα σε γλώσσαμηχανής γίνεται από τον μεταγλωττιστή(compiler).

930/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 10: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Μετάφραση και ενοποίηση με την συμπερίληψη βιβλιοθηκών

• Για να μεταφράσουμε πηγαίο κώδικα της C σε ΓλώσσαΜηχανής υπό τη παρουσία βιβλιοθηκών ο compiler εκτελεί ταπαρακάτω βήματα.

1. Προ-επεξεργασία: Το πηγαίο πρόγραμμα γίνεται αρχικά αντικείμενοεπεξεργασίας από μία εφαρμογή (που έρχεται με τον compiler) καιονομάζεται προ-επεξεργαστής (pre-processor). Ο προ-επεξεργαστήςείναι κάτι σαν επεξεργαστής κειμένου: προσθέτει, αφαιρεί, καιμεταβάλει το «κείμενο» του πηγαίου προγράμματος (source code).Όλες οι εντολές που είναι να εκτελεσθούν από τον προ-επεξεργαστήξεκινούν με το σύμβολο #. Συγκεκριμένα η #include <stdio.h> παίρνειτον πηγαίο κώδικα της stdio.h και τον εισάγει στη θέση της εντολής#include <stdio.h>. Ουσιαστικά μετά την προ-επεξεργασία δενυπάρχουν πλέον εντολές που ξεκινούν με #.

2. Μετάφραση και Συμβολομετάφραση: Tα βήματα αυτά παράγουναντικείμενο κώδικα – object code (σχεδόν γλώσσα μηχανής)

3. Ενοποίηση (linking): Το βήμα αυτό ενοποιεί αντικείμενο κώδικα(πιθανόν από διαφορετικά αρχεία πηγαίου κώδικα) σε ένα εκτελέσιμοαρχείο (π.χ. .exe) σε καθαρή γλώσσα μηχανής.

1030/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 11: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Σφάλματα μεταγλώττισης • Λάθος μεταγλώττισης εμφανίζεται όταν ο μεταγλωττιστής βρει κάτι στον

πηγαίο κώδικα που δεν μπορεί να μεταγλωττίσει (ορθογραφικό,τυπογραφικό, λάθος συντακτικού της γλώσσας C).

• O μεταγλωττιστής σας λέει τι προκάλεσε το λάθος και πού (σε ποια σειράκώδικα) υπάρχει το λάθος. Αυτό κάνει εύκολο τον εντοπισμό λαθών στονπηγαίο κώδικα.

1 #include <stdio.h>2 main()3 {4 printf("Hello World!") /* Λείπει το ; στο τέλος */5 }Ο μεταγλωττιστής θα εμφανίσει ένα λάθος στη σειρά 5 --- Error: ‘;’ expected. Χρησιμοποιώντας τις γνώσεις σας πάνω στην γλώσσα C πρέπει να ερμηνεύσετε τα μηνύματα του μεταγλωττιστή.

1130/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Αν είχαμε άλλο πρόβλημα όπως, π.χ.:

4 printf("Hello World!); /* Λείπει το " στο τέλος */

Ο μεταγλωττιστής θα εμφανίσει πολλές σειρές λαθών όπως ‘undefined identifier ‘Hello’, Lexical error, unterminated string, premature end of source file, κτλ.

• Εάν ο μεταγλωττιστής σας αναφέρει πολλά λάθη και εσείς βρείτε μόνο το ένα, διορθώστε αυτό το λάθος και μεταγλωττίστε ξανά.

Page 12: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Ερωτήσεις•Ποιον συντάκτη (κειμενογράφο, text editor) μπορώ να

χρησιμοποιήσω για να γράψω κώδικα σε C;

•Μπορώ να αγνοήσω τα μηνύματα λάθους;

•Μπορώ να αγνοήσω τα μηνύματα προειδοποιήσεων;

•Αν θέλω να δώσω σε κάποιον ένα πρόγραμμα που έφτιαξα ποια αρχεία πρέπει να δώσω;

•Αφού δημιουργήσω ένα εκτελέσιμο αρχείο, χρειάζεται να κρατήσω το αρχείο πηγαίου κώδικα (.c);

•Τι πρέπει να κάνω αν θέλω να τρέξω τον κώδικα μου, που είναι γραμμένος σε ANSI C, και σε άλλη πλατφόρμα;

1230/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 13: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Γενική μορφή προγράμματος στη C

directives (οδηγίες)

main()

{

variable declarations (δηλώσεις μεταβλητών)

statements (εντολές)

}

1330/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 14: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Οδηγίες •Είναι εντολές για τον προ-επεξεργαστή•Χρησιμοποιούνται συνήθως για τις παρακάτω

περιπτώσεις:•Να εισάγουν βιβλιοθήκες (αρχεία επικεφαλίδες -

headers) π.χ.• #include <stdio.h>

• Δε χρειάζεται να τροποποιήσετε τις πληροφορίες σε αυτά τα πρότυπα αρχεία. Μπορείτε να φτιάξετε άλλα δικά σας.

• #include "myBestLibrary.h"

•Να ορίσουν σταθερές ή μακροεντολές π.χ.• #define FREEZING_POINT_CELCIUS 0.0• #define FREEZING_POINT_FARHENEIT 32.0• #define HALFOF(value) ((value)/2)

•Οι οδηγίες έχουν πάντα μήκος μίας γραμμής(δηλαδή, επιτρέπεται μόνο μία οδηγία ανά γραμμή)

1430/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 15: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Εντολές

•Οι εντολές ορίζουν συγκεκριμένες λειτουργίεςτις οποίες εκτελεί ένα πρόγραμμα σαν μέροςτου αλγόριθμου που υλοποιεί•Υπάρχουν πολλά είδη εντολών όπως:•Ανάθεση ή εκχώρηση (assignment statement)•Εντολές συνθήκης (conditional statements)•Εντολές βρόχου ή επανάληψης (iterative statements)•Εντολές έκφρασης (expression statements)

•Οι εντολές τελειώνουν πάντα με ελληνικόερωτηματικό (;) semicolon.

1530/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 16: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Συναρτήσεις • Οι συναρτήσεις είναι σαν τις ρουτίνες/υπο-ρουτίνες (routines, subroutines,

procedures) σε άλλες γλώσσες προγραμματισμού.• Ουσιαστικά είναι τα δομικά υλικά ενός προγράμματος. Οι συναρτήσεις πρέπει

κατά το δυνατόν να παράγουν όσο το δυνατόν πιο συγκεκριμένη λειτουργία(high cohesion) και να εξαρτώνται όσο το δυνατόν λιγότερο η μία από την άλλη(low coupling).

• Υπάρχουν δύο μεγάλες κατηγορίες συναρτήσεων:• Συναρτήσεις βιβλιοθήκης – library functions (είναι κομμάτι της βιβλιοθήκης)• Συναρτήσεις εφαρμογών – application functions (ορίζονται από τον

προγραμματιστή)• Οι συναρτήσεις της C αποτελούνται κυρίως από μεταβλητές και εντολές• Μία συνάρτηση μπορεί να υπολογίζει ένα αποτέλεσμα και να το επιστρέφει στο

σημείο της κλήσης (αλλά αυτό δεν είναι πάντα απαραίτητο) π.χ.

int i = 0;………………i = addOne(i);………;

int addOne(int j){

j = j+1;return j ;

}

Ορισμός τηςσυνάρτησης

Το πρόγραμμα

1630/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 17: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Η συνάρτηση main()

•Η συνάρτηση main() είναι μία ειδικήσυνάρτηση που πρέπει να έχει ορισθεί σεκάθε πρόγραμμα C .

•Η συνάρτηση main() είναι η πρώτη συνάρτησηπου καλείται σε ένα πρόγραμμα C. Η κλήσηγίνεται αυτόματα από το λειτουργικό σύστημαόταν το πρόγραμμα αρχίζει να «τρέχει».

•Η συνάρτηση main() μπορεί να επιστρέφει, ήνα μην επιστρέφει κάποιο αποτέλεσμα.

1730/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 18: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Εκφράσεις (expressions)•Οι εκφράσεις στη C είναι συντακτικέςμορφές που παράγονται από το συνδυασμόμεταβλητών, σταθερών, και τελεστών(operators). Προς το παρόν θα ασχοληθούμεμε ακέραιες και πραγματικές μεταβλητές.

•Μεταβλητές ακέραιου, και πραγματικούτύπου μπορούν να συνδυαστούν μεαριθμητικούς τελεστές.

•Το σημαντικό στοιχείο είναι ο τύπος τουαποτελέσματος που προκύπτει.

1830/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 19: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Προγράμματα της C•Τα προγράμματα της C αποτελούνται από

προτάσεις (εντολές, statements) και οι προτάσειςαποτελούνται από τελεστές και εκφράσεις.

•Μία πρόταση είναι μία πλήρης οδηγία προς τονυπολογιστή για να φέρει σε πέρας μία πράξη(λειτουργία).

•Οι προτάσεις της C τελειώνουν με ένα ελληνικόερωτηματικό (εκτός τις #define, #include).

•Π.χ. η πρόταση x = 2 + 3 ; είναι μία πρότασηεκχώρησης. Οδηγεί τον υπολογιστή να προσθέσειτο 2 και το 3 και να εκχωρήσει το αποτέλεσμα στημεταβλητή x.

1930/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 20: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Παραδείγματα •Οι προτάσεις καλό είναι να εισάγονται μία ανά γραμμή•Μέσα σε σταθερές συμβολοσειρών δεν αγνοούνται τα

κενά διαστήματα•Έγκυρο:

printf("Hello World! ");

•Όχι έγκυρο:printf("HelloWorld! ");

•Σωστό:printf("Hello \World! ");

2030/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 21: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Προτάσεις

•Είναι χρήσιμο οι προτάσεις σε ένα πρόγραμμανα εισάγονται με ένα τυποποιημένο σχήμα γιατα διαστήματα γύρω από τις μεταβλητές καιτους τελεστές.

•Κρατήστε ευανάγνωστο τον πηγαίο σαςκώδικα.

•Συνήθως γράφουμε μία πρόταση ανά γραμμή,χωρίς όμως αυτό να είναι υποχρεωτικό (όπωςισχύει για τις οδηγίες).

2130/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 22: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Σύνθετες προτάσεις ή σύνθετες εντολές

•Μία σύνθετη πρόταση λέγεται μπλοκ (block) καιείναι μία ομάδα δύο ή περισσότερωνπροτάσεων της C οι οποίες περιλαμβάνονται σεάγκιστρα ({ και }).

•Να τοποθετείτε τα άγκιστρα μόνα τους στιςπροτάσεις για να είναι ξεκάθαρες η αρχή και τοτέλος ενός μπλοκ.

2230/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 23: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Μετατροπή τύπων• Όταν οι μεταβλητές/σταθερές είναι του ιδίου τύπου το

αποτέλεσμα είναι γενικά του αυτού τύπου.

• Όταν όμως οι μεταβλητές/σταθερές σε μία έκφραση δεν είναι του ιδίου τύπου τότε λέμε ότι έχουμε μία μικτή έκφραση.

• Στη C υπάρχουν μερικοί απλοί κανόνες αυτόματης μετατροπής τύπων στις μικτές εκφράσεις.

• Γενικά ο κανόνας είναι να μετατρέπεται ο τύπος με το μικρότερο μέγεθος στον τύπο με το μεγαλύτερο μέγεθος έτσι ώστε να μη χάνεται πληροφορία. Για παράδειγμα εάν f είναι float και i είναι integer τότε στην έκφραση f+i o i μετατρέπεται σε float.

• Η έκφραση υπολογίζεται στον τύπο με το μεγαλύτερο μέγεθος

• Το αποτέλεσμα είναι τύπου όμοιου με τον «μεγαλύτερο» τύπο στην έκφραση.

• Εκφράσεις που αναθέτουν ένα τύπο μεγαλύτερου μεγέθους σε ένα μικρότερο (π.χ. i = f) συνήθως προκαλούν την δημιουργία μιας προειδοποίησης (warning) από τον μεταφραστή (compiler)και γενικά πρέπει να αποφεύγονται.

2330/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 24: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Πίνακας μετατροπής τύπων

Operand

types

short int

ή short

long int

ή int

float double long

double

short int

ή short

short int

ή short

long int

ή int

float double long

double

long int

ή int

long int

ή int

long int

ή int

float double long

double

float float float float double long

double

double double double double double long

double

long

double

long

double

long

double

long

double

long

double

long

double

Ο παρακάτω πίνακας δείχνει τον τύπο του αποτελέσματος σαν συνάρτηση τωντύπων στην έκφραση.

Μέγεθος

24

Μέ

γεθ

ος

30/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 25: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Μετατροπή τύπων κατά την ανάθεση• Οι μετατροπές τύπων συμβαίνουν και με τον τελεστή ανάθεσης

π.χ. Α = Β

• Η έκφραση στα δεξιά του τελεστή (=) προβιβάζεται στον τύπο της μεταβλητής στα αριστερά του τελεστή ανάθεσης

• Αυτό όμως μπορεί να προκαλέσει προβλήματα όπως αναφέρθηκε προηγουμένως αν η μεταβλητή είναι «χαμηλότερου» τύπου.

• Παράδειγμα.

Εάν d είναι double, και i είναι int τότε η ανάθεση d = i; Θα προκαλέσει την μετατροπή της ακέραιας μεταβλητής i σε τύπο double ώστε η ανάθεση να επιτευχθεί. Όμως η ανάθεση i = d θα προκαλέσει τον υποβιβασμό της double μεταβλητής d σε τύποint οπότε το δεκαδικό μέρος της d θα χαθεί.

2530/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 26: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Σφάλματα υπολογισμών σε εκφράσεις• Σφάλματα στον υπολογισμό αριθμητικών εκφράσεων

μπορούν να παρουσιασθούν λόγω

• Χρήσης περιορισμένου αριθμού ψηφίων• Χρήσης τεχνικών προσέγγισης της τιμής μιας συνάρτησης ή

έκφρασης αντί του άμεσου υπολογισμού της τιμής τηςΠαράδειγμα

Η πρόσθεση των αριθμών 563.8, 631.9, και 321.6 όταν είμαστε περιορισμένοι σε τέσσερα ψηφία έχει σαν αποτέλεσμα 1518 όταν προσθέσουμε 563.8, 631.9, και 321.6, και αποτέλεσμα 1517 όταν προσθέσουμε 321.6, 631.9, και 563.8.

• Από το παράδειγμα βλέπουμε ότι η διάταξη των όρων του αθροίσματος επηρεάζει το τελικό αποτέλεσμα. Η σωστή απάντηση είναι 1517.3.

563.8

+ 631.9

1195.7 → 1196

+ 321.6

1517.6 → 1518

321.6

+ 631.9

953.5 → 953.5

+ 563.8

1517.3 → 1517

2630/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 27: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

27

Είσοδος και έξοδος χαρακτήρων

• text stream ή file (ρεύμα κειμένου)

• stdin - πρότυπη είσοδος (standard input)

• stdout - πρότυπη έξοδος (standard output)

char c; // function prototypes

// int getc (FILE *stream);

c = getchar ( ); // int getchar (void);

// int putc (int c, FILE *stream);

putchar (c); // int putchar (int c);

30/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 28: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

28

Πληθώρα ασκήσεων χωρίς άλλη γνώση για είσοδο ή έξοδο

▪ Αντιγραφή αρχείων κειμένου

▪ Μέτρηση χαρακτήρων αρχείου κειμένου

▪ Μέτρηση γραμμών αρχείου κειμένου

▪ Μέτρηση λέξεων αρχείου κειμένου

30/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 29: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

29

Αντιγραφή αρχείων διάβασμα ενός χαρακτήρα

ενόσω (ο χαρακτήρας δεν είναι ένδειξη τέλους αρχείου)

έξοδος του χαρακτήρα που μόλις διαβάστηκε

διάβασμα ενός χαρακτήρα

#include <stdio.h> /* αντιγραφή της εισόδου στην έξοδο */

main()

{ char c;

c = getchar();

while ( c != EOF)

{

putchar(c) ;

c = getchar();

}

}

printf ("\nΠληκτρολόγησε ό,τι θέλεις και \ENTER (ή CTRL+Z για τέλος):\n");

while ( ( c =getchar () ) != EOF)putchar (c) ;

30/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 30: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Μέτρηση γραμμών αρχείου κειμένου

/* Μέτρηση γραμμών της πρότυπης εισόδου */

#include <stdio.h>

main()

{ char ch; int nl=0;

printf ("\nΠληκτρολόγησε ό,τι θέλεις \

και ENTER (ή CTRL+Z για τέλος):\n");

while ((ch = getchar()) != EOF)

if (ch == '\n')

nl++;

printf ("Υπήρχαν %d γραμμές.\n",nl);

}

3030/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 31: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Μέτρηση λέξεων αρχείου κειμένου #include <stdio.h>

#define OUT 0

#define IN 1

main()

{ char ch; int nc=0,nw=0,nl=0,status=OUT;

printf ("Πληκτρολόγησε ό,τι θέλεις . . . :\n");

while ((ch = getchar()) != EOF)

{ nc++;

if (ch == '\n')

nl++;

if (ch == ' ' || ch == '\t' || ch == '\n')

status=OUT;

else

if (status==OUT)

{ nw++;

status = IN;

}

}

printf("Υπήρχαν %d λέξεις, %d γραμμές και %d χαρακτήρες.\n",nw, nl, nc);

} 31

// Μέτρηση λέξεων, γραμμών και

// χαρακτήρων της πρότυπης εισόδου

// White spaces: ' ' '\t’ '\n'

30/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

Page 32: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Άσκηση που λύθηκε στον πίνακα Να γίνει ένα πρόγραμμα το οποίο να αντιγράφει τηνπρότυπη είσοδο (stdin) στην πρότυπη έξοδο (stdout)χαρακτήρα – χαρακτήρα μέχρι να συναντήσει το«σύμβολο τέλους αρχείου», μετατρέποντας όμως όλουςτους πεζούς χαρακτήρες σε κεφαλαίους.

3230/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

main()

{ char c;

printf ("\nΠληκτρολόγησε ό,τι θέλεις ή Ctrl + z για τέλος):\n");

while ((ch = getchar())!= EOF)

{

if (ch >= 'a' && ch <= 'z')

ch += 'A' – 'a’; /* ch = ch + 'A' – 'a'; */

putchar(c) ;

}

}

Page 33: Hομέας Αʑʐομαʐισμού και Πληροφορικής ......Code) σ κάποια Γλώσσα Προραμμαισμού, π.χ. C Μ αφρασής και Σμβολομαφρασής

Ασκήσεις για το σπίτι 1) Να γίνει ένα πρόγραμμα το οποίο να αντιγράφει τηνπρότυπη είσοδο (stdin) στην πρότυπη έξοδο (stdout)χαρακτήρα – χαρακτήρα μέχρι να συναντήσει το«σύμβολο τέλους αρχείου», μετατρέποντας όμως όλουςτους κεφαλαίους χαρακτήρες σε πεζούς. Τέλος, ναεμφανίζει στην οθόνη το πλήθος των χαρακτήρων πουμετέτρεψε και το πλήθος των χαρακτήρων που αντέγραψεσυνολικά.

3330/10/2018 "Δομημένος Προγραμματισμός", Ν.Πετράκης, Τ.Ε.Ι. Κρήτης

2) Να γίνει ένα πρόγραμμα το οποίο να υπολογίζει γιατους πρώτους εκατό φυσικούς αριθμούς το άθροισμα, τονμέσο όρο και το γινόμενο. Χρησιμοποιείστε την εντολήεπανάληψης for.