"ΕΞΟΡΥΞΗ ΓΝΩΣΗΣ ΜΕ ΤΗ ΧΡΗΣΗ ΓΕΩΓΡΑΦΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Email: [email protected]
1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++
Τα προγράµµατα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό
επεξεργαστή που προσφέρει και το Περιβάλλον της Visual C++. Οι εντολές µοιάζουν
συνήθως στην Αγγλική γλώσσα και γι αυτό η C++ λέµε ότι είναι γλώσσα υψηλού
επιπέδου.
Ο υπολογιστής καταλαβαίνει µόνο τη γλώσσα µηχανής (σειρές από 0 και 1). Για να
δηµιουργηθεί γλώσσα µηχανής από τις εντολές της γλώσσας πρέπει το πρόγραµµα να
µεταφραστεί σε γλώσσα µηχανής. Το σύνολο των εντολών της γλώσσας προγραµµατισµού,
που αποκωδικοποιεί τις εντολές του επεξεργαστή κειµένου και τις µετατρέπει σε γλώσσα
µηχανής λέγεται µεταφραστής (compiler). Ο Compiler εντοπίζει και τα συντακτικά λάθη
τα οποία πρέπει να διορθωθούν πριν την εκτέλεση του προγράµµατος.
Αφού το πρόγραµµα µεταφραστεί από τον compiler δηµιουργείται ένα αρχείο το οποίο το
αποκαλούµε "αντικείµενο πρόγραµµα" και έχει κατάληξη .OBJ (object σηµαίνει
αντικείµενο). Αυτό το αρχείο εισάγεται σε έναν µηχανισµό που ονοµάζεται συνδέτης
(linker) ο οποίος το συνδέει µε αρχεία τα οποία τα οποία βοηθούν στο να δηµιουργηθούν
τα εκτελέσιµα αρχεία. Έτσι δηµιουργείται το εκτελέσιµο αρχείο το οποίο έχει πάντοτε
κατάληξη .EXE (executable σηµαίνει εκτελέσιµο) το οποίο µπορεί να εκτελεστεί και σε
υπολογιστές όπου δεν υπάρχει η γλώσσα προγραµµατισµού, απλά είναι εκτελέσιµο.
1.1. Μεταβλητές
Μία µεταβλητή είναι ένα συµβολικό όνοµα το οποίο όµως αντιπροσωπεύει ένα κελί της
µνήµης RAM και φυσικά µπορεί να δεχτεί µόνο µια τιµή κάθε φορά η οποία όµως µπορεί
να µεταβληθεί στη διάρκεια εκτέλεσης του προγράµµατος. Γι αυτό λέγεται και µεταβλητή.
Με τη βοήθεια των µεταβλητών αποθηκεύονται τα δεδοµένα που εισάγονται στο
πρόγραµµα και τα αποτελέσµατα των υπολογισµών για να εµφανιστούν στην οθόνη ή να
χρησιµοποιηθούν στη συνέχεια του προγράµµατος.
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Κάθε µεταβλητή χαρακτηρίζεται από τον τύπο των δεδοµένων που καταχωρεί. Υπάρχουν
διάφοροι τύποι δεδοµένων όπως ακέραιοι , αριθµοί κινητής υποδιαστολής, χαρακτήρες
κ.λ.π και φυσικά υπάρχουν και οι αντίστοιχες µεταβλητές.
Για όνοµα µεταβλητής επιτρέπεται να δώσετε όποιο όνοµα επιθυµείτε αλλά όχι κάποια
δεσµευµένη λέξη από τη C++. Πρέπει να σηµειωθεί ότι η C++ είναι ευαίσθητη στη χρήση
µικρών ή κεφαλαίων χαρακτήρων. Αυτό σηµαίνει ότι εάν δηλώσουµε µία µεταβλητή µε
µικρούς χαρακτήρες δεν µπορούµε να την χρησιµοποιήσουµε στη συνέχεια µε κεφαλαία.
1.2. Ακέραιες µεταβλητές
Οι ακέραιες µεταβλητές αποθηκεύουν ακέραιους αριθµούς. Όταν ορίζετε µία ακέραια
µεταβλητή θα πρέπει πριν από το όνοµά της να γράψετε τη δεσµευµένη λέξη int.
Πχ int aktina;
cout << "H aktina einai "<< aktina ;
Κρίνεται σκόπιµο τα ονόµατα των µεταβλητών να περιγράφουν τα δεδοµένα που είναι
αποθηκευµένα σε αυτές.
1.3. Απόδοση τιµής
Οι προτάσεις: aktina = 8;
aktina = aktina+1;
αποδίδουν ή αλλιώς εκχωρούν τιµές στην µεταβλητή aktina. Τo ίσον (=) είναι µία εντολή
που αποδίδει τιµή.
H εντολή
aktina = aktina+1; Είναι ισοδύναµη της aktina++;
1.4. Μεταβλητές χαρακτήρων
Ένας άλλος τύπος µεταβλητής είναι ο char. Οι µεταβλητές τύπου char χρησιµοποιούνται
για να αποθηκεύουν χαρακτήρες ASCII όπως οι a, b, +, = κλπ
2
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
3
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Τα αλφαριθµητικά που αποτελούνται από περισσότερους από έναν χαρακτήρες
περικλείονται σε διπλά εισαγωγικά. Προσοχή!!!! Στην περίπτωση που ξεχάσουµε να
βάλουµε τα εισαγωγικά η γλώσσα υποθέτει ότι χρησιµοποιήσαµε το όνοµα µιας
µεταβλητής.
1.5. Μεταβλητές κινητής υποδιαστολής
Οι µεταβλητές κινητής υποδιαστολής αποθηκεύουν αριθµούς µε υποδιαστολή. Οι αριθµοί
αυτοί έχουν ένα ακέραιο µέρος στα αριστερά της υποδιαστολής και ένα κλασµατικό µέρος
στα δεξιά της. Πχ 3.1415927 -5.3
Πρέπει να τονίσουµε ότι στη γλώσσα C++ υπάρχουν τρία είδη µεταβλητών κινητής
υποδιαστολής δηλαδή: ο τύπος µεταβλητής float,ο τύπος µεταβλητής double και ο τύπος
µεταβλητής long double.
Πίνακας 1: Τύποι µεταβλητών της γλώσσας C++
Τύπος µεταβλητής
Bytes µνήµης
Περιεχόµενο
Εύρος τιµών που
λαµβάνει
char
1
Χαρακτήρες ή
ακέραιοι 8 bits
signed: -128 έως127
unsigned: 0 έως 255
2
Ακέραιοι 16 bits
µήκους.
signed: -32768 έως
32767
unsigned: 0 έως
65535
4
Ακέραιοι 32 bits
µήκους.
signed:-2147483648
έως 2147483647
unsigned: 0 έως
4294967295
short
long
int
-
Ακέραιοι. Το µήκος
τους εξαρτάται από
το µέγεθος της λέξης
(Word) του
συστήµατος.
Σε συστήµατα 32
bits (όπως είναι τα
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
4
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Windows
9x/2000/NT) έχουν
µήκος 32 bits (4
bytes).
float
4
Αριθµοί κινητής
υποδιαστολής.
3.4e + / - 38 (7
digits)
double
8
∆ιπλής ακριβείας
αριθµοί κινητής
υποδιαστολής.
1.7e + / - 308 (15
digits)
10
Μεγάλοι διπλής
ακριβείας αριθµοί
κινητής
υποδιαστολής.
1.2e + / - 4932 (19
digits)
long double
Κάθε πρόγραµµα C++ περιέχει πρώτα από όλα τη δήλωση #include <iostream.h> που
καλεί τη βιβλιοθήκη εισόδου εξόδου της C++.
2. ΒΑΣΙΚΕΣ ΑΛΓΟΡΙΘΜΙΚΕΣ ∆ΟΜΕΣ – ΣΧΕ∆ΙΑΣΗ
ΠΡΟΓΡΑΜΜΑΤΟΣ
2.1. Η εντολή If …. ή
ΕΑN……..
Η εντολή If …. χρησιµοποιείται όταν θέλουµε να ελέγξουµε την ισχύ µιας συνθήκης
(Αληθής ή Ψευδής) και ανάλογα να πράξουµε. Για παράδειγµα, εάν ισχύει η συνθήκη τότε
εκτελείται η οµάδα εντολών Α αλλιώς η ροή των εντολών συνεχίζεται χωρίς την εκτέλεση
των εντολών της οµάδας Α. Η if ονοµάζεται εντολή ελέγχου ροής του προγράµµατος,
επειδή κατά τη διάρκεια της εκτέλεσης του προγράµµατος η ακολουθία των εντολών που
θα εκτελεστούν δεν είναι προκαθορισµένη αλλά µεταβάλλεται ανάλογα µε την ισχύ ή µη
της συνθήκης (στο παράδειγµα εάν µια µεταβλητή Ι ισούται µε την µεταβλητή Χ).
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Λογικό ∆ιάγραµµα Ροής της if
ΝΑΙ
I=Υ
ΟΧΙ
Οµάδα εντολών -Α
Ψευδοκώδικας
ΕΑΝ (Ι = Υ)
Εκτέλεσε την Οµάδα εντλών -Α;
ΕΑΝ-ΤΕΛΟΣ;
Πρόγραµµα C++
if ( i= = y )
{
Οµάδα – Α {
Εντολή …. 1
Εντολή …. 2
Εντολή …. 3
………………..
}
}
5
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
6
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
2.2. ∆ΟΜΗ ΕΛΕΓΧΟΥ ΡΟΗΣ (if - else)
Η εντολή if ….. else χρησιµοποιείται µε παρόµοιο τρόπο µε την εντολή IF. Έτσι,
για παράδειγµα εάν ισχύει η συνθήκη τότε εκτελείται η Οµάδα Εντολών Α ενώ αν δεν
ισχύει εκτελείται µια άλλη Οµάδα εντολών Β και στη συνέχεια εκτελείται η υπόλοιπη
ακολουθία εντολών του προγράµµατος.
∆ιάγραµµα Ροής
ΝΑΙ
ΟΧΙ
I=Υ
Οµάδα-Α
Οµάδα-Β
Ψευδοκώδικας
ΕΑΝ (Ι = Υ) ΤΟΤΕ
Εκτέλεσε Οµάδα Εντολών -Α;
ΑΛΛΙΩΣ
Εκτέλεσε Οµάδα εντολών -Β;
ΕΑΝ-ΤΕΛΟΣ;
Πρόγραµµα C++
if ( i= = y )
{
Οµάδα-Α{
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
7
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Εντολή …. 1
Εντολή …. 2
Εντολή …. 3
…………
}
}
else
{
Οµάδα-Β
{
Εντολή …. 1
Εντολή …. 2
Εντολή …. 3
…………
}
}
2.3. ∆ΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
Τις χρησιµοποιούµε όταν θέλουµε να επαναλάβουµε µια εργασία (δηλαδή την εκτέλεση
µιας οµάδας εντολών) περισσότερες από µια φορές. Υπάρχουν δύο βασικές κατηγορίες:
αυτή στην οποία ο αριθµός των επαναλήψεων (Μ) είναι σταθερός και προκαθορισµένος
και αυτή στην οποία ο αριθµός των επαναλήψεων εξαρτάται από κάποια συνθήκη και δεν
είναι προκαθορισµένος. Στην πρώτη κατηγορία (σταθερός αριθµός επαναλήψεων) ανήκει η
εντολή FOR και στη δεύτερη οι εντολές WHILE και DO - WHILE
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
8
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
2.3.1. Η ΕΠΑΝΑΛΗΠΤΙΚΗ ∆ΟΜΗ for
∆ιάγραµµα Ροής
IÅ1
IÅI+1
Οµάδα Εντολών
I <=Μ
NAI
OXI
Στα παρακάτω ας υποθέσουµε ότι Οµάδα Εντολών αφορά την εµφάνιση (εκτύπωση) Ν
αριθµών από 1 έως Ν.
Ψευδοκώδικας
ΓΙΑ Ι:= 1 ΕΩΣ Μ ΕΠΑΝΑΛΑΒΕ
ΤΥΠΩΣΕ(Ι);
ΓΙΑ-ΤΕΛΟΣ;
Πρόγραµµα C++
Μ=5;
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
for ( i=1; i<=Μ; i++ )
cout<< “H timh tou arithmou einai”<< i;
2.3.2. Η ΕΠΑΝΑΛΗΠΤΙΚΗ ∆ΟΜΗ while
A. Η εντολή while
∆ιάγραµµα Ροής
IÅ1
OXI
I <=M
IÅI+1
NAI
Oµάδα Eντολών
Ψευδοκώδικας
I:=1;
ΕΝΟΣΩ ( Ι <= Ν ) ΕΠΑΝΕΛΑΒΕ
Εκτέλεσε την Οµάδα Εντολών;
Ι := Ι + 1;
ΕΝΟΣΩ-ΤΕΛΟΣ;
Πρόγραµµα C++
Μ=5
9
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
10
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
i=1;
while ( i <= Μ )
{
Οµάδα Εντολών
i++;
}
2.3.3. Η επαναληπτική δοµή do-while
Όταν έχω do-while η εκτέλεση των εντολών επαναλαµβάνεται όσο ισχύει η συνθήκη (άρα
έχουµε επανάληψη όσο η συνθήκη είναι αληθής). Στα παραδείγµατα που ακολουθούν η
επανάληψη γίνεται όσο Ι < Μ.
∆ιάγραµµα Ροής
IÅ0
IÅI+1
Οµάδα Eντολών
NAI
I<Μ
OXI
Ψευδοκώδικας
I:=0;
ΕΠΑΝΕΛΑΒΕ
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
11
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Ι:= Ι + 1;
Οµάδα Εντολών;
ΜΕΧΡΙ ( Ι >= Μ );
Πρόγραµµα C++
i=0;
do
{
i++;
Οµάδα Εντολών
}
while ( i < Μ );
2.3.4. Σύγκριση της for και της while
H εντολή for χρησιµοποιείται µόνον όταν ο αριθµός των επαναλήψεων είναι εκ των
προτέρων γνωστός. Αν δεν είναι, τότε χρησιµοποιούνται οι while ή do-while.
Στην do-while εκτελούνται οι εντολές και µετά γίνεται ο έλεγχος, ενώ στην WHILE
αντίστροφα.
Έτσι στη do-while οι εντολές θα εκτελεστούν οπωσδήποτε µια φορά, ενώ στη WHILE
µπορεί και να µην εκτελεστούν καθόλου.
Άσκηση 2.3.4.1
Κάντε ∆Ρ και ψευδοκώδικα και πρόγραµµα C++ που υλοποιούν τη while
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
12
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
3. ΕΦΑΡΜΟΓΕΣ
3.1. ΧΡΗΣΗ ΤΟΥ ΜΕΤΡΗΤΗ
Χρησιµοποιείται όταν θέλουµε να µετρήσουµε (για παράδειγµα να βρούµε το πλήθος
δεδοµένων που ικανοποιούν µια συνθήκη). Παράδειγµα: Σε µια οµάδα Ν αριθµών θέλω να
µετρήσω πόσοι είναι άρτιοι
∆ιάγραµµα Ροής
ΑΡΧΗ
COUNT Å 0
IÅ1
X
ΣΥΝ
ΘΗΚΗ
NAI
COUNT Å COUNT + 1
OXI
I <N
IÅI+1
NAI
OXI
ΤΕΛΟΣ
Άσκηση 3.1.1
Γράψτε το πρόγραµµα C++ που αντιστοιχεί στο πιο πάνω ∆Ρ.
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
13
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
4. ΧΡΗΣΗ ΑΘΡΟΙΣΤΗ/ ΠΡΟΣΘΕΣΗ ΜΕ ΣΥΝΘΗΚΗ
Μια βασική εφαρµογή των επαναληπτικών δοµών είναι η άθροιση αριθµών που
ικανοποιούν κάποια συνθήκη από µια οµάδα Ν αριθµών. Στην περίπτωση αυτή το
αποτέλεσµα αποθηκεύεται στην µεταβλητή που συνήθως την αποκαλούµε SUM. Επίσης,
µπορούµε να χρησιµοποιήσουµε την ίδια δοµή για να αθροίσουµε όλους τους Ν αριθµούς
µιας οµάδας, εάν παραλείψουµε τη συνθήκη.
∆ιάγραµµα Ροής
ΑΡΧΗ
SUM=0
IÅ1
Α
ΣΥΝ
ΘΗΚΗ
NAI
SUM Å SUM + A
IÅI+1
OXI
NAI
I <N
OXI
ΤΕΛΟΣ
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
14
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Ψευδοκώδικας
SUM:=0;
I:=1;
ΕΝΟΣΩ ( Ι <= Ν ) ΕΠΑΝΕΛΑΒΕ
∆ΙΑΒΑΣΕ (Α)
ΕΑΝ ( ΣΥΝΘΗΚΗ ) ΤΟΤΕ
SUM := SUM + A;
ΕΑΝ-ΤΕΛΟΣ;
Ι := Ι + 1;
ΕΝΟΣΩ-ΤΕΛΟΣ;
Πρόγραµµα C++
sum =0;
i=1;
while ( i <= N )
{
cin>>a;
if ( ΣΥΝΘΗΚΗ ) sum += a;
i++;
}
4.1. Εύρεση µέγιστου - ελάχιστου
Παρακάτω θα περιγραφεί ο αλγόριθµος εύρεσης του µέγιστου ή ελάχιστου µιας οµάδας Ν
αριθµών. Στη διαδικασία εύρεσης του µεγίστου ο αλγόριθµος αρχίζει θεωρώντας ως
µέγιστο (MAX) µια πολύ µικρή τιµή, η οποία στη συνέχεια θα αντικατασταθεί
οπωσδήποτε. Εάν λοιπόν οι αριθµοί είναι θετικοί ως αρχική τιµή στον ΜΑΧ βάζουµε το 0.
Εάν είναι ακέραιοι βάζουµε τον µικρότερο ακέραιο αριθµό που µπορεί να αναπαρασταθεί
στον υπολογιστή δηλαδή το -32768.
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
∆ιάγραµµα Ροής
ΜΑΧ= Πολύ Μικρή Τιµή
IÅ1
Α
NAI
Α > ΜΑΧ
ΜΑΧ Å A
IÅI+1
OXI
I<N
NAI
OXI
ΤΕΛΟΣ
Ψευδοκώδικας
MAX:= -32768;
I:=1;
ΕΝΟΣΩ ( Ι <= Ν ) ΕΠΑΝΕΛΑΒΕ
∆ΙΑΒΑΣΕ (Α);
ΕΑΝ ( A > MAX ) ΤΟΤΕ
MAX := A;
ΕΑΝ-ΤΕΛΟΣ;
Ι := Ι + 1;
15
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
16
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
ΕΝΟΣΩ-ΤΕΛΟΣ;
Πρόγραµµα C++
max = -32768;
i=1;
while ( i <= N )
{
cin>>a;
if ( a > max ) max = a;
i++;
}
Το Ελάχιστο βρίσκεται µε ακριβώς τον ίδιο τρόπο, όπου :
min = Μια πολύ µεγάλη τιµή (που θα αντικατασταθεί οπωσδήποτε). π.χ. +32767
if ( a < min) min = a;
5. ΠΙΝΑΚΕΣ
Οι Πίνακες (Arrays) είναι συλλογές από όµοιες µεταβλητές (δηλαδή µεταβλητές του ίδιου
τύπου π.χ. ακέραιοι αριθµοί). Οι Πίνακες επιτρέπουν την αποθήκευση πολλών τιµών ίδιου
τύπου και τον οµαδικό χειρισµό των στοιχείων του πίνακα (δηλαδή των όµοιων
µεταβλητών) µε έναν ενιαίο τρόπο.
5.1. Πίνακες στη C++
Οι πίνακες είναι µια στατική δοµή δεδοµένων η οποία καταλαµβάνει συγκεκριµένο πλήθος
συνεχόµενων θέσεων στη µνήµη του Η/Υ και δέχεται προς αποθήκευση µόνο Οµοειδή
δεδοµένα.
Άρα λοιπόν:
……..προσοχή κάθε πίνακας δέχεται προς εισαγωγή ΜΟΝΟ ίδιου τύπου δεδοµένα
και έχει συγκεκριµένο πλήθος αποθηκευτικών θέσεων
Παράδειγµα 5.1.1.
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Έστω ότι έχω τους βαθµούς 30 φοιτητών και θέλω να τους αποθηκεύσω κάπου έτσι ώστε
να µπορούν να χρησιµοποιηθούν από το πρόγραµµα.
Έστω ότι ο πίνακας λέγεται vathmoi
∆ΗΛΩΣΗ
int vathmoi[30];
π.χ. vathmoi[2] =8 σηµαίνει ότι στην 3η θέση αποθηκεύω το 8
Για τη
συγκεκριµένη εφαρµογή χρειάζοµαι έναν πίνακα 30 θέσεων
2 7 8
[0][1] [2] ……………………………………………………………………………
Ο πίνακας λέµε ότι είναι Στατική δοµή δεδοµένων
5.2. ΕΙΣΑΓΩΓΗ ΤΙΜΩΝ ΣΕ ΠΙΝΑΚΑ
Η εισαγωγή τιµών σε πίνακα γίνεται µε τη χρήση της επαναληπτικής δοµής for
Στο συγκεκριµένο παράδειγµα η εισαγωγή γίνεται ως εξής:
for (i=0; i<30; i++)
{
cout<<”dose ton vathmo”;
cin>>vathmoi[i];
}
Εισαγωγή τιµής στην 1η θέση του πίνακα
cout<<”dose ton vathmo”;
cin>>vathmoi[0];
[29]
17
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
18
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Εισαγωγή τιµής στην 2η θέση του πίνακα
cout<<”dose ton vathmo”;
cin>>vathmoi[1];
♦ ∆ήλωση Μονοδιάστατου Πίνακα
Ψευδοκώδικας
A : ARRAY[0..9] OF INTEGER;
Πρόγραµµα C++
int a[10];
Σε όλες τις παραπάνω περιπτώσεις δηλώνεται ένας µονοδιάστατος πίνακας 10 ακεραίων
αριθµών. Τα στοιχεία του πίνακα είναι τα Α[0], Α[1], Α[2], …, Α[8], Α[9].
♦ Χρήση των στοιχείων του Πίνακα
Ψευδοκώδικας
A[0] := 5;
A[1] := A[0] + 2;
EAN ( A[I] = 0 ) TOTE … ΕΑΝ-ΤΕΛΟΣ;
Πρόγραµµα C++
a[0] = 5;
a[1] = a[0] + 2;
if ( a[i] == 0 ) …
♦ Αποθήκευση τιµών σε µονοδιάστατο πίνακα
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Ψευδοκώδικας
ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ
∆ΙΑΒΑΣΕ(Α[Ι]);
ΓΙΑ-ΤΕΛΟΣ;
Πρόγραµµα C++
for ( i=0; i<=9; i++ )
cin>>a[i] ;
♦ Αθροιση τιµών σε µονοδιάστατο πίνακα
Ψευδοκώδικας
SUM:=0;
ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ
SUM := SUM + Α[Ι];
ΓΙΑ-ΤΕΛΟΣ;
Πρόγραµµα C++
sum=0;
for ( i=0; i<=9; i++ )
sum += a[i];
Άσκηση 5.1.1
Υπολογισµός Εµβαδού Κύκλου
#include <iostream.h>
void main()
{
19
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
20
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
float aktina,emvadon;
cout<<”Doste thn Aktina tou Kyklou”;
cin>>aktina;
emvadon=3.14*aktina*aktina;
cout<<”To emvadon einai :”<<emvadon;
if (emvadon ==0)
cout<<”Den yparxei tetoio emvadon \n”;
else
cout<<”Apodekth timh gia emvadon \n”;
}
Άσκηση 5.1.2.
ΕΚΦΩΝΗΣΗ
Θα κάνουµε ένα πρόγραµµα που θα ζητάει την εισαγωγή 10 στηθαίων διαµέτρων και θα
βρίσκει και θα εµφανίζει τον Μέσο όρο τους.
#include <iostream.h>
void main()
{
int i;
float diam,s,mo;
s=0;
for (i=1; i<=10; i++)
{ cout<<"Dose th diametro";
cin>>diam;
s=s+diam;
}
mo=s/10;
cout<<"O mesos oros einai : "<<mo ;
}
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
21
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
Ας κάνουµε το πρόγραµµά µας πιο έξυπνο……. έτσι ώστε να µη µπορεί ο χρήστης να
εισάγει διάµετρο αρνητική ή µηδέν. Αυτό σηµαίνει ότι όσο θα µου εισάγει λάθος διάµετρο
τόσο θα ξαναζητάω να την εισάγει από την αρχή.
#include <iostream.h>
void main()
{
int i;
float diam,s,mo;
s=0;
for (i=1; i<=10; i++)
{
cout<<"Dose th diametro";
cin>>diam;
while ((diam <0)||(diam==0))
{
cout<<"Lathos xanaDose th diametro";
cin>>diam;
}
s=s+diam;
}
mo=s/10;
cout<<"O mesos oros einai : "<<mo ;
}
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
22
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
5.2. ΠΙΝΑΚΑΣ 2 ∆ΙΑΣΤΑΣΕΩΝ
Έστω ότι έχω τους βαθµούς 30 φοιτητών για 5 χρόνια, και θέλω να τους αποθηκεύσω κάπου έτσι
ώστε να µπορούν να χρησιµοποιηθούν από το πρόγραµµα
vathmoi[0][0]=9;
9
Έστω ότι ο πίνακας λέγεται vathmoi
∆ΗΛΩΣΗ
int vathmoi[5][30];
γραµµές
5.3. ΕΙΣΑΓΩΓΗ ΤΙΜΩΝ ΣΕ ∆ΙΣ∆ΙΑΣΤΑΤΟ ΠΙΝΑΚΑ
Η εισαγωγή τιµών σε δισδιάστατο πίνακα γίνεται µε τη χρήση δύο εµφωλευµένων
επαναληπτικών δοµών for
Στο συγκεκριµένο παράδειγµα η εισαγωγή γίνεται ως εξής:
Έστω ότι θέλω η εισαγωγή να γίνει κατ’ έτος δηλαδή ανά γραµµή….. 1η γραµµή, 2η γραµµή , κοκ
for (i=0; i<5; i++)
{
for (j=0; j<30; j++)
{
cout<<”dose ton vathmo”;
cin>>vathmoi[i][j];
}
}
To i ξεκινάει από την τιµή 0 και παραµένει 0 µέχρι το j να πάρει τιµές από 0 έως και 29. Κάποτε το
j θα γίνει 30 αλλά επειδή δεν θα πληρείται η συνθήκη j<30 δεν θα εκτελεστεί η επανάληψη……..
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
23
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
5.4. ΕΜΦΑΝΙΣΗ ΤΙΜΩΝ ΠΙΝΑΚΑ
Η εµφάνιση τιµών µονοδιάστατου πίνακα γίνεται µε τη χρήση της επαναληπτικής δοµής
for…………….
♦ Εκτύπωση τιµών µονοδιάστατου πίνακα
Ψευδοκώδικας
ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ
ΤΥΠΩΣΕ(Α[Ι]);
ΓΙΑ-ΤΕΛΟΣ;
Πρόγραµµα C++
for ( i=0; i<=9; i++ )
cout<<a[i] );
Στο συγκεκριµένο παράδειγµα η εισαγωγή γίνεται ως εξής:
for (i=0; i<30; i++)
cout<<”το στοιχείο του πίνακα στη θέση ”<<i+1<<”είναι ”<<vathmoi[i];
#include <iostream.h>
void main()
{
int vathmoi[30], i,s;
float mo;
s=0;
for (i=0; i<30; i++)
{
cout<<”dose ton vathmo tou foithth :”<<i+1;
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
cin>>vathmoi[i];
s=s+vathmoi[i] ;
}
mo=s/30;
cout<<”o mesos oros einai “<<mo;
}
24
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
25
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
ΠΑΡΑ∆ΕΙΓΜΑ ΜΕ ΠΙΝΑΚΕΣ ∆ΥΟ ∆ΙΑΣΤΑΣΕΩΝ
Έστω ότι έχουµε τους βαθµούς 20 οµάδων στο πρωτάθληµα ποδοσφαίρου για τα
τελευταία 8 έτη. Θέλω να βρω τον µέσο όρο της βαθµολογίας κάθε οµάδας και να τον
εµφανίσω στην οθόνη.
Στην περίπτωση αυτή θα χρησιµοποιήσω πίνακα 2 διαστάσεων µε 20 στήλες και 8
γραµµές. Πίνακας 8Χ20
Οµάδα 1
Για το έτος
1999
35
54
Οµάδα 1
Για το έτος
2000
4
5
6
7
8
9
∆ήλωση: int omades[8][20];
Εισαγωγή στοιχείων σε πίνακα 2 διαστάσεων
#include <iostream.h>
void main() {
int omades[8][20],i,j,s;
float mo;
for (i=0; i<20; i++)
{s=0;
ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ
ΜΑΘΗΜΑ 1ο
Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ
for (j=0; j<8; j++)
{
cout<<”\n Dose timh sth grammh ”<<j+1<<”kai sth sthlh “<<i+1<<” :”;
cin>>omades[j][i];
s=s+omades[j][i];
}
mo=s/8;
cout<<” O mesos oros einai ”<<mo;
}
}
26