35
Εισαγωγή στην Πληροφορική Επίκουρος Καθηγητής Ε. Κοφίδης 2 Περιεχόμενα (1) Εισαγωγικά στοιχεία Αρχιτεκτονική υπολογιστών (Η/Υ) Το δυαδικό αριθμητικό σύστημα Επίλυση προβλημάτων μεΗ/Υ: Αλγόριθμοι και αναπαράστασή τους Κύκλος ανάπτυξης προγράμματος Γλώσσες προγραμματισμού 3 Περιεχόμενα (2) Η γλώσσα προγραμματισμού C Τύποι, τελεστές και παραστάσεις Εντολές ροής ελέγχου Συναρτήσεις και δομή του προγράμματος ∆είκτες και πίνακες ∆ομές Είσοδος και έξοδος Αρχεία 4 Περιεχόμενα (3) Και φυσικά ... Παραδείγματα και ασκήσεις επίλυσης προβλημάτων με τη βοήθεια προγραμμάτων C

Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

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

Επίκουρος Καθηγητής Ε. Κοφίδης

2

Περιεχόµενα (1)

Εισαγωγικά στοιχείαΑρχιτεκτονική υπολογιστών (Η/Υ)Το δυαδικό αριθµητικό σύστηµαΕπίλυση προβληµάτων µε Η/Υ:Αλγόριθµοι και αναπαράστασή τουςΚύκλος ανάπτυξης προγράµµατος

Γλώσσες προγραµµατισµού

3

Περιεχόµενα (2)Η γλώσσα προγραµµατισµού CΤύποι, τελεστές και παραστάσειςΕντολές ροής ελέγχουΣυναρτήσεις και δοµή του προγράµµατος∆είκτες και πίνακες∆οµέςΕίσοδος και έξοδοςΑρχεία

4

Περιεχόµενα (3)Και φυσικά ... Παραδείγµατα καιασκήσεις επίλυσης προβληµάτων µε τηβοήθεια προγραµµάτων C

Page 2: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

5

∆ιδακτικά συγγράµµατα1. Β. Σεφερίδης, C για Αρχάριους,

Κλειδάριθµος, 1995. 2. Ν. Μ. Χατζηγιαννάκης, Η Γλώσσα C σε

Βάθος, 3η έκδοση, Κλειδάριθµος, 2009.

6

Για περαιτέρω διάβασµα...1. D. Hillis, Οι υπολογιστές στο παρόν και το µέλλον, Κάτοπτρο,

2000.2. G. Rawlins, Αλγόριθµοι: Ανάλυση και Σύγκριση, Κριτική, 2004.3. B. W. Kernighan και D. M. Ritchie, Η Γλώσσα

Προγραµµατισµού C, 2η έκδοση, Κλειδάριθµος, 1990.4. P. Aitken και B. L. Jones, Εγχειρίδιο της C, 4η έκδοση, εκδ. Μ.

Γκιούρδας, 1998.5. H. Schildt, Οδηγός της C, 3η έκδοση, εκδ. Μ. Γκιούρδας,

2000.6. Κ. Θραµπουλίδης, ∆ιαδικαστικός Προγραµµατισµός-C: Από τη

C στη Java, τόµος Α’, 2η έκδοση, εκδ. Τζιόλα, 2003. 7. Α. Τοµαράς, C: Θεωρία και Πράξη, Εκδόσεις Νέων

Τεχνολογιών, 1994.

7

Εργαστήριο µαθήµατος

Το µάθηµα περιλαµβάνει (απαραίτητα!) πρακτική άσκηση στο εργαστήριο. Ηπαρουσία στο εργαστήριο θα είναιυποχρεωτική.Εξέταση και στο εργαστήριο.

8

ΒαθµολόγησηΤελικός βαθµός=max(Βαθµός γραπτού,

0.3*Βαθµός εργαστηρίου +0.7*Βαθµός γραπτού)

Page 3: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

9

Ώρες γραφείου

Τετάρτη 12:00-14:00Κτίριο οδού Ζέας, 5ος όροφος

10

Ας αρχίσουµε λοιπόν...

Page 4: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

11

Εισαγωγή

Πληροφορική (Informatics): Ηεπιστήµη των Η/Υ (Computer Science)και γενικότερα (πλέον) η επιστήµη τηςεπεξεργασίας δεδοµένων (µε τη βοήθειαυπολογιστικών µηχανών) µε σκοπό τηνεξαγωγή πληροφορίας

12

Πεδία της Πληροφορικής (1)Αρχιτεκτονική Η/ΥΛειτουργικά συστήµαταΓλώσσες προγραµµατισµούΣχεδιασµός και ανάλυση αλγορίθµωνΘεωρία υπολογισµούΒάσεις δεδοµένων και γνώσεωνΤεχνολογία λογισµικούΠληροφοριακά συστήµαταΤεχνητή νοηµοσύνη

13

Πεδία της Πληροφορικής (2)

∆ίκτυα Η/ΥΗλεκτρονικό εµπόριοΗλεκτρονική διακυβέρνησηΤηλεπικοινωνίεςΠολυµέσαΕπεξεργασία σηµάτων...

14

Κοινή βάση όλων τωνπαραπάνω: Πρόγραµµα (Program)

Page 5: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

15

Μερικοί (άτυποι) ορισµοίΠρογραµµατισµός: Προσδιορισµόςσυγκεκριµένης ακολουθίας ενεργειών µεστόχο κάποιο επιθυµητό αποτέλεσµαΓλώσσα προγραµµατισµού: Κώδικαςεπικοινωνίας µε τον Η/Υ για τηµετάδοση των επιθυµητών ενεργειώνΑρχές προγραµµατισµού: Φιλοσοφίαστην οποία βασίζεται η κατασκευή τουκώδικα επικοινωνίας µε τον Η/Υ καιµεθοδολογίες που ακολουθούνται στηχρήση του.

16

Γιατί χρειάζεται η γλώσσαπρογραµµατισµού;Ο Η/Υ είναι µια «ηλίθια» µηχανή πουκαταλαβαίνει µόνο πολύ απλέςλειτουργίες.Ο προγραµµατιστής δεν πρέπει να είναιυποχρεωµένος να γνωρίζει πολλά για τα«εσωτερικά» (αρχιτεκτονική) του Η/Υ.

17

Υπολογιστικό σύστηµαΥλικό (Hardware) / Λογισµικό (Software)

Λειτουργικό Σύστηµα

Υλικό

∆ευτερεύουσα Μνήµη

C/C++ Games Editor Printing program

Προγράµµατα εφαρµογών

Χρήστες (End-users)

∆ύσκολο να ειδωθούν ανεξάρτητα

18

Αρχιτεκτονική Μικροϋπολογιστή(Μοντέλο Von Neumann)

ΜονάδαΕλέγχου

(CU)

Καταχωρητές(Registers)

Αριθµητική/Λογική Μονάδα

(ALU)

Μνήµη(MU)

ΠεριφερειακάΕισόδου(INPUT)

ΠεριφερειακάΕξόδου

(OUTPUT)

Κεντρική ΜονάδαΕπεξεργασίας (CPU)

Πληκτρολόγιο,CD-ROM, κ.λπ.

Οθόνη,Εκτυπωτής, κ.λπ.

Page 6: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

19

Central Processing Unit (CPU)Registers: Τοπική, γρήγορη µνήµη, γιααποθήκευση δεδοµένων, αποτελεσµάτων, διευθύνσεων, εντολών.ALU: Εκτέλεση συγκρίσεων και απλώναριθµητικών και λογικών πράξεωνCU: Ο «τροχονόµος» της µηχανής. Ελέγχειτην επικοινωνία των µερών της CPU µεταξύτους αλλά και της CPU µε το υπόλοιποσύστηµα.

20

Μνήµη (Memory)Κύρια (main ή primary) µνήµη:

Read Only Memory (ROM)Random Access Memory (RAM)

∆ευτερεύουσα (secondary) µνήµη:Σκληρός δίσκοςΕύκαµπτος δίσκος (δισκέττα)Οπτικός δίσκος (CD)Ταινία...

21

Είσοδος/Έξοδος (I/O)ΠληκτρολόγιοΠοντίκιΟθόνηΕκτυπωτήςModemΗχείαΣαρωτής...

22

Απλή Αναπαράσταση Αρχιτεκτονικής Μικροϋπολογιστή

CPU: Κεντρική ΜονάδαΕπεξεργασίας

Ρολόι

Προςάλλες

µονάδες

INTERFACEκαι έλεγχος διακοπών

Κεντρική Μνήµηκαι κυκλώµατα ελέγχου αυτής

∆ιεύθυνση

∆εδοµένα

Έλεγχος

ΠΕΡΙΦΕΡΕΙΑΚΑΕΞΩΤΕΡΙΚΟΣ∆ΙΑΥΛΟΣ

ΕΣΩΤΕΡΙΚΟΣ ∆ΙΑΥΛΟΣ

Page 7: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

24

Γιατί «Ψηφιακός» Η/Υ;«Καταλαβαίνει» δύο καταστάσεις: «0» και «1»Όλα, δεδοµένα, διευθύνσεις, εντολές, αποτελέσµατα, είναι κωδικοποιηµένα ωςακολουθίες δυαδικών ψηφίων (binary digits) (bits)1 Byte=23=8 bits, 1 KByte=210=1024 Bytes,1 MByte=1024 KBytes, 1 GByte=1024 MBytes, …

25

Το ∆υαδικό ΑριθµητικόΣύστηµα (1)Στο αριθµητικό σύστηµα µε βάση β:

(αmαm-1…α0.α-1α-2…α-n)β=αmβm+αm-1βm-1+...+α0β0+α-1β-1+α-2β-2+…+α-nβ-n

όπου τα ψηφία αi µπορεί να είναι 0, 1, ..., β-1.

26

Το ∆υαδικό ΑριθµητικόΣύστηµα (2)

Π.χ. Στο δεκαδικό σύστηµα (δηλ. β=10):22.72=(22.72)10=

2*101+2*100+7 *10-1+2 *10-2

και τα ψηφία του συστήµατος είναι 0, 1, ..., 9=10-1.

27

Το ∆υαδικό ΑριθµητικόΣύστηµα (3)

Ο Η/Υ χρησιµοποιεί ως κώδικα το δυαδικό(binary) αριθµητικό σύστηµα. ∆ηλαδήβ=2 και ψηφία 0, 1.Π.χ. (10110.1011)2=1*24+0*23+1*22+1*21+0*20+1*2-1+0*2-2+1*2-3+1*2-4=22+0.6875=(22.6875)10

Page 8: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

28

Το ∆υαδικό ΑριθµητικόΣύστηµα (4)

Μετατροπή δεκαδικού σε δυαδικό:Ακέραιο µέρος: ∆ιαιρούµε διαδοχικά µε το 2έως ότου προκύψει µηδενικό πηλίκο καιγράφουµε τα υπόλοιπα από το τελευταίο προςτο πρώτο.

Π.χ.: 22=2*11+0, 11=2*5+1, 5=2*2+1, 2=2*1+0, 1=2*0+1

Άρα: (22)10=(10110)2

29

Το ∆υαδικό ΑριθµητικόΣύστηµα (5)

22 20 11 2

5 2

1 20

1

21 2

01

30

Το ∆υαδικό ΑριθµητικόΣύστηµα (6)

Μετατροπή δεκαδικού σε δυαδικό:Κλασµατικό µέρος: Πολλαπλασιάζουµεδιαδοχικά µε το 2 και γράφουµε τα ακέραιαµέρη των γινοµένων (µ’ αυτή τη σειρά) για όσαψηφία θέλουµε.

Π.χ.: 0.72*2=1.44, 0.44*2=0.88, 0.88*2=1.76, 0.76*2=1.52Άρα: (0.72)10=(0.1011)2 µε 4 ψηφία

31

Το ∆υαδικό ΑριθµητικόΣύστηµα (7)

‘Αρα: (22.72)10=(10110.1011)2 µε ακρίβεια 4 ψηφίωνΓια µετατροπή σε σύστηµα µε βάση βακολουθείται ανάλογη διαδικασία µε β στη θέσητου 2. Άλλα συνήθη αριθµητικά συστήµατα:Οκταδικό (octal) (β=8) (ψηφία: 0,1,...,7)∆εκαεξαδικό (hexadecimal) (β=16) (ψηφία: 0,1,...,9,A,B,C,D,E,F)

Page 9: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

32

Το ∆υαδικό ΑριθµητικόΣύστηµα (8)Μετατροπή δυαδικού σε οκταδικό: Χωρίζουµε τον αριθµό σε τριάδες bits(8=23) και µετατρέπουµε την καθεµιάξεχωριστά.Π.χ.: (22)10=(10110)2=(010110)2=(26)8

Για µετατροπή στο δεκαεξαδικό χωρίζουµεσε τετράδες bits (16=24) .Π.χ.: (22)10=(10110)2=(00010110)2=(16)16

33

Το ∆υαδικό ΑριθµητικόΣύστηµα (9)

11171106101510040113010200110000

∆υαδικόΟκταδικό/∆εκαδικό

34

Το ∆υαδικό ΑριθµητικόΣύστηµα (10)Οι περισσότεροι αριθµοί που συναντούµεστους Η/Υ είναι δυνάµεις του 2:

…102451225612864321682p

…109876543p

35

Το ∆υαδικό ΑριθµητικόΣύστηµα (11)

Για πρόσηµο: Επιπλέον bit στην αρχήτου αριθµού (π.χ. 0 για συν, 1 για πλην)Αναπαράσταση κινητής υποδιαστολής(floating point):

s m e(-1)s * m * 2d-e

s : sign, m : mantissa, e : exponent

Page 10: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

36

Κώδικες ΧαρακτήρωνΧαρακτήρας: Οποιοδήποτε σύµβολο, ορατόή µη (π.χ. ψηφία, γράµµατα, σηµεία στίξης, κενά, κ.λπ.)Κάθε χαρακτήρας έχει µια εσωτερική δυαδικήαναπαράσταση.Κώδικες χαρακτήρων:

American Standard Code for Information Interchange (ASCII): 7 bits (ASCII-8: 8 bits)Unicode: 16 bits

37

Μοντέλο αποθηκευµένουπρογράµµατος (1)

Βασικές λειτουργίες κωδικοποιούνται ωςδυαδικές λέξεις.Πρόγραµµα: Ακολουθία τέτοιωνκωδικών (εντολών (instructions)), που, αν εκτελεστεί, οδηγεί σε κάποιοεπιθυµητό αποτέλεσµα.

38

Μοντέλο αποθηκευµένουπρογράµµατος (2)Αποθήκευση (φόρτωση) τουπρογράµµατος στη RAMΕκτέλεση της ακολουθίας των εντολώναπό τη CPUΟ καταχωρητής program counter (PC) δείχνει σε ποιά θέση στη µνήµηβρίσκεται η επόµενη εντολή προςεκτέλεση.

39

Λειτουργία CPUΚατάσταση ΑναµονήςΑν υπάρχει εντολή εκτέλεσης:

Ανάκληση Εντολής από Μνήµη (Instruction Fetch)Αποκωδικοποίηση Εντολής (Decoding)Ανάκληση ∆εδοµένων (Operand Fetch)Εκτέλεση ΕντολήςΑποθήκευση Αποτελέσµατος

Tέλος Εκτέλεσης ΕντολήςΑν υπάρχει ανάγκη στο Σύστηµα ∆ιακοπών:

Μεταφορά λειτουργίας στους ∆ιακόπτεςΕκτέλεση ∆ιακοπήςΤέλος ενασχόλησης µε Σύστηµα ∆ιακοπών

Συνέχιση ∆ιαδικασίας

Page 11: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

40

Ταξινόµηση Λογισµικού Μικροϋπολογιστών

Λογισµικό

Μέσα σε ROM Μέσα σε RAM Βοηθητική Μνήµη

ΚαρτώνΕλέγχου

BIOS

ΛογισµικόΕφαρµογών

ΛογισµικόΣυστήµατος

Λειτουργικό∆ικτύου

ΛειτουργικόΣύστηµα

ΕυκολίεςΣυστήµατος

Επόπτης Εκτελεστής ∆ιαχειριστής

MIS

Αυτοµατισµόςγραφείου

Στατιστικάπρογράµµατα

CAD/CAM

Back-up

Restore

∆ίκτυοκ.λπ.

κ.λπ.

41

Λογισµικό Εφαρµογών(Applications Software)

Προγράµµατα φτιαγµένα για να κάνουν µιασυγκεκριµένη δουλειά.Παραδείγµατα:Κειµενογράφοι (π.χ. Word)Υπολογιστικά φύλλα (π.χ. Excel)Συστήµατα διαχείρισης βάσεων δεδοµένων (π.χ. Access)Υπολογιστικά πακέτα (π.χ. Mathematica, SPSS)Παιχνίδιακαι φυσικά ... όλα τα προγράµµατα που εσείς θαγράψετε.

42

Λειτουργικό Σύστηµα(Operating System)

Σύνολο προγραµµάτων που αποτελούν το ενδιάµεσοµεταξύ χρήστη και CPU αλλά και µεταξύπρογραµµάτων εφαρµογών και περιφερειακών.Σκοπός: Η δηµιουργία περιβάλλοντος στο οποίοδιάφορες εφαρµογές που χρησιµοποιούν τον Η/Υ µεδιάφορους τρόπους να µπορούν να «τρέξουν.»Μερικά από τα καθήκοντά του:Εκκίνηση Η/ΥΈλεγχος πρόσβασης (access control)Αποθήκευση πληροφοριών και προγραµµάτωνΚαταχώρηση πόρων (resource allocation)∆ιαµοιρασµός πόρων (resource sharing)∆ιαχείριση περιβάλλοντος εργασίας

Page 12: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

43

Επίλυση προβληµάτων µε Η/Υ1. Ξεκάθαρη διατύπωση του προβλήµατος2. Ανάπτυξη µαθηµατικού µοντέλου3. Σχεδιασµός µεθόδου επίλυσης (Αλγόριθµος)4. Έλεγχος ορθότητας του αλγορίθµου5. Ανάλυση πολυπλοκότητας6. Υλοποίηση (Κωδικοποίηση σε ακολουθία

εντολών προς τον Η/Υ)7. ∆οκιµή του προγράµµατος (Testing)8. Τεκµηρίωση (Documentation)

44

Αλγόριθµος (1)Ακολουθία ενεργειών (βηµάτων) που πρέπεινα γίνουν για την επίλυση του προβλήµατος(σύµφωνα µε κάποια µέθοδο επίλυσης.)Χαρακτηριστικά:

Πεπερασµένη περιγραφήΑπαιτεί πεπερασµένο χρόνο και µνήµη για να καταλήξει σελύση, για οποιαδήποτε δεδοµένα. Καθορίζεται µε ακρίβεια. Αποτελεσµατικότητα: Κάθε βήµα να είναι το απλούστεροδυνατό και να είναι εκτελέσιµο στον Η/Υ.Ορθότητα

45

Αλγόριθµος (2)

Πολυπλοκότητα (complexity)αλγορίθµου: Χρόνος υπολογισµού καιαπαιτούµενη µνήµη ως συνάρτηση τουµεγέθους των δεδοµένων εισόδου. Έξυπνες λύσεις για µείωση τηςπολυπλοκότητας

46

Αλγόριθµος (3)

Υπάρχουν προβλήµατα για τα οποία δενυπάρχουν αλγόριθµοι χαµηλήςπολυπλοκότητας; Ναι. Π.χ. Travelling Salesman Problem (TSP)

Page 13: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

48

Αλγόριθµος (4)

Προβλήµατα που δεν επιλύονται µεΗ/Υ;Ναι! Π.χ.: Σχεδιασµός αλγορίθµου που, γιαοποιονδήποτε δοσµένο αλγόριθµο, ναελέγχει αν αυτός τερµατίζει σεπεπερασµένο χρόνο (halting problem).

50

Αλγόριθµος (5)

Υπάρχουν προβλήµατα για τα οποίαείναι πολύ δύσκολο ή και αδύνατο ναδιατυπωθεί αλγόριθµος µε σαφή καιπεπερασµένη περιγραφή; ∆οκιµάστε να περιγράψετε αλγόριθµογια το δέσιµο των κορδονιών τωνπαπουτσιών!!!

51

Τρόποι περιγραφήςαλγορίθµωνΦραστική: Χρήση της καθοµιλουµένηςγλώσσαςΨευδοκώδικας (pseudocode): Χρησιµοποιείταιµια πιο αυστηρή γλώσσα, που µοιάζειπερισσότερο µε πρόγραµµα∆ιαγράµµατα ροής (Flow charts)∆οµοδιαγράµµατα...

52

Παράδειγµα

∆ιαίρεση δοθέντων κλασµάτων, a/b διά c/d. Μία µέθοδος επίλυσης: Εναλλάσσουµετον αριθµητή και τον παρονοµαστή τουδεύτερου κλάσµατος καιπολλαπλασιάζουµε αριθµητές καιπαρονοµαστές.

Page 14: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

53

Φραστική περιγραφή (1)

Άλλαξε το c µε το d.Πολλαπλασίασε το a µε το νέο c και τοb µε το νέο d.

54

Φραστική περιγραφή (2)

∆ιάβασε τα a, b, c, d.Άλλαξε το c µε το d.Πολλαπλασίασε το a µε το νέο c και τοb µε το νέο d. Τύπωσε τα δύο γινόµενα.

56

Φραστική περιγραφή (3)

Πώς θα γίνει η εναλλαγή;Μα είναι απλό (;):Θέσε στο c την τιµή του dΘέσε στο d την τιµή του c

Ποιά τιµή είχε αρχικά το c; Χάθηκε!

57

Φραστική περιγραφή (4)Ορθή διατύπωση:∆ιάβασε τα a, b, c, d.Έλεγξε αν κάποιο από τα b, c, d είναι µηδενικό. Ανναι, µην προχωράς.Αποθήκευσε την τιµή του c στο tempΘέσε στο c την τιµή του dΘέσε στο d την τιµή του tempΠολλαπλασίασε το a µε το νέο c και το b µε το νέοd.Τύπωσε τα δύο γινόµενα.

Page 15: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

58

ΨευδοκώδικαςΑλγόριθµος διαίρεσης δύο δοσµένων κλασµάτων, a/b και c/d.Είσοδος: a, b, c, dΈξοδος: a*d, b*c

Βήµα 0 : ∆ιάβασε τα a, b, c, dΒήµα 1: Αν b=0 ή c=0 ή d=0, πήγαινε στο Βήµα 8.Βήµα 2: temp cΒήµα 3: c dΒήµα 4: d tempΒήµα 5: num a*cΒήµα 6: den b*dΒήµα 7: Τύπωσε τα num, den.Βήµα 8: Τέλος

59

∆ιαγράµµατα Ροής (Flow Charts)

Αρχή/Τέλος

Επεξεργασία

Είσοδος/Έξοδος

Απόφαση

Υποπρόγραµµα

Ροή

Ένωση

60

Αρχή

∆ιάβασεa,b,c,d

b ή c ή d=0?

temp cc d

d temp

num a*cden b*d

Τύπωσεnum,den

Τέλος

OXI

NAI

Περιγραφή µεδιάγραµµα ροής

61

Ανάλυση ΠολυπλοκότηταςΠόσες πράξεις χρειάζεται ο αλγόριθµος;

2 πολλαπλασιασµούςτουλάχιστον 1 σύγκριση

Χρειάζεται επίσης και πάνω από 5 καταχωρήσεις ( )Αυτές συνεπάγονται προσπέλαση τηςµνήµηςΜπορούν να µειωθούν;

Page 16: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

62

Πρόγραµµα (σε γλώσσα C)#include <stdio.h>

main(void)

float a, b, c, d, temp, num, den;

printf(“∆ώσε τα a, b, c, d: “);scanf(“%f %f %f %f”,&a,&b,&c,&d);if (b==0 || c==0 || d==0)

fprintf(stderr,”∆ιαίρεση αδύνατη!\n”);return(1);

temp=c; c=d; d=temp;num=a*c; den=b*d;printf(“Αποτέλεσµα: %f/%f\n”,num,den);return(0);

63

Πρόγραµµα (σε γλώσσα C, µετεκµηρίωση)

/** Περιεχόµενο: Πρόγραµµα για διαίρεση δύο δοσµένων* κλασµάτων* Συγγραφέας: Ε. Κοφίδης* Ηµεροµηνία: 1 Μαρτίου 2005*/#include <stdio.h>

main(void)

float a, b, c, d; /* δεδοµένα εισόδου */float temp, num, den; /* βοηθητικές µεταβλητές */

/* Είσοδος δεδοµένων */printf(“∆ώσε τα a, b, c, d: “);scanf(“%f %f %f %f”,&a,&b,&c,&d);

64

/* Έλεγχος ορθότητας δεδοµένων */if (b==0 || c==0 || d==0)

fprintf(stderr,”∆ιαίρεση αδύνατη!\n”);return(1); /* τερµατισµός προγράµµατος */

/* Εναλλαγή αριθµητή και παρονοµαστή του

δεύτερου κλάσµατος */temp=c; c=d; d=temp;

/* Υπολογισµός αριθµητή και παρονοµαστήτου αποτελέσµατος */num=a*c; den=b*d;

/* Έξοδος αποτελέσµατος */printf(“Αποτέλεσµα: %f/%f\n”,num,den);return(0); /* τέλος */

65

Εναλλακτικός αλγόριθµοςΑλγόριθµος διαίρεσης δύο δοσµένων κλασµάτων, a/b και c/d.Είσοδος: a, b, c, dΈξοδος: a*d, b*c

Βήµα 0 : ∆ιάβασε τα a, b, c, dΒήµα 1: Αν b=0 ή c=0 ή d=0, πήγαινε στο Βήµα 5.Βήµα 2: Υπολόγισε το a*dΒήµα 3: Υπολόγισε το b*cΒήµα 4: Τύπωσε τα αποτελέσµατα.Βήµα 5: Τέλος

Page 17: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

66

Πρόγραµµα (σε γλώσσα C)/** Περιεχόµενο: Πρόγραµµα για διαίρεση δύο δοσµένων* κλασµάτων

* Συγγραφέας: Ε. Κοφίδης* Ηµεροµηνία: 1 Μαρτίου 2005*/

#include <stdio.h>

main(void)

float a, b, c, d; /* δεδοµένα εισόδου */

/* Είσοδος δεδοµένων */printf(“∆ώσε τα a, b, c, d: “);scanf(“%f %f %f %f”,&a,&b,&c,&d);

67

/* Έλεγχος ορθότητας δεδοµένων */

if (b==0 || c==0 || d==0)

fprintf(stderr,”∆ιαίρεση αδύνατη!\n”);

return(1); /* τερµατισµός προγράµµατος */

/* Έξοδος αποτελέσµατος */printf(“Αποτέλεσµα: %f/%f\n”,a*d,b*c);return(0); /* τέλος */

68

Ο Αλγόριθµος δεν είναι«συνταγή»!

«Συνταγή»: Η διαίρεση των κλασµάτων1/b και 1/d µπορεί να γίνει διαιρώνταςτο d µε το b.Ένας αλγόριθµος για ένα πρόβληµαπρέπει να θεωρεί την πιο γενική τουµορφή.(Σας θυµίζει κάτι αυτό από τα µαθήµατα του Excel;)

Page 18: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

69

Ένα ακόµη παράδειγµα

Πρόβληµα: Υπολογισµός διακύµανσηςδοσµένων αριθµών x0,x1,…,xN-1

Λύση: Εφαρµόζουµε το γνωστό µαςτύπο:

όπου µ ο αριθµητικός µέσος:

( )

N

xN

ii∑

=

−=

1

0

2

σ

N

xN

ii∑

==

1

70

Φραστική περιγραφή (1)1. ∆ιάβασε το πλήθος των αριθµών, Ν2. ∆ιάβασε τους Ν αριθµούς3. Υπολόγισε τον αριθµητικό µέσο όρο

τους4. Υπολόγισε τον αριθµητικό µέσο όρο

των τετραγώνων των διαφορών τουςµε το µέσο όρο τους

5. Τύπωσε το αποτέλεσµα

71

Φραστική περιγραφή (2)1. ∆ιάβασε το πλήθος των αριθµών, Ν.2. ∆ιάβασε τους Ν αριθµούς3. Υπολόγισε τον αριθµητικό µέσο όρο τους:

a. Υπολόγισε το άθροισµά τους. b. ∆ιαίρεσέ το µε το Ν.

4. Υπολόγισε τον αριθµητικό µέσο όρο των τετραγώνων τωνδιαφορών τους µε το µέσο όρο τους:

a. Υπολόγισε τα τετράγωνα των διαφορών των αριθµών και του µέσουόρου τους.

b. Υπολόγισε, όπως παραπάνω, το µέσο όρο αυτών.

5. Τύπωσε το αποτέλεσµα

73

Φραστική περιγραφή (3)4. Υπολόγισε τον αριθµητικό µέσο όρο των

τετραγώνων των διαφορών τους µε τοµέσο όρο τους:

a. Υπολόγισε τα τετράγωνα των διαφορών τους µε το µέσο όροτους:

i. Υπολόγισε το τετράγωνο της διαφοράς του πρώτου αριθµού και τουµέσου όρου των αριθµών.

ii. Κάνε το ίδιο για τον επόµενο αριθµό.iii. Επανέλαβε το ii. έως ότου έχεις φτάσει και στον τελευταίο αριθµό.

b. Υπολόγισε, όπως στο 3., το µέσο όρο των τετραγώνων.

5. Τύπωσε το αποτέλεσµα

Page 19: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

74

Ψευδοκώδικας (1)Αλγόριθµος υπολογισµού διακύµανσης δοσµένων αριθµώνΕίσοδος: το πλήθος, Ν, των αριθµών, και οι αριθµοί, x0,x1,…,xN-1

Έξοδος: Η διακύµανση, sigma2, του δοσµένου δείγµατος

Βήµα 1: ∆ιάβασε το Ν.Βήµα 2: Αν N<=0 ή N πολύ µεγάλο, πήγαινε στο Βήµα 7.Βήµα 3:∆ιάβασε το x0.

i 1Όσο Ν>i

∆ιάβασε το xi.i i+1

75

Ψευδοκώδικας (2)Βήµα 4: mu average(x0,x1,…,xN-1)

mu 0i 0Όσο N>i

mu mu+xi

i i+1mu mu/N

Βήµα 5: s0=(x0-mu)2

i 1Όσο N>i

si (xi-mu)2

i i+1

76

Ψευδοκώδικας (3)sigma2 average(s1,s2,…,sN)

Βήµα 6: Τύπωσε το sigma2.Βήµα 7: Τέλος.

77

Πρόγραµµα (σε C)/* * Πρόγραµµα υπολογισµού διακύµανσης δείγµατος* Ν αριθµών* Συγγραφέας: Ε. Κοφίδης* Ηµεροµηνία: 3 Μαρτίου 2005*/

#include <stdio.h>#define MAX_N 100 /* µέγιστο επιτρεπτό πλήθος */main() /* υποπρογράµµατα */

float square(float a), average(float y[],int M);/* µεταβλητές */int N; /* πλήθος αριθµών */float x[MAX_N], /* οι αριθµοί του δείγµατος */

s[MAX_N]; /* τα τετράγωνα (x-µέσος όρος)^2 */ float temp; /* βοηθητική µεταβλητή */float mu, sigma2; /* µέσος όρος και διακύµανση */register int i; /* µετρητής */

Page 20: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

78

/* ∆ιάβασε το N */printf(“Πόσοι είναι οι αριθµοί;”);scanf(“%d”,&N);

/* Έλεγξε αν είναι αποδεκτό */if (N<=0 || N>MAX_N)

fprintf(stderr,”Μη αποδεκτός αριθµός!\n”);return(1);

/* ∆ιάβασε τους Ν αριθµούς */printf(“∆ώσε %d αριθµούς: “,Ν);scanf(“%f”,&temp);

79

x[0]=temp;i=1;while (i<N)

scanf(“%f”,&temp);x[i]=temp;i=i+1;

/* Υπολόγισε το µέσο όρο τους */mu=average(x,N);

80

/* Υπολόγισε τα τετράγωνα των διαφορών µε το µέσο όρο */s[0]=square(x[0]-mu);i=1;while (i<N)

s[i]=square(x[i]-mu);i=i+1;

/* Υπολόγισε τη διακύµανση ως µέσο όρο των τετραγώνων τωνδιαφορών */

sigma2=average(s,N);

/* Τύπωσε αποτέλεσµα */printf(“∆ιακύµανση=%f\n”,sigma2);return(0); /* τέλος */

81

/* υπολογίζει το τετράγωνο ενός αριθµού */float square(float a)

return(a*a);/* υπολογίζει τον αριθµητικό µέσο των Μ αριθµών στον πίνακα y */float average(float y[],int M)

float m;register int i;

m=0;i=0;while (i<M)

m=m+x[i];i=i+1;

m=m/M;return(m);

Page 21: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

83

Stepwise RefinementΗ ανάπτυξη και περιγραφή του αλγορίθµουακολουθεί µια ιεραρχική πορεία, από την πιο«χονδρική» προς περισσότερο λεπτοµερείςµορφές, από το πιο γενικό προς το πιο ειδικό. Πλεονεκτήµατα:

Αποφυγή εµπλοκής εξ’ αρχής µε λεπτοµέρειες∆οµηµένη σκέψη

84

∆οµηµένος Προγραµµατισµός(Structured Programming) (1)

Ανάλυση του αλγορίθµου(προγράµµατος) σε τµήµατα(υποπρογράµµατα, modules) τα οποίασυνεργάζονται για να δώσουν το τελικόαποτέλεσµα, αλλά ταυτόχροναδηµιουργούνται (και ελέγχονται) ανεξάρτητα το ένα από το άλλο.

85

∆οµηµένος Προγραµµατισµός(Structured Programming) (2)Πλεονεκτήµατα:Ευκολία στην κατανόηση της λειτουργίας τουπρογράµµατοςΕυκολία στον έλεγχο της ορθότητάς του και στηνεκσφαλµάτωσή του (debugging).∆υνατότητα ανάπτυξης υποπρογραµµάτωνανεξάρτητα, από διαφορετικούς ανθρώπους∆υνατότητα επαναχρησιµοποίησηςυποπρογραµµάτων (π.χ. τo average στοπαραπάνω παράδειγµα)

86

Divide-and-conquer: ∆ιαίρεση µεγάλου (καιδύσκολου) προβλήµατος σε περισσότερα µικρά(και πιο εύκολα) προβλήµατα

Stepwise Refinement (Top-down design)

Σχεδιασµός Αλγορίθµων (Algorithm Design)

Page 22: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

87

Bottom-up design: Ανάπτυξη τωντµηµάτων του αλγορίθµου (προγράµµατος) ξεκινώντας από τα µικρότερα προς ταµεγαλύτερα (που τα περικλείουν). Συνηθίζεται περισσότερο στηνκωδικοποίηση του αλγορίθµου σεπρόγραµµα.

Σχεδιασµός Αλγορίθµων (Algorithm Design)

88

Programming styleSoftware reusability, modularity, maintainability, testabilitySoftware quality evaluation…

Σχεδιασµός Προγραµµάτων(Τεχνολογία Λογισµικού (Software Engineering))

89

Τεκµηρίωση (Documentation)(1)

Πληροφορία που:βοηθά στην κατανόηση τουαλγορίθµου/προγράµµατος, πείθει για την ορθότητά του, δίνει αποτελέσµατα δοκιµής του, οδηγίες εισαγωγής δεδοµένων κι ερµηνείαςαποτελεσµάτων, οδηγίες χρήσης, κ.λπ.

90

Τεκµηρίωση (Documentation)(2)

Περιλαµβάνει:Σχόλια µέσα στο πρόγραµµαΒοηθητική πληροφορία για την κατανόησητου αλγορίθµου (π.χ. ψευδοκώδικας ήδιάγραµµα ροής ή κείµενο)Αποτελέσµατα από τη δοκιµή τουπρογράµµατοςΟδηγίες χρήσης του

Page 23: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

91

Τεκµηρίωση (Documentation)(3)

Χρυσός κανόνας: Να τεκµηριώνειςτα προγράµµατά σου όπως θα ήθελεςοι άλλοι να τεκµηριώνουν ταπρογράµµατα που εσύ διαβάζεις.

92

Γλώσσες Προγραµµατισµού

Σύνολο Εντολών (Instruction Set):Βασικό, θεµελιώδες σύνολο εντολών built-in στη CPUΓλώσσα Μηχανής (Machine Language):Κώδικας αριθµοδότησης του instruction setΓλώσσα Assembly: Πιο ευανάγνωστηκωδικοποίηση εντολών (µε γράµµατα).Π.χ., ADD R2,R4Γλώσσες υψηλού επιπέδου (High-Level Languages): Σύνθετοι κώδικες, πιο κοντάστη φυσική γλώσσα. Απαιτούν µετάφραση(µεταγλώττιση) στη γλώσσα µηχανής.

93

Γλώσσες Προγραµµατισµού ΥψηλούΕπιπέδου

Μεταγλωττιστής (Compiler)/∆ιερµηνέας (Interpreter)

Συµβολοµεταφραστής(Assembler)

Αρχείο κώδικα γλώσσαςυψηλού επιπέδου

Assembly

Machine Language CPU

94

Γλώσσες προγραµµατισµού υψηλού επιπέδου(γενικού ή/και ειδικού σκοπού)

FORmula TRANslator (FORTRAN)COmmonBusinessOrientedLanguage (COBOL)Beginner’sAllpurposeSymbolicInstructionCode(BASIC)LISt Processing language (LISP)PROgramming with LOGic (PROLOG)PascalC/C++JavaHyperTextMarkupLanguage (HTML)…

Page 24: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

95

Λίγη ιστορία…

96

D. M. Ritchie και K. Thompson

99

Σταθµοί (1)K. Thompson: Γλώσσα B, για ανάπτυξητου νέου UNIX στα Bell LabsD. M. Ritchie: Γλώσσα C (πρώτηµορφή) ως απόγονος, υψηλότερουεπιπέδου, της BB. W. Kernighan και D. M. Ritchie, The C Programming Language, 1978 (The “white book”, “K&R”)

101

Σταθµοί (2)

Πρότυπο ANSI (American National Standards Institute): Προτυποποίησητης γλώσσας φορητότητα, οµοιογένειαB. W. Kernighan και D. M. Ritchie, The C Programming Language, 2nd ed., 1988 (βασική αναφορά για το πρότυποANSI C)

Page 25: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

102

Το γενεαλογικό δένδρο της C

103

Brian W. Kernighanhttp://www.cs.princeton.edu/~bwk/

104

Dennis M. Ritchiehttp://cm.bell-labs.com/who/dmr/

105

Γιατί C;Σχετικά µικρή κι εύκολη στην εκµάθησηΥψηλού αλλά ταυτόχρονα και «χαµηλού» επιπέδου(επιτρέπει άµεση πρόσβαση στους πόρους του Η/Υ)Υποστηρίζει δοµηµένο και top-down προγραµµατισµόΠαράγει συµπαγή και γρήγορα προγράµµαταΕίναι µεταφέρσιµη (φορητή)Αποτελεί (µαζί µε τη C++) την ευρύτεραχρησιµοποιούµενη γλώσσα ( µεγάλη ποικιλίαµεταγλωττιστών και βοηθηµάτων)Προετοιµασία για τον αντικειµενοστραφή απόγονότης, τη C++ (αλλά και τη Java)

Page 26: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

106

Ανάπτυξη Προγράµµατος

Χρήσησυντάκτη (editor)

Πηγαίοςκώδικας(.c ή .cpp

Μεταγλώττισηπηγαίουκώδικα

(compile)

Κώδικαςαντικει-µένου(.obj)

Σύνδεσηαντικειµενικού

αρχείου(link)

Αρχείαβιβλιοθήκης

ΕκτελέσιµοΠρόγραµµα

(.exe)

107

Κύκλος Ανάπτυξης Προγράµµατος

Αρχή

Σύνταξηπηγαίουκώδικα

Μεταγλώττισηπηγαίουκώδικα

Σύνδεσηπρογράµµατος

ΝΑΙ

ΟΧΙ

Υπάρχουνλάθη;

Εκτέλεσηπρογράµµατος

ΟΧΙΥπάρχουνλάθη;

Τέλος

Υπάρχουνλάθη;

ΝΑΙ ΝΑΙ

ΟΧΙ

108

Ποιόν µεταγλωττιστή θαχρησιµοποιήσουµε εµείς;Dev C++ (Free)http://www.bloodshed.net/devcpp.html

109

Μερικοί free C(++) Compilers

http://www.bloodshed.net/devcpp.htmlhttp://gcc.gnu.org/http://www.mingw.org/download.shtmlhttp://www.microsoft.com/express/vc/#webInstall

Page 27: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

110

Το πρώτο µας πρόγραµµα C/* Αυτό είναι ένα σχόλιο (comment) */#include <stdio.h>

main( )

printf(“Hello, world!\n”);return(0);

κύρια (main) συνάρτηση

συµπερίληψηβιβλιοθήκης I/O

συνάρτηση εκτύπωσης στην οθόνη

αλφαριθµητικό ήσυµβολοσειρά (string)

αρχή

τέλοςεντολήεπιστροφής

111

Συστατικά ενός προγράµµατος C

Συναρτήσεις (functions)Μεταβλητές (variables)

112

Συναρτήσεις (functions):Αυτοτελή τµήµατα κώδικα (υποπρογράµµατα), πουεκτελούν συγκεκριµένες λειτουργίες και µπορούν ναχρησιµοποιηθούν (κληθούν) από άλλες συναρτήσειςΤο σηµείο εκκίνησης και τερµατισµού είναι η κύριασυνάρτηση (main). Κάθε πρόγραµµα C έχει οπωσδήποτε µία συνάρτησηmain.Η main «καλεί» άλλες συναρτήσεις για να τηβοηθήσουν.Κλήση (call) συνάρτησης: όνοµα_συνάρτησης(λίστα παραµέτρων)π.χ. printf(“Hello, world!\n”);

113

Μεταβλητές (variables): Θέσεις στη µνήµη, µε ονόµατα, γιααποθήκευση δεδοµένων ή αποτελεσµάτωνΠαραδείγµατα:Η δήλωση int N; ορίζει τη µεταβλητή µε όνοµα Nκαι τύπο int, δηλαδή θέση στη µνήµη, µε όνοµαN, η οποία πρόκειται να δεχθεί ακέραιο (integer) αριθµό.Με την float x[MAX_N]; ορίζεται η µεταβλητή xπου αποτελεί MAX_N διαδοχικές θέσεις µνήµηςπου αποθηκεύουν ισάριθµο πλήθος πραγµατικώναριθµών (floating point).

Page 28: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

114

Εντολές (Statements):Το σώµα (body) µιας συνάρτησης αποτελείταιαπό µια ακολουθία εντολών (statements) (ήπροτάσεων).Παραδείγµατα:

i=i+1; δηλαδή αύξησε την τιµή του i κατά 1.Η εντολή scanf(“%f”,&temp); καλεί τη συνάρτησηscanf µε ορίσµατα “%f” και &temp, για να διαβάσειαπό το πλήκτρολόγιο τον επόµενο πραγµατικόαριθµό (float) και να τον αποθηκεύσει στη θέσηµνήµης µε όνοµα temp.

115

Semicolon: ;∆ηλώνει το τέλος µιας εντολής.Παράδειγµα:

printf(“Hello, world!\n”); return(0);printf(“Hello, world!\n”) return(0);

Λάθος. Η return δεν αναγνωρίζεται ωςξεχωριστή εντολή.

Χρειάζεται, αν και δενακολουθείάλλη εντολήστο ίδιοµπλοκ.

116

Παραδείγµατα:#include <stdio.h>Λέει στον προεπεξεργαστή ναενσωµατώσει στο πρόγραµµαπληροφορίες για τις συναρτήσεις τηςπρότυπης βιβλιοθήκης εισόδου/εξόδου(I/O), µεταξύ αυτών και την printf.

Οδηγίες προεπεξεργαστή (1):

117

#define MAX_N 100Λέει στον προεπεξεργαστή ν’αντικαταστήσει κάθε εµφάνιση τουstring ΜΑΧ_Ν µε το 100. ∆ηλαδή, ορίζει (define) το MAX_N να σηµαίνει100.

Οδηγίες προεπεξεργαστή (2):

Page 29: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

118

Ο,τιδήποτε βρίσκεται µεταξύ του /* και του */είναι σχόλιο και αγνοείται από τοµεταγλωττιστή.Παραδείγµατα:

/* Αυτό είναι ένα σχόλιο. *//* όπως κι αυτό,επίσης */

/* απαγορεύονται τα/* ένθετα (nested) */ σχόλια */

Σχόλια (Comments):

119

Ένα πιο ενδιαφέρονπαράδειγµα

Πρόβληµα: Μετατροπή θερµοκρασίαςαπό την κλίµακα Φαρενάιτ σ’ αυτή τουΚελσίου (για 0, 20, 40, ..., 300 oF)

oC=(5/9)*(oF – 32)

120

∆ιάγραµµα ΡοήςΑρχή

fahr 0

fahr<=300?

celsius (5/9)*(fahr-32)

Τύπωσεfahr και celsius fahr fahr+20

Τέλος

ΝΑΙ

ΟΧΙ

Βρόχος (loop)

121

#include <stdio.h>

main()

int fahr;float celsius;

fahr = 0;next: /* επόµενη επανάληψη */

if (fahr > 300)goto end;

celsius = (5.0 / 9.0) * (fahr - 32.0);printf("%3d %6.1f\n", fahr, celsius);fahr = fahr + 20;goto next;

end: /* τέλος */return(0);

Εντολέςgoto

Χρήση goto: Μη-∆οµηµένοςΠρογραµµατισµός

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

Page 30: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

122

Αποφύγετε τη χρήση τηςεντολής gotoΑναχρονιστική, δεν είναι στυλδοµηµένου προγραµµατισµού.∆υσχεραίνει την κατανόηση τουπρογράµµατοςάρα και την εκσφαλµάτωση(debugging).

123

/* Τύπωσε πίνακα θερµοκρασιών Φαρενάιτ-Κελσίου* για 0, 20, 40, ..., 300 βαθµούς Φαρενάιτ*/

#include <stdio.h>

main()

int fahr;float celsius;

fahr = 0;while (fahr <= 300)

celsius = (5.0 / 9.0) * (fahr - 32.0);printf("%3d %6.1f\n", fahr, celsius);fahr = fahr + 20;

return(0);

Μεταβλητή τύπου int

Μεταβλητή τύπου float

Βάλε 0 στη fahr (καταχώρηση)

Κι άλλες καταχωρήσεις

Τέλος, επιστροφή µε 0 στο ΛΣ

Σχόλιο

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

126

Χειρισµός σταθερών (1)

Τι γίνεται αν θελήσουµε αργότερα ν’αλλάξουµε κάποιο/α από τα 0, 300, 20;∆εν είναι βολικό, αφού είναι «θαµµένα»µέσα στον κώδικα. Λύση: Τους δίνουµε ονόµατα.

127

#include <stdio.h>

main()

int fahr;float celsius;int lower, upper, step; /* νέες, βοηθητικές µεταβλητές */

lower=0; upper=300; step=20;

fahr = lower;while (fahr <= upper)

celsius = (5.0 / 9.0) * (fahr - 32.0);printf("%3d %6.1f\n", fahr, celsius);fahr = fahr + step;

return(0);

∆εν είναι απαραίτητο οι εντολέςνα είναι η µία κάτω απ’ την άλλη.

Page 31: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

129

Χειρισµός σταθερών (2)

Γιατί όµως να έχουµε µεταβλητές γιαποσότητες που δεν αλλάζουν στηδιάρκεια της εκτέλεσης; (σπατάληµνήµης και χρόνου)Λύση: Συµβολικές σταθερές.

130

/* Τύπωσε πίνακα θερµοκρασιών Φαρενάιτ-Κελσίου* για 0, 20, 40, ..., 300 βαθµούς Φαρενάιτ*/

#include <stdio.h>

#define LOWER 0 /* lower temperature */#define UPPER 300 /* upper temperature */#define STEP 20 /* step size */

main()

int fahr;

for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)printf("%3d %6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32.0));

return(0);

Συµβολικέςσταθερές

∆εν χρειάζεται ηcelsius

Εντολή επανάληψηςfor («για»)

131

#include <stdio.h>

#define LOWER 0 /* lower temperature */#define UPPER 300 /* upper temperature */#define STEP 20 /* step size */

main()

int fahr;

fahr = LOWER;do

printf("%3d %6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32.0));fahr = fahr + STEP;

while (fahr <= UPPER);

return(0);

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

132

Η συνάρτηση printf (1)Εµφανίζει στην οθόνη τα ορίσµατά της.Π.χ. printf(“%3d %6.1f\n”, fahr, celsius);

Προσδιορισµός:Ακέραιος (d) τουλάχιστον 3

θέσεων

Προσδιορισµός:Πραγµατικός (f)

τουλάχιστον 6 θέσεωνµε 1 δεκαδικό ψηφίο

Page 32: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

133

Η συνάρτηση printf (2)Έξοδος του προγράµµατος:

..................

9.841003

7.6-02

8.71-0

3 θέσεις 6 θέσεις

134

Εναλλακτικά:printf(“%3d “, fahr);printf(“%6.1f\n”, celsius);

printf(“%3d”, fahr);printf(“ %6.1f”, celsius);printf(“\n”);κ.λπ.

135

Είσοδος/Έξοδος Χαρακτήρων

Πρόβληµα: Αντιγραφή της εισόδουστην έξοδοΛύση: ∆ιάβασε τον επόµενο χαρακτήρακαι τύπωσέ τον έως ότου φτάσεις στοχαρακτήρα τέλους αρχείου.

136

Ψευδοκώδικας (1)Αλγόριθµος αντιγραφής των χαρακτήρων από την είσοδο στηνέξοδο

Είσοδος: Χαρακτήρες από το πληκτρολόγιοΈξοδος: Οι ίδιοι χαρακτήρες στην οθόνη

Βήµα 1: ∆ιάβασε τον πρώτο χαρακτήρα.Βήµα 2: Αν είναι ο χαρακτήρας τέλους αρχείου, πήγαινε στο Βήµα 6.Βήµα 3: Τύπωσε το χαρακτήρα που µόλις διάβασες.Βήµα 4: ∆ιάβασε τον επόµενο χαρακτήρα.Βήµα 5: Πήγαινε στο Βήµα 2.Βήµα 6: Τέλος.

Page 33: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

137

Ψευδοκώδικας (2)Αλγόριθµος αντιγραφής των χαρακτήρων από την είσοδο στηνέξοδο

Είσοδος: Χαρακτήρες από το πληκτρολόγιοΈξοδος: Οι ίδιοι χαρακτήρες στην οθόνη

Βήµα 1: ∆ιάβασε τον πρώτο χαρακτήρα.Βήµα 2: Όσο δεν είναι ο χαρακτήρας τέλους αρχείου,

Τύπωσε το χαρακτήρα που µόλις διάβασες.∆ιάβασε τον επόµενο χαρακτήρα.

Βήµα 3: Τέλος.

138

Πρόγραµµα C#include <stdio.h>

main()int ch;

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

putchar(ch); ch = getchar();

return(0);

∆ιαβάζειχαρακτήρα.

Γράφειχαρακτήρα.

End Of File(Ctrl+Z)

Ακέραιος (int) για συµπερίληψητου EOF (συνήθως =-1)

139

Συναρτήσεις εν συντοµίαΣυνάρτηση (function): υποπρόγραµµαπου χρησιµοποιείται («καλείται» (call)) από ένα άλλο για να εκτελέσει µιασυγκεκριµένη λειτουργία.Π.χ.: στο παράδειγµα υπολογισµούδιακύµανσης: main, average, squareΚάθε πρόγραµµα έχει µια κύριασυνάρτηση, τη main.

140

Ορισµός συνάρτησηςεπιστρεφόµενος_τύπος όνοµα_συνάρτησης(λίστα παραµέτρων,

αν υπάρχουν)

δηλώσειςεντολές

Π.χ. float square(float a)

return(a * a);

Σώµα (body) της συνάρτησης

Page 34: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

141

∆ήλωση συνάρτησηςεπιστρεφόµενος_τύπος όνοµα_συνάρτησης(λίσταπαραµέτρων, αν υπάρχουν);

Π.χ. float square(float a);

Πρωτότυπο(prototype)

142

Ένα παράδειγµα#include <stdio.h>#define MAX_N 100 /* µέγιστο επιτρεπτό πλήθος */

main()

/* δήλωση υποπρογραµµάτων (συναρτήσεων) */float square(float a), average(float y[ ],int M);

/* δήλωση (και ορισµός) µεταβλητών */int N; /* πλήθος αριθµών */float x[MAX_N], /* οι αριθµοί του δείγµατος */

s[MAX_N]; /* τα τετράγωνα (x-µέσος όρος)^2 */ float temp; /* βοηθητική µεταβλητή */float mu, sigma2; /* µέσος όρος και διακύµανση */register int i; /* µετρητής */

143

/* ∆ιάβασε το N */printf(“Πόσοι είναι οι αριθµοί;”);scanf(“%d”, &N);

/* Έλεγξε αν είναι αποδεκτό */if (N <= 0 || N > MAX_N)

fprintf(stderr, ”Μη αποδεκτός αριθµός!\n”);return(1);

/* ∆ιάβασε τους Ν αριθµούς */printf(“∆ώσε %d αριθµούς: “, Ν);scanf(“%f”, &temp);

144

x[0] = temp;i = 1;while (i < N)

scanf(“%f”, &temp);x[i] = temp;i = i + 1;

/* Υπολόγισε το µέσο όρο τους */mu = average(x, N);

Κλήση της average

Page 35: Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β. Σεφερίδης, c γιαΑρχάριους, Κλειδάριθµος, 1995. 2. Ν. Μ

145

/* Υπολόγισε τα τετράγωνα των διαφορών µε το µέσο όρο */s[0] = square(x[0] - mu);i = 1;while (i < N)

s[i] = square(x[i] - mu);i= i + 1;

/* Υπολόγισε τη διακύµανση ως µέσο όρο των τετραγώνων τωνδιαφορών */sigma2 = average(s, N);/* Τύπωσε αποτέλεσµα */printf(“∆ιακύµανση=%f\n”, sigma2);return(0); /* τέλος */

Κλήση της average

Κλήσεις της square

146

/* Ορισµός των συναρτήσεων */float square(float a) /* υπολογίζει το τετράγωνο ενός αριθµού */

return(a * a);float average(float y[ ], int M) /* υπολογίζει τον αριθµητικό µέσο των Μ αριθµών στον πίνακα y */

float m;register int i;

m = 0;i = 0;while (i < M)

m = m + y[i];i = i + 1;

m = m / M;return(m);

∆ηλώσεις

Εντολές