Περιεχόµ (1) - unipi.gr · 5 ∆ιδακτικάσυγγράµµατα 1. Β....

Post on 29-Aug-2019

7 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

2

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

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

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

3

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

4

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

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*Βαθµός γραπτού)

9

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

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

10

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

11

Εισαγωγή

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

12

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

13

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

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

14

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

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, κ.λπ.

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

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και έλεγχος διακοπών

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

∆ιεύθυνση

∆εδοµένα

Έλεγχος

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

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

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

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)

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

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έλος Εκτέλεσης ΕντολήςΑν υπάρχει ανάγκη στο Σύστηµα ∆ιακοπών:

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

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

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)∆ιαχείριση περιβάλλοντος εργασίας

43

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

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

44

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

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

45

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

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

46

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

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

48

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

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

50

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

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

51

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

52

Παράδειγµα

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

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.Τύπωσε τα δύο γινόµενα.

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 καταχωρήσεις ( )Αυτές συνεπάγονται προσπέλαση τηςµνήµηςΜπορούν να µειωθούν;

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: Τέλος

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;)

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. Τύπωσε το αποτέλεσµα

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; /* µετρητής */

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);

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)

87

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

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

88

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

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

89

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

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

90

Τεκµηρίωση (Documentation)(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)…

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)

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)

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

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).

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):

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

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);

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

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 δεκαδικό ψηφίο

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: Τέλος.

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) της συνάρτησης

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

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);

∆ηλώσεις

Εντολές

top related