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

Σχετικά έγγραφα
Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

Βασικές Αρχές Προγραμματισμού

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

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

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

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

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

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

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

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

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

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

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

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

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

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

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

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

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

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

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

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

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

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

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

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

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

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

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

Transcript:

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

Υπολογισμός των εκφράσεων Μία έκφραση είναι οτιδήποτε που υπολογίζεται σε μία αριθμητική τιμή. Η απλούστερη έκφραση της C αποτελείται από ένα απλό στοιχείο: Μία κυριολεκτική σταθερά, μία μεταβλητή ή συμβολική σταθερά. Μία κυριολεκτική σταθερά έχει τη δική της τιμή. Μία συμβολική σταθερά έχει την τιμή που της έχει δοθεί όταν δημιουργήθηκε, π.χ. με #define. Mία μεταβλητή έχει την τρέχουσα τιμή που της εκχωρήθηκε τελευταία από το πρόγραμμα. 2

Σύνθετες εκφράσεις Οι σύνθετες εκφράσεις αποτελούνται από απλές εκφράσεις συνδεδεμένες με τελεστές. 2+8; x=a+10; x=6+(y=4+5); x = 2+3 ; x = 2 + 3 ; Γενικά, ο μεταγλωττιστής δε λαμβάνει υπ όψη του κενά διαστήματα (spaces), στηλογνώμονες (tabs) και κενές γραμμές εκτός και αν αποτελούν τμήμα συμβολοσειρών κυριολεκτικών σταθερών (ορμαθοί - ακολουθίες χαρακτήρων = strings) (μεταξύ " "). 3

Μοναδιαίοι τελεστές μεταβολής κατά ένα ++x, --y, z++, w--, Πρόσθεση ή αφαίρεση της μονάδας από τον τελεστέο, ισοδύναμες των x=x+1, y=y-1. Δηλαδή αύξηση ή μείωση του τελεστέου κατά ένα. Χρησιμοποιούνται με μεταβλητές, όχι με σταθερές. 4

Μοναδιαίοι Τελεστές Οι δύο μοναδιαίοι τελεστές μπορούν να τοποθετηθούν πριν από τον τελεστέο (μορφή προθέματος) ή μετά από τον τελεστέο (μορφή επιθέματος) και δεν είναι ισοδύναμοι. Όταν χρησιμοποιούνται σε προθεματική μορφή, οι τελεστές αύξησης και μείωσης τροποποιούν τον τελεστέο τους πριν χρησιμοποιηθεί. Όταν χρησιμοποιούνται σε επιθεματική μορφή, οι τελεστές αύξησης και μείωσης τροποποιούν τον τελεστέο τους αφού χρησιμοποιηθεί. 5

Διαφοροποίηση μοναδιαίων τελεστών Παράδειγμα: x = 10; y = x++; Η τιμή της x θα είναι 11 και της y θα είναι 10. Χρησιμοποιούμε και μετά αυξάνουμε. Παράδειγμα: x = 10; y = ++x; Η τιμή της x θα είναι 11 και της y θα είναι 11. Αυξάνουμε και μετά χρησιμοποιούμε. 6

Παράδειγμα #include <stdio.h> main() { int a, b; a = b = 5; /* Αρχικοποιεί τις μεταβλητές a και b ίσες με 5 και ύστερα τις εμφανίζει μειώνοντάς τις κατά ένα σε κάθε επανάληψη. Για την a χρησιμοποιείται η επιθεματική μορφή ενώ για την b χρησιμοποιείται η προθεματική μορφή του τελεστή αύξησης κατά ένα (++) */ } printf("%d printf("%d printf("%d printf("%d printf("%d return 0; %d\n", a--, --b); %d\n", a--, --b); %d\n", a--, --b); %d\n", a--, --b); %d\n", a--, --b); Αποτέλεσμα: 5 4 4 3 3 2 2 1 1 0 ------------------------ Press any key to... 7

Σχηματική Παρουσίαση της Διαδικασίας Προγραμματισμού Γνώση της περιοχής του Προβλήματος/ Domain Knowledge Μεταφραστής και Συμβολομεταφραστής/ Compiler/Assembler/Linker Δεδομένα/Data Αναλυτής Προγραμματιστής Η/Υ Η/Υ Ορισμός του Προβλήματος/ Problem Definition Αλγόριθμος/ Algorithm Πηγαίο πρόγραμμα (Source Code) σε κάποια Γλώσσα Προγραμματισμού, π.χ. C Γλώσσα Μηχανής Αποτέλεσμα/ Result 8

Δημιουργώντας τον πηγαίο κώδικα Ο υπολογιστής δεν μπορεί να καταλάβει τον πηγαίο κώδικα. Όπως είδαμε ο υπολογιστής απαιτεί ψηφιακές ή δυαδικές οδηγίες οι οποίες ονομάζονται γλώσσα μηχανής. Η μετάφραση από πηγαίο κώδικα σε γλώσσα μηχανής γίνεται από τον μεταγλωττιστή (compiler). 9

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

Σφάλματα μεταγλώττισης Λάθος μεταγλώττισης εμφανίζεται όταν ο μεταγλωττιστής βρει κάτι στον πηγαίο κώδικα που δεν μπορεί να μεταγλωττίσει (ορθογραφικό, τυπογραφικό, λάθος συντακτικού της γλώσσας C). O μεταγλωττιστής σας λέει τι προκάλεσε το λάθος και πού (σε ποια σειρά κώδικα) υπάρχει το λάθος. Αυτό κάνει εύκολο τον εντοπισμό λαθών στον πηγαίο κώδικα. 1 #include <stdio.h> 2 main() 3 { 4 printf("hello World!") /* Λείπει το ; στο τέλος */ 5 } Ο μεταγλωττιστής θα εμφανίσει ένα λάθος στη σειρά 5 --- Error: ; expected. Χρησιμοποιώντας τις γνώσεις σας πάνω στην γλώσσα C πρέπει να ερμηνεύσετε τα μηνύματα του μεταγλωττιστή. Αν είχαμε άλλο πρόβλημα όπως, π.χ.: 4 printf("hello World!); /* Λείπει το " στο τέλος */ Ο μεταγλωττιστής θα εμφανίσει πολλές σειρές λαθών όπως undefined identifier Hello, Lexical error, unterminated string, premature end of source file, κτλ. Εάν ο μεταγλωττιστής σας αναφέρει πολλά λάθη και εσείς βρείτε μόνο το ένα, διορθώστε αυτό το λάθος και μεταγλωττίστε ξανά. 11

Ερωτήσεις Ποιον συντάκτη (κειμενογράφο, text editor) μπορώ να χρησιμοποιήσω για να γράψω κώδικα σε C; Μπορώ να αγνοήσω τα μηνύματα λάθους; Μπορώ να αγνοήσω τα μηνύματα προειδοποιήσεων; Αν θέλω να δώσω σε κάποιον ένα πρόγραμμα που έφτιαξα ποια αρχεία πρέπει να δώσω; Αφού δημιουργήσω ένα εκτελέσιμο αρχείο, χρειάζεται να κρατήσω το αρχείο πηγαίου κώδικα (.c); Τι πρέπει να κάνω αν θέλω να τρέξω τον κώδικα μου, που είναι γραμμένος σε ANSI C, και σε άλλη πλατφόρμα; 12

Γενική μορφή προγράμματος στη C directives (οδηγίες) main() { variable declarations (δηλώσεις μεταβλητών) statements (εντολές) } 13

Οδηγίες Είναι εντολές για τον προ-επεξεργαστή Χρησιμοποιούνται συνήθως για τις παρακάτω περιπτώσεις: Να εισάγουν βιβλιοθήκες (αρχεία επικεφαλίδες - headers) π.χ. #include <stdio.h> Δε χρειάζεται να τροποποιήσετε τις πληροφορίες σε αυτά τα πρότυπα αρχεία. Μπορείτε να φτιάξετε άλλα δικά σας. #include "mybestlibrary.h" Να ορίσουν σταθερές ή μακροεντολές π.χ. #define FREEZING_POINT_CELCIUS 0.0 #define FREEZING_POINT_FARHENEIT 32.0 #define HALFOF(value) ((value)/2) Οι οδηγίες έχουν πάντα μήκος μίας γραμμής (δηλαδή, επιτρέπεται μόνο μία οδηγία ανά γραμμή) 14

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

Συναρτήσεις Οι συναρτήσεις είναι σαν τις ρουτίνες/υπο-ρουτίνες (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 ; } Ορισμός της συνάρτησης 16

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

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

Προγράμματα της C Τα προγράμματα της C αποτελούνται από προτάσεις (εντολές, statements) και οι προτάσεις αποτελούνται από τελεστές και εκφράσεις. Μία πρόταση είναι μία πλήρης οδηγία προς τον υπολογιστή για να φέρει σε πέρας μία πράξη (λειτουργία). Οι προτάσεις της C τελειώνουν με ένα ελληνικό ερωτηματικό (εκτός τις #define, #include). Π.χ. η πρόταση x = 2 + 3 ; είναι μία πρόταση εκχώρησης. Οδηγεί τον υπολογιστή να προσθέσει το 2 και το 3 και να εκχωρήσει το αποτέλεσμα στη μεταβλητή x. 19

Παραδείγματα Οι προτάσεις καλό είναι να εισάγονται μία ανά γραμμή Μέσα σε σταθερές συμβολοσειρών δεν αγνοούνται τα κενά διαστήματα Έγκυρο: printf("hello World! " ); Όχι έγκυρο: printf("hello World! "); Σωστό: printf("hello \ World! "); 20

Προτάσεις Είναι χρήσιμο οι προτάσεις σε ένα πρόγραμμα να εισάγονται με ένα τυποποιημένο σχήμα για τα διαστήματα γύρω από τις μεταβλητές και τους τελεστές. Κρατήστε ευανάγνωστο τον πηγαίο σας κώδικα. Συνήθως γράφουμε μία πρόταση ανά γραμμή, χωρίς όμως αυτό να είναι υποχρεωτικό (όπως ισχύει για τις οδηγίες). 21

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

Μετατροπή τύπων Όταν οι μεταβλητές/σταθερές είναι του ιδίου τύπου το αποτέλεσμα είναι γενικά του αυτού τύπου. Όταν όμως οι μεταβλητές/σταθερές σε μία έκφραση δεν είναι του ιδίου τύπου τότε λέμε ότι έχουμε μία μικτή έκφραση. Στη C υπάρχουν μερικοί απλοί κανόνες αυτόματης μετατροπής τύπων στις μικτές εκφράσεις. Γενικά ο κανόνας είναι να μετατρέπεται ο τύπος με το μικρότερο μέγεθος στον τύπο με το μεγαλύτερο μέγεθος έτσι ώστε να μη χάνεται πληροφορία. Για παράδειγμα εάν f είναι float και i είναι integer τότε στην έκφραση f+i o i μετατρέπεται σε float. Η έκφραση υπολογίζεται στον τύπο με το μεγαλύτερο μέγεθος Το αποτέλεσμα είναι τύπου όμοιου με τον «μεγαλύτερο» τύπο στην έκφραση. Εκφράσεις που αναθέτουν ένα τύπο μεγαλύτερου μεγέθους σε ένα μικρότερο (π.χ. i = f) συνήθως προκαλούν την δημιουργία μιας προειδοποίησης (warning) από τον μεταφραστή (compiler) και γενικά πρέπει να αποφεύγονται. 23

Μέγεθος Πίνακας μετατροπής τύπων Ο παρακάτω πίνακας δείχνει τον τύπο του αποτελέσματος σαν συνάρτηση των τύπων στην έκφραση. Μέγεθος 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

Μετατροπή τύπων κατά την ανάθεση Οι μετατροπές τύπων συμβαίνουν και με τον τελεστή ανάθεσης π.χ. Α = Β Η έκφραση στα δεξιά του τελεστή (=) προβιβάζεται στον τύπο της μεταβλητής στα αριστερά του τελεστή ανάθεσης Αυτό όμως μπορεί να προκαλέσει προβλήματα όπως αναφέρθηκε προηγουμένως αν η μεταβλητή είναι «χαμηλότερου» τύπου. Παράδειγμα. Εάν d είναι double, και i είναι int τότε η ανάθεση d = i; Θα προκαλέσει την μετατροπή της ακέραιας μεταβλητής i σε τύπο double ώστε η ανάθεση να επιτευχθεί. Όμως η ανάθεση i = d θα προκαλέσει τον υποβιβασμό της double μεταβλητής d σε τύπο int οπότε το δεκαδικό μέρος της d θα χαθεί. 25

Σφάλματα υπολογισμών σε εκφράσεις 563.8 Σφάλματα στον υπολογισμό αριθμητικών + 631.9 εκφράσεων μπορούν να παρουσιασθούν λόγω 1195.7 1196 + 321.6 1517.6 1518 Χρήσης περιορισμένου αριθμού ψηφίων Χρήσης τεχνικών προσέγγισης της τιμής μιας συνάρτησης ή έκφρασης αντί του άμεσου υπολογισμού της 321.6 τιμής της Παράδειγμα + 631.9 Η πρόσθεση των αριθμών 563.8, 631.9, και 321.6 953.5 όταν είμαστε 953.5 περιορισμένοι σε τέσσερα ψηφία έχει σαν αποτέλεσμα + 1518 563.8 όταν προσθέσουμε 563.8, 631.9, και 321.6, και αποτέλεσμα 1517 όταν προσθέσουμε 321.6, 631.9, και 563.8. 1517.3 1517 Από το παράδειγμα βλέπουμε ότι η διάταξη των όρων του αθροίσματος επηρεάζει το τελικό αποτέλεσμα. Η σωστή απάντηση είναι 1517.3. 26

Είσοδος και έξοδος χαρακτήρων text stream ή file (ρεύμα κειμένου) stdin - πρότυπη είσοδος (standard input) stdout - πρότυπη έξοδος (standard output) char c; c = getchar ( ); putchar (c); // function prototypes // int getc (FILE *stream); // int getchar (void); // int putc (int c, FILE *stream); // int putchar (int c); 27

Πληθώρα ασκήσεων χωρίς άλλη γνώση για είσοδο ή έξοδο Αντιγραφή αρχείων κειμένου Μέτρηση χαρακτήρων αρχείου κειμένου Μέτρηση γραμμών αρχείου κειμένου Μέτρηση λέξεων αρχείου κειμένου 28

Αντιγραφή αρχείων διάβασμα ενός χαρακτήρα ενόσω (ο χαρακτήρας δεν είναι ένδειξη τέλους αρχείου) έξοδος του χαρακτήρα που μόλις διαβάστηκε διάβασμα ενός χαρακτήρα #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) ; 29

Μέτρηση γραμμών αρχείου κειμένου /* Μέτρηση γραμμών της πρότυπης εισόδου */ #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); } 30

Μέτρηση λέξεων αρχείου κειμένου #include <stdio.h> // Μέτρηση λέξεων, γραμμών και #define OUT 0 // χαρακτήρων της πρότυπης εισόδου #define IN 1 // White spaces: ' ' '\t '\n' 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

Άσκηση που λύθηκε στον πίνακα Να γίνει ένα πρόγραμμα το οποίο να αντιγράφει την πρότυπη είσοδο (stdin) στην πρότυπη έξοδο (stdout) χαρακτήρα χαρακτήρα μέχρι να συναντήσει το «σύμβολο τέλους αρχείου», μετατρέποντας όμως όλους τους πεζούς χαρακτήρες σε κεφαλαίους. 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) ; } } 32

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