Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα...

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

Transcript of Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα...

Page 1: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης

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

Δρ. Μηχ. Νικόλαος Πετράκης

([email protected])

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

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

Εξάμηνο: Εαρινό 2014-15

Page 2: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

αναπαρίσταται από ένα όνομα. • Μία συμβολική σταθερά δεν μπορεί να μεταβληθεί.

• Για την δήλωση μίας σταθεράς χρησιμοποιούμε το #define π.χ.

#define PI 3.14159

• Χωρίς ίσον και χωρίς ερωτηματικό στο τέλος! • Προτείνεται η χρήση κεφαλαίων χαρακτήρων για να

ξεχωρίζουν εύκολα από τις μεταβλητές. • Οι εντολές define μπορούν να τοποθετούνται οπουδήποτε

στον πηγαίο κώδικα αλλά είναι σε ισχύ μόνο για το τμήμα του πηγαίου κώδικα που ακολουθεί μετά τη define.

• Οι προγραμματιστές πιο συχνά ομαδοποιούν τις define στην αρχή της main() ή του κάθε αρχείου.

2

Page 3: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Αναπαράσταση των σταθερών στην C Σταθερά απαρίθμησης (enumeration constant)

Σύνταξη: enum [ <type_tag> ] { <constant_name> [ = <value> ], … }[var_list];

Παραδείγματα:

enum boolean {NO, YES} ;

enum months {JAN=1, FEB, MAR,…} ;

(αλλιώς θα ήταν JAN=0)

3

Page 4: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Μεταβλητές • Μεταβλητή (variable) είναι η θέση αποθήκευσης

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

• Στη C οι μεταβλητές πρέπει: 1. Να έχουν δηλωθεί σε κάποια εντολή δήλωσης,

συνήθως στην αρχή ενός αρχείου πηγαίου κώδικα, ή στην αρχή μιας συνάρτησης

2. Να έχουν συγκεκριμένο τύπο δεδομένων 3. Να έχουν αρχική τιμή πριν χρησιμοποιηθούν

για πρώτη φορά 4. Τα δεδομένα (οι τιμές) που αποθηκεύονται στη

μεταβλητή πρέπει να είναι του ίδιου ή συμβατού τύπου με αυτόν της μεταβλητής

4

Page 5: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Δηλώσεις μεταβλητών • Για να δηλώσουμε μια μεταβλητή πρέπει πρώτα να ορίσουμε τον

τύπο και μετά το όνομα της μεταβλητής, π.χ.:

short int a; /* δήλωση μεταβλητής τύπου μικρού ακεραίου */

int i, k, l; /* δήλωση 3 ακέραιων μεταβλητών */

char c, line[100]; /* δήλωση χαρακτήρα και πίνακα χα/ρων */

float periferia, emvadon; /* δήλωση πραγματικών */

char cp=a; char esc = \\; int k=0; /* με αρχική τιμή */

int m = MX + 5;

float eps = 1.0e-5; /* δήλωση πραγματικού απλής ακρίβειας */

double e = 2.7; /* δήλωση πραγματικού διπλής ακρίβειας */

float inch = 2.54; ή float inch = 254e-2;

long double pi = 314159265359e-11; /* εκτεταμένης ακρίβειας */

5

Page 6: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Ονόματα μεταβλητών • Τα ονόματα των μεταβλητών σ’ ένα πρόγραμμα C

πρέπει να αρχίζουν με γράμμα και μπορούν να περιέχουν αλφαριθμητικούς χαρακτήρες, δηλαδή:

γράμματα, ψηφία και το σύμβολο underscore (_).

• Δεν μπορούν να περιέχουν ειδικούς χαρακτήρες όπως: #, &, *, ., +, -, /, (, {, κλπ.

• Τα ονόματα count και Count αντιστοιχούν σε διαφορετικές μεταβλητές (διαχωρισμός πεζών-κεφαλαίων).

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

6

Page 7: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Λέξεις κλειδιά (δεσμευμένες λέξεις) που δεν μπορούν να χρησιμοποιηθούν ως ονόματα μεταβλητών

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while

7

Page 8: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Καλές πρακτικές ονομασίας μεταβλητών

• Χρήση μικρών χαρακτήρων (όχι κεφαλαίων)

• Αποφυγή χρήσης μικρών και κεφαλαίων για δύο διαφορετικές μεταβλητές π.χ. one και ONE

• Χρήση μνημονικών ονομάτων που είναι

περιγραφικά, π.χ. interestRate αντί ir

• Κατανοητή σύνταξη για πολύπλοκα ονόματα π.χ. interestRate, ή interest_Rate αντί interestrate

8

Page 9: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Χρήση του const για μεταβλητές που δεν αλλάζουν τιμή!

• O δεύτερος τρόπος δήλωσης μιας συμβολικής σταθεράς είναι με τη λέξη κλειδί const.

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

Π.χ.

const int count = 100;

const float PI = 3.14159265;

9

Page 10: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Τελεστές

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

• Τελεστές εκχώρησης (=), τελεστές αριθμητικοί, τελεστές σχεσιακοί, τελεστές λογικοί.

• H C έχει δύο μοναδιαίους (unary) αριθμητικούς τελεστές (επιδέχονται έναν τελεστέο) και 5 δυαδικούς (binary) αριθμητικούς τελεστές (απαιτούν δύο τελεστέους).

10

Page 11: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Αριθμητικοί Τελεστές (+) Πρόσθεση (δυαδικός τελεστής – binary operator),

και έκφραση θετικού προσήμου (μοναδιαίος τελεστής – unary operator)

(-) Αφαίρεση (δυαδικός τελεστής – binary operator), και έκφραση αρνητικού προσήμου (μοναδιαίος τελεστής – unary operator)

(*) Πολλαπλασιασμός (δυαδικός τελεστής – binary operator)

(/) Διαίρεση (δυαδικός τελεστής – binary operator)

(%) Υπόλοιπο διαίρεσης (για ακέραιους τύπους μόνο - (δυαδικός τελεστής – binary operator)

11

Page 12: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Παραδείγματα

10/3 δίνει 3

10%3 δίνει 1

10%2 δίνει 0

10+2 δίνει 12

10*2-2 δίνει 18

10/0 δεν ορίζεται (διαίρεση με 0)

10%0 δεν ορίζεται (υπόλοιπο διαίρεσης με 0)

6/2+4 δίνει 7

-10+2 δίνει -8

10/2 + -10/3 = (10/2) + ((-10)/3) δίνει 2

12

Page 13: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Σχεσιακοί Τελεστές (1) • Οι σχεσιακοί ή συσχετιστικοί τελεστές

χρησιμοποιούνται για να συγκρίνουν εκφράσεις.

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

• == (Ίσον), > (Μεγαλύτερο από), < (Μικρότερο από), >= (Μεγαλύτερο ή ίσο), <= (Μικρότερο ή ίσο), != (Διάφορο)

• ΠΡΟΣΟΧΗ: Το = είναι ο τελεστής εκχώρησης, ενώ το == είναι ο σχεσιακός τελεστής.

13

Page 14: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Σχεσιακοί Τελεστές (2)

• Οι σχεσιακοί τελεστές θέτουν ερωτήσεις όπως:

«Είναι η x μεγαλύτερη από το 100;»,

«Είναι η y ίση με 0;».

Π.χ.:

5 == 1, Είναι το 5 ίσο με το 1; (ψευδές)

5>1, Είναι το 5 μεγαλύτερο του 1; (αληθές)

5 != 1, Είναι το 5 διαφορετικό από το 1; (αληθές)

(5+10) == (3*5), Είναι το (5+10) ίσο με το (3*5); (αληθές)

14

Page 15: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Σχεσιακοί Τελεστές

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

Π.χ. η συνθήκη:

(x+2>y)

είναι ισοδύναμη με την

((x+2)>y)

• Η σειρά προτεραιότητας των σχεσιακών τελεστών είναι < <= > >= != ==

Π.χ. το: x == y>z είναι ίδιο με το: x == (y>z)

15

Page 16: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Λογικοί Τελεστές

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

• Τελεστής σύζευξης && (λογικό και, and)

• Τελεστής διάζευξης || (λογικό ή, or)

• Τελεστής άρνησης ! (λογικό όχι, not)

Το && έχει μεγαλύτερη προτεραιότητα από το || ενώ το ! είναι μοναδιαίος τελεστής.

Υπολογίζονται από τα αριστερά προς τα δεξιά όταν είναι πάνω από δύο με ίδια προτεραιότητα.

16

Page 17: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Τελεστές πράξεων ανά μπιτ

• Εφαρμόζονται μόνο σε ακέραιους τελεστέους.

& σύζευξη (and)

| διάζευξη (or)

^ αποκλειστική διάζευξη (xor)

<< ολίσθηση αριστερά (shift left)

>> ολίσθηση δεξιά (shift right)

~ συμπλήρωμα ως προς ένα (1’s complement)

Μόνο το ~ είναι μοναδιαίος τελεστής ενώ όλοι οι υπόλοιποι είναι δυαδικοί.

17

Page 18: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Τελεστής αντικατάστασης (Εντολή ανάθεσης)

• Οι μεταβλητές λαμβάνουν τιμές με συγκεκριμένη εντολή ανάθεσης

• Η εντολή είναι της μορφής:

μεταβλητή = έκφραση

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

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

18

Page 19: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Συγκεντρωτικά οι τελεστές της C (1)

Αριθμητικοί τελεστές:

+ -

* / % + -

Συσχετιστικοί τελεστές:

> >= < <= == !=

Λογικοί τελεστές:

&& || !

19

Page 20: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Συγκεντρωτικά οι τελεστές της C (2)

Τελεστές πράξεων ανά bit (bitwise):

& | ^ << >> ~

Τελεστές αντικατάστασης:

= += -= *= /+ %=

<<= >>= ^= &= |=

π.χ. x= y+z; x = a*5 + b/c + 12.75/(d-8); i=i+5; μπορεί να γραφεί ως: i+=5;

j=j*(k+7); μπορεί να γραφεί ως: j*=(k+7); 20

Page 21: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Το πρώτο μου πρόγραμμα

/* my first C program */

#include <stdio.h>

main()

{

printf ("Hello World");

} 21

Page 22: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

/* my first C program */

#include <stdio.h>

void main()

{

printf(“Hello World!”);

}

• Αυτή η πρόταση οδηγεί τον υπολογιστή να εμφανίσει το μήνυμα Hello World! στην οθόνη.

Εντολή εισαγωγής βιβλιοθήκης για

χρήση συναρτήσεων είσοδου/έξοδου

Βιβλιοθήκη

Η αρχική συνάρτηση main

Η συνάρτηση printf που έχει ορισθεί στη

βιβλιοθήκη stdio και επιτρέπει την

εμφάνιση στην οθόνη (standard output)

Τύπος

Επιστροφής

της main

Εντολή

Προ-επεξεργασίας

Σχόλια

22

Page 23: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Μορφοποίηση εισόδου /εξόδου

Συναρτήσεις • printf() - Προβάλλει πληροφορίες στην οθόνη.

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

Κωδικοί διαμόρφωσης

%d %5d %o %x

%f %8.2f %.3f

%s %c

%%

23

Page 24: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Εντολή εμφάνισης στην οθόνη

• Η σύνταξη της εντολής printf είναι

printf (“δήλωση φόρμας”, έκφραση1, έκφραση2 ...);

όπου:

Η δήλωση φόρμας ορίζει το πως θα μορφοποιηθεί η εκτύπωση, και το τι θα τυπώνεται στην πρότυπη έξοδο (standard output).

H δήλωση φόρμας ορίζει, επίσης, με την συνδρομή των κωδικών διαμόρφωσης, πως θα μετατραπούν οι τιμές από τη εσωτερική δυαδική μορφή του Η/Υ στην επιθυμητή μορφή της εκτύπωσης.

24

Page 25: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Παράδειγμα main()

{

int i, j;

float x, y;

i = 10;

j = 20;

x = 43.2892;

y = 5527.0;

printf( “ i = %d, j = %d, x = %f, y = %f\n” , i, j, x, y);

}

Δήλωση φόρμας

Εμφάνιση ως ακεραίου στο

δεκαδικό σύστημα αρίθμησης

Εμφάνιση ως πραγματικός

Οι μεταβλητές για εκτύπωση

Αποτέλεσμα εκτύπωσης : i = 10, j = 20, x = 43.289200, y = 5527.000000 25

Page 26: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

• Η σύνταξη της εντολής scanf είναι

scanf (“δήλωση φόρμας”, έκφραση1, έκφραση2 ...);

όπου:

Η δήλωση φόρμας ορίζει - με την βοήθεια των κωδικών διαμόρφωσης - το πως θα ερμηνεύονται τα δεδομένα που εισάγονται από το πληκτρολόγιο το οποίο αποτελεί την πρότυπη είσοδο (standard input).

Στην συνέχεια οι εκφράσεις πρέπει να δείχνουν τις θέσεις της μνήμης RAM που θα αποθηκευθούν τα δεδομένα (δηλαδή τις διευθύνσεις των θέσεων)

28

Page 27: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Παράδειγμα #include <stdio.h>

main()

{

int i, j;

float x, y;

scanf("%d%d%f%f", &i, &j, &x, &y);

printf("%d %d %f %g", i, j, x, y);

}

Εάν ο χρήστης εισάγει 1, -20, .3, -4.0e3 τότε η παραπάνω εντολή εισόδου θα

διαβάσει και θα αναθέσει στη μεταβλητή i τον αριθμό 1, στη j το -20, στη x το

0.3, και στη y το -4000.0

Διαφορά από το

printf

29

Page 28: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

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

Ορισμός του

Προβλήματος/

Problem Definition

Γνώση της περιοχής

Του Προβλήματος/

Domain Knowledge

Αλγόριθμος/

Algorithm Πηγαίο πρόγραμμα (Source

Code) σε κάποια Γλώσσα

Προγραμματισμού, π.χ. C

Μεταφραστής και

Συμβολομεταφραστής/

Compiler/Assembler/Linker

Γλώσσα

Μηχανής

Δεδομένα/Data

Αποτέλεσμα/

Result

30

Page 29: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

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

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

31

Page 30: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

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

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

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

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

32

Page 31: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

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

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

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

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

4 printf(“Hello World!); /* Νο ” at the end */

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

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

33

Page 32: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

directives (οδηγίες)

main()

{

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

statements (εντολές)

}

35

Page 33: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Οδηγίες • Είναι εντολές για τον προ-επεξεργαστή

• Χρησιμοποιούνται συνήθως για τις παρακάτω περιπτώσεις:

– Να εισάγουν βιβλιοθήκες (αρχεία επικεφαλίδες - headers) π.χ.

• #include <stdio.h> – Δε χρειάζεται να τροποποιήσετε τις πληροφορίες σε αυτά τα

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

• #include “myBestLibrary.h”

– Να ορίσουν σταθερές ή μακροεντολές π.χ.

• #define FREEZING_POINT_CELCIUS 0.0

• #define FREEZING_POINT_FARHENEIT 32.0

• #define HALFOF(value) ((value)/2)

36

Page 34: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Εντολές

• Οι εντολές ορίζουν συγκεκριμένες λειτουργίες τις οποίες εκτελεί ένα πρόγραμμα σαν μέρος του αλγόριθμου που υλοποιεί

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

• Οι εντολές τελειώνουν πάντα με ελληνικό ερωτηματικό (;) – semicolon – ενώ οι οδηγίες (directives) έχουν πάντα μήκος μία γραμμή.

37

Page 35: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Συναρτήσεις • Οι συναρτήσεις είναι σαν τις ρουτίνες/υπο-ρουτίνες (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);

}

Ορισμός της

συνάρτησης Το πρόγραμμα

38

Page 36: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

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

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

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

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

39

Page 37: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Σχόλια (comments) • Ένα καλό πρόγραμμα δεν είναι μόνο συντακτικά σωστό, γρήγορο, και συμβατό με

τις απαιτήσεις του χρήστη, αλλά και τεκμηριωμένο με σχόλια. • Τα σχόλια δεν μεταφράζονται από τον compiler ο οποίος τα θεωρεί σαν κενούς

χαρακτήρες • Τα σχόλια στη C ορίζονται ανάμεσα στα σύμβολα /* και */ π.χ. /* this is a comment in C */ • Δεν επιτρέπονται τα ένθετα σχόλια εκτός αν έχει γίνει η κατάλληλη ρύθμιση.

• Σχόλια γραμμής: στη C++ ή στη Java αρχίζουν με // και τελειώνουν με το πέρας της γραμμής. Κάποιοι μεταγλωττιστές της C το επιτρέπουν, αλλά αν σας ενδιαφέρει η μεταφορά να χρησιμοποιείτε /* και */

• Προσθέστε σχόλια μόνο σε προτάσεις ή συναρτήσεις οι οποίες δεν έχουν προφανή σημασία.

• Βασική αρχή είναι να έχουμε ένα ευπαρουσίαστο και εύκολο να διαβαστεί πρόγραμμα (διευκολύνει τη συντήρησή του) π.χ.

/************************************************************ * Name: main.c * * Author: John Smith * * Purpose: Translate Celsius degrees to Fahrenheit * * Date/Version: 12/12/02 v1.1 * ************************************************************/ 40

Page 38: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Αν το αποτέλεσμα του προγράμματος είναι το παρακάτω, ποιο είναι το πρόγραμμα;

Enter a number between 1 and 100 : 35

Enter another number between 1 and 100 : 23

35 times 23 = 805

Press any key to continue!!

43

Page 39: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Εντολή ελέγχου if

Συντάσσεται ως εξής:

if (παράσταση ή συνθήκη)

εντολή1;

else

εντολή2;

46

Page 40: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Παράδειγμα με “if … else…”

/* Πρόγραμμα που εμφανίζει αν ο ακέραιος που

δόθηκε είναι άρτιος ή περιττός */

main()

{ int ak;

printf(“Δώστε ακέραιο : “);

scanf (“%d”, &ak);

if (ak%2==0)

printf(“Δόθηκε ο άρτιος %d\n“, ak);

else

printf(“Δόθηκε ο περιττός %d\n“, ak);

}

47

Page 41: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Εντολή επανάληψης while

Συντάσσεται ως εξής:

while (παράσταση ή συνθήκη)

εντολή;

48

Page 42: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Παράδειγμα με “while…”

/* Πρόγραμμα που εμφανίζει το άθροισμα των 100

πρώτων φυσικών αριθμών, δηλαδή: 1+2+3+…+100 */

main()

{ int i, ath=0; /* i -> μετρητής, ath -> άθροισμα */

i=1; /* αρχικοποίηση μετρητή */

while (i<=100)

{ ath = ath + i; /* ή ath += i; */

i = i + 1;

}

printf(“Το άθροισμα είναι %d\n”, ath);

}

49

Page 43: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Παράδειγμα με “while…“ και “if…else…”(1) Εκφώνηση: Να γίνει ένα πρόγραμμα το οποίο να ζητάει από το πληκτρολόγιο τον βαθμό που πήρε κάποιος φοιτητής σε κάποιο μάθημα και αν είναι μεγαλύτερος από το πέντε ή τουλάχιστον ίσος με το πέντε να επιστρέφει στην οθόνη το μήνυμα «Πέρασες», διαφορετικά να εμφανίζει στην οθόνη το μήνυμα «Απορρίφθηκες». Σε περίπτωση που ο βαθμός είναι εκτός ορίων (δηλαδή, είτε είναι μικρότερος του μηδενός, είτε είναι μεγαλύτερος του δέκα) να εμφανίζει το κατάλληλο μήνυμα λάθους και στην συνέχεια να ξαναζητάει τον βαθμό μέχρι να λάβει κάποιον βαθμό εντός ορίων, οπότε και θα συνεχίσει την εκτέλεση του προγράμματος.

50

Page 44: Προγραμματισμός Η/Υ (ΤΛ2007 ) · 2015. 6. 5. · Τμήμα Ηλεκρονικών Μηχανικών Τ.Ε.Ι. Κρήης Προγραμματισμός Η/Υ

Παράδειγμα με “while…“ και “if…else…”(2) Λύση:

main()

{ int v;

printf("Δώστε βαθμό : ");

scanf("%d", &v);

while (v<0 || v>10)

{ printf("Βαθμός εκτός ορίων!\n\nΞαναδώστε βαθμό : ");

scanf("%d", &v);

}

if (v>=5)

printf("Πέρασες.\n\n");

else

printf("Απορρίφθηκες.\n\n");

system("PAUSE");

return 0;

}

51