• Nenhum resultado encontrado

[PENDING] Εγχειρίδιο για την διδασκαλία της γλώσσας προγραμματισμού C++

N/A
N/A
Protected

Academic year: 2024

Share "Εγχειρίδιο για την διδασκαλία της γλώσσας προγραμματισμού C++"

Copied!
199
0
0

Texto

(1)

Α.Τ.Ε.Ι ΚΑΒΑΛΑΣ

ΤΜΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΠΛΗΡΟΦΟΡΙΩΝ

Εγχειρίδιο για την διδασκαλία της γλώσσας προγραμματισμού

0 ++

Π τυχιακή ερ γα σ ία του Κ ακαρώ νη Ν ικόλα ου Υ πεύ θυ νος Κ αθηγητής: Δρ. Β ασίλειος Χ ατζής

Κ αβάλα 2011

(2)

( 2 )

(3)

Πρόλογος

Η παρούσα πτυχιακή εργασία αποτελεί ένα εγχειρίδιο στο οποίο παρατίθενται και αναλύονται, βασικές έννοιες του προγραμματισμού υπολογιστών, με χρήση της γλώσσας προγραμματισμού C++, καθώς και βασικές αρχές προγραμματισμού, όπως είναι ο δομημένος, ο αντικειμενοστραφής προγραμματισμός και οι δομές δεδομένων.

Στόχος της εργασίας είναι η εμπειρική αυτό-εκμάθηση του χρήστη σε σύντομο διάστημα, μέσω συνοπτικής θεωρίας, αναλυτικών παραδειγμάτων και εικόνων, μέσω των οποίων αρχικά επεξηγούνται οι εκάστοτε εντολές και λογικές προγραμματισμού και στην συνέχεια χρησιμοποιούνται σε παραδείγματα, που συνοδεύονται από εικόνες, στις οποίες εμφανίζονται κάθε φορά τα αποτελέσματα.

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

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

Το Κεφάλαιο 2 επικεντρώνεται στις δομές επιλογής if και switch, παραθέτοντας πληροφορίες σχετικά με την σύνταξη των ελέγχων, τις συνθήκες, τους εμφωλευμένους ελέγχους και τις εντολές που εκτελούνται κατά περίπτωση (case), εναλλακτικά (else if) και σε οποιαδήποτε άλλη περίπτωση (else).

Το Κεφάλαιο 3 σχετίζεται με τις δομές επανάληψης for, while και do while, αναλύοντας την έννοια των επαναλήψεων, τις συνθήκες, τις επαναλήψεις γνωστού και άγνωστου αριθμού, την αποφυγή κλειστού βρόγχου και τις εμφωλευμένες επαναλήψεις.

Στο Κεφάλαιο 4 αναπτύσσεται η έννοια της ανάθεσης μίας εργασίας σε επιμέρους προγράμματα - συναρτήσεις, η μέθοδος ανάπτυξης τέτοιων υποπρογραμμάτων και ειδικότερα οι ερήμην τιμές, η δημιουργία παραμέτρων αναφοράς, η υπερφόρτωση συναρτήσεων και η αναδρομική κλήση συναρτήσεων.

Στο Κεφάλαιο 5 αναλύονται τα ρεύματα εισόδου και εξόδου δεδομένων, από και προς τους δίσκους υπό την μορφή αρχείων, μέσω των τύπων ofstream και ifstream της κλάσης fstream.

( 3 )

(4)

Το Κεφάλαιο 6 επικεντρώνεται στην δυνατότητα που μας παρέχει η C++ να διαχειριζόμαστε την μνήμη του εκάστοτε συστήματος, μέσω δεικτών και ειδικότερα στην έννοια και την μεθοδολογία χρήσης των δεικτών, την συσχέτιση ενός δείκτη με μία μεταβλητή, το μέγεθος σε μνήμη που καταλαμβάνουν οι διάφοροι τύποι δεδομένων, την δυνατότητα δυναμικής δέσμευσης και αποδέσμευσης μνήμης και την καταχώρηση μίας διεύθυνσης μνήμης σαν τιμή ενός δείκτη.

Το Κεφάλαιο 7 εισάγει τον χρήστη στον αντικειμενοστραφή προγραμματισμό και παρέχονται πληροφορίες για την σημαντικότητα και τα οφέλη της αντικειμενοστραφούς προσέγγισης με την υλοποίηση νέων τύπων δεδομένων.

Ειδικότερα αναλύονται εκτενώς: ή υλοποίηση και δήλωση ιδιοτήτων αντικειμένων, οι συναρτήσεις μέλη, ή δήλωση αντικειμένων, η κλήση συναρτήσεων μελών και ο προσδιορισμός ιδιοτήτων, οι φίλιες συναρτήσεις, οι δομητές (Constractors) και οι αποδομητές (Distractors), η υπερφόρτωση τελεστών, οι δείκτες σε αντικείμενα, τα αντικείμενα ως ιδιότητες νέων κλάσεων, η κληρονομικότητα και η πολλαπλή κληρονομικότητα, η κλάση string για την υλοποίηση των συμβολοσειρών και τα

μέλη αυτής.

Το Κεφάλαιο 8 επικεντρώνεται στην ανάπτυξη δομών δεδομένων για την μαζική επεξεργασία δεδομένων και αναλύεται η δομή του πίνακα και η δομή της λίστας.

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

Στο τέλος κάθε κεφαλαίου δίνονται και επεξηγούνται παραδείγματα στα οποία χρησιμοποιούνται όλα όσα αναπτύχθηκαν σε κάθε κεφάλαιο. Στο παράρτημα Ι υπάρχουν συναρτήσεις, που δέχονται μέσω ορίσματος δείκτη πίνακες και υπολογίζουν το άθροισμα κάποιον κελιών κατά περίπτωση, ενώ στο παράρτημα ΙΙ υπάρχουν εικόνες και επεξηγήσεις του περιβάλλοντος εργασίας της Borland C++.

( 4 )

(5)

Περιεχόμενα

Π ρ ό λ ο γ ο ς ... 3

Η Ισ τ ο ρ ία τ η ς C κ α ι τ η ς C++... 8

1 Μ ε τα β λ η τές κ α ι Τ ελ ε σ τέ ς... 10

1.1 Εκτυπώ σεις σε οθόνη & εισαγω γή τιμώ ν α π ό το π λ η κ τρ ο λ ό γ ιο ...13

1.2 Π α ρ α δείγμ α τα π ρ ο γ ρ α μ μ ά τω ν ... 15

1.2.1 Εκτύπωση μηνυμάτω ν & εισαγω γή τιμώ ν α πό τον χρ ή σ τη ...15

1.2.2 Μ αθηματικές π ρ ά ξ ε ις ... 17

2 Δ ομ ές Ε π ιλ ο γ ή ς ... 21

2.1 Η δομή επ ιλο γή ς i f ... 21

2.2 Η δομή επ ιλο γή ς sw itch ... 21

2.3 Π α ρ α δείγμ α τα π ρ ο γρ α μ μ ά τω ν ... 22

3 Δ ομ ές Ε π α ν ά λ η ψ η ς ... 30

3.1 Η δομή επα νά λη ψ η ς F o r... 30

3.2 Η δομή επα νά λη ψ η ς W h ile ... 30

3.3 Η δομή επα νά λη ψ η ς Do - W h ile ... 30

3.4 Π α ρ α δείγμ α τα π ρ ο γ ρ α μ μ ά τω ν ... 31

4 Υ π ο π ρ ο γ ρ ά μ μ α τ α - Σ υ ν α ρ τ ή σ ε ις ... 42

4.1 Κλήση συναρτήσεω ν και μεταβίβαση τ ιμ ώ ν ... 42

4.2 Ερήμην τιμ έ ς ... 44

4.3 Δημιουργία πα ραμ έτρω ν α ν α φ ο ρ ά ς... 45

4.4 Υ περφόρτωση σ υ ν α ρ τή σ εω ν ... 46

4.5 Αναδρομική κλήση σ υ ν α ρ τή σ εω ν ... 47

4.6 Π α ρ α δείγμ α τα π ρ ο γ ρ α μ μ ά τω ν ... 49

5 Α ρ χ εία δ ε δ ο μ έ ν ω ν ... 59

5.1 Ο τύπος ofstream γ ια εξα γω γή δεδομένω ν στον δίσκο... 59

5.2 Ο τύπος ifstream γ ια εισαγω γή δεδομένω ν α π ό α ρχεία δίσκου...60

5.3 Π α ρ α δείγμ α τα π ρ ο γρ α μ μ ά τω ν ... 62

6 Δ ε ίκ τ ε ς ... 75

6.1 Δήλωση και χρήση δ εικ τώ ν ... 75

6.2 Δυναμική δέσμευση και αποδέσμευση μ νή μ η ς... 75

6.3 Π α ρ α δείγμ α τα π ρ ο γρ α μ μ ά τω ν ... 77

( 5 )

(6)

7 Κ λ ά σ εις -Α ν τικ ε ιμ ε ν ο σ τ ρ έ φ ια ... 83

7.1 Υλοποίηση και δήλωση ιδιοτήτων α ντικ ειμ έν ω ν ... 83

7.2 Συναρτήσεις μέλη α ν τικ ε ιμ έ ν ω ν ... 84

7.3 Δήλωση α ντικ ειμ έν ω ν ... 85

7.4 Κλήση συναρτήσεω ν μέλη και προσδιορισμός ιδιοτήτω ν... 87

7.5 Φίλιες συναρτήσεις... 89

7.6 Δομητές (Constractors) αποδομητές (Distractors)... 91

7.7 Υ περφόρτωση τε λ εσ τώ ν ... 94

7.7.1 Το αντικείμενο *this... 95

7.7.2 Υ περφόρτωση τελεστώ ν με φ ίλιες σ υναρτήσ εις... 96

7.8 Δείκτες σε α ντικ είμ ενα ... 98

7.9 Α ντικείμενα ως ιδιότητες νέω ν κ λά σ εω ν... 99

7.10 Κ ληρονομικότητα... 103

7.10.1 Π ολλα πλή κ λ η ρ ο νο μ ικ ό τη τα ... 107

7.11 Η κλάση String... 111

7.11.1 Τα μέλοι της κλάσης S trin g ... 112

7.12 Π α ρα δείγμ ατα Π ρ ο γ ρ α μ μ α τω ν ... 115

8 Δ ομ ές δ ε δ ο μ έ ν ω ν ... 135

8.1 Π ίν α κ ε ς ... 136

8.1.1 Μ ονοδιάστατοι π ίν α κ ε ς ... 136

8.1.2 Π ολυδιάστατοι π ίνα κ ες... 138

8.1.3 Π ροσπέλαση π ιν ά κ ω ν ... 140

8.1.4 Δέσμευση μνήμης γ ια π ίν α κ ε ς ... 140

8.1.5 Καταχώρηση διευθύνσεω ν μνήμης π ίνα κ α σε δ ε ίκ τη ... 141

8.1.6 Π ίνακες ως ορίσματα σ υνα ρ τή σ εω ν ... 143

8.1.6.1 Μ ονοδιάστατοι π ίν α κ ε ς ... 143

8.1.6.2 Π ολυδιάστατοι π ίν α κ ες... 144

8.1.6.2 Π ίνακες σε ορίσματα δεικτώ ν... 145

8.1.7 Π ίνακες και κ λ ά σ ε ις ... 147

8.1.7.1 Π ίνακες ως ιδιότητες κ λ ά σ εω ν ... 147

8.1.7.2 Π ίνακες με π ερ ιεχό μ ενα α ντικείμ ενα κ λ ά σ ε ω ν ... 149

8.1.8 Π α ρ α δείγμ α τα π ρ ο γ ρ α μ μ ά τω ν ... 151

8.2 Λ ίσ τες... 164

8.2.1 Οι κλάσεις Node κ α ι L inkedL ist... 164

8.2.2 Ε μπλουτισμός της τά ξη ς L inkedL ist... 169

8.2.3 Δήλωση κ α ι χρήση μονοδιάστατω ν λ ισ τ ώ ν ... 173

8.2.3.1 Ε πεξεργασία μονοδιάστατω ν λιστώ ν μέσω καθολικώ ν σ υ να ρ τή σ εω ν... 174

8.2.4 Δήλωση κ α ι χρήση πολυδιάστατω ν λ ισ τ ώ ν ... 175

8.2.4.1 Ε πεξεργασία πολυδιάστατω ν λιστώ ν μέσω καθολικώ ν σ υ να ρ τή σ εω ν... 176

8.2.5 Λίστες και κ λ ά σ ε ις ... 177

( 6 ) ---

(7)

8.2.5.1 Λίστες ως ιδιότητες κ λ ά σ εω ν... 177

8.2.5.2 Λίστες με π εριεχόμ ενα α ντικείμ ενα κ λ ά σ ε ω ν ...179

8.2.6 Π α ρ α δείγμ α τα π ρ ο γ ρ α μ μ ά τω ν ... 182

Σ υ μ π ε ρ ά σ μ α τ α ... 193

Π α ρ ά ρ τ η μ α 1... 194

Π α ρ ά ρ τ η μ α ΙΙ... 197

Β ιβ λ ιο γ ρ α φ ία ... 199

( 7 )

(8)

Η Ισ το ρ ία τη ς C κ α ί τ η ς C++

Η γλώσσα προγραμματισμού C++ αποτελεί εξέλιξη της γλώσσας C, η οποία με την σειρά της αποτελεί εξέλιξη δύο προηγούμενων γλωσσών, της BCPL και της B.

Η BCPL δημιουργήθηκε το 1967 από τον Martin Richards, ως μία γλώσσα προγραμματισμού για την ανάπτυξη λειτουργικών συστημάτων, λογισμικού και μεταγλωττιστών. Ο Ken Thompson μοντελοποίησε πολλά χαρακτηριστικά κατά την ανάπτυξη της δικής του γλώσσας B, μετά την BCPL και το 1970 χρησιμοποίησε την B για να δημιουργήσει τις αρχικές εκδόσεις του λειτουργικού συστήματος UNIX, στα εργαστηρια Bell Laboratories.

Η γλώσσα προγραμματισμού C δημιουργήθηκε από τον Dennis Ritchie, χρησιμοποιώντας την B στα Bell Laboratories και υλοποιήθηκε το 1972. Η C αρχικά χρησιμοποιούνταν ευρέως ως μία γλώσσα ανάπτυξης του λειτουργικού συστήματος UNIX. Σήμερα, σχεδόν όλα τα βασικά λειτουργικά συστήματα όπως εκείνα που συναντιόνται σε laptops, επιτραπέζιους υπολογιστές, σταθμούς εργασίας και μικρούς servers έχουν γραφτεί σε C ή C++.

Η γλώσσα C++ αποτελεί στην ουσία μία επέκταση της C και αναπτύχθηκε από τον Bjarne Stroustrup στα Bell Laboratories στις αρχές του 1980. Η C++ διαθέτει ένα πλήθος χαρακτηριστικών που εμπλουτίζουν την γλώσσα C, με σημαντικότερο την αντικειμενοστρέφια. Η C++ είναι μία υβριδική γλώσσα που επιτρέπει στον προγραμματιστή να προγραμματίσει σε στυλ C, σε αντικειμενοστραφές στυλ ή και τα δύο.

( 8 )

(9)

( 9 )

(10)

Κεφάλαιο 1

Μ ε τ α β λ η τ έ ς κ α ί Τ ελ ε σ τέ ς

Η μνήμη ενός υπολογιστή είναι ένα μέσο αποθήκευσης πληροφορίας και χωρίζεται σε τμήματα του 1 byte. Η αποθήκευση στη μνήμη γίνεται με σειριακό τρόπο, σε αντίθεση με την αποθήκευση σε άλλα μαγνητικά μέσα, όπως σκληροί δίσκοι, CD, DVD κ.τ.λ η οποία γίνεται σε τυχαία τμήματα του δίσκου.

Η δήλωση μίας μεταβλητής σε ένα πρόγραμμα οδηγεί στην δέσμευση ενός αριθμού θέσεων μνήμης κατά τον χρόνο εκτέλεσης ενός προγράμματος. Ο αριθμός των θέσεων που δεσμεύεται εξαρτάται από τον τύπο της μεταβλητής. Η περιοχή η οποία δεσμεύεται για την μεταβλητή καθορίζεται από το λειτουργικό σύστημα (δεν μπορεί να επιλέξει ο προγραμματιστής).

Η τιμή μίας μεταβλητής αποθηκεύεται στο δεσμευμένο για την μεταβλητή χώρο μνήμης, με την εκτέλεση μίας εντολής εκχώρησης τιμής (πχ a=3;).

Η ονομασία μιας μεταβλητής είναι ένας συνδυασμός από λατινικούς χαρακτήρες, ο οποίος μπορεί να περιέχει και αριθμούς αρκεί να μην ξεκινάει η ονομασία της μεταβλητής με κάποιο αριθμό.

Π χ.

i n t a ; IIΣωστή Δήλωση μίας μεταβλητής με όνομα a τύπου int (Ακέραιος) i n t 1b; //Λάθος Δήλωση γιατί η ονομασία της μεταβλητής ξεκινάει με αριθμό

Όλες οι γλώσσες προγραμματισμού δίνουν την δυνατότητα δήλωσης μεταβλητών και εκχώρησης τιμών σε αυτές. Η C++ μας δίνει επιπλέον τη δυνατότητα να βλέπουμε και να χρησιμοποιούμε την διεύθυνση μνήμης των μεταβλητών. Σε μία μεταβλητή λοιπόν διακρίνουμε τα εξής χαρακτηριστικά:

V Τον τύπο V Το όνομα

V Την περιεχόμενη τιμή V Τη διεύθυνση μνήμης

( 10 )

(11)

Τύποι. Μ ε τ α β λ η τ ώ ν

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

Πίνακας 1.1. Βασικοί τύποι μεταβλητών.

Τ ύ π ο ς Μ ν ή μ η σε

b y tes Ε ύρος τ ιμ ώ ν

b o o l

1 byte 0 (ψευδής)

1 (Αληθής)

c h a r

1 byte -127 έως 127

s i g n e d c h a r

1 byte

-127 έως 127

u n s i g n e d c h a r

1 byte 0 έως 255

in t

2 ή 4 byte -32.767 έως 32.767 (για μνήμη 16 bits)

s i g n e d in t

2 ή 4 byte 0 έως 65.535

u n s i g n e d in t

2 ή 4 byte -32.767 έως 32.767

l o n g in t

(4 ή 8 byte) -2Ε(32-1) έως 2Ε(32-1) (για μνήμη 32 bits)

f l o a t

(4 byte) 3.4Ε-38 έως 3.4Ε+38

d o u b l e

(8 byte) -1.7Ε-308 έως 1.7Ε+308

l o n g d o u b l e

(10 byte) -1.1Ε-4932 έως 1.1Ε+4932

Σημείωση:

- Για τις δεκαδικές τιμές όπως Π.χ 5.3 χρησιμοποιούμε την τελεία και όχι το κόμμα.

- Όταν θέλουμε σε ένα πρόγραμμα να ορίσουμε σταθερές τιμές, τις δηλώνουμε είτε γράφοντας const μπροστά από τον τύπο και το όνομα της μεταβλητής ( Π.χ const int T=5 δηλώνουμε μία σταθερά Τ με τιμή το 5), είτε γράφουμε # d e f i n e το όνομα της μεταβλητής και την τιμή ( Π.χ # d e f i n e T 5).

( 11 )

(12)

Τ ελ ε σ τέ ς

Στην Έ++ όπως και σε όλες τις γλώσσες προγραμματισμού, υπάρχει ένα σύνολο από σύμβολα τα οποία είναι δεσμευμένα και μας παρέχουν συγκεκριμένες λειτουργίες. Αυτά τα σύμβολα είναι τα ακόλουθα.

Πίνακας 1.2. Οι τελεστές και οι λειτουργίες τους.

Τ ύ π ο ς Ε ρ μ η ν ε ία Π α ρ ά δ ε ιγ μ α

Κ α τ α χ ώ ρ η σ η ς

=

Καταχώρηση μιας τιμής σε μια μεταβλητή ή της τιμής που περιέχει μια μεταβλητή σε μία άλλη.

Με την καταχώρηση όλα τα προηγούμενα περιεχόμενα της μεταβλητής

αντικαθιστούνται από τα καινούρια.

Α = 3 2 ; Απλή καταχώρηση

Α = Β = 0 = 1 7 ; Πολλαπλή καταχώρηση τιμής σε μεταβλητές.

Γ ι α π ρ ά ξ ε ι ς

+ Πρόσθεση τιμών

(Α + Β ) Θα προστεθούν τα

περιεχόμενα των μεταβλητών Α και Β.

- Αφαίρεση τιμών

(Α - Β ) Θα αφαιρεθεί από το περιεχόμενο της μεταβλητής Α το

περιεχόμενο της μεταβλητής Β.

/ Διαίρεση τιμών

(Α / Β ) Θα διαιρεθεί το

εμπεριεχόμενο της μεταβλητής Α με το περιεχόμενο της μεταβλητής Β.

* Πολλαπλασιασμός τιμών

( Α* Β) Θα πολλαπλασιαστούν τα

περιεχόμενα των μεταβλητών Α και Β.

++ Αύξηση κατά 1 (Α++) Το περιεχόμενο της

μεταβλητής Α θα αυξηθεί κατά 1.

— Μείωση κατά 1 ) Το περιεχόμενο της

μεταβλητής Α θα μειωθεί κατά 1.

Οο Υπόλοιπο διαίρεσης με

κάποιο αριθμό

(Α%2) Το υπόλοιπο της του

περιεχόμενου της μεταβλητής Α με το 2

+= Αύξηση κατά μία ποσότητα (Α + = 5 ) Το περιεχόμενο της

μεταβλητής Α θα αυξηθεί κατά 5.

- = Μείωση κατά μία ποσότητα (Α - = 5 ) Το περιεχόμενο της

μεταβλητής Α θα μειωθεί κατά 5.

* — Αύξηση πολλαπλασιάζοντας

με μία ποσότητα

(Α * = 5 ) Το περιεχόμενο της μεταβλητής Α=Α*5.

/ = Καταχώρηση διαιρώντας με

μία ποσότητα.

(Α / = 2 ) Έστω ότι το Α=6 θα γίνει διαίρεση μεταξύ του 6 και του 2 και το αποτέλεσμα θα καταχωρηθεί σαν νέα τιμή για το Α (Α=3).

Σ ύ γ κ ρ ι σ η ς

< Μικρότερο Α<Β

> Μεγαλύτερο Α>Β

( 12 )

(13)

Τ ύ π ο ς Ε ρ μ η ν ε ία Π α ρ ά δ ε ιγ μ α

< = ή =< Μικρότερο ή ίσο Α<=Β ή A=<B

>= ή => Μεγαλύτερο ή ίσο Α>=Β ή A=>B

! = Διάφορο A ! = B

== Ίσο A==B

Λ ο γ ι κ ο ί

&& AND (Και) (Α=Β && B<C)

| | OR ( ή ) (A=C | | B=C)

! ΝΟΤ ! Α

1.1 Ε κ τ υ π ώ σ ε ις σε ο θ ό ν η & ε ισ α γ ω γ ή τ ιμ ώ ν α π ό το π λ η κ τ ρ ο λ ό γ ιο

Η εντολή που χρησιμοποιούμε για να εκτυπώσουμε μηνύματα καθώς και τα περιεχόμενα των μεταβλητών στην οθόνη, είναι η

cout .

Τα μηνύματα και οι μεταβλητές διαχωρίζονται μεταξύ τους με τον τελεστή <<, Ενώ τα μηνύματα μπαίνουν μέσα σε

Σημείωση:

Όλες οι εντολές στην C++ τελειώνουν και χωρίζονται μεταξύ τους με ερωτηματικό (

;

).

Π·χ

i n t A = 2 3 ;

c o u t < < "H i l i k i a s o u e i n a i : " <<A;

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

Η εντολή που χρησιμοποιούμε για να εισάγουμε τιμές από το πληκτρολόγιο, είναι η

cin.

π .χ i n t A;

c o u t < < " D o s e t i n i l i k i a s o u " ; c i n > > A ;

Θα εμφανιστεί στην οθόνη το μήνυμα που ζητάει την ηλικία και ο κέρσορας θα αναβοσβήνει, περιμένοντας ο χρήστης να εισάγει μια τιμή, η τιμή που θα δοθεί θα καταχωρηθεί στην μεταβλητή Α.

Οι τελεστές < < και > > δείχνουν το προς τα πού κατευθύνονται τα δεδομένα, εισόδου και εξόδου ενός προγράμματος. Έτσι η εντολή cout<<”kalimera”<<endl; ορίζει, ότι κατευθύνουμε (<<) προς την οθόνη (cout) το κείμενο “καλημέρα”, ομοίως η εντολή cin>>A ορίζει, ότι κατευθύνουμε την τιμή που έδωσε ο χρήστης από το πληκτρολόγιο (cin) προς καταχώρηση στην μεταβλητή Α.

( 13 )

(14)

Π ε ρ ιο χ έ ς σ χ ο λ ίω ν

Για να εισάγουμε στο πρόγραμμα μας σχόλια μίας γραμμής χρησιμοποιούμε το σύμβολο / / , ότι βρίσκεται μετά από τις διπλές πλαγιές καθέτους αποτελεί σχόλιο.

Για να γράψουμε σχόλια σε παραπάνω από μια γραμμές, μπορούμε να δημιουργήσουμε μία περιοχή σχολίων χρησιμοποιώντας τα σύμβολα / * και * / . Το / * δείχνει το από πού ξεκινάει η περιοχή των σχολίων και το * / το που τελειώνει.

Τ α σ ύ μ β ο λ α εη ά ΐ , \ ί , \ η

Το σύμβολο

βπάΐ

και το \

η

το χρησιμοποιούμε για να αλλάξουμε γραμμή, ενώ το σύμβολο

\

1

για να αλλάξουμε παράγραφο.

Π χ

ο ο υ ύ < < " Κ Η ΐ ί κ ΐθ Γ Η " < < θ η ά 1 ; //θα εκτυπώσει στη οθόνη το μήνυμα και θα αλλάξει γραμμή.

ο ο υ ι ύ < < " \ η Κ β Ι ί ΐ Ώ θ Γ Η " ; //θα αλλάξει γραμμή και στην συνέχεια θα εκτυπώσει το μήνυμα.

ο ο υ ι ύ < < " \ ύ 1<η1^ θ γ η" ; // θα ξεκινήσει νέα παράγραφο και μετά θα εκτυπώσει το μήνυμα.

Υ π ό δ ε ιγ μ α δ ο μ ή ς ε ν ό ς π ρ ο γ ρ ά μ μ α τ ο ς

# ί η ο 1 υ ι ά θ < ί θ 5 ύ Γ θ Η κ ι . ύ ι > //Κλάση για εκτύπωση στην οθόνη.

# ί η ο 1 υ ι ά θ < 5 ύ ά 1 ί^ ύι> //Κλάση για να παγώνει την οθόνη έτσι ώστε να βλέπουμε τα αποτελέσματα.

//Σε αυτό το κομμάτι του προγράμματος εισάγονται οι συναρτήσεις, οι κλάσεις και οι μεταβλητές, στις οποίες μπορούν να έχουν πρόσβαση όλα τα μέρη του προγράμματος (καθολικές)

v o i d m a i n ( v o i d) {//Άνοιγμα της συνάρτησης main( ).

//Σώμα του προγράμματος, εδώ γράφουμε το σύνολο των προς εκτέλεση εντολών.

s y s t e m ( " p a u s e " ) ; //Εντολή για πάγωμα της οθόνης }//κλείσιμο της συνάρτησης main( ).

( 14 )

(15)

1.2 Παραδείγματα προγραμμάτων

1.2.1 Εκτύπωση μηνυμάτω ν & εισαγω γή τιμώ ν α π ό τον χρήστη

Π α ρ άδ ειγμ α 1:

Ο κώδικας 1.1 τυπώνει στην οθόνη το μήνυμα "Hello World". Για να τυπώσουμε μηνύματα στην οθόνη χρησιμοποιούμε την εντολή cout, ενώ πρέπει να κάνουμε #include και την κλάση iostream (Τις κλάσεις θα της αναπτύξουμε λεπτομερώς στο κεφάλαιο 7). Επίσης για να φριζάρουμε την γραμμή εντολών MS-DOS έτσι ώστε να δούμε τα αποτελέσματα, πρέπει να γράψουμε την εντολή system ("pause"); ενώ πρέπει να κάνουμε #include και την κλάση stdlib.

Αποτέλεσμα:

Σημείωση:

- Όλα τα προγράμματα έχουν γραφτεί, μεταγλωττιστεί και εκτελεστεί στην BORLAND C++.

- Σε αντίθεση με την VISUAL C++ ή BORLAND δεν υποστηρίζει τους ελληνικούς χαρακτήρες, γι’ αυτό και όλα τα μηνύματα γράφονται με λατινικούς.

- Μπορείτε να τρέξετε τα προγράμματα των παραδειγμάτων αντιγράφοντας, μεταγλωττίζοντας και εκτελώντας τα στην BORLAND C++.

- Πριν μεταγλωτήσετε και τρέξετε κάθε πρόγραμμα πρέπει να το υποθηκεύσετε με την κατάληξη cpp.

( 15 )

(16)

Στον κώδικα 1.2 θέλουμε να προτρέψουμε τον χρήστη να εισάγει το όνομα του από το πληκτρολόγιο (αυτό το πετυχαίνουμε απλά τυπώνοντας ένα μήνυμα στην οθόνη) και στην συνέχεια με την εντολή cin και τον τελεστή >>, παίρνουμε την τιμή που θα δώσει ο χρήστης, δηλαδή το όνομα του και το καταχωρούμε στην μεταβλητή name. Επειδή η τιμή που θα δέχεται η μεταβλητή name θα είναι μία συμβολοσειρά, την δηλώνουμε σαν string και όταν δηλώνουμε συμβολοσειρές κάνουμε #include την κλάση string.

Τέλος θέλουμε να τυπώσουμε στην οθόνη το όνομα που μας έδωσε ο χρήστης, γι’αυτό τυπώνουμε ένα μήνυμα καθώς και τα περιεχόμενα της μεταβλητής name, στην οποία προηγουμένως είχαμε καταχωρήσει την τιμή που έδωσε ο χρήστης. Τα περιεχόμενα μίας μεταβλητής εμφανίζονται στην οθόνη γράφοντας την εντολή cout και μετά τον τελεστή <<

γράφουμε το όνομα της μεταβλητής.

Παράδειγμα 2:

#include <iostream.h>

#include <stdlib.h>

#include <string> //Κλάση για συμβολοσειρές v o id main(void) {

string name; //Δήλωση μεταβλητής τύπου string με όνομα name cout<<"Dose To Onoma Sou: ";

cin>>name; //Καταχώρηση τιμής του χρήστη στην μεταβλητή name

cout<<"To Onoma Sou Einai "<<name<<endl; //Εκτύπωση τιμής της

//μεταβλητής name system("pause");

}

Κώδικας 1.2 Αποτέλεσμα:

Αρχικά ζητάμε από τον χρήστη να πληκτρολογήσει το όνομα του, στην συνέχεια έστω ότι δίνουμε το όνομα “Nikos”, αυτό αποθηκεύεται σαν τιμή στην μεταβλητή name και εκτυπώνεται στην οθόνη μαζί με το μήνυμα “To Onoma Sou Einai”.

( 16 )

(17)

1.2.2 Μαθηματικές πράξεις

Στον κώδικα 1.3 θέλουμε να τυπώσουμε στην οθόνη το αποτέλεσμα στης πράξης 5+3. Για να μπορέσει ο υπολογιστής να κάνει αυτόν το υπολογισμό θα πρέπει να χρησιμοποιήσουμε μία μεταβλητή στην οποία θα αποθηκευτεί το αποτέλεσμα, την μεταβλητή αυτή θα την ονομάσουμε sum.

Επειδή γίνεται πρόσθεση μεταξύ δυο ακεραίων αριθμών το αποτέλεσμα που θα προκύψει είναι ένας νέος ακέραιος αριθμός, ως εκ τούτου ο τύπος της μεταβλητής θα είναι int. Στη συνέχεια αρχικοποιούμε την sum με την πράξη 5+3 και τυπώνουμε στην οθόνη το αποτέλεσμα.

Παράδειγμα 1:

( 17 )

(18)

Στον κώδικα 1.4 προτρέπουμε τον χρήστη να εισάγει 2 ακέραιες τιμές , οι τιμές που θα δώσει ο χρήστης θα αποθηκευτούν στις μεταβλητές num1 και num2 αντίστοιχα. Στη συνέχεια τυπώνουμε στην οθόνη το αποτέλεσμα της αφαίρεσης μεταξύ των δύο αριθμών που έδωσε ο χρήστης.

Μπορούμε είτε να τυπώσουμε απευθείας στην οθόνη το αποτέλεσμα της αφαίρεσης μεταξύ num1 και num2, για να γλιτώσουμε περιττό κώδικα και μνήμη, είτε να χρησιμοποιήσουμε μια βοηθητική μεταβλητή, στην οποία θα αποθηκεύουμε το αποτέλεσμα της πράξης και στην συνέχεια να τυπώνουμε το περιεχόμενο αυτής της μεταβλητής.

Παράδειγμα 2:

ο·ν C:\Documents <ιπ(1 5βί1ΐη§ί\Ηϊ^_ΚΑΜΕϋΐφάν£ΐα εργ(ΐσία)ς\ΝΟΝΑΜΕ01 .βχβ - 1ε * ϋοϋϋ 2 (ύ ίβ Γ ίϊο ϋ δ Α ιΊ τ ΐιικ ο ^ :

2 ?18

Ιο ήροΐε1ε3ΠΒ·. Ε ϊ ι ^ ί : 1 7

Π ιέσ τε έσσ πλήκτρο γ ια σ υ ν έ χ ε ια . . . _

Ζ2

( 18 )

(19)

Ο τύπος που μετατρέπει τους βαθμούς Fahrenheit (F) σε κελσίου (C) είναι : Παράδειγμα 3:

C = 5 ( F - 32).

9

Στον κώδικα 1.5 αρχικά προτρέπουμε τον χρήστη να δώσει μία τιμή που αντιστοιχεί στους βαθμούς Fahrenheit, η τιμή που θα δώσει ο χρήστης αποθηκεύεται στην μεταβλητή F.

Στη συνέχεια χρησιμοποιούμε μια βοηθητική μεταβλητή την C, στην οποία αποθηκεύεται το αποτέλεσμα του τύπου που μετατρέπει τους βαθμούς Fahrenheit σε κελσίου και τυπώνουμε περιεχόμενα της στην οθόνη.

Τις μεταβλητές F,C τις δηλώνουμε τύπου float, αφενός γιατί οι βαθμοί Fahrenheit μπορεί να είναι κάποιος δεκαδικός και αφετέρου γιατί από την στιγμή που έχουμε διαίρεση ανάμεσα στις πράξεις κατά μεγαλύτερη πιθανότητα το αποτέλεσμα θα είναι κάποιος δεκαδικός. Η δήλωση float όπως και η double μας εξασφαλίζουν ότι το πρόγραμμα μας θα δουλεύει για όλες τις τιμές είτε δεκαδικές είτε ακέραιες. Πρέπει όμως να χρησιμοποιούνται συνετά γιατί είναι λάθος εάν χρειάζομαστε ένα ακέραιο να τον δηλώσουμε τύπου float αφού θα δεσμεύσουμε περιτή μνήμη.

( 19 )

(20)

3 ΉΓΟ

Ένας εργαζόμενος αμείβεται εκτός από το βασικό μισθό (700 ευρώ) και με 2 επιδόματα, το οικογενειακό και το επίδομα προϋπηρεσίας. Το οικογενειακό είναι 50 ευρώ για κάθε παιδί και το επίδομα προϋπηρεσίας είναι 60 ευρώ για κάθε διετία .

Στον κώδικα 1.6 αρχικά παίρνουμε τον αριθμό των παιδιών και τα χρόνια προϋπηρεσίας από τον χρήστη και στην συνέχεια υπολογίζουμε και τυπώνουμε στην οθόνη το τελικό ποσό.

Για να βρούμε το τελικό ποσό του εργαζομένου θα πρέπει να προσθέσουμε στα 700€, το ποσό που δικαιούται από το οικογενειακό επίδομα (το οποίο προκύπτει πολλαπλασιάζοντας τον αριθμό των παιδιών που έχει με το ποσό των 50€) και το ποσό που δικαιούται από το επίδομα προϋπηρεσίας (το οποίο προκύπτει πολλαπλασιάζοντας τον αριθμό των ετών προϋπηρεσίας με το ποσό των 60€), επομένως θα πρέπει πρώτα να δώσουμε προτεραιότητα στις πράξεις για τους υπολογισμούς των επιδομάτων, γι’αυτό και έχουμε τοποθετήσει αυτές τις πράξεις σε παρενθέσεις.

Παράδειγμα 4:

Αποτέλεσμα:

C:\BC5\BIN\NONAMEOO.exH

[ϋ θ 5 β Τοη ΑγΓΕΪΪγιο Τοπ Ρ β ϊ Λ ϊ ο η Κ β ί Ι β Κ ΐ ' ο η ϊ β Ρ Γ ο ί ρ Ϊ Γ β ϊ ϊ β δ β ΐ ϊ ΐ ί ο Ρο ξ ο:92Θ

ιέ σ χ ε ένα π λ ή κ τ ρ ο γ ι α σ υ ν ε χ ε ί α . . . _

( 20 )

(21)

Κεφάλαιο 2

Δ ο μ έ ς ε π ιλ ο γ ή ς

Οι δομές επιλογής if και switch χρησιμοποιούνται σε ένα πρόγραμμα για τον έλεγχο των δεδομένων και εκτελούν ανάλογες εντολές σε κάθε αποτέλεσμα αυτού του ελέγχου.

2.1 Η δο μ ή ε π ιλ ο γ ή ς if

ί ί ( σ υ ν θ ή κ η χ ) { //Εφόσον η συνθήκη χ είναι αληθείς τότε εκτελούνται οι εντολές χ χωρίς να ελεγχθούν οι

ε ν τ ο λ έ ς χ ; } συνθήκες γ και w.

e l s e i f ( σ υ ν θ ή κ η y ) { //Αλλιώς εάν η συνθήκη x είναι ψευδής και η συνθήκη y είναι αληθής εκτελούνται οι εντολές

ε ν τ ο λ έ ς y ;} y, χωρίς να ελεγχθεί η περίπτωση else .

e l s e {

ε ν τ ο λ έ ς w ;}

//Αλλιώς εάν όλες οι προηγούμενες συνθήκες είναι ψευδείς, τότε εκτελούνται οι εντολές w.

2.2 Η δο μ ή ε π ιλ ο γ ή ς sw itc h

s w i t c h (Π λ η ρ ο φ ο ρ ί α) { //Πληροφορία μελέτης.

c a s e τ ι μ ή x: ε ν τ ο λ έ ς x ; b r e a k ; c a s e τ ι μ ή y :

ε ν τ ο λ έ ς y ; b r e a k ; d e f a u l t:

ε ν τ ο λ έ ς w;

}

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

//Στην περίπτωση που η πληροφορία ισούται με την τιμή γ εκτελούνται οι εντολές γ.

//Στην περίπτωση που η πληροφορία δεν ισούται με καμία από τις παραπάνω τιμές , τότε

εκτελούνταιοι εντολές w.

Σημείωση:

Εάν δεν θέλουμε να πραγματοποιηθούν οι επόμενοι έλεγχοι, τότε μετά τις εντολές γραφούμε την εντολή break ;

( 21 )

(22)

2.3 Π α ρ α δ ε ίγ μ α τ α π ρ ο γ ρ α μ μ ά τ ω ν

Στον κώδικα 2.1 ελέγχουμε εάν ο ακέραιος αριθμός που δόθηκε από τον χρήστη είναι άρτιος ή περιττός. Για να το πετύχουμε αυτό πρέπει να μελετήσουμε το υπόλοιπο της διαίρεσης αυτού του αριθμού με το 2, γιατί οι άρτιοι αριθμοί δίνουν υπόλοιπο 0 και οι περιττοί 1.

Στην περίπτωση που το υπόλοιπο της διαίρεσης είναι 0, τότε η συνθήκη της ίί (num%2 ==0) είναι αληθείς και εκτελείται η εντολή οοηΐ<<”Ατΐ\θ5”<<βηάΙ;, διαφορετικά στην περίπτωση που η συνθήκη ίί είναι ψευδής, δηλαδή το υπόλοιπο της διαίρεσης δεν είναι 0, εκτελείται η εντολή cout<<”Peritos”<<enάl;.

Με τα { } ορίζουμε περιοχές κώδικα, παραδείγματος χάρη ο παρακάτω κώδικας ανήκει στην Μαίη( ), όπου η συνάρτηση (Τις συναρτήσεις θα της αναπτύξουμε λεπτομερώς στο κεφάλαιο 4) ξεκινάει από εκεί που ανοίγουμε άγκιστρο { μέχρι εκεί που το κλίνουμε }. Στην ίί δεν είναι απαραίτητο το άνοιγμα και το κλείσιμο αυτών των άγκιστρων, όμως ιδίως σε μεγάλα προγράμματα όπου θα έχουμε πολλούς και πιθανόν εμφωλευμένους ελέγχους, μας βοηθάνε να αντιλαμβανόμαστε το που ξεκινάει και που τελειώνει ο κάθε έλεγχος.

Παράδειγμα 1:

Αποτέλεσμα:

Άρτιος

( 22 )

(23)

Περιττός

( 23 )

(24)

Οι πωλητές σε ένα κατάστημα ετοίμων ενδυμάτων κάθε μήνα εκτός από τον βασικό μισθό τους παίρνουν σαν bonus ένα ποσοστό προμήθειας, ανάλογα με τις πωλήσεις που έκαναν.

Το ποσοστό επί των πωλήσεων υπολογίζεται ως εξής:

Ανάλογα με το ύψος των πωλήσεων που πραγματοποίησε ο πωλητής, παίρνει 150€ για ποσό έως 15000€. Για ποσό από 15000€ έως 30000€, παίρνει 150€ για τα πρώτα 15000€ και ποσοστό 2% για το υπόλοιπο ποσό. Για ποσό από 30000€ έως 60000€, παίρνει 150€ για τα πρώτα 15000€, ποσοστό 2% για το υπόλοιπο μέχρι τα 30000€ και ποσοστό 3% για το υπόλοιπο ποσό. Τέλος για ποσό πάνω από 60000€ παίρνει όλα τα προηγούμενα σταδιακά έως τις 60000€

και για το υπόλοιπο, δηλ. πάνω από 60000€, ποσοστό 4%.

Στον κώδικα 2.2 αρχικά ο χρήστης εισάγει το ποσό των πωλήσεων που έκανε ο πωλητής, στην συνέχεια ελέγχουμε το ποσό αυτό και αν είναι <= των 1500€, τότε το bonus είναι 150€. Εάν ο πρώτος έλεγχος είναι ψευδείς, τότε αυτό σημαίνει ότι το ποσό ξεπερνάει τα 1500€, οπότε οδηγούμαστε στον δεύτερο έλεγχο στον οποίο εξετάζουμε εάν οι πωλήσεις είναι μεταξύ 1500€

και 3000€, οπότε και υπολογίζουμε και τυπώνουμε την αντίστοιχη προμήθεια.

Με τον ίδιο τρόπο γίνονται και οι υπόλοιποι έλεγχοι (else if), μέχρι να βρούμε την κατηγορία που ανήκει το ποσό και έτσι να έχουμε την αντίστοιχη προμήθεια. Στην περίπτωση που το ποσό δεν ανήκει σε καμία από τις κατηγορίες, τότε αυτό σημαίνει ότι ξεπερνάει τις 6000€

οπότε και οδηγούμαστε στην else.

Παράδειγμα 2:

(25)

Στον κώδικα 2.3 παίρνουμε τρεις αριθμούς από τον χρήστη και ψάχνουμε να βρούμε ποιος από αυτούς είναι ο μεγαλύτερος.

Αρχικά παίρνουμε τον πρώτο αριθμό (num l) και ελέγχουμε αν είναι μεγαλύτερος από τον δεύτερο (num2), αν συμβαίνει αυτό τότε με μια εμφωλευμένη if ελέγχουμε αν είναι μεγαλύτερος και από τον τρίτο (num3), στην περίπτωση αυτή τυπώνουμε στην οθόνη τον πρώτο αριθμό σαν μεγαλύτερο.

Εάν στον πρώτο έλεγχο βρούμε ότι ο πρώτος αριθμός δεν είναι μεγαλύτερος από τον δεύτερο, τότε μεταβαίνουμε στην else και με μία εμφωλευμένη if ελέγχουμε αν ο δεύτερος αριθμός είναι μεγαλύτερος από τον τρίτο. Αν συμβαίνει αυτό τυπώνουμε στην οθόνη τον δεύτερο αριθμό σαν μεγαλύτερο, διαφορετικά τυπώνουμε τον τρίτο.

Ποτέ δεν θα μπούμε και στους δύο εμφωλευμένους ελέγχους, κάθε φορά θα μπαίνουμε σε έναν από τους δύο ανάλογα με το αν είναι αληθείς η ψευδείς ο πρωταρχικός έλεγχος.

Παράδειγμα 3:

( 25 )

(26)

Στον κώδικα 2.4 αρχικά ζητάμε από τον χρήστη να εισάγει έναν αριθμό, στην συνέχεια τυπώνουμε στην οθόνη ένα μενού επιλογών και περιμένουμε από τον χρήστη να κάνει μία επιλογή, αυτή η επιλογή αντιστοιχεί σε έναν ακέραιο αριθμό, άρα περιμένουμε από τον χρήστη να εισάγει τον αριθμό 1 εάν θέλει να υπολογιστεί η ρίζα (-J n u m i) και τομ αριθμό 2 εάν θέλει να υπολογιστεί το τετράγωνο ( (num l)2 ).

Την επιλογή του χρήστη την καταχωρούμε στην μεταβλητή με όνομα epilogi, όπου αυτήν την μεταβλητή την δηλώσαμε int γιατί θα πάρει την τιμή 1 ή 2. Στην συνέχεια μελετάμε την τιμή που έδωσε ο χρήστης με μία switch.

Στην περίπτωση (case) που δόθηκε η τιμή 1 τότε υπολογίζουμε και τυπώνουμε την ρίζα του numl, μέσω χρήσης της συνάρτησης sqrt(Τιμή) της κλάσης math, ενώ στην περίπτωση (case) που δόθηκε ο αριθμός 2, τότε υπολογίζουμε και τυπώνουμε το τετράγωνο του numl, μέσω χρήσης της συνάρτησης ροΜ>(Τιμή , Εκθέτης) της κλάσης math.

Σε οποιαδήποτε άλλη περίπτωση (default), δηλαδή αν ο χρήστης έδωσε κάποιον αριθμό διάφορο του 1 ή του 2 τότε τυπώνουμε στην οθόνη το μήνυμα "\tLathos Epilogi".

Σημείωση:

Η κλάση math περιέχει ένα σύνολο μαθηματικών συναρτήσεων τις οποίες μπορούμε να χρησιμοποιήσουμε για δικούς μας υπολογισμούς.

Πίνακας 2.1. Οι συναρτήσεις της βιβλιοθήκης math.h.

Παράδειγμα 4:

Μαθηματική συνάρτηση Όνομα στην C++

Τετραγωνική ρίζα sqrt

Ύψωση ενός αριθμού σε δύναμη pow

Φυσικός λογάριθμος log__________________

Απόλυτη τιμή fabs

Ημίτονο (γωνία σε ακτίνια) sin

Συνημίτονο (γωνία σε ακτίνια) cos

Εφαπτομένη tan

Τόξο ημιτόνου asin

Τόξο συνημίτονου acos

Τόξο εφαπτομένης atan

Υπερβολικό ημίτονο sinh

Υπερβολικό συνημίτονο cosh

Υπερβολική εφαπτομένη tanh

( 26 )

(27)

Αποτέλεσμα:

( 27 )

(28)

Στον κώδικα 2.5 αρχικά προτρέπουμε τον χρήστη να εισάγει 2 τιμές, που αντιστοιχούν στις μεταβλητές numl και num2, όπου τις δηλώσαμε σαν double γιατί ο χρήστης μπορεί να δώσει και δεκαδικές τιμές (μεγάλου ή μικρού μήκους) και ακέραιες τιμές.

Στην συνέχεια ζητάμε από τον χρήστη να εισάγει έναν χαρακτήρα (εξού και η μεταβλητή τύπου char), ο οποίος αντιστοιχεί στο είδος της πράξης που θέλουμε να πραγματοποιηθεί μεταξύ των 2 αριθμών.

Χρησιμοποιώντας λοιπόν την switch, θέλουμε να μελετήσουμε το είδος του χαρακτήρα που έδωσε ο χρήστης, ο οποίος είναι αποθηκεμένος μέσα στην μεταβλητή praksi. Έτσι λοιπόν ορίζουμε στην κάθε περίπτωση (case) το τι θα συμβεί με τους 2 αριθμούς, ανάλογα με το είδος της πράξης και αποθηκεύουμε το αποτέλεσμα της εκάστοτε πράξης σε μία μεταβλητή με όνομα tmp.

Η μεταβλητή tmp θα αποκτά κάθε φορά μία μόνο τιμή από μία συγκεκριμένη περίπτωση (case), στην συνέχεια βγαίνουμε από την switch με την χρήση της εντολής break;.

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

Στην περίπτωση της διαίρεσης έχουμε τοποθετήσει μια if, η οποία ελέγχει εάν ο δεύτερος αριθμός είναι διάφορος (!=) από το 0 και αυτό γιατί δεν μπορεί να γίνει διαίρεση με το 0. Έτσι λοιπόν, στην περίπτωση που η συνθήκη της if είναι αληθής (δηλαδή ο δεύτερος αριθμός δεν είναι το 0), τότε πραγματοποιείται η πράξη της διαίρεσης και το αποτέλεσμα αποθηκεύεται στην μεταβλητή tmp.

Τέλος αφού βγούμε έξω από την switch ελέγχουμε (if) εάν ο δεύτερος αριθμός που δόθηκε είναι το 0 και ταυτόχρονα (&&) εάν η πράξη που επιλέχτηκε είναι η διαίρεση, γιατί εάν ισχύει αυτό τότε δεν μπορεί να έχει γίνει κάποιος υπολογισμός, και τυπώνουμε στην οθόνη ένα μήνυμα λάθους. Στην περίπτωση που η συνθήκη της if είναι ψευδής αυτό σημαίνει ότι έχει γίνει κάποιος υπολογισμός και το αποτέλεσμα έχει αποθηκευτεί στην μεταβλητή tmp, άρα τυπώνουμε το περιεχόμενο της tmp δηλαδή το αποτέλεσμα.

Παράδειγμα 5:

(29)

break;

c a s e

i f (num2!=0 ){

tmp=num1/num2;

b r e a k ; }

}

i f (num2==0 && praksi=='/'){

cout<<"Adinati I Dieresi Me To 0"<<endl;

} e l s e {

cout<<"To Apotelesma Einai:"<<tmp<<endl;

}

system("pause");

}

Κώδικας 2.5 Αποτέλεσμα:

1η Οθόνη

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

2η Οθόνη

Σημείωση:

- Η δομή ελέγχου if είναι κατάλληλη για όλες τις περιπτώσεις ελέγχου και μπορεί σε κάθε περίπτωση να αντικαταστήσει την switch, η οποία μπορεί να χρησιμοποιηθεί μόνο σε περιπτώσεις ισότητας με μία τιμή.

- Τους μονούς χαρακτήρες τους περικλείουμε μέσα σε μονά εισαγωγικά ‘ ‘.

( 29 )

(30)

Κεφάλαιο 3

Δ ο μ έ ς ε π α ν ά λ η ψ η ς

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

3.1 Η δο μ ή ε π α ν ά λ η ψ η ς For

f o r ( τ ι μ ή ε κ κ ί ν η σ η ς μ ε τ α β λ η τ ή ς ; σ υ ν θ ή κ η x ; β ή μ α ) { ε ν τ ο λ έ ς ;

}

Παράδειγμα:

Αν γράψουμε for(i=0;i<10;i++) τότε θα πραγματοποιηθούν 10 επαναλήψεις, με τιμή εκκίνησης της μεταβλητής i το 0, συνθήκη όσο το i είναι μικρότερο του 10 και αυξανόμενο βήμα 1.

3.2 Η δο μ ή ε π α ν ά λ η ψ η ς W h ile

w h i l e ( σ υ ν θ ή κ η x ) { // Καθορισμός των επαναλήψεων, οι επαναλήψεις θα

γίνονται όσο η συνθήκη

ε ν τ ο λ έ ς ; είναι αληθής.

}

d o {

ε ν τ ο λ έ ς ;

} w h i l e ( σ υ ν θ ή κ η

3.3 Η δο μ ή ε π α ν ά λ η ψ η ς D o - W h ile

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

x ) ; Σημείωση:

- Εάν θέλουμε βγούμε εκτός επανάληψης πριν το πέρας της συνθήκης, τότε γράφουμε την εντολή break ;

- Η επανάληψη for χρησιμοποιείται μόνο για γνωστό αριθμό επαναλήψεων, σε αντίθεση με τις while και do while, οι οποίες μπορούν να χρησιμοποιηθούν και για άγνωστο αριθμό επαναλήψεων.

( 30 )

(31)

3.4 Π α ρ α δ ε ίγ μ α τ α π ρ ο γ ρ α μ μ ά τ ω ν

Στον κώδικα 3.1 θέλουμε να βρούμε τον μέσο όρο 10 τιμών που θα εισάγει ο χρήστης από το πληκτρολόγιο, έτσι αντί να γραφούμε 10 φορές «cout<<"Dose Arithmo:"» και αντίστοιχα 10

«cin>>tmp» μπορούμε απλά να χρησιμοποιήσουμε μία επανάληψη.

Κάθε φορά που θα εκτελείται η επανάληψη, θα παίρνουμε έναν αριθμό και θα προσαυξάνουμε την μεταβλητή sum με αυτόν τον αριθμό, επίσης η μεταβλητή plithos θα αυξάνεται κατά 1. Στο τέλος της επανάληψης (δηλαδή αφού η for εκτελεστεί 10 φορές) τυπώνουμε στην οθόνη το αποτέλεσμα (ο μέσος όρος των τιμών είναι το άθροισμα τους προς το πλίθος τους).

Στον παρακάτω πίνακα βλέπουμε τις τιμές που παίρνουν οι μεταβλητές σε κάθε επανάληψη. Οι τιμές των μεταβλητών tmp και sum είναι σχετικές μιας και κάθε φορά θα διαφέρουν, ανάλογα με τις τιμές που δίνει ο χρήστης..

Παράδειγμα 1:

Πίνακας 3.1. Οι τιμές που δέχονται οι μεταβλητές i, tmp, sum και plithos σε κάθε επανάληψη.

ί tmp sum plithos

1 12 12 1

2 17 29 2

3 2 31 3

4 8 39 4

5 2 41 5

6 13 54 6

7 12 66 7

8 15 81 8

9 10 91 9

10 20 111 10

11 (όπου 11>10 άρα οδηγούμαστε εκτός επανάληψης χωρίς να προχωρήσουμε σε υπολογισμούς και να μεταβληθούν τα περιεχόμενα των υπολοίπων μεταβλητών)

20 111 10

Στην 1η επανάληψη το i έχει την τιμή 1, θα γίνει ο έλεγχος για το αν το 1 είναι<=10 και εφόσον είναι, το i θα αυξηθεί κατά 1, θα γίνει 2 ( i++) και θα εκτελεστούν οι εντολές στην επανάληψη για πρώτη φορά.

Στην 2η επανάληψη το i έχει την τιμή 2, θα γίνει ο έλεγχος για το αν το 2 είναι<=10, εφόσον είναι το i θα αυξηθεί κατά 1, θα γίνει 3 ( i++) και θα εκτελεστούν ξανά οι εντολές στην επανάληψη.

Η διαδικασία αυτή θα επαναλαμβάνεται με το i να αυξάνεται και να γίνεται ο έλεγχος για το αν είναι <=10, με τις εντολές να εκτελούνται μέχρι to τέλος της 10ης επανάληψης, στην οποία το i θα πάρει την τιμή 11, θα γίνει ο έλεγχος για το αν το 11 είναι <=10 και εφόσον αυτό δεν ισχύει θα οδηγηθούμε εκτός επανάληψης.

Σημαντικό είναι να αρχικοποιήσουμε τις μεταβλητές sum και plithos με την τιμή 0, γιατί κατά την δήλωση τους αυτές οι μεταβλητές παίρνουν σαν περιεχόμενο τους “σκουπίδια” που υπάρχουν στην μνήμη του υπολογιστή και επειδή κάθε φορά προσαυξάνουμε το περιεχόμενο αυτών των μεταβλητών, αν δεν τις μηδενίσουμε διατηρούμε και αυτά τα “σκουπίδια”, παράγοντας έτσι λανθασμένα αποτελέσματα.

( 31 )

(32)

Αποτέλεσμα:

( 32 )

(33)

Στον κώδικα 3.2 θέλουμε να δούμε πόσοι αριθμοί από το 1 μέχρι το 100 είναι άρτιοι και πόσοι περιτοί. Έτσι λοιπόν χρησιμοποιούμε μία επανάληψη (for) η οποία μετράει από το 1 μέχρι το

1 0 0, δηλαδή το i θα παίρνει τις τιμές 1 ως 1 0 0.

Στην συνέχεια ελέγχουμε κάθε φορά το i και ανάλογα με το υπόλοιπο της διαίρεσης προσαυξάνουμε και τον αντίστοιχο μετρητή (artioi ή peritoi) κατά 1 (υπενθυμίζουμε ότι οι άρτιοι αριθμοί διαιρούμενοι με το 2 δίνουν υπόλοιπο 0 και οι περιττοί 1). Παρατηρήστε ότι σε αυτό το παράδειγμα δηλώνουμε το i μέσα στην for , κατά αυτόν τον τρόπο το i θα είναι ορατό για το πρόγραμμα μας μόνο μέσα στην περιοχή της for.

Παράδειγμα 2:

Αποτέλεσμα:

( 33 )

(34)

Στον κώδικα 3.3 υπολογίζουμε το αποτέλεσμα της παράστασης 11 + 22 + 33. Για τον υπολογισμό αυτό χρησιμοποιούμε 2 μεταβλητές την tmp και την sum. Κάθε φορά που το i θα αυξάνεται κατά 1 (Δηλαδή θα ξεκινάει μία επανάληψη), η μεταβλητή tmp θα χάνει την όποια προηγούμενη τιμή της και θα αποθηκεύεται σε αυτήν η τρέχουσα τιμή του i.

Στην συνέχεια κάθε φορά που θα αυξάνεται το i θα ξεκινάει μία δεύτερη for η οποία θα εκτελείτε i φορές. Σε αυτήν την for η μεταβλητή tmp θα προσαυξάνεται με το αποτέλεσμα του πολλαπλασιασμού μεταξύ της τρέχουσας τιμής της tmp και της τρέχουσας τιμής του i ( για να δείτε τις τιμές των μεταβλητών κοιτάτε τον πίνακα που ακολουθεί).

Κάθε φορά που θα ολοκληρώνεται η δεύτερη for, η μεταβλητή sum θα προσαυξάνεται με την τιμή της μεταβλητής tmp.

Παράδειγμα 3:

Πίνακας 3.2. Οι τιμές που δέχονται οι μεταβλητές i, j, tmp και sum σε κάθε επανάληψη.

i 1 tmp sum

1 1 1 1

2 1 4 1

2 4 5

3

1 9 5

2 27 5

3 27 32

4 (όπου 4>3 άρα οδηγούμαστε εκτός επανάληψης χωρίς να προχωρήσουμε σε

υπολογισμούς)

27 32

Την πρώτη φορά το i θα πάρει την τιμή 1, στη μεταβλητή tmp θα αποθηκευτεί η τιμή 1 και η δεύτερη for δεν θα εκτελεστεί στην ουσία καμία φορά γιατί το j= 1 και δεν είναι < του i=1. Εφόσον δεν θα εκτελεστεί η δεύτερη επανάληψη το sum προσαυξάνεται με την τιμή του tmp και γίνεται 1.

Την δεύτερη φορά το i γίνεται 2, η μεταβλητή tmp χάνει την τιμή 1 και την θέση της παίρνει η τιμή 2. Η δεύτερη for εκτελείται μία φορά με το j =1. Το tmp=tmp*i (δηλαδή tmp=2*2) και το sum=sum+tmp (δηλαδή s

Referências

Documentos relacionados