Professional Documents
Culture Documents
ΠΛΗΡΟΦΟΡΙΚΗ - Γ' ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ
ΠΛΗΡΟΦΟΡΙΚΗ - Γ' ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ
ΠΛΗΡΟΦΟΡΙΚΗ - Γ' ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ
ΠΛΗΡΟΦΟΡΙΚΗ
Γ' ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ
Oμάδα Προσανατολισμού Σπουδών Οικονομίας & Πληροφορικής
1 / 680
§§§±±±………ℹℹ←←←→→→↔↔↔⇎⇎⇏⇏⇒⇒⇒⇔⇔⇔∈∈∈∞∞∞∩∩∩∪∪∪≅≅≅
≈≈≈≟≟≠≠≠≡≡≡≤≤≤≥≥≥✓✓✗✗🛈🛈📖💡
Περιεχόμενα
1.1 Η έννοια πρόβλημα
1.2 Κατανόηση προβλήματος *
1.3 Δομή προβλήματος
1.4 Καθορισμός απαιτήσεων *
2.1 Τι είναι αλγόριθμος
2.2 Σπουδαιότητα αλγορίθμων
2.3 Περιγραφή και αναπαράσταση αλγορίθμων *
4.1 Ανάλυση προβλημάτων
6.1 Η έννοια του προγράμματος
6.4 Τεχνικές σχεδίασης προγραμμάτων
6.3 Φυσικές και τεχνητές γλώσσες
6.7 Προγραμματιστικά περιβάλλοντα
7.1 Το αλφάβητο της ΓΛΩΣΣΑΣ
7.2 Τύποι δεδομένων
7.3 Σταθερές
7.4 Μεταβλητές
7.5 Αριθμητικοί τελεστές
7.6 Συναρτήσεις
7.7 Αριθμητικές εκφράσεις
2.4.1 Δομή Ακολουθίας
7.8 Εντολή εκχώρησης
7.9 Εντολές εισόδου-εξόδου
7.10 Δομή προγράμματος
2.4.2 Δομή Επιλογής
2.4.3 Διαδικασίες πολλαπλών επιλογών
2.4.4 Εμφωλευμένες Διαδικασίες
8.1 Εντολές Επιλογής
8.1.1 Εντολή ΑΝ
8.1.2 Εντολή ΕΠΙΛΕΞΕ
3.1 Εντολή ΕΠΙΛΕΞΕ *
8.1 Εντολές Επιλογής
8.2 Εντολές επανάληψης
2.4.5 Δομή Επανάληψης
8.2.1 Εντολή ΟΣΟ…ΕΠΑΝΑΛΑΒΕ
2.4.5 Δομή Επανάληψης
8.2.2 Εντολή ΜΕΧΡΙΣ_ΟΤΟΥ
2.4.5 Δομή Επανάληψης
8.2.3 Εντολή ΓΙΑ…ΑΠΟ…ΜΕΧΡΙ
8.2 Εντολές επανάληψης
2.4.5 Δομή Επανάληψης
13.1 Κατηγορίες λαθών
5.1 Κατηγορίες Λαθών *
5.2 Εκσφαλμάτωση
2.1 Μέθοδος Διαίρει και Βασίλευε *
3.1 Δεδομένα
3.2 Αλγόριθμοι + Δομές Δεδομένων = Προγράμματα
3.3 Πίνακες
9.1 Μονοδιάστατοι πίνακες
3.6 Αναζήτηση
3.7 Ταξινόμηση
9.2 Πότε πρέπει να χρησιμοποιούνται πίνακες
9.3 Πολυδιάστατοι πίνακες
9.4 Τυπικές επεξεργασίες πινάκων
5.2 Εκσφαλμάτωση
1.1 Στοίβα
1.2 Ουρά
10.1 Τμηματικός προγραμματισμός
10.2 Χαρακτηριστικά των υποπρογραμμάτων
10.3 Πλεονεκτήματα του τμηματικού προγραμματισμού
10.4 Παράμετροι
10.5 Διαδικασίες και συναρτήσεις
10.6 Εμβέλεια μεταβλητών – σταθερών
5.2 Εκσφαλμάτωση
1.3 Άλλες δομές δεδομένων
2 / 680
3 / 680
4 / 680
2009 / Γ.1 Η κατανόηση ενός προβλήματος αποτελεί συνάρτηση δύο παραγόντων. Να τους
αναφέρετε. (μονάδες 4) §1.2, σ.17
5 / 680
2009 / Γ.1 Η κατανόηση ενός προβλήματος αποτελεί συνάρτηση δύο παραγόντων. Να τους
αναφέρετε. (μονάδες 4) §1.2, σ.17
6 / 680
2009 / Γ.1 Η κατανόηση ενός προβλήματος αποτελεί συνάρτηση δύο παραγόντων. Να τους
αναφέρετε. (μονάδες 4) §1.2, σ.17
7 / 680
2009 / Γ.1 Η κατανόηση ενός προβλήματος αποτελεί συνάρτηση δύο παραγόντων. Να τους
αναφέρετε. (μονάδες 4) §1.2, σ.17
8 / 680
9 / 680
10 / 680
11 / 680
1.3 Δομή προβλήματος
Η διαγραμματική αναπαράσταση προσφέρει μια απτή
απεικόνιση της δομής του προβλήματος. Η δημιουργία του
σχετικού διαγράμματος βοηθάει τόσο στην καλύτερη κατανόηση
του ίδιου του προβλήματος, όσο και στη σχεδίαση της λύσης
του.
12 / 680
13 / 680
15 / 680
16 / 680
17 / 680
18 / 680
19 / 680
20 / 680
2012 Επαναληπτικές / Α4 Να περιγράψετε τα προβλήματα που είναι δυνατόν να παρουσιαστούν
κατά την αναπαράσταση ενός αλγορίθμου, αν χρησιμοποιηθεί ελεύθερο κείμενο και φυσική
γλώσσα κατά βήματα. (μονάδες 5) §2.3, σ.35
21 / 680
23 / 680
24 / 680
25 / 680
27 / 680
28 / 680
29 / 680
30 / 680
31 / 680
32 / 680
33 / 680
35 / 680
36 / 680
37 / 680
38 / 680
39 / 680
Λάθη Προγράμματος
… τα λογικά λάθη που είναι τα πλέον σοβαρά και δύσκολα στη
διόρθωσή τους οφείλονται σε σφάλματα κατά την υλοποίηση
του αλγορίθμου, ενώ τα συντακτικά οφείλονται σε
αναγραμματισμούς ονομάτων εντολών, παράλειψη δήλωσης
δεδομένων και πρέπει πάντα να διορθωθούν, ώστε να παραχθεί
το τελικό εκτελέσιμο πρόγραμμα.
40 / 680
43 / 680
Γράμματα
o Κεφαλαία ελληνικού αλφαβήτου (Α-Ω)
Ψηφία
o 0-9
Ειδικοί χαρακτήρες
o . , : _ '
o + - * / ^
o = < >
o [ ] ( )
o ! &
o κενός χαρακτήρας
44 / 680
46 / 680
47 / 680
9 ≠ 9.0
9 ≠ '9'
o 9 ⇒ 00001001
o '9' ⇒ 00111001
ABC ≟ 4276803
o ABC ⇒ 01000001 01000010 01000011
o 4276803 ⇒ 00000000010000010100001001000011
2005 ≠ '2005'
o 2005 ⇒ 00000000000000000000011111010101
o '2005' ⇒ 00110010 00110000 00110000 00110101
ΑΛΗΘΗΣ ≠ 'ΑΛΗΘΗΣ'
o ΑΛΗΘΗΣ ⇒ 1
o 'ΑΛΗΘΗΣ' ⇒ 1110010001 1110011011 1110010111 1110011000
1110010111 1110100011
Πίνακας ASCII
48 / 680
49 / 680
7.3 Σταθερές
Οι σταθερές (constants) είναι προκαθορισμένες τιμές που δεν
μεταβάλλονται κατά τη διάρκεια εκτέλεσης του προγράμματος.
Οι σταθερές είναι αντίστοιχου τύπου δεδομένων, δηλαδή
ακέραιες, πραγματικές, αλφαριθμητικές (χαρακτήρες) ή
λογικές.
Συμβολικές σταθερές
Η ΓΛΩΣΣΑ επιτρέπει την αντιστοίχιση σταθερών τιμών με
ονόματα, εφόσον αυτά δηλωθούν στην αρχή του προγράμματος
(στο τμήμα δήλωσης σταθερών, βλέπε παρακάτω).
50 / 680
7.3 Σταθερές
Σύνταξη
ΣΤΑΘΕΡΕΣ
<Όνομα-1> = <σταθερή-τιμή-1>
<Όνομα-2> = <σταθερά-τιμή-2>
…
<Όνομα-ν> = <σταθερά-τιμή-ν>
51 / 680
7.3 Σταθερές
Παραδείγματα
ΣΤΑΘΕΡΕΣ
π = 3.14159
e = 2.71828 ! Δεσμευμένη λέξη; → E(x)
μαθητές_ανά_τάξη = 27
ΦΠΑ = 0.24 ! Γιατί όχι Φ.Π.Α. = 24%;
ΟΝΟΜΑ_ΣΧΟΛΕΙΟΥ = 'ΓΕΛ Πόρου'
52 / 680
7.3 Σταθερές
Ονόματα (Κανόνες)
53 / 680
7.3 Σταθερές
Παραδείγματα
Ονόματα που είναι αποδεκτά από τη ΓΛΩΣΣΑ:
Α
Όνομα
Τιμή
Τυπική_Απόκλιση
Α100
ΦΠΑ
μέγιστο
Υπολογισμός_Ταχύτητας
100Α
Φ.Π.Α.
Μέση Τιμή
Κόστος$
ΑΚΕΡΑΙΕΣ
54 / 680
7.3 Σταθερές
Παρατηρήσεις
55 / 680
7.4 Μεταβλητές
Μια μεταβλητή παριστάνει μία ποσότητα που η τιμή της μπορεί
να μεταβάλλεται.
56 / 680
7.4 Μεταβλητές
Μεταβλητή σε μαθηματικά και προγραμματισμό
MS ⇔Μ <- x
M+ ⇔ Μ <- Μ + x
M- ⇔ Μ <- Μ - x
MR ⇔ ΓΡΑΨΕ Μ
57 / 680
7.4 Μεταβλητές
Σύνταξη
ΜΕΤΑΒΛΗΤΕΣ
<τύπος-1>: <Λίστα-μεταβλητών-1>
<τύπος-2>: <Λίστα-μεταβλητών-2>
…
<τύπος-ν>: <Λίστα-μεταβλητών-ν>
58 / 680
7.4 Μεταβλητές
Παραδείγματα
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Εμβαδόν, Α
ΑΚΕΡΑΙΕΣ: ΤΙΜΗ, Ν
ΧΑΡΑΚΤΗΡΕΣ: Όνομα
ΛΟΓΙΚΕΣ: Έλεγχος
59 / 680
7.4 Μεταβλητές
… το όνομα των μεταβλητών μπορεί να είναι οποιοσδήποτε
συνδυασμός χαρακτήρων, είναι καλή πρακτική να
χρησιμοποιούνται ονόματα τα οποία να υπονοούν το
περιεχόμενό τους, κάνοντας το πρόγραμμα ευκολότερο στην
ανάγνωσή του και στην κατανόησή του.
60 / 680
7.5 Αριθμητικοί τελεστές
Οι τελεστές και οι αντίστοιχες πράξεις είναι:
ΑΡΙΘΜΗΤΙΚΟΣ
ΠΡΑΞΗ
ΤΕΛΕΣΤΗΣ
+ Πρόσθεση
- Αφαίρεση
* Πολλαπλασιασμός
/ Διαίρεση
^ Ύψωση σε δύναμη
DIV Ακέραια διαίρεση
Υπόλοιπο ακέραιας
MOD
διαίρεσης
61 / 680
64 / 680
7.5 Αριθμητικοί τελεστές
Συχνές χρήσεις του DIV και του MOD
65 / 680
66 / 680
67 / 680
68 / 680
69 / 680
70 / 680
71 / 680
72 / 680
73 / 680
74 / 680
7.6 Συναρτήσεις
Πολλές γνωστές συναρτήσεις από τα μαθηματικά
χρησιμοποιούνται συχνά και περιέχονται στη ΓΛΩΣΣΑ. Οι
συναρτήσεις αυτές είναι:
Συνάρτησ
Λειτουργία
η
ΗΜ(Χ) Υπολογισμός ημιτόνου
ΣΥΝ(Χ) Υπολογισμός συνημιτόνου
ΕΦ(Χ) Υπολογισμός εφαπτομένης
Υπολογισμός τετραγωνικής
Τ_Ρ(Χ)
ρίζας
Υπολογισμός φυσικού
ΛΟΓ(Χ)
λογαρίθμου
Ε(Χ) Υπολογισμός του ex
Α_Μ(Χ) Ακέραιο μέρος του Χ
Α_Τ(Χ) Απόλυτη τιμή του Χ
75 / 680
7.6 Συναρτήσεις
Παρατηρήσεις
76 / 680
77 / 680
1. Ύψωση σε δύναμη
2. Πολλαπλασιασμός και διαίρεση
3. Πρόσθεση και αφαίρεση
78 / 680
κ.λπ.
79 / 680
2005 / Θέμα 1ο - Δ
o Αριθμητική έκφραση σε ΓΛΩΣΣΑ
o Περιττές παρενθέσεις
81 / 680
82 / 680
2.4.1 Δομή Ακολουθίας
Σταθερές (constants). Με τον όρο αυτό αναφερόμαστε σε
προκαθορισμένες τιμές που παραμένουν αμετάβλητες σε
όλη τη διάρκεια της εκτέλεσης ενός αλγορίθμου. Οι
σταθερές διακρίνονται σε
o αριθμητικές, π.χ. 123, +5, -1.25
83 / 680
84 / 680
86 / 680
Υπολογισμός Φ.Π.Α.
o φπα <- τιμή * 0.24
o τιμή <- τιμή + φπα
o τιμή <- τιμή + τιμή * 0.24
o τιμή <- τιμή * 1.24
Υπολογισμός έκπτωσης
o έκπτωση <- τιμή * 0.10
o τιμή <- τιμή - έκπτωση
o τιμή <- τιμή - τιμή * 0.10
o τιμή <- τιμή * 0.90
Συχνά λάθη
τιμή <- τιμή * 0.24
τιμή <- τιμή - 0.10
89 / 680
90 / 680
Σύνταξη
ΔΙΑΒΑΣΕ <λίστα-μεταβλητών>
Παραδείγματα
ΔΙΑΒΑΣΕ Ποσότητα, Τιμή
91 / 680
Σύνταξη
ΓΡΑΨΕ <λίστα-στοιχείων>
Παραδείγματα
ΓΡΑΨΕ 'Η τετραγωνική ρίζα του ', Α, ' είναι: ', ΡΙΖΑ
93 / 680
Συζήτηση
Προσοχή στις περίπλοκες ΓΡΑΨΕ, όταν έχουμε κόμματα μέσα
σε '…' αλλά και εκτός
o ΓΡΑΨΕ 'Τα α=', α, ', β=', β, ', γ=', γ, ' έχουν ΜΟ=',
(α+β+γ)/3
Τι λογικό λάθος πιθανότατα υπάρχει παρακάτω;
o ΓΡΑΨΕ 'x=', x, ' y=', 'y'
94 / 680
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ <όνομα προγράμματος>
είναι και τα δύο αποδεκτά
95 / 680
97 / 680
99 / 680
100 / 680
Σύνταξη
ΑΝ <συνθήκη> ΤΟΤΕ
<εντολές>
ΤΕΛΟΣ_ΑΝ
101 / 680
Διάγραμμα Ροής
st=>start: Αρχή
e=>end: Τέλος
op=>operation: εντολές
cond=>condition: συνθήκη
st->cond
cond(yes, left)->op->e
cond(no, right)->e
102 / 680
Σύνταξη
ΑΝ <συνθήκη> ΤΟΤΕ
<εντολές-1>
ΑΛΛΙΩΣ
<εντολές-2>
ΤΕΛΟΣ_ΑΝ
103 / 680
2.4.2 Δομή Επιλογής
Σύνθετη Επιλογή
Σύνταξη
ΑΝ <συνθήκη> ΤΟΤΕ
<εντολές-1>
ΑΛΛΙΩΣ
<εντολές-2>
ΤΕΛΟΣ_ΑΝ
Υπάρχει περίπτωση να μην εκτελεστεί τίποτα από τις
<εντολές-1>, <εντολές-2>;
104 / 680
Σύνταξη
ΑΝ <συνθήκη> ΤΟΤΕ
<εντολές-1>
ΑΛΛΙΩΣ
<εντολές-2>
ΤΕΛΟΣ_ΑΝ
Υπάρχει περίπτωση να μην εκτελεστεί τίποτα από τις
<εντολές-1>, <εντολές-2>;
105 / 680
Διάγραμμα Ροής
st=>start: Αρχή
e=>end: Τέλος
opy=>operation: εντολές-ναι
opn=>operation: εντολές-όχι
cond=>condition: συνθήκη
st->cond
cond(yes, left)->opy->e
cond(no, right)->opn->e
106 / 680
107 / 680
108 / 680
109 / 680
110 / 680
111 / 680
112 / 680
113 / 680
114 / 680
2006 / Θέμα 2ο - 1
o Διάγραμμα Ροής σε Ψευδογλώσσα
115 / 680
Παρατηρήσεις
ΑΛΗΘΗΣ Η Χ ⇔ Χ Η ΑΛΗΘΗΣ ⇒ ΑΛΗΘΗΣ
ΨΕΥΔΗΣ ΚΑΙ Χ ⇔ Χ ΚΑΙ ΨΕΥΔΗΣ ⇒ ΨΕΥΔΗΣ
ΑΕΠΠ - Βιβλίο Μαθητή, §2.4.4, σελ.43
116 / 680
117 / 680
118 / 680
119 / 680
Προσοχή
Ποια άλλη χρήση έχει το =;
=< & =>
<- & <=
120 / 680
121 / 680
Σύγκριση χαρακτήρων
'Α' < 'ΑΒ'
'Χ' < 'Ψ'
'ΓΙΑΝΗΣ' < 'ΓΙΑΝΝΗΣ'
'Γ' < 'ΓΙΑΝΝΗΣ' < 'ΓΙΩΡΓΟΣ' < 'ΓΩΓΩ'
'100' < '9'
'1' < '10' < '100' < '11' < '2' < '20'
122 / 680
Προσοχή
'ΑΛΗΘΗΣ' < 'ΨΕΥΔΗΣ' ⇒ ΑΛΗΘΗΣ
ΑΛΗΘΗΣ < ΨΕΥΔΗΣ ⇒ ? !Δεν ορίζεται
123 / 680
8.1 Εντολές Επιλογής
Συγκριτικοί τελεστές
125 / 680
126 / 680
Παραδείγματα
0 < Χ < 5
o 0 < X ΚΑΙ Χ < 5 ⇔Χ > 0 ΚΑΙ Χ < 5
127 / 680
Παραδείγματα
0 < Χ < 5
o 0 < X ΚΑΙ Χ < 5 ⇔ Χ > 0 ΚΑΙ Χ < 5
Χ = 1 ή 2 ή 3
o Χ = 1 Η Χ = 2 Η Χ = 3
128 / 680
Παραδείγματα
0 < Χ < 5
o 0 < X ΚΑΙ Χ < 5 ⇔ Χ > 0 ΚΑΙ Χ < 5
Χ = 1 ή 2 ή 3
o Χ = 1 Η Χ = 2 Η Χ = 3
X ∈ (-∞, 4]
o X <= 4 ⇔X < 4 Η X = 4
129 / 680
Παραδείγματα
0 < Χ < 5
o 0 < X ΚΑΙ Χ < 5 ⇔ Χ > 0 ΚΑΙ Χ < 5
Χ = 1 ή 2 ή 3
o Χ = 1 Η Χ = 2 Η Χ = 3
X ∈ (-∞, 4]
o X <= 4 ⇔ X < 4 Η X = 4
X ∈ [1, 20]
o X >= 1 ΚΑΙ X <=20
130 / 680
Παραδείγματα
0 < Χ < 5
o 0 < X ΚΑΙ Χ < 5 ⇔ Χ > 0 ΚΑΙ Χ < 5
Χ = 1 ή 2 ή 3
o Χ = 1 Η Χ = 2 Η Χ = 3
X ∈ (-∞, 4]
o X <= 4 ⇔ X < 4 Η X = 4
X ∈ [1, 20]
o X >= 1 ΚΑΙ X <=20
X ∈ (-∞, 0] ∪ (10, +∞)
o X <= 0 Η X > 10
131 / 680
Παραδείγματα
0 < Χ < 5
o 0 < X ΚΑΙ Χ < 5 ⇔ Χ > 0 ΚΑΙ Χ < 5
Χ = 1 ή 2 ή 3
o Χ = 1 Η Χ = 2 Η Χ = 3
X ∈ (-∞, 4]
o X <= 4 ⇔ X < 4 Η X = 4
X ∈ [1, 20]
o X >= 1 ΚΑΙ X <=20
X ∈ (-∞, 0] ∪ (10, +∞)
o X <= 0 Η X > 10
132 / 680
1. Αριθμητικοί τελεστές
2. Συγκριτικοί τελεστές και
3. Λογικοί τελεστές.
1. ΟΧΙ
2. ΚΑΙ
3. Ή
133 / 680
o Λογικές εκφράσεις
135 / 680
8.1.1 Εντολή ΑΝ
Η δομή επιλογής υλοποιείται στη ΓΛΩΣΣΑ με την εντολή ΑΝ. Η
εντολή ΑΝ εμφανίζεται με τρεις διαφορετικές μορφές. Την απλή
εντολή ΑΝ…ΤΟΤΕ, την εντολή ΑΝ…ΤΟΤΕ…ΑΛΛΙΩΣ και τέλος την εντολή ΑΝ…
ΤΟΤΕ…ΑΛΛΙΩΣ_ΑΝ. Κάθε εντολή ΑΝ πρέπει να κλείνει με ΤΕΛΟΣ_ΑΝ.
136 / 680
8.1.1 Εντολή ΑΝ
Απλή Επιλογή
8.1.1 Εντολή ΑΝ
Απλή Επιλογή
138 / 680
8.1.1 Εντολή ΑΝ
Απλή Επιλογή
Παραδείγματα
ΑΝ αριθμός > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ο αριθμός είναι θετικός'
Πλήθος_θετικών <- Πλήθος_θετικών + 1
ΤΕΛΟΣ_ΑΝ
139 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Συχνά η εντολή ΑΝ εκτός από το τμήμα των εντολών, που
εκτελούνται όταν η λογική έκφραση είναι Αληθής, περιέχει και το
τμήμα των εντολών που εκτελούνται, αν δεν ισχύει η συνθήκη
(είναι Ψευδής).
140 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
142 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Παράδειγμα
ΑΝ αριθμός > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ο αριθμός είναι θετικός'
Πλήθος_θετικών <- Πλήθος_θετικών + 1
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ο αριθμός είναι αρνητικός ή 0'
Πλήθος_μη_θετικών <- Πλήθος_μη_θετικών + 1
ΤΕΛΟΣ_ΑΝ
143 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Αντιστροφή της συνθήκης / λογικής έκφρασης
ΑΝ x > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Θετικός'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Όχι θετικός'
ΤΕΛΟΣ_ΑΝ
144 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Αντιστροφή της συνθήκης / λογικής έκφρασης
ΑΝ x > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Θετικός'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Όχι θετικός'
ΤΕΛΟΣ_ΑΝ
ΑΝ x <= 0 ΤΟΤΕ
ΓΡΑΨΕ 'Όχι θετικός'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Θετικός'
ΤΕΛΟΣ_ΑΝ
145 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Εντολή που εκτελείται σε κάθε περίπτωση
ΑΝ Χ >= 0 ΤΟΤΕ
Μ <- 'ΘΕΤΙΚΟΣ'
ΓΡΑΨΕ Μ
ΑΛΛΙΩΣ
Μ <- 'ΑΡΝΗΤΙΚΟΣ'
ΓΡΑΨΕ Μ
ΤΕΛΟΣ_ΑΝ
146 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Εντολή που εκτελείται σε κάθε περίπτωση
ΑΝ Χ >= 0 ΤΟΤΕ
Μ <- 'ΘΕΤΙΚΟΣ'
ΓΡΑΨΕ Μ
ΑΛΛΙΩΣ
Μ <- 'ΑΡΝΗΤΙΚΟΣ'
ΓΡΑΨΕ Μ
ΤΕΛΟΣ_ΑΝ
ΑΝ Χ >= 0 ΤΟΤΕ
Μ <- 'ΘΕΤΙΚΟΣ'
ΑΛΛΙΩΣ
Μ <- 'ΑΡΝΗΤΙΚΟΣ'
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ Μ
147 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Η εντολή y <- x μπορεί να μπει μέσα στην ΑΝ;
y <- x
ΑΝ x >= 0 ΤΟΤΕ
y <- y + 1
ΤΕΛΟΣ_ΑΝ
148 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Η εντολή y <- x μπορεί να μπει μέσα στην ΑΝ;
y <- x
ΑΝ x >= 0 ΤΟΤΕ
y <- y + 1
ΤΕΛΟΣ_ΑΝ
ΑΝ x >= 0 ΤΟΤΕ
y <- x
y <- y + 1
ΑΛΛΙΩΣ
y <- x
ΤΕΛΟΣ_ΑΝ
149 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Η εντολή ΔΙΑΒΑΣΕ x μπορεί να μπει μέσα στην ΑΝ;
ΔΙΑΒΑΣΕ x
ΑΝ x >= 0 ΤΟΤΕ
ΓΡΑΨΕ x
ΤΕΛΟΣ_ΑΝ
150 / 680
8.1.1 Εντολή ΑΝ
Σύνθετη Επιλογή (Γενική Μορφή)
Μετατροπές
Η εντολή ΔΙΑΒΑΣΕ x μπορεί να μπει μέσα στην ΑΝ;
ΔΙΑΒΑΣΕ x
ΑΝ x >= 0 ΤΟΤΕ
ΓΡΑΨΕ x
ΤΕΛΟΣ_ΑΝ
ΑΝ x >= 0 ΤΟΤΕ !Σφάλμα
ΔΙΑΒΑΣΕ x
ΓΡΑΨΕ x
ΑΛΛΙΩΣ
ΔΙΑΒΑΣΕ x
ΤΕΛΟΣ_ΑΝ
151 / 680
8.1.1 Εντολή ΑΝ
Εμφωλευμένες εντολές ΑΝ
Ορισμός
Εμφωλευμένα ΑΝ ονομάζονται δύο ή περισσότερες εντολές της
μορφής ΑΝ…ΤΟΤΕ…ΑΛΛΙΩΣ που περιέχονται η μία μέσα στην άλλη.
152 / 680
8.1.1 Εντολή ΑΝ
Εμφωλευμένες εντολές ΑΝ
Παράδειγμα
ΔΙΑΒΑΣΕ Βάρος, Ύψος
ΑΝ Βάρος < 80 ΤΟΤΕ
ΑΝ Ύψος < 1.70 ΤΟΤΕ
ΓΡΑΨΕ 'Ελαφρύς, κοντός'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
153 / 680
8.1.1 Εντολή ΑΝ
Εμφωλευμένες εντολές ΑΝ
Παράδειγμα
ΔΙΑΒΑΣΕ Βάρος, Ύψος
ΑΝ Βάρος < 80 ΤΟΤΕ
ΑΝ Ύψος < 1.70 ΤΟΤΕ
ΓΡΑΨΕ 'Ελαφρύς, κοντός'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
154 / 680
8.1.1 Εντολή ΑΝ
Εμφωλευμένες εντολές ΑΝ
Παράδειγμα
ΔΙΑΒΑΣΕ Βάρος, Ύψος
ΑΝ Βάρος < 80 ΤΟΤΕ
ΑΝ Ύψος < 1.70 ΤΟΤΕ
ΓΡΑΨΕ 'Ελαφρύς, κοντός'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
155 / 680
8.1.1 Εντολή ΑΝ
Πολλαπλές Επιλογές
Σύνταξη
ΑΝ <συνθήκη-1> ΤΟΤΕ ! Η συνθήκη είναι μια λογική έκφραση
<εντολή-1>
<εντολή-2>
…
<εντολή-ν>
ΑΛΛΙΩΣ_ΑΝ <συνθήκη-2> ΤΟΤΕ ! Η συνθήκη είναι μια λογική έκφραση
<εντολή-1>
<εντολή-2>
…
<εντολή-ν>
…
ΑΛΛΙΩΣ
<εντολή-1>
<εντολή-2>
…
<εντολή-ν>
ΤΕΛΟΣ_ΑΝ
156 / 680
8.1.1 Εντολή ΑΝ
Πολλαπλές Επιλογές
Λειτουργία
Εκτελούνται οι εντολές που βρίσκονται στο αντίστοιχο τμήμα,
όταν η συνθήκη είναι αληθής. Η εκτέλεση του προγράμματος
συνεχίζεται με την εντολή που ακολουθεί τη δήλωση ΤΕΛΟΣ_ΑΝ.
157 / 680
8.1.1 Εντολή ΑΝ
Πολλαπλές Επιλογές
Παράδειγμα
ΑΝ αριθμός > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ο αριθμός είναι θετικός'
Πλήθος_θετικών <- Πλήθος_θετικών + 1
ΑΛΛΙΩΣ_ΑΝ αριθμός < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ο αριθμός είναι αρνητικός'
Πλήθος_αρνητικών <- Πλήθος_ αρνητικών + 1
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'O αριθμός είναι 0'
Πλήθος_0 <- Πλήθος_0 + 1
ΤΕΛΟΣ_ΑΝ
158 / 680
8.1.1 Εντολή ΑΝ
Παράδειγμα. … (πωλήσεις υπολογιστών) υποθέτουμε ότι η
τιμή των υπολογιστών εξαρτάται από την ποσότητα
παραγγελίας. Συγκεκριμένα ισχύουν οι παρακάτω τιμές
αγοράς υπολογιστών.
ΠΟΣΟΤΗΤΑ ΤΙΜΗ ΜΟΝΑΔΑΣ
1-50 580
51-100 520
101-200 470
πάνω από
440
200
159 / 680
8.1.1 Εντολή ΑΝ
Παράδειγμα. … (πωλήσεις υπολογιστών) υποθέτουμε ότι η
τιμή των υπολογιστών εξαρτάται από την ποσότητα
παραγγελίας. Συγκεκριμένα ισχύουν οι παρακάτω τιμές
αγοράς υπολογιστών.
Ο υπολογισμός με χρήση εμφωλευμένων εντολών ΑΝ είναι:
ΑΝ Ποσότητα <= 50 ΤΟΤΕ
Κόστος <- Ποσότητα * 580
ΑΛΛΙΩΣ
ΑΝ Ποσότητα <= 100 ΤΟΤΕ
Κόστος <- Ποσότητα * 520
ΑΛΛΙΩΣ
ΑΝ Ποσότητα <= 200 ΤΟΤΕ
Κόστος <- Ποσότητα * 470
ΑΛΛΙΩΣ
Κόστος <- Ποσότητα * 440
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
160 / 680
8.1.1 Εντολή ΑΝ
Παράδειγμα. … (πωλήσεις υπολογιστών) υποθέτουμε ότι η
τιμή των υπολογιστών εξαρτάται από την ποσότητα
παραγγελίας. Συγκεκριμένα ισχύουν οι παρακάτω τιμές
αγοράς υπολογιστών.
Το ίδιο πρόγραμμα με τη χρήση της εντολής ΑΝ…ΤΟΤΕ…ΑΛΛΙΩΣ_ΑΝ έχει
ως εξής:
ΑΝ Ποσότητα <= 50 ΤΟΤΕ
Κόστος <- Ποσότητα * 580
ΑΛΛΙΩΣ_ΑΝ Ποσότητα <= 100 ΤΟΤΕ
Κόστος <- Ποσότητα * 520
ΑΛΛΙΩΣ_ΑΝ Ποσότητα <= 200 ΤΟΤΕ
Κόστος <- Ποσότητα * 470
ΑΛΛΙΩΣ
Κόστος <- Ποσότητα * 440
ΤΕΛΟΣ_ΑΝ
161 / 680
8.1.1 Εντολή ΑΝ
Παράδειγμα. … (πωλήσεις υπολογιστών) υποθέτουμε ότι η
τιμή των υπολογιστών εξαρτάται από την ποσότητα
παραγγελίας. Συγκεκριμένα ισχύουν οι παρακάτω τιμές
αγοράς υπολογιστών.
Ένα συχνό λάθος που παρατηρείται στα προγράμματα είναι ο
έλεγχος περιττών συνθηκών. Οι επιπλέον έλεγχοι αυξάνουν την
πολυπλοκότητα του προγράμματος. Στο προηγούμενο
παράδειγμα για το οποίο θεωρούμε ότι η ποσότητα είναι θετικός
αριθμός, ένα παράδειγμα περιττών ελέγχων είναι το ακόλουθο:
ΑΝ Ποσότητα <= 50 ΤΟΤΕ
Κόστος <- Ποσότητα * 580
ΑΛΛΙΩΣ_ΑΝ Ποσότητα > 50 ΚΑΙ Ποσότητα <= 100 ΤΟΤΕ
Κόστος <- Ποσότητα * 520
ΑΛΛΙΩΣ_ΑΝ Ποσότητα > 100 ΚΑΙ Ποσότητα <= 200 ΤΟΤΕ
Κόστος <- Ποσότητα * 470
ΑΛΛΙΩΣ
Κόστος <- Ποσότητα * 440
ΤΕΛΟΣ_ΑΝ
162 / 680
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
Α ⇔ x > 0
Β ⇔ y > 0
Α ΚΑΙ
Α Β ΟΧΙ Β Α ΚΑΙ Β ΟΧΙ(Α ΚΑΙ Β) ΚΑΙ ΟΧΙ(Α ΚΑΙ OXI(Β))
ΟΧΙ(Β)
ΑΛΗΘΗ ΑΛΗΘΗ ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ
Σ Σ Σ
ΑΛΗΘΗ ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ
Σ Σ
ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ
Σ
ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ
Σ
169 / 680
8.1.1 Εντολή ΑΝ
Μετατροπές
Α ⇔ x > 0
Β ⇔ y > 0
Α ΚΑΙ
Α Β ΟΧΙ Β Α ΚΑΙ Β ΟΧΙ(Α ΚΑΙ Β) ΚΑΙ ΟΧΙ(Α ΚΑΙ OXI(Β))
ΟΧΙ(Β)
ΑΛΗΘΗ ΑΛΗΘΗ ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ
Σ Σ Σ
ΑΛΗΘΗ ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ ΨΕΥΔΗΣ
Σ Σ
ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ
Σ
ΑΛΗΘΗ
ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΨΕΥΔΗΣ ΑΛΗΘΗΣ
Σ
ΟΧΙ(Α ΚΑΙ Β) ΚΑΙ ΟΧΙ(Α ΚΑΙ ΟΧΙ(Β)) ⇔ ΟΧΙ(Α)
170 / 680
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Μετατροπές
8.1.1 Εντολή ΑΝ
Παραδείγματα (Θέματα Πανελλαδικών)
177 / 680
8.1.1 Εντολή ΑΝ
Παραδείγματα (Θέματα Πανελλαδικών)
178 / 680
180 / 680
o Αριθμητική πράξη
oΣυγκριτική πράξη
<λίστα-τιμών-Ν>: οι τιμές που μπορεί να πάρει μια
έκφραση. Οι τιμές αυτές μπορεί να είναι διακριτές τιμές,
περιοχή τιμών από…έως ή να υπακούν σε μια συνθήκη.
181 / 680
Τρόπος εκτέλεσης
182 / 680
183 / 680
184 / 680
186 / 680
187 / 680
188 / 680
189 / 680
Ενότητα §3.1.2
190 / 680
Παράδειγμα
Μία εταιρεία ταχυδροµικών υπηρεσιών εφαρµόζει για τα έξοδα
αποστολής ταχυδροµικών επιστολών εσωτερικού και
εξωτερικού, χρέωση σύµφωνα µε τον παρακάτω πίνακα:
191 / 680
Παρατήρηση
Αν αλλάξετε κάποια από τα <= με <, ο κώδικας εξακολουθεί να
υπολογίζει τη χρέωση κανονικά! Ποια είναι αυτά;
194 / 680
Παρατήρηση
Αν αλλάξετε κάποια από τα <= με <, ο κώδικας εξακολουθεί να
υπολογίζει τη χρέωση κανονικά! Ποια είναι αυτά;
195 / 680
2006 επάν. / 3ο
o Διάρκεια στάθμευσης σε πάρκινγκ (χρειάζεται και
επανάληψη)
196 / 680
197 / 680
198 / 680
Διάγραμμα ροής
st=>start: Αρχή
cond=>condition: συνθήκη
op=>operation: εντολές
e=>end: Τέλος
st->cond
cond(yes,right)->op(top)->cond
cond(no)->e
199 / 680
200 / 680
Τυπικές Χρήσεις
!Γνωστό πλήθος επαναλήψεων, με "μετρητή"
α <- 1
ΟΣΟ α <= 10 ΕΠΑΝΑΛΑΒΕ
…
α <- α + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Μη γνωστό πλήθος επαναλήψεων, με "τιμή φρουρό"
ΔΙΑΒΑΣΕ α
ΟΣΟ α <> 0 ΕΠΑΝΑΛΑΒΕ
…
ΔΙΑΒΑΣΕ α
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
201 / 680
Τυπικές Χρήσεις
!Γνωστό πλήθος επαναλήψεων, με "μετρητή"
α <- 1
ΟΣΟ α <= 10 ΕΠΑΝΑΛΑΒΕ
…
α <- α + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Μη γνωστό πλήθος επαναλήψεων, με "τιμή φρουρό"
ΔΙΑΒΑΣΕ α
ΟΣΟ α <> 0 ΕΠΑΝΑΛΑΒΕ
…
ΔΙΑΒΑΣΕ α
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
202 / 680
Παραδείγματα
Παράδειγμα 7. Εκτύπωση διαδοχικών αριθμών με
επαναληπτική εντολή: ΟΣΟ…ΕΠΑΝΑΛΑΒΕ
Να γραφεί αλγόριθμος που να εμφανίζει τους αριθμούς από 1
έως 100.
203 / 680
204 / 680
205 / 680
206 / 680
207 / 680
Όταν η επανάληψη δεν εξαρτάται άμεσα από τις τιμές που μου
δίνει ο χρήστης, συχνά συναντάω μια ΔΙΑΒΑΣΕ ως πρώτη εντολή
της ΟΣΟ.
Σ <- 0
ΟΣΟ Σ < 1000 ΕΠΑΝΑΛΑΒΕ
ΔΙΑΒΑΣΕ Α
Σ <- Σ + Α
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ
208 / 680
Σ <- 0
ΔΙΑΒΑΣΕ Α
ΟΣΟ Α > 0 ΕΠΑΝΑΛΑΒΕ
Σ <- Σ + Α
ΔΙΑΒΑΣΕ Α
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ
Μία ακριβώς πριν την ΟΣΟ (για την πρώτη επανάληψη) και μία ως
τελευταία εντολή μέσα στην ΟΣΟ (για κάθε επόμενη επανάληψη).
209 / 680
Σ <- 0
ΔΙΑΒΑΣΕ Α
ΟΣΟ Α > 0 ΕΠΑΝΑΛΑΒΕ
Σ <- Σ + Α
ΔΙΑΒΑΣΕ Α
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ
Μία ακριβώς πριν την ΟΣΟ (για την πρώτη επανάληψη) και μία ως
τελευταία εντολή μέσα στην ΟΣΟ (για κάθε επόμενη επανάληψη).
210 / 680
Σ <- 0
ΔΙΑΒΑΣΕ Α
ΟΣΟ Α > 0 ΕΠΑΝΑΛΑΒΕ
ΔΙΑΒΑΣΕ Β, Γ
Σ <- Σ + Α + Β + Γ
ΔΙΑΒΑΣΕ Α
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ
211 / 680
Υλοποίηση με σημαία
!Επαναληπτική είσοδος και άθροισμα θετικών αριθμών
πλ <- 0
Σ <- 0
break <- ΨΕΥΔΗΣ
ΟΣΟ ΟΧΙ break ΕΠΑΝΑΛΑΒΕ
ΔΙΑΒΑΣΕ α
ΑΝ α <= 0 ΤΟΤΕ
break <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
πλ <- πλ + 1
Σ <- Σ + α
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Άθροισμα: ', Σ
ΑΝ πλ > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Μέσος όρος: ', Σ/πλ
ΤΕΛΟΣ_ΑΝ
213 / 680
214 / 680
ΠΡΟΓΡΑΜΜΑ Άθροισμα
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:Χ, Άθροισμα, Πλήθος
ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ
ΑΡΧΗ
Πλήθος <- 0
Άθροισμα <- 0
ΓΡΑΨΕ 'Δώσε Αριθμό'
ΔΙΑΒΑΣΕ X
ΟΣΟ Χ<>0 ΕΠΑΝΑΛΑΒΕ
Άθροισμα <- Άθροισμα + Χ
Πλήθος <- Πλήθος + 1
ΓΡΑΨΕ 'Δώσε Αριθμό'
ΔΙΑΒΑΣΕ X
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ Πλήθος > 0 ΤΟΤΕ
ΜΟ <- Άθροισμα / Πλήθος
ΓΡΑΨΕ 'Το Άθροισμα είναι: ', Άθροισμα
ΓΡΑΨΕ 'Ο Μέσος όρος είναι: ', ΜΟ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Δεν δόθηκαν στοιχεία'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
215 / 680
Παρατηρήσεις
Η χρήση τιμών για τον τερματισμό μίας επαναληπτικής
διαδικασίας, όπως στο παράδειγμα η αυθαίρετη επιλογή του 0,
είναι συνήθης στον προγραμματισμό.
216 / 680
Ασκήσεις
Εμφάνιση αριθμών από 1 έως Ν
217 / 680
Ασκήσεις
Εμφάνιση αριθμών από 1 έως Ν
ΔΙΑΒΑΣΕ Ν
i <- 1
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
218 / 680
Ασκήσεις
Εμφάνιση άρτιων/περιττών αριθμών από 1 έως Ν
219 / 680
Ασκήσεις
Εμφάνιση άρτιων/περιττών αριθμών από 1 έως Ν
ΔΙΑΒΑΣΕ Ν
i <- 1
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <- 2
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
220 / 680
Ασκήσεις
Εμφάνιση άρτιων/περιττών αριθμών από 1 έως Ν
ΔΙΑΒΑΣΕ Ν
i <- 1
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
ΑΝ i MOD 2 = 1 ΤΟΤΕ
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΑΝ
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <- 1
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
ΑΝ i MOD 2 = 0 ΤΟΤΕ
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΑΝ
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
221 / 680
Ασκήσεις
Εμφάνιση αριθμών από Ν έως 1
222 / 680
Ασκήσεις
Εμφάνιση αριθμών από Ν έως 1
ΔΙΑΒΑΣΕ Ν
i <- Ν
ΟΣΟ i >= 1 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
223 / 680
Ασκήσεις
Εμφάνιση αριθμών από Ν έως 1
ΔΙΑΒΑΣΕ Ν
i <- 1
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ Ν - i + 1
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
224 / 680
Ασκήσεις
Εμφάνιση προπαίδειας αριθμού Ν
225 / 680
Ασκήσεις
Εμφάνιση προπαίδειας αριθμού Ν
ΔΙΑΒΑΣΕ Ν
i <- Ν
ΟΣΟ i <= Ν * 10 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i + Ν
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
226 / 680
Ασκήσεις
Εμφάνιση προπαίδειας αριθμού Ν
ΔΙΑΒΑΣΕ Ν
i <- 1
ΟΣΟ i <= 10 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i, 'x', Ν, '=', i*Ν
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
227 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος των αριθμών μεταξύ Μ & Ν
ΔΙΑΒΑΣΕ Μ, Ν !Μ ≤ Ν
Σ <- 0
i <- Μ
ΟΣΟ i <= Ν ΕΠΑΝΑΛΑΒΕ
Σ <- Σ + i
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ, Σ/(Ν-Μ+1)
229 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος βαθμολογίας ενός μαθητή ("τιμή
φρουρός")
230 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος βαθμολογίας ενός μαθητή ("τιμή
φρουρός")
Σ <- 0
πλ <- 0
ΔΙΑΒΑΣΕ β
ΟΣΟ β > 0 ΕΠΑΝΑΛΑΒΕ
Σ <- Σ + β
ΔΙΑΒΑΣΕ β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Άθροισμα βαθμολογίας: ', Σ
ΑΝ πλ > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Μέσος όρος βαθμολογίας: ', Σ/πλ
ΤΕΛΟΣ_ΑΝ
231 / 680
Ασκήσεις
Πλήθος & Ποσοστό μαθητών που πέρασαν το μάθημα ("τιμή
φρουρός")
232 / 680
Ασκήσεις
Πλήθος & Ποσοστό μαθητών που πέρασαν το μάθημα ("τιμή
φρουρός")
πλ_π <- 0
πλ <- 0
ΔΙΑΒΑΣΕ β
ΟΣΟ β > 0 ΕΠΑΝΑΛΑΒΕ
ΑΝ β >= 9.5 ΤΟΤΕ
πλ_π <- πλ_π + 1
ΤΕΛΟΣ_ΑΝ
πλ <- πλ + 1
ΔΙΑΒΑΣΕ β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Πλήθος μαθητών που πέρασαν: ', πλ_π
ΑΝ πλ > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ποσοστό μαθητών που πέρασαν: ', πλ_π/πλ
ΤΕΛΟΣ_ΑΝ
233 / 680
Ασκήσεις
Καλύτερη & χειρότερη βαθμολογία σε μάθημα ("τιμή
φρουρός")
234 / 680
8.2.1 Εντολή ΟΣΟ…ΕΠΑΝΑΛΑΒΕ
Ασκήσεις
Καλύτερη & χειρότερη βαθμολογία σε μάθημα ("τιμή
φρουρός")
!Αρχικοποίηση με αυθαίρετες τιμές
min <- 21 !Γιατί επιλέχθηκαν αυτές οι τιμές για
αρχικοποίηση;
max <- -1
ΔΙΑΒΑΣΕ β
ΟΣΟ β > 0 ΕΠΑΝΑΛΑΒΕ
ΑΝ β < min ΤΟΤΕ
min <- β
ΤΕΛΟΣ_ΑΝ
ΑΝ β > max ΤΟΤΕ !Προσοχή, όχι σε ΑΛΛΙΩΣ_ΑΝ. Γιατί;
max <- β
ΤΕΛΟΣ_ΑΝ
ΔΙΑΒΑΣΕ β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ β > 0 ΤΟΤΕ
ΓΡΑΨΕ min, max
ΜΕΧΡΙΣ_ΟΤΟΥ
235 / 680
Ασκήσεις
Καλύτερη & χειρότερη βαθμολογία σε μάθημα ("τιμή
φρουρός")
ΔΙΑΒΑΣΕ β
!Αρχικοποίηση με πραγματική τιμή
min <- β
max <- β
ΟΣΟ β > 0 ΕΠΑΝΑΛΑΒΕ
!Στην 1η επανάληψη και οι δύο συνθήκες είναι `ΨΕΥΔΗΣ`
!Θα μπορούσαμε να ανεβάσουμε τη `ΔΙΑΒΑΣΕ β` εδώ;
ΑΝ β < min ΤΟΤΕ
min <- β
ΑΛΛΙΩΣ_ΑΝ β > max ΤΟΤΕ !Εδώ το ΑΛΛΙΩΣ_ΑΝ "επιτρέπεται". Γιατί;
max <- β
ΤΕΛΟΣ_ΑΝ
ΔΙΑΒΑΣΕ β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ β > 0 ΤΟΤΕ
ΓΡΑΨΕ min, max
ΜΕΧΡΙΣ_ΟΤΟΥ
236 / 680
8.2.1 Εντολή ΟΣΟ…ΕΠΑΝΑΛΑΒΕ
Ασκήσεις
Αγορές με χρηματικό όριο
όριο <- 1000 !€
σύνολο <- 0
ΔΙΑΒΑΣΕ τιμή
ΟΣΟ σύνολο + τιμή <= όριο ΕΠΑΝΑΛΑΒΕ
σύνολο <- σύνολο + τιμή
ΔΙΑΒΑΣΕ τιμή
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Σύνολο αγορών: ', σύνολο
ΓΡΑΨΕ 'Υπόλοιπο: ', όριο - σύνολο
237 / 680
Ασκήσεις
Επαναληπτική αποθήκευση αρχείων σε αποθηκευτικό μέσο
χωρητικότητα <- 1500 !ΜΒ
ελεύθερο <- χωρητικότητα
πλ <- 0
ΔΙΑΒΑΣΕ μέγεθος !αρχείου
ΟΣΟ ελεύθερο >= μέγεθος ΕΠΑΝΑΛΑΒΕ
ελεύθερο <- ελεύθερο - μέγεθος
πλ <- πλ + 1
ΔΙΑΒΑΣΕ μέγεθος
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Συνολικό μέγεθος αρχείων: ', (χωρητικότητα - ελεύθερο)
238 / 680
Σύνταξη
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
<εντολές>
ΜΕΧΡΙΣ_ΟΤΟΥ <συνθήκη>
239 / 680
Λειτουργία
Διαφορές με την ΟΣΟ
Τουλάχιστον μία φορά ≠ Μπορεί και καμία φορά
Συνθήκη τερματισμού ≠ Συνθήκη επανάληψης
240 / 680
Διάγραμμα ροής
st=>start: Αρχή
e=>end: Τέλος
op=>operation: εντολές
cond=>condition: συνθήκη
st->op->cond
cond(yes)->e
cond(no)->op
242 / 680
Παραδείγματα
243 / 680
244 / 680
245 / 680
246 / 680
247 / 680
248 / 680
Παράδειγμα. Συνδυασμός
Να γραφεί πρόγραμμα που να διαβάζει διαδοχικά τους βαθμούς
ενός μαθητή. Μετά από κάθε βαθμό το πρόγραμμα θα ρωτάει αν
θέλουμε να συνεχίσουμε/σταματήσουμε. Απαιτείται
έλεγχος εγκυρότητας τιμών.
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ α, β, γ
ΓΡΑΨΕ (α+β+γ) / 3
ΓΡΑΨΕ 'Θέλετε να συνεχίσετε; (Ν/Ο)'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ απ
ΜΕΧΡΙΣ_ΟΤΟΥ απ = 'Ν' Η απ = 'Ο'
ΜΕΧΡΙΣ_ΟΤΟΥ απ = 'Ο'
253 / 680
Παράδειγμα. Συνδυασμός
Να γραφεί πρόγραμμα που να διαβάζει διαδοχικά τους βαθμούς
ενός μαθητή. Μετά από κάθε βαθμό το πρόγραμμα θα ρωτάει αν
θέλουμε να συνεχίσουμε/σταματήσουμε. Απαιτείται
έλεγχος εγκυρότητας τιμών.
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ α, β, γ
ΓΡΑΨΕ (α+β+γ) / 3
ΓΡΑΨΕ 'Θέλετε να συνεχίσετε; (Ν/Ο)'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ απ
ΜΕΧΡΙΣ_ΟΤΟΥ απ = 'Ν' Η απ = 'Ο'
ΜΕΧΡΙΣ_ΟΤΟΥ απ = 'Ο'
254 / 680
Παράδειγμα. Συνδυασμός
Να γραφεί πρόγραμμα που να διαβάζει διαδοχικά τους βαθμούς
ενός μαθητή. Μετά από κάθε βαθμό το πρόγραμμα θα ρωτάει αν
θέλουμε να συνεχίσουμε/σταματήσουμε. Απαιτείται
έλεγχος εγκυρότητας τιμών.
!Υλοποίηση με ΟΣΟ για σύγκριση
απ <- 'N'
ΟΣΟ απ = 'Ν' ΕΠΑΝΑΛΑΒΕ
ΔΙΑΒΑΣΕ α, β, γ
ΓΡΑΨΕ (α+β+γ) / 3
ΓΡΑΨΕ 'Θέλετε να συνεχίσετε; (Ν/Ο)'
ΔΙΑΒΑΣΕ απ
ΟΣΟ απ <> 'Ν' ΚΑΙ απ <> 'Ο' ΕΠΑΝΑΛΑΒΕ
ΔΙΑΒΑΣΕ απ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
255 / 680
258 / 680
ΠΡΟΓΡΑΜΜΑ Άθροισμα2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: X, Άθροισμα, Πλήθος
ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ
ΧΑΡΑΚΤΗΡΕΣ: Επιλογή
ΑΡΧΗ
Πλήθος <- 0
Άθροισμα <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
! Έλεγχος δεδομένων
ΓΡΑΨΕ 'Δώσε Αριθμό'
ΔΙΑΒΑΣΕ X
ΑΝ Χ <= 0 ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος Αριθμός, Παρακαλώ δώστε ξανά…'
ΤΕΛΟΣ_ΑΝ
! Αν το X δεν είναι θετικό εισάγουμε νέο αριθμό
ΜΕΧΡΙΣ_ΟΤΟΥ Χ > 0
Άθροισμα <- Άθροισμα + Χ
Πλήθος <- Πλήθος + 1
ΓΡΑΨΕ 'Νέα μέτρηση ;'
ΔΙΑΒΑΣΕ Επιλογή
! Αν η επιλογή είναι Ο ή ο τότε σταματάει η επανάληψη
ΜΕΧΡΙΣ_ΟΤΟΥ Επιλογή = 'Ο' Η Επιλογή = 'ο'
ΜΟ <- Άθροισμα / Πλήθος
ΓΡΑΨΕ 'Άθροισμα = ', Άθροισμα
ΓΡΑΨΕ 'Μέσος όρος = ', ΜΟ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
259 / 680
260 / 680
261 / 680
Σύνταξη
ΓΙΑ <μετρητής> ΑΠΟ <αρχική-τιμή> ΜΕΧΡΙ <τελική-τιμή> [ΜΕ_ΒΗΜΑ <βήμα>]
<εντολές>
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
262 / 680
Χρήση
Όταν ο αριθμός των φορών που θα εκτελεστεί μια επαναληπτική
διαδικασία είναι γνωστός εκ των προτέρων, τότε είναι
προτιμότερο να χρησιμοποιείται η εντολή ΓΙΑ…ΑΠΟ…ΜΕΧΡΙ.
Επίσης οι τιμές ΑΠΟ, ΜΕΧΡΙ και ΒΗΜΑ δεν είναι απαραίτητο να είναι
ακέραιες. Μπορούν να λάβουν οποιαδήποτε πραγματική τιμή.
Για παράδειγμα, όταν ζητείται να βρεθούν διαδοχικές τιμές μιας
συνάρτησης f(x) για x από 0 έως 1, τότε μπορεί να γραφεί η
επόμενη εντολή: ΓΙΑ x ΑΠΟ 0 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ 0.01
263 / 680
2.4.5 Δομή Επανάληψης
Εντολή ΓΙΑ
ΑΝ z = 0 ΤΟΤΕ
ΓΡΑΨΕ 'Ατέρμων βρόχος'
ΑΛΛΙΩΣ
απ <- (y-x)/z
ΑΝ απ > 0 ΤΟΤΕ ! y-x, z: ομόσημα
αρ_επαναλήψεων <- Α_Μ(απ) + 1
ΑΛΛΙΩΣ ! y-x, z: ετερόσημα
αρ_επαναλήψεων <- 0
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
264 / 680
Ασκήσεις
Εμφάνιση αριθμών από 1 έως Ν
265 / 680
Ασκήσεις
Εμφάνιση αριθμών από 1 έως Ν
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
266 / 680
Ασκήσεις
Εμφάνιση άρτιων/περιττών αριθμών από 1 έως Ν
267 / 680
Ασκήσεις
Εμφάνιση άρτιων/περιττών αριθμών από 1 έως Ν
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν ΜΕ_ΒΗΜΑ 2
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν ΜΕ_ΒΗΜΑ 2
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
268 / 680
Ασκήσεις
Εμφάνιση άρτιων/περιττών αριθμών από 1 έως Ν
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΝ i MOD 2 = 1 ΤΟΤΕ
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΝ i MOD 2 = 0 ΤΟΤΕ
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Ποια μέθοδος είναι "καλύτερη";
269 / 680
Ασκήσεις
Εμφάνιση αριθμών από Ν έως 1
270 / 680
Ασκήσεις
Εμφάνιση αριθμών από Ν έως 1
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ Ν ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
271 / 680
Ασκήσεις
Εμφάνιση αριθμών από Ν έως 1
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ Ν+1-i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Π.χ.
!ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
! ΓΡΑΨΕ 101-i
272 / 680
Ασκήσεις
Εμφάνιση προπαίδειας αριθμού Ν
273 / 680
Ασκήσεις
Εμφάνιση προπαίδειας αριθμού Ν
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ i, 'x', Ν, '=', i*Ν
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
274 / 680
Ασκήσεις
Εμφάνιση αριθμών μεταξύ Μ & Ν
275 / 680
Ασκήσεις
Εμφάνιση αριθμών μεταξύ Μ & Ν
ΔΙΑΒΑΣΕ Μ, Ν !M<=N
ΓΙΑ i ΑΠΟ Μ ΜΕΧΡΙ Ν
ΓΡΑΨΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
276 / 680
Ασκήσεις
Εμφάνιση αριθμών μεταξύ Μ & Ν
ΔΙΑΒΑΣΕ Μ, Ν !M<=N
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν-Μ+1
ΓΡΑΨΕ i+Μ-1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Π.χ.
!ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 41 !(50-10+1)
! ΓΡΑΨΕ (10-1) + i
277 / 680
Ασκήσεις
Εμφάνιση "αυθαίρετων" ακολουθιών αριθμών
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
…
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
1,4,7,10,13,16,19,22,25,28
60,54,48,42,36,30,24,18,12,6
2,9,4,7,6,5,8,3,10,1
από -9 έως 10
2,36,4,32,6,28,8,24,10,20,12,16,14,12,16,8,18,4,20,0
278 / 680
Ασκήσεις
Παραδείγματα
Παράδειγμα 10. Υπολογισμός αθροίσματος αριθμών με
επαναληπτική εντολή: ΓΙΑ…ΑΠΟ…ΜΕΧΡΙ
Να βρεθεί και να εκτυπωθεί το άθροισμα των 100 ακεραίων από
το 1 μέχρι το 100.
279 / 680
280 / 680
281 / 680
Τρόπος εκτέλεσης
Στην εντολή αυτή χρησιμοποιείται μια <μεταβλητή> στην οποία
αρχικά καταχωρίζεται η <τιμή1>. Η τιμή που παίρνει η <μεταβλητή>
συγκρίνεται με τη <τιμή2> και εφόσον είναι μικρότερη ή ίση από
αυτή, τότε εκτελούνται οι εντολές που βρίσκονται στον βρόχο.
282 / 680
1. Βήμα = 1:
παραλείπεται το ΜΕ_ΒΗΜΑ 1 και η μεταβλητή
αυξάνεται κατά +1.
2. Βήμα > 0: τότε πρέπει να ισχύει τιμή1 ≤ τιμή2 για να
εκτελεστεί τουλάχιστον μία φορά ο βρόχος.
3. Βήμα < 0: τότε πρέπει να ισχύει τιμή1 ≥ τιμή2 για να
εκτελεστεί τουλάχιστον μία φορά ο βρόχος.
4. Βήμα = 0: τότε ο βρόχος είναι ατέρμων.
283 / 680
Παρατηρήσεις
1. Μέσα στην εντολή «ΓΙΑ…ΑΠΟ…ΜΕΧΡΙ…» δεν επιτρέπεται να
αλλάξει η τιμή της <μεταβλητής> του ΓΙΑ, διότι τότε δε
λειτουργεί σωστά η εντολή επανάληψης.
2. Το βήμα δεν είναι απαραίτητο να είναι ακέραιος αριθμός.
Μπορεί να πάρει οποιαδήποτε πραγματική τιμή.
3. Μια εντολή επανάληψης «ΓΙΑ…» μπορεί να μετατραπεί σε
«ΟΣΟ…ΕΠΑΝΑΛΑΒΕ» και «ΜΕΧΡΙΣ_ΟΤΟΥ…», ενώ το αντίστροφο δεν
ισχύει πάντα.
284 / 680
285 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος των αριθμών μεταξύ 1 & 100
286 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος των αριθμών μεταξύ Μ & Ν
288 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος των αριθμών μεταξύ Μ & Ν
ΔΙΑΒΑΣΕ Μ, Ν !Μ ≤ Ν
Σ <- 0
ΓΙΑ i ΑΠΟ Μ ΜΕΧΡΙ Ν
Σ <- Σ + i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ, Σ/(Ν-Μ+1)
289 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος επιδόσεων Ν αθλητών
290 / 680
Ασκήσεις
Άθροισμα & Μέσος όρος επιδόσεων Ν αθλητών
Σ <- 0
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ επίδ
Σ <- Σ + επίδ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Άθροισμα: ', Σ, ' Μέσος όρος: ', Σ/Ν
291 / 680
Ασκήσεις
Πλήθος & Ποσοστό αθλητών που πέρασαν τα 10 μέτρα
292 / 680
Ασκήσεις
Πλήθος & Ποσοστό αθλητών που πέρασαν τα 10 μέτρα
πλ_π <- 0
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ επίδ
ΑΝ επίδ >= 10 ΤΟΤΕ
πλ_π <- πλ_π + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Πλήθος: ', πλ_π, ' Ποσοστό: ', πλ_π/Ν
293 / 680
Ασκήσεις
Πλήθος & Ποσοστό αθλητών με επίδοση κοντά στα 10 μέτρα
(± μισό μέτρο)
294 / 680
Ασκήσεις
Καλύτερη & χειρότερη επίδοση από Ν αθλητές
Αρχικοποίηση με αυθαίρετες τιμές
296 / 680
Ασκήσεις
Καλύτερη & χειρότερη επίδοση από Ν αθλητές
Αρχικοποίηση με αυθαίρετες τιμές
min <- 9999 !Γιατί επιλέχθηκαν αυτές οι τιμές;
max <- -1
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ επίδ
ΑΝ επίδ < min ΤΟΤΕ
min <- επίδ
ΤΕΛΟΣ_ΑΝ
ΑΝ επίδ > max ΤΟΤΕ !Προσοχή, όχι σε ΑΛΛΙΩΣ_ΑΝ. Γιατί;
max <- επίδ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Χειρότερη επίδοση: ', min, ' Καλύτερη επίδοση: ', max
297 / 680
8.2.3 Εντολή ΓΙΑ…ΑΠΟ…ΜΕΧΡΙ
Ασκήσεις
Καλύτερη & χειρότερη επίδοση από Ν αθλητές
Αρχικοποίηση στην 1η επανάληψη
298 / 680
Ασκήσεις
Καλύτερη & χειρότερη επίδοση από Ν αθλητές
Αρχικοποίηση στην 1η επανάληψη
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ επίδ
ΑΝ i = 1 ΤΟΤΕ
min <- επίδ
max <- επίδ
ΑΛΛΙΩΣ_ΑΝ επίδ < min ΤΟΤΕ !Εδώ το ΑΛΛΙΩΣ_ΑΝ "επιτρέπεται". Γιατί;
min <- επίδ
ΑΛΛΙΩΣ_ΑΝ επίδ > max ΤΟΤΕ
max <- επίδ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Χειρότερη επίδοση: ', min, ' Καλύτερη επίδοση: ', max
299 / 680
Ασκήσεις
Καλύτερη & χειρότερη βαθμολογία από Ν μαθητές
Αρχικοποίηση με πραγματική τιμή
300 / 680
Ασκήσεις
Όνομα αθλητή που κέρδισε το αγώνισμα
Αρχικοποίηση με αυθαίρετη τιμή
302 / 680
Ασκήσεις
Όνομα αθλητή που κέρδισε το αγώνισμα
Αρχικοποίηση με αυθαίρετη τιμή
max <- -1
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ όνομα, επίδ
ΑΝ επίδ > max ΤΟΤΕ
max <- επίδ
max_όνομα <- όνομα
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Νικητής: ', max_όνομα
303 / 680
Ασκήσεις
Όνομα αθλητή που κέρδισε το αγώνισμα
Αρχικοποίηση με πραγματική τιμή
304 / 680
Ασκήσεις
Όνομα αθλητή που κέρδισε το αγώνισμα
Αρχικοποίηση με πραγματική τιμή
ΔΙΑΒΑΣΕ όνομα, επίδ
max <- επίδ
max_όνομα <- όνομα !Εδώ θέλει αρχικοποίηση και το max_όνομα
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ όνομα, επίδ
ΑΝ επίδ > max ΤΟΤΕ
max <- επίδ
max_όνομα <- όνομα
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Νικητής: ', max_όνομα
305 / 680
Ασκήσεις
Πλήθος μαθητών με την καλύτερη βαθμολογία
306 / 680
Ασκήσεις
Σημαιοφόρος και 2 παραστάτες από Ν μαθητές
308 / 680
Ασκήσεις
Σημαιοφόρος και 2 παραστάτες από Ν μαθητές
max1 <- -1
max2 <- -1
max3 <- -1
max1_ον <- ''
max2_ον <- ''
max3_ον <- '' !Είναι αναγκαία αυτή η αρχικοποίηση;
ΔΙΑΒΑΣΕ Ν
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ μο, όνομα
ΑΝ μο > max1 ΤΟΤΕ
max3 <- max2
max2 <- max1
max1 <- μο
max3_ον <- max2_ον
max2_ον <- max1_ον
max1_ον <- όνομα
ΑΛΛΙΩΣ_ΑΝ μο > max2 ΤΟΤΕ
max3 <- max2
max2 <- μο
max3_ον <- max2_ον
max2_ον <- όνομα
ΑΛΛΙΩΣ_ΑΝ μο > max3 ΤΟΤΕ
max3 <- μο
max3_ον <- όνομα
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Σημαιοφόρος: ', max1_ον
ΓΡΑΨΕ 'Παραστάτες: ', max2_ον, ', ', max3_ον
309 / 680
310 / 680
311 / 680
Παράδειγμα
Να συμπληρωθεί η εντολή ΓΡΑΨΕ ώστε να εμφανίζονται όλοι οι
αριθμοί μεταξύ 1 και 100
ΠΡΟΓΡΑΜΜΑ Παράδειγμα_εμφωλευμένων_Για
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: i, j
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 10
ΓΡΑΨΕ …
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
312 / 680
Άσκηση 1
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα 10 αθλητών
στο άλμα εις μήκος. Για κάθε αθλητή, να διαβάζει τις τρεις
προσπάθειες που έκανε, ελέγχοντας ότι είναι τιμές πάνω από 0
και μέχρι 10, και να υπολογίζει και να εμφανίζει τον μέσο όρο
από αυτές. Τέλος, να εμφανίζει το όνομα του αθλητή με την
καλύτερη προσπάθεια όλων, αλλά και τη σειρά που αγωνίστηκε ο
αθλητής με τον χειρότερο μέσο όρο προσπαθειών.
313 / 680
316 / 680
Άσκηση 2
ΠΡΟΓΡΑΜΜΑ Εμφωλευμένοι_Βρόχοι_2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: i, β, Σ, πλ, max, πλ_18
ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ
ΑΡΧΗ
πλ_18 <- 0
!Για κάθε μαθητή
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 25
Σ <- 0
πλ <- 0
ΔΙΑΒΑΣΕ β
max <- β
!Για κάθε βαθμολογία
ΟΣΟ β <> 0 ΕΠΑΝΑΛΑΒΕ
Σ <- Σ + β
πλ <- πλ + 1
ΑΝ β > max ΤΟΤΕ
max <- β
ΤΕΛΟΣ_ΑΝ
ΔΙΑΒΑΣΕ β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ πλ > 0 ΤΟΤΕ
ΜΟ <- Σ/πλ
ΓΡΑΨΕ 'Μέσος όρος ', i, 'ου μαθητή: ', Σ/πλ
ΑΝ ΜΟ >= 18 ΤΟΤΕ
πλ_18 <- πλ_18 + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Ποσοστό μαθητών που αρίστευσαν: ', πλ_18/25
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
317 / 680
8.2.3 Εντολή ΓΙΑ…ΑΠΟ…ΜΕΧΡΙ
Εμφωλευμένοι βρόχοι
Άσκηση 3
Να γραφεί πρόγραμμα που να διαβάζει τους μέσους όρους
βαθμολογίας των μαθητών από τα 4 τμήματα της Γ' τάξης ενός
σχολείου. Το πλήθος των μαθητών ανά τμήμα δίνεται από το
χρήστη. Το πρόγραμμα να υπολογίζει και να εμφανίζει το τμήμα
του μαθητή με την καλύτερο μέσο όρο βαθμολογίας, καθώς και
το τμήμα με τους περισσότερους αριστούχους (μέσος όρος
τουλάχιστον 18). Θεωρείστε, και στις δύο περιπτώσεις, ότι το
τμήμα είναι μοναδικό.
318 / 680
Άσκηση 4
Σε έναν αθλητικό μαθητικό αγώνα στίβου, στο αγώνισμα του
μήκους, συμμετέχουν στους προκριματικούς 20 μαθητές από όλα
τα σχολεία της Περιφέρειας. Στον τελικό περνούν όσοι μαθητές
σημειώσουν επίδοση μεγαλύτερη ή ίση από 4.5 μέτρα. Κάθε
αθλητής έχει 3 προσπάθειες. Αν σημειώσει επίδοση ίση ή
μεγαλύτερη από το όριο πρόκρισης, σταματάει τις προσπάθειες.
Να γραφεί πρόγραμμα, που να διαβάζει τις επιδόσεις των
αλμάτων κάθε αθλητή και να υπολογίζει την καλύτερη επίδοσή
του. Να ελέγχει δίνοντας ανάλογο μήνυμα στην οθόνη αν ο
αθλητής προκρίθηκε ή όχι στον τελικό και τελικά να εμφανίζει
στην οθόνη, πόσοι αθλητές προκρίθηκαν και ποια ήταν η
καλύτερη επίδοση που σημειώθηκε.
319 / 680
Άσκηση 5
Σε ένα ταμείο ενός σουπερμάρκετ εξυπηρετούνται οι πελάτες ως
εξής. Όταν ο πελάτης φτάσει στο ταμείο, το μηχάνημα διαβάζει
το αριθμό της κάρτας μέλους και κατόπιν καταχωρούνται ένα-
ένα τα προϊόντα του, πριν η διαδικασία επαναληφθεί για τον
επόμενο. Να γραφεί πρόγραμμα το οποίο, να διαβάζει διαδοχικά
τους αριθμούς των καρτών των πελατών μέχρι να δοθεί ο
αριθμός 0, καθώς και την έκπτωση που έχει συγκεντρώσει κάθε
πελάτης από προηγούμενες αγορές, ελέγχοντας ότι είναι θετικός
αριθμός. Για κάθε προϊόν πελάτη, να διαβάζει διαδοχικά τον
κωδικό, την τιμή κάθε προϊόντος και τον αριθμό τεμαχίων. Όταν
δεν υπάρχει άλλο προϊόν για τον πελάτη να καταχωρείται ο
κωδικός 0. Όσο καταχωρούνται τα προϊόντα για κάθε πελάτη,
ελέγχεται αν η έκπτωση που έχει συγκεντρώσει αρκεί για την
αποπληρωμή του λογαριασμού. Όταν ο λογαριασμός πρόκειται
να ξεπεράσει τη διαθέσιμη έκπτωση, ενημερώνεται ο πελάτης με
κατάλληλο μήνυμα και ερωτάται αν θέλει να συνεχίσει. Αν δεν το
επιθυμεί η διαδικασία διακόπτεται, αλλιώς συνεχίζει η
καταχώριση με τα υπόλοιπα προϊόντα. Στο τέλος της
καταχώρισης εμφανίζεται το ποσό πληρωμής, λαμβάνοντας
υπόψη την έκπτωση. Στο τέλος της βάρδιας να εμφανίζονται οι
συνολικές εισπράξεις για το ταμείο, ο μέσος όρος ανά πελάτη, ο
αριθμός κάρτας μέλους πελάτη με το μεγαλύτερο λογαριασμό και
το ποσοστό των πελατών που επέλεξαν να πληρώσουν μόνο με
την ήδη συγκεντρωμένη έκπτωση.
320 / 680
Άσκηση 5
ΠΡΟΓΡΑΜΜΑ Supermarket
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αρ_κ, κωδ, αρ_τ, πλ_π, πλ_s, max_αρ_κ
ΠΡΑΓΜΑΤΙΚΕΣ: έκπτ, τιμή, λογαρ, max, εισπρ
ΧΑΡΑΚΤΗΡΕΣ: απ
ΛΟΓΙΚΕΣ: stop
ΑΡΧΗ
εισπρ <- 0
πλ_π <- 0
πλ_s <- 0
max <- -1
!Για κάθε πελάτη
ΔΙΑΒΑΣΕ αρ_κ
ΟΣΟ αρ_κ <> 0 ΕΠΑΝΑΛΑΒΕ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ έκπτ
ΜΕΧΡΙΣ_ΟΤΟΥ έκπτ > 0
λογαρ <- 0
πλ_π <- πλ_π + 1
!Για κάθε προϊόν
stop <- ΨΕΥΔΗΣ
ΔΙΑΒΑΣΕ κωδ
ΟΣΟ κωδ <> 0 ΚΑΙ ΟΧΙ stop ΕΠΑΝΑΛΑΒΕ
ΔΙΑΒΑΣΕ τιμή, αρ_τ
ΑΝ λογαρ + τιμή* αρ_τ > έκπτ ΤΟΤΕ
ΓΡΑΨΕ 'Η έκπτωση σας δεν αρκεί για περισσότερα προϊόντα'
ΓΡΑΨΕ 'Θέλετε να σταματήσετε εδώ; (Ν/Ο)'
ΔΙΑΒΑΣΕ απ
ΑΝ απ = 'Ο' ΤΟΤΕ
λογαρ <- λογαρ + τιμή*αρ_τ
ΔΙΑΒΑΣΕ κωδ
ΑΛΛΙΩΣ
stop <- ΑΛΗΘΗΣ
πλ_s <- πλ_s + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ !Προϊόντα
ΑΝ λογαρ > έκπτ ΤΟΤΕ
λογαρ <- λογαρ - έκπτ
έκπτ <- 0
ΑΛΛΙΩΣ
λογαρ <- 0
έκπτ <- έκπτ - λογαρ
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ λογαρ, έκπτ
ΑΝ λογαρ > max ΤΟΤΕ
max <- λογαρ
max_αρ_κ <- αρ_κ
ΤΕΛΟΣ_ΑΝ
εισπρ <- εισπρ + λογαρ
ΔΙΑΒΑΣΕ αρ_κ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ !Πελάτες
ΓΡΑΨΕ εισπρ, max_αρ_κ
ΑΝ πλ_π > 0 ΤΟΤΕ
ΓΡΑΨΕ εισπρ/πλ_π, πλ_s/πλ_π
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
321 / 680
325 / 680
327 / 680
328 / 680
330 / 680
331 / 680
332 / 680
Α Β
45 19 45
90 9 90
18
4
0
36
2
0
72
1 720
0
855
333 / 680
334 / 680
335 / 680
336 / 680
337 / 680
338 / 680
Κριτήριο Αποτελεσματικότητας;
13.1 Κατηγορίες λαθών
Λάθη κατά την εκτέλεση *
339 / 680
Κριτήριο Καθοριστικότητας;
340 / 680
Συντακτικά λάθη 1
Λάθη που οδηγούν σε αντικανονικό τερματισμό του
προγράμματος 2
Λογικά λάθη που παράγουν λανθασμένα αποτελέσματα
341 / 680
342 / 680
344 / 680
345 / 680
ΠΛΗΡΟΦΟΡΙΚΗ - Βιβλίο Μαθητή - Συμπληρωματικό Εκπαιδευτικό Υλικό, §5.1.1, Δραστηριότητα 1,
σελ.116
347 / 680
Το παράδειγμα περιέχει και ένα συντακτικό λάθος, στη δήλωση της μεταβλητής
348 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
Σε μια δομή επιλογής μπορεί να εμφανιστούν λογικά λάθη που
σχετίζονται με:
349 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
350 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
Παράδειγμα
Τι θα εμφανιστεί για ένα μαθητή που πήρε βαθμό 16;
ΔΙΑΒΑΣΕ β
ΑΝ β >= 18 ΤΟΤΕ
ΓΡΑΨΕ 'ΑΡΙΣΤΑ'
ΑΛΛΙΩΣ_ΑΝ β >= 10 ΤΟΤΕ
ΓΡΑΨΕ 'ΚΑΛΩΣ'
ΑΛΛΙΩΣ_ΑΝ β >= 14 ΤΟΤΕ
ΓΡΑΨΕ 'ΛΙΑΝ ΚΑΛΩΣ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'ΡΑΝΤΕΒΟΥ ΤΟ ΣΕΠΤΕΜΒΡΗ'
ΤΕΛΟΣ_ΑΝ
351 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
Παράδειγμα
Για ποιες τιμες του β ο παρακάτω κώδικας δεν θα έχει το
επιθυμητό αποτέλεσμα;
! β ∈ (0,20]
ΔΙΑΒΑΣΕ β
ΑΝ β > 0 ΚΑΙ β < 9.5 ΤΟΤΕ
ΓΡΑΨΕ 'ΡΑΝΤΕΒΟΥ ΤΟ ΣΕΠΤΕΜΒΡΗ'
ΑΛΛΙΩΣ_ΑΝ β < 14 ΤΟΤΕ
ΓΡΑΨΕ 'ΚΑΛΩΣ'
ΑΛΛΙΩΣ_ΑΝ β < 18 ΤΟΤΕ
ΓΡΑΨΕ 'ΛΙΑΝ ΚΑΛΩΣ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'ΑΡΙΣΤΑ'
ΤΕΛΟΣ_ΑΝ
352 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
Παράδειγμα
Ίσως οι "περιττές συνθήκες" να μην είναι πάντα περιττές…
ΔΙΑΒΑΣΕ β
ΑΝ β > 0 ΚΑΙ β < 9.5 ΤΟΤΕ !(0,9.5)
ΓΡΑΨΕ 'ΡΑΝΤΕΒΟΥ ΤΟ ΣΕΠΤΕΜΒΡΗ'
ΑΛΛΙΩΣ_ΑΝ β >= 9.5 ΚΑΙ β < 14 ΤΟΤΕ ![9.5,14)
ΓΡΑΨΕ 'ΚΑΛΩΣ'
ΑΛΛΙΩΣ_ΑΝ β >= 14 ΚΑΙ β < 18 ΤΟΤΕ ![14,18)
ΓΡΑΨΕ 'ΛΙΑΝ ΚΑΛΩΣ'
ΑΛΛΙΩΣ_ΑΝ β >= 18 ΚΑΙ β <= 20 ΤΟΤΕ ![18,20]
ΓΡΑΨΕ 'ΑΡΙΣΤΑ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος βαθμός'
ΤΕΛΟΣ_ΑΝ
353 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
Παράδειγμα
Βοηθάει συχνά να ξεκινάμε από τις λάθος τιμές
ΔΙΑΒΑΣΕ β
ΑΝ β <= 0 Η β > 20 ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος βαθμός'
ΑΛΛΙΩΣ_ΑΝ β < 9.5 ΤΟΤΕ
ΓΡΑΨΕ 'ΡΑΝΤΕΒΟΥ ΤΟ ΣΕΠΤΕΜΒΡΗ'
ΑΛΛΙΩΣ_ΑΝ β < 14 ΤΟΤΕ
ΓΡΑΨΕ 'ΚΑΛΩΣ'
ΑΛΛΙΩΣ_ΑΝ β < 18 ΤΟΤΕ
ΓΡΑΨΕ 'ΛΙΑΝ ΚΑΛΩΣ'
ΑΛΛΙΩΣ !_ΑΝ β <= 20 ΤΟΤΕ
ΓΡΑΨΕ 'ΑΡΙΣΤΑ'
ΤΕΛΟΣ_ΑΝ
354 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
Παράδειγμα
Ισοδύναμα προγράμματα;
ΑΝ Χ > 0 ΤΟΤΕ
Μ <- 'ΘΕΤΙΚΟΣ'
ΓΡΑΨΕ Μ
ΑΛΛΙΩΣ_ΑΝ X < 0 ΤΟΤΕ
Μ <- 'ΑΡΝΗΤΙΚΟΣ'
ΓΡΑΨΕ Μ
ΤΕΛΟΣ_ΑΝ
ΑΝ Χ > 0 ΤΟΤΕ
Μ <- 'ΘΕΤΙΚΟΣ'
ΑΛΛΙΩΣ_ΑΝ X < 0 ΤΟΤΕ
Μ <- 'ΑΡΝΗΤΙΚΟΣ'
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ Μ
355 / 680
5.2 Εκσφαλμάτωση
5.2.1 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής *
356 / 680
5.2 Εκσφαλμάτωση
5.2.2 Εκσφαλμάτωση λογικών λαθών στις δομές επανάληψης *
357 / 680
5.2 Εκσφαλμάτωση
5.2.2 Εκσφαλμάτωση λογικών λαθών στις δομές επανάληψης *
358 / 680
359 / 680
Πίνακες τιμών
ΟΣΟ
o 2009 επάν. / Θέμα 2ο (Λύσεις)
o 2010 επάν. / Θέμα Β2 (Λύσεις)
ΜΕΧΡΙΣ_ΟΤΟΥ
o 2010 / Θέμα Β (Λύσεις)
360 / 680
361 / 680
362 / 680
363 / 680
3.1 Δεδομένα
Τα δεδομένα (data) είναι η αφαιρετική αναπαράσταση της
πραγματικότητας και συνεπώς μία απλοποιημένη όψη της. Για
παράδειγμα, έστω ένα αρχείο μαθητών ενός σχολείου. Τα
χρήσιμα δεδομένα που αποθηκεύονται είναι το ονοματεπώνυμο,
η ηλικία, το φύλο, η τάξη, το τμήμα κ.λπ., όχι όμως το βάρος, το
ύψος κ.λπ. Τα δεδομένα, λοιπόν, είναι ακατέργαστα γεγονότα, και
κάθε φορά η επιλογή τους εξαρτάται από τον τύπο του
προβλήματος. Η συλλογή των ακατέργαστων δεδομένων και ο
συσχετισμός τους δίνει ως αποτέλεσμα την πληροφορία
(information). Δεν είναι εύκολο να δοθεί επακριβής ορισμός της
έννοιας της πληροφορίας, αλλά μπορεί να θεωρηθεί ότι ο
αλγόριθμος είναι το μέσο για την παραγωγή πληροφορίας από
τα δεδομένα. Με βάση τις δεδομένες πληροφορίες λαμβάνονται
διάφορες αποφάσεις και γίνονται ενέργειες. Στη συνέχεια αυτές
οι ενέργειες παράγουν νέα δεδομένα, νέες πληροφορίες, νέες
αποφάσεις, νέες ενέργειες κ.ο.κ. Η μέτρηση, η κωδικοποίηση, η
μετάδοση της πληροφορίας αποτελεί αντικείμενο μελέτης ενός
ιδιαίτερου κλάδου, της Θεωρίας Πληροφοριών (Information
Theory), που είναι ένα ιδιαίτερα σημαντικό πεδίο της
Πληροφορικής.
365 / 680
3.1 Δεδομένα
Μια θέση μνήμης (byte) έχει ως περιεχόμενο 11110001. Η τιμή
μπορεί να παριστάνει:
366 / 680
3.1 Δεδομένα
Όπως η Πληροφορική ορίζεται ως επιστήμη σε συνάρτηση με
την έννοια του αλγορίθμου, κατά τον ίδιο τρόπο η Πληροφορική
ορίζεται και σε σχέση με την έννοια των δεδομένων. Έτσι,
Πληροφορική θεωρείται η επιστήμη που μελετά τα δεδομένα από
τις ακόλουθες σκοπιές:
367 / 680
369 / 680
370 / 680
371 / 680
3.3 Πίνακες
Στατικές Δομές
373 / 680
3.3 Πίνακες
Στην πράξη, οι στατικές δομές υλοποιούνται με πίνακες που μας
είναι γνωστοί από άλλα μαθήματα και υποστηρίζονται από κάθε
γλώσσα προγραμματισμού. Μπορούμε να ορίσουμε τον πίνακα
ως μια δομή που περιέχει στοιχεία του ίδιου τύπου (δηλαδή
ακέραιους, πραγματικούς κ.λπ). Η δήλωση των στοιχείων ενός
πίνακα και η μέθοδος αναφοράς τους εξαρτάται από τη
συγκεκριμένη γλώσσα υψηλού επιπέδου που χρησιμοποιείται.
Όμως, γενικά η αναφορά στα στοιχεία ενός πίνακα γίνεται με τη
χρήση του συμβολικού ονόματος του πίνακα ακολουθούμενου
από την τιμή ενός ή περισσότερων δεικτών (indexes) σε
παρένθεση ή αγκύλη.
374 / 680
3.3 Πίνακες
Ένας πίνακας μπορεί να είναι μονοδιάστατος, αλλά στη
γενικότερη περίπτωση μπορεί να είναι δισδιάστατος,
τρισδιάστατος και γενικά ν-διάστατος πίνακας. Όσον αφορά
στους δισδιάστατους πίνακες σημειώνεται ότι, αν το μέγεθος των
δύο διαστάσεων είναι ίσο, τότε ο πίνακας λέγεται τετραγωνικός
(square) και γενικά συμβολίζεται ως πίνακας n x n. Μάλιστα
μπορούμε να θεωρήσουμε το δισδιάστατο πίνακα ότι είναι ένας
μονοδιάστατος πίνακας, όπου κάθε θέση του περιέχει ένα νέο
μονοδιάστατο πίνακα.
375 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Εισαγωγή στοιχείων
376 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Εισαγωγή στοιχείων
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
377 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Εμφάνιση στοιχείων
378 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Εμφάνιση στοιχείων
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
379 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Αναζήτηση 1
Ταξινόμηση 1
1. Αναλύονται σε ξεχωριστή ενότητα
380 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Αντιγραφή
381 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Αντιγραφή
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
Β[i] <- Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
382 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Συγχώνευση
383 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Συγχώνευση
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ
Γ[i] <- Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
Γ[Μ+i] <- Β[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
384 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Διαχωρισμός
385 / 680
3.3 Πίνακες
Βασικές Λειτουργίες
Διαχωρισμός
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ
Α[i] <- Γ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
Β[i] <- Γ[Μ+i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
386 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
Εύρεση ελάχιστου & μέγιστου
Αρχικοποίηση με αυθαίρετες τιμές
391 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
393 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
397 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
399 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
Εύρεση k "καλύτερων" τιμών
Σε μία επανάληψη (χωρίς ισοβαθμίες)
401 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
403 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
Εύρεση k "καλύτερων" τιμών
Σε k επαναλήψεις (χωρίς ισοβαθμίες)
max1 <- -1
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΝ Π[i] > max1 ΤΟΤΕ
max1 <- Π[i]
θ_max1 <- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
max2 <- -1
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΝ i <> θ_max1 ΤΟΤΕ
ΑΝ ΒΑΘ[i] > max2 ΤΟΤΕ !Ή με σύνθετη λογική έκφραση
max2 <- ΒΑΘ[i]
θ_max2 <- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
max3 <- -1
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΝ i <> θ_max1 ΚΑΙ i <> θ_max2 ΤΟΤΕ
ΑΝ ΒΑΘ[i] > max3 ΤΟΤΕ !Ή με σύνθετη λογική έκφραση
max3 <- ΒΑΘ[i]
θ_max3 <- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ max1, max2, max3
404 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
405 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
407 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
409 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
411 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
3.3 Πίνακες
Τυπικές Επεξεργασίες
413 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
414 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
415 / 680
3.3 Πίνακες
Τυπικές Επεξεργασίες
416 / 680
417 / 680
ΕΞΤΡΑ:
422 / 680
423 / 680
424 / 680
Άσκηση 1
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα και τις βαθμολογίες 50 μαθητών. Στη συνέχεια να
βρίσκει και να εμφανίζει το όνομα του μαθητή με την
μεγαλύτερη βαθμολογία.
425 / 680
Άσκηση 1
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα και τις βαθμολογίες 50 μαθητών. Στη συνέχεια να
βρίσκει και να εμφανίζει το όνομα του μαθητή με την
μεγαλύτερη βαθμολογία.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50
ΔΙΑΒΑΣΕ ΟΝ[i], Β[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
max <- Β[1]
ον_max <- ΟΝ[1] !Αρχικοποιώ και το ον_max
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 50
ΑΝ Β[i] > max ΤΟΤΕ !Αν είχα Β[i] >= max, θα άλλαζε κάτι;
max <- Β[i] !Δε με ενδιαφέρει το max, αλλά το χρειάζομαι
ον_max <- ΟΝ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΟΝ[1] !Αν έχουμε ισοβαθμία;
426 / 680
Άσκηση 2
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα 10 δικτυακών τόπων (websites) και το σύνολο των
επισκέψεων που δέχτηκαν τον προηγούμενο μήνα. Κατόπιν να
υπολογίζει και να εμφανίζει το όνομα του ιστότοπου με τον
αριθμό επισκέψεων που είναι πιο κοντά στο μέσο όρο (θεωρείστε
ότι είναι μοναδικός)
427 / 680
Άσκηση 2
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα 10 δικτυακών τόπων (websites) και το σύνολο των
επισκέψεων που δέχτηκαν τον προηγούμενο μήνα. Κατόπιν να
υπολογίζει και να εμφανίζει το όνομα του ιστότοπου με τον
αριθμό επισκέψεων που είναι πιο κοντά στο μέσο όρο (θεωρείστε
ότι είναι μοναδικός)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
ΔΙΑΒΑΣΕ ΟΝ[i], ΕΠ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Σ <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
Σ <- Σ + ΕΠ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ <- Σ / 10
min <- Α_Τ(ΜΟ - ΕΠ[1]) !ή να φτιάξω πίνακα ΑΠΟΣΤΑΣΕΙΣ[10]
θ_min <- 1 !ή ον_min <- ON[1]
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
απόσταση <- Α_Τ(ΜΟ - ΕΠ[i])
ΑΝ απόσταση < min ΤΟΤΕ
min <- απόσταση
θ_min <- i !ή ον_min <- ON[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΟΝ[θ_min] !ή ΓΡΑΨΕ ον_min
428 / 680
Άσκηση 3
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα, τις καλύτερες επιδόσεις και των αριθμό των
προσπαθειών 50 αθλητών. Νικητής ανακηρύσσεται ο αθλητή που
έχει την καλύτερη επίδοση. Αν υπάρχει ισοβαθμία, τότε νικητής
είναι αυτός με το μικρότερο αριθμό προσπαθειών. Αν υπάρχει
και εκεί ισοβαθμία, τότε ανακηρύσσονται όλοι όσοι ισοβάθμισαν
νικητές.
429 / 680
Άσκηση 3
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα, τις καλύτερες επιδόσεις και των αριθμό των
προσπαθειών 50 αθλητών. Νικητής ανακηρύσσεται ο αθλητή που
έχει την καλύτερη επίδοση. Αν υπάρχει ισοβαθμία, τότε νικητής
είναι αυτός με το μικρότερο αριθμό προσπαθειών. Αν υπάρχει
και εκεί ισοβαθμία, τότε ανακηρύσσονται όλοι όσοι ισοβάθμισαν
νικητές.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50
ΔΙΑΒΑΣΕ ΟΝ[i], ΕΠΙΔ[i], ΠΡΟΣΠ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
θ_max <- 1
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 50
ΑΝ ΕΠΙΔ[i] > ΕΠΙΔ[θ_max] Η
& (ΕΠΙΔ[i] = ΕΠΙΔ[θ_max] ΚΑΙ ΠΡΟΣΠ[i] < ΠΡΟΣΠ[θ_max]) ΤΟΤΕ
θ_max <- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50
ΑΝ ΕΠΙΔ[i] = ΕΠΙΔ[θ_max] ΚΑΙ ΠΡΟΣΠ[i] = ΠΡΟΣΠ[θ_max] ΤΟΤΕ
ΓΡΑΨΕ ΟΝ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
430 / 680
Άσκηση 4
Σε κάποιο άθλημα διαγωνίζονται 20 αθλητές από Ελλάδα και
Κύπρο. Να γραφεί πρόγραμμα που να διαβάζει και να
αποθηκεύει τη χώρα (κάνοντας έλεγχο για 'GR', 'CY') και την
επίδοση των αθλητών. Στη συνέχεια να εμφανίζει τη χώρα του
αθλητή με την καλύτερη επίδοση, τη χώρα με τον καλύτερο μέσο
όσο επιδόσεων και τη χώρα με τους περισσότερους αθλητές.
431 / 680
Άσκηση 4
Σε κάποιο άθλημα διαγωνίζονται 20 αθλητές από Ελλάδα και
Κύπρο. Να γραφεί πρόγραμμα που να διαβάζει και να
αποθηκεύει τη χώρα (κάνοντας έλεγχο για 'GR', 'CY') και την
επίδοση των αθλητών. Στη συνέχεια να εμφανίζει τη χώρα του
αθλητή με την καλύτερη επίδοση, τη χώρα με τον καλύτερο μέσο
όσο επιδόσεων και τη χώρα με τους περισσότερους αθλητές.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
ΔΙΑΒΑΣΕ ΕΠΙΔ[i]
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ ΧΩΡΑ[i]
ΜΕΧΡΙΣ_ΟΤΟΥ ΧΩΡΑ[i] = 'GR' Η ΧΩΡΑ[i] = 'CY'
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
max <- -1
Σ_GR <- 0
Σ_CY <- 0
πλ_GR <- 0
πλ_CY <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
ΑΝ ΕΠΙΔ[i] > max ΤΟΤΕ
max <- ΕΠΙΔ[i]
χ_max <- ΧΩΡΑ[i]
ΤΕΛΟΣ_ΑΝ
ΕΠΙΛΕΞΕ ΧΩΡΑ[i]
ΠΕΡΙΠΤΩΣΗ 'GR'
Σ_GR <- Σ_GR + ΕΠΙΔ[i]
πλ_GR <- πλ_GR + 1
ΠΕΡΙΠΤΩΣΗ 'CY'
Σ_CY <- Σ_CY + ΕΠΙΔ[i]
πλ_CY <- πλ_CY + 1
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Χώρα αθλητή με την καλύτερη επίδοση: ', χ_max
ΓΡΑΨΕ 'Χώρα με τον καλύτερο μέσο όρο επιδόσεων: '
ΑΝ Σ_GR/πλ_GR > Σ_CY/πλ_CY ΤΟΤΕ
ΓΡΑΨΕ 'GR'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'CY'
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ 'Χώρα με τους περισσότερους αθλητές: '
ΑΝ πλ_GR > πλ_CY ΤΟΤΕ
ΓΡΑΨΕ 'GR'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'CY'
ΤΕΛΟΣ_ΑΝ
432 / 680
433 / 680
435 / 680
437 / 680
438 / 680
439 / 680
441 / 680
443 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
2η προσέγγιση: υλοποίηση με θέση
446 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
449 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
450 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
451 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
454 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Χρησιμότητα της σημαίας
Ερωτήματα του τύπου "Να εξετάσετε αν έχουν περάσει
όλοι οι μαθητές" λύνονται με αναζήτηση;
Ναι, στην ουσία αναζητώ αν υπάρχει κάποιος που δεν
πέρασε.
455 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
458 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Σειριακή αναζήτηση σε παράλληλους πίνακες
ΔΙΑΒΑΣΕ β
θέση <- 0
i <- 1
ΟΣΟ i <= Ν ΚΑΙ θέση = 0 ΕΠΑΝΑΛΑΒΕ
ΑΝ Βαθμοί[i] = β ΤΟΤΕ
θέση <- i
ΑΛΛΙΩΣ
i <- i + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ θέση > 0 ΤΟΤΕ !Θα μπορούσα να χρησιμοποιήσω το i;
ΓΡΑΨΕ 'Ο βαθμός ', β !Θεωρούμε ότι είναι μοναδικός
ΓΡΑΨΕ ' βρέθηκε στη θέση ', θέση
ΓΡΑΨΕ ' και ανήκει στο μαθητή ', Ονόματα[θέση]
ΤΕΛΟΣ_ΑΝ
460 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Άσκηση 1
Να γραφεί πρόγραμμα το οποίο να διαβάζει τα ονόματα 100
εταιρειών, τις περσινές ετήσιες εισπράξεις και τις φετινές ετήσιες
εισπράξεις τους και να τα αποθηκεύει σε κατάλληλους πίνακες.
Στη συνέχεια να εμφανίζει τα ονόματα των εταιρειών εκείνων
που οι ετήσιες φετινές εισπράξεις ξεπέρασαν το μέσο όρο των
περσινών.
465 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Άσκηση 1
Να γραφεί πρόγραμμα το οποίο να διαβάζει τα ονόματα 100
εταιρειών, τις περσινές ετήσιες εισπράξεις και τις φετινές ετήσιες
εισπράξεις τους και να τα αποθηκεύει σε κατάλληλους πίνακες.
Στη συνέχεια να εμφανίζει τα ονόματα των εταιρειών εκείνων
που οι ετήσιες φετινές εισπράξεις ξεπέρασαν το μέσο όρο των
περσινών.
Σ <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
ΔΙΑΒΑΣΕ ΟΝ[i], ΦΕΤ[i], ΠΕΡ[i]
Σ <- Σ + ΠΕΡ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ <- Σ / 100
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
ΑΝ ΦΕΤ[i] > ΜΟ ΤΟΤΕ
ΓΡΑΨΕ ΟΝ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
466 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Άσκηση 2
Να γραφεί πρόγραμμα το οποίο να διαβάζει τα ονόματα, τις
χώρες και τις επιδόσεις (σε μέτρα) 50 αθλητών στο αγώνισμα
"άλμα εις μήκος" και να τα αποθηκεύει σε κατάλληλους πίνακες.
Στη συνέχεια, αφού διαβάζει το ολυμπιακό ρεκόρ του
αγωνίσματος, να ελέγχει αν υπάρχει κάποιος αθλητής που το
κατέρριψε (αν υπάρχει θεωρείστε πως είναι μοναδικός) και να
εμφανίζει τη χώρα του. Αν δεν υπάρχει τέτοιος αθλητής, να
εμφανίζει το πλήθος και τα ονόματα των αθλητών που το
πλησίασαν κατά (μέχρι και) 20 εκατοστά.
467 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Άσκηση 2
Να γραφεί πρόγραμμα το οποίο να διαβάζει τα ονόματα, τις
χώρες και τις επιδόσεις (σε μέτρα) 50 αθλητών στο αγώνισμα
"άλμα εις μήκος" και να τα αποθηκεύει σε κατάλληλους πίνακες.
Στη συνέχεια, αφού διαβάζει το ολυμπιακό ρεκόρ του
αγωνίσματος, να ελέγχει αν υπάρχει κάποιος αθλητής που το
κατέρριψε (αν υπάρχει θεωρείστε πως είναι μοναδικός) και να
εμφανίζει τη χώρα του. Αν δεν υπάρχει τέτοιος αθλητής, να
εμφανίζει το πλήθος και τα ονόματα των αθλητών που το
πλησίασαν κατά (μέχρι και) 20 εκατοστά.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50
ΔΙΑΒΑΣΕ ΕΠΙΔ[i], ΟΝ[i], ΧΩΡΑ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ ρεκόρ
βρέθηκε <- ΨΕΥΔΗΣ
θέση <- 0
i <- 1
ΟΣΟ i <= 50 ΚΑΙ ΟΧΙ βρέθηκε ΕΠΑΝΑΛΑΒΕ
ΑΝ ΕΠΙΔ[i] > ρεκόρ ΤΟΤΕ
βρέθηκε <- ΑΛΗΘΗΣ
θέση <- i
ΑΛΛΙΩΣ
i <- i + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ βρέθηκε = ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ ΧΩΡΑ[θέση]
ΑΛΛΙΩΣ
πλ <- 0
ΑΝ Α_Τ(ΕΠΙΔ[i] - ρεκόρ) <= 0.2 ΤΟΤΕ
πλ <- πλ + 1
ΓΡΑΨΕ ΟΝ[i]
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ πλ
ΤΕΛΟΣ_ΑΝ
468 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Άσκηση 3
Να γραφεί πρόγραμμα το οποίο να διαβάζει τα ονόματα και τις
οφειλές 1000 φορολογούμενων και να τα αποθηκεύει σε
κατάλληλους πίνακες. Στη συνέχεια, το πρόγραμμα να εξετάζει
αν όλοι οι φορολογούμενοι έχουν εξοφλήσει τις οφειλές τους
(μηδενικές οφειλές) και να εμφανίζει κατάλληλο μήνυμα. Αν όχι
να εμφανίζει τα ονόματα των φορολογούμενων με τις
μεγαλύτερες οφειλές.
469 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
Άσκηση 3
Να γραφεί πρόγραμμα το οποίο να διαβάζει τα ονόματα και τις
οφειλές 1000 φορολογούμενων και να τα αποθηκεύει σε
κατάλληλους πίνακες. Στη συνέχεια, το πρόγραμμα να εξετάζει
αν όλοι οι φορολογούμενοι έχουν εξοφλήσει τις οφειλές τους
(μηδενικές οφειλές) και να εμφανίζει κατάλληλο μήνυμα. Αν όχι
να εμφανίζει τα ονόματα των φορολογούμενων με τις
μεγαλύτερες οφειλές.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 1000
ΔΙΑΒΑΣΕ ΟΝ[i], ΟΦ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
βρέθηκε <- ΨΕΥΔΗΣ
θέση <- 0
i <- 1
ΟΣΟ i <= 1000 ΚΑΙ ΟΧΙ βρέθηκε ΕΠΑΝΑΛΑΒΕ
ΑΝ ΟΦ[i] > 0 ΤΟΤΕ
βρέθηκε <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
i <- i + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ βρέθηκε = ΨΕΥΔΗΣ ΤΟΤΕ
ΓΡΑΨΕ 'Όλοι οι φορολογούμενοι έχουν εξοφλήσει τις οφειλές τους'
ΑΛΛΙΩΣ
max <- ΟΦ[1]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 1000
ΑΝ ΟΦ[i] > max ΤΟΤΕ
max <- ΟΦ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 1000
ΑΝ ΟΦ[i] = max ΤΟΤΕ
ΓΡΑΨΕ ΟΝ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
470 / 680
3.6 Αναζήτηση
Σειριακή ή γραμμική αναζήτηση
o Δύσκολο!
471 / 680
3.6 Αναζήτηση
Δυαδική αναζήτηση
3.6 Αναζήτηση
Δυαδική αναζήτηση
Αλγόριθμος
Ορίζουμε τα δύο άκρα του πίνακα, ως τα άκρα μεταξύ των
οποίων θα γίνει η αναζήτηση.
Υπολογίζουμε τη θέση του μεσαίου στοιχείου, βάσει των
δύο άκρων.
Συγκρίνουμε το στοιχείο αυτό με το ζητούμενο
o Αν το ζητούμενο στοιχείο είναι μεγαλύτερο από αυτό
που βρίσκεται στη μεσαία θέση, τότε μεταφέρουμε το
αριστερό/κάτω άκρο μία θέση μέτα τη μέση (δηλαδή η
αναζήτηση συνεχίζει μόνο στο 2ο μισό του πίνακα).
o Διαφορετικά, αν το στοιχείο είναι μικρότερο, τότε
μεταφέρουμε το δεξί/πάνω άκρο μία θέση κάτω από
τη μέση (δηλαδή ψάχνουμε μόνο στο 1ο μισό του
πίνακα).
o Αλλιώς, το ζητούμενο στοιχείο βρίσκεται τη μεσαία
θέση, άρα βρέθηκε.
Τα προηγούμενα βήματα επαναλαμβάνονται μέχρι να
βρούμε το ζητούμενο στοιχείο ή όταν το κάτω άκρο
ξεπεράσει το άνω, οπότε και συμπεραίνουμε ότι το
ζητούμενο στοιχείο δεν υπάρχει.
Η παραπάνω διεργασία στηρίζεται στο ότι ο πίνακας είναι
ταξινομημένος κατ΄ αύξουσα σειρά.
473 / 680
3.6 Αναζήτηση
Δυαδική αναζήτηση
ΔΙΑΒΑΣΕ X
ΠΛ <- 0
ΑΡ <- 1
ΔΕ <- 12
Β <- ΨΕΥΔΗΣ
ΟΣΟ Β = ΨΕΥΔΗΣ ΚΑΙ ΑΡ <= ΔΕ ΕΠΑΝΑΛΑΒΕ
Μ <- (ΑΡ + ΔΕ) DIV 2
ΑΝ Α[Μ] = X ΤΟΤΕ
Β <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ_ΑΝ Α[Μ] < Χ ΤΟΤΕ
ΑΡ <- Μ + 1
ΑΛΛΙΩΣ
ΔΕ <- Μ - 1
ΤΕΛΟΣ_ΑΝ
ΠΛ <- ΠΛ + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ Β = ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ Μ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'ΔΕΝ ΒΡΕΘΗΚΕ', ΠΛ
ΤΕΛΟΣ_ΑΝ
474 / 680
3.6 Αναζήτηση
Δυαδική αναζήτηση
ΔΙΑΒΑΣΕ Χ
low <- 1
high <- 7
found <- ΨΕΥΔΗΣ
ΟΣΟ low <= high ΚΑΙ found = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
mid <- (low+high) DIV 2
ΓΡΑΨΕ ΠΙΝ[mid]
ΑΝ ΠΙΝ[mid] < Χ ΤΟΤΕ
low <- mid+1
ΑΛΛΙΩΣ_ΑΝ ΠΙΝ[mid] > Χ ΤΟΤΕ
high <- mid-1
ΑΛΛΙΩΣ
found <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
475 / 680
3.6 Αναζήτηση
Δυαδική αναζήτηση
ΠΡΟΓΡΑΜΜΑ Δυαδική_Αναζήτηση1
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α[100], KEY, τέλος, αρχ, μέση, i
ΛΟΓΙΚΕΣ: δεικτης
ΑΡΧΗ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
ΔΙΑΒΑΣΕ Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε αριθμό για αναζήτηση στον πίνακα Α.'
ΔΙΑΒΑΣΕ KEY
αρχ <- 1
τέλος <- 100
δεικτης <- ΨΕΥΔΗΣ
ΟΣΟ αρχ <= τέλος ΚΑΙ δεικτης = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
μέση <- (αρχ + τέλος) div 2
ΑΝ μέση >= 1 ΚΑΙ μέση <= 100 ΤΟΤΕ
ΑΝ KEY < Α[μέση] ΤΟΤΕ
τέλος <- μέση - 1 !φθίνουσα: αρχ <- μέση + 1
ΑΛΛΙΩΣ_ΑΝ KEY > Α[μέση] ΤΟΤΕ
αρχ <- μέση + 1 !φθίνουσα: τέλος <- μέση - 1
ΑΛΛΙΩΣ
δεικτης <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ δεικτης = ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ 'Βρέθηκε στη θέση ', μέση
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Δε βρέθηκε'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Δυαδική_Αναζήτηση1
476 / 680
3.6 Αναζήτηση
Δυαδική αναζήτηση
ΠΡΟΓΡΑΜΜΑ δυαδική_αναζήτηση
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α[20], Left, Right, M, k, S, i
ΛΟΓΙΚΕΣ: f
ΑΡΧΗ
ΓΡΑΨΕ 'Οι αριθμοί πρέπει να είναι ταξινομημένοι κατά αύξουσα τάξη'
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
ΓΡΑΨΕ 'Δώσε το ', i, ' στοιχείο του πίνακα: '
ΔΙΑΒΑΣΕ Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δωσε τιμή για αναζήτηση: '
ΔΙΑΒΑΣΕ S
Left <- 1
Right <- 20
k <- 0
f <- ΨΕΥΔΗΣ
ΟΣΟ (Left <= Right) ΚΑΙ (f = ΨΕΥΔΗΣ) ΕΠΑΝΑΛΑΒΕ
M <- (Left + Right) DIV 2
ΑΝ Α[M] = S ΤΟΤΕ
k <- M
f <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
ΑΝ Α[M] < S ΤΟΤΕ
Left <- M + 1
ΑΛΛΙΩΣ
Right <- M - 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ f = ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ 'Το στοιχείο, ', S, ' υπάρχει στη θέση: ', M
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Το στοιχείο, ', S, ' δεν υπάρχει στον πίνακα'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ δυαδική_αναζήτηση
477 / 680
3.6 Αναζήτηση
Δυαδική αναζήτηση
478 / 680
3.7 Ταξινόμηση
Η τακτοποίηση των κόμβων μίας δομής με μία ιδιαίτερη σειρά
είναι μία πολύ σημαντική λειτουργία που ονομάζεται ταξινόμηση
(sorting) ή διάταξη (ordering). Συνήθως η σειρά αυτή είναι η
αύξουσα τάξη (ascending sequence) της τιμής των μεγεθών προς
ταξινόμηση.
479 / 680
3.7 Ταξινόμηση
Δοθέντων των στοιχείων a1, a2, … , an η ταξινόμηση συνίσταται
στη μετάθεση (permutation) της θέσης των στοιχείων, ώστε να
τοποθετηθούν σε μία σειρά ak1, ak2, … , akn έτσι ώστε, δοθείσης
μίας συνάρτησης διάταξης (ordering function), f, να ισχύει:
480 / 680
3.7 Ταξινόμηση
Για την ταξινόμηση δεδομένων έχουν εκπονηθεί πάρα πολλοί
αλγόριθμοι. Άλλοι σχετικά απλοί αλγόριθμοι είναι η ταξινόμηση
με επιλογή και η ταξινόμηση με παρεμβολή. Ο πιο γρήγορος
αλγόριθμος ταξινόμησης είναι η "γρήγορη ταξινόμηση"
(quicksort). Η ταξινόμηση φυσαλίδας είναι ο πιο απλός και
ταυτόχρονα ο πιο αργός αλγόριθμος ταξινόμησης.
481 / 680
3.7 Ταξινόμηση
Sorting Algorithm Animations | Toptal
VisuAlgo - Sorting (Bubble, Selection, Insertion, Merge,
Quick, Counting, Radix)
Οπτικοποίηση Αλγορίθμων Πινάκων
482 / 680
3.7 Ταξινόμηση
Δομές Δεδομένων Δευτερεύουσας Μνήμης
483 / 680
3.7 Ταξινόμηση
Δομές Δεδομένων Δευτερεύουσας Μνήμης
484 / 680
3.7 Ταξινόμηση
Ευθείας ανταλλαγής / Φυσαλίδας (Bubblesort)
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν !Προσοχή: από 2
ΓΙΑ j ΑΠΟ Ν ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1 !Προσοχή: μέχρι i, με βήμα -1
ΑΝ Πίνακας[j-1] > Πίνακας[j] ΤΟΤΕ !Για φθίνουσα: < (αντί για >)
Προσωρινή <- Πίνακας[j-1] !Αντιμετάθεση:
Πίνακας[j-1] <- Πίνακας[j] ! Πίνακας[j-1] ↔ Πίνακας[j]
Πίνακας[j] <- Προσωρινή
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
485 / 680
3.7 Ταξινόμηση
Ευθείας ανταλλαγής / Φυσαλίδας (Bubblesort)
Δες επίσης: ΑΕΠΠ Παράρτημα Α, Οδηγίες Μελέτης Μαθητή (2η Έκδοση), §4.3.1, σελ.72
486 / 680
3.7 Ταξινόμηση
Ευθείας ανταλλαγής / Φυσαλίδας (Bubblesort)
487 / 680
3.7 Ταξινόμηση
Ευθείας ανταλλαγής / Φυσαλίδας (Bubblesort)
488 / 680
3.7 Ταξινόμηση
Με επιλογή / Επιλογής (Selection sort)
Αλγόριθμος
1. Επιλογή του ελάχιστου στοιχείου
2. Ανταλλαγή του ελάχιστου με το πρώτο στοιχείο
3. Επανάληψη των βημάτων 1 και 2 για τα υπόλοιπα στοιχεία
του πίνακα
489 / 680
3.7 Ταξινόμηση
Με επιλογή / Επιλογής (Selection sort)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν-1
θέση <- i !Η θέση του ελάχιστου στοιχείου
ΓΙΑ j ΑΠΟ i+1 ΜΕΧΡΙ N !Ελέγχω τα υπόλοιπα για
μικρότερο
ΑΝ Πίνακας[j] < Πίνακας[θέση] ΤΟΤΕ
θέση <- j
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αντιμετάθεση Πίνακας[θέση] ↔ Πίνακας[i]
προσωρινή <- Πίνακας[θέση]
Πίνακας[θέση] <- Πίνακας[i]
Πίνακας[i] <- προσωρινή
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
490 / 680
3.7 Ταξινόμηση
Με επιλογή / Επιλογής (Selection sort)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν-1
θέση <- i !Η θέση του ελάχιστου στοιχείου
ΓΙΑ j ΑΠΟ i+1 ΜΕΧΡΙ N !Ελέγχω τα υπόλοιπα για
μικρότερο
ΑΝ Πίνακας[j] < Πίνακας[θέση] ΤΟΤΕ
θέση <- j
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αντιμετάθεση Πίνακας[θέση] ↔ Πίνακας[i]
προσωρινή <- Πίνακας[θέση]
Πίνακας[θέση] <- Πίνακας[i]
Πίνακας[i] <- προσωρινή
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Δες επίσης: ΑΕΠΠ - Τετράδιο Μαθητή, §4.2, Παράδειγμα 1, σελ.36
491 / 680
3.7 Ταξινόμηση
Με επιλογή / Επιλογής (Selection sort)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν-1
θέση <- i !Η θέση του ελάχιστου στοιχείου
min <- Πίνακας[i]
ΓΙΑ j ΑΠΟ i+1 ΜΕΧΡΙ N
ΑΝ min > Πίνακας[j] ΤΟΤΕ !Για φθίνουσα;
min <- Πίνακας[j]
θέση <- j
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!min <- Πίνακας[θέση] !Δε χρειάζεται, ήδη: min =
Πίνακας[θέση]
Πίνακας[θέση] <- Πίνακας[i]
Πίνακας[i] <- min
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
492 / 680
3.7 Ταξινόμηση
Με επιλογή / Επιλογής (Selection sort)
Βελτιωμένη έκδοση 1
Έλεγχος αν χρειάζεται η αντιμετάθεση και χρήση μόνο θέσης
(χωρίς μεταβλητή min)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν-1
θέση <- i
ΓΙΑ j ΑΠΟ i+1 ΜΕΧΡΙ N
ΑΝ Πίνακας[j] < Πίνακας[θέση] ΤΟΤΕ
θέση <- j
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ θέση <> i ΤΟΤΕ !Έλεγχος για την ανάγκη
αντιμετάθεσης
προσωρινή <- Πίνακας[θέση]
Πίνακας[θέση] <- Πίνακας[i]
Πίνακας[i] <- προσωρινή
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
493 / 680
3.7 Ταξινόμηση
Με επιλογή / Επιλογής (Selection sort)
Βελτιωμένη έκδοση 2
Διακοπή όταν ο πίνακας έχει ήδη ταξινομηθεί, πριν
ολοκληρωθούν όλα τα "περάσματα"
i <- 1
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
είναι_ταξινομημένος <- ΑΛΗΘΗΣ
min <- Πίνακας[i]
θέση <- i
ΓΙΑ j ΑΠΟ i + 1 ΜΕΧΡΙ Ν
ΑΝ Πίνακας[j] < min ΤΟΤΕ
min <- Πίνακας[j]
θέση <- j
ΤΕΛΟΣ_ΑΝ
ΑΝ Πίνακας[j] < Πίνακας[j-1] ΤΟΤΕ
είναι_ταξινομημένος <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Πίνακας[θέση] <- Πίνακας[i]
Πίνακας[i] <- min
i <- i + 1
ΜΕΧΡΙΣ_ΟΤΟΥ i > Ν - 1 Η είναι_ταξινομημένος = ΑΛΗΘΗΣ
Εξεζητημένη προσέγγιση
494 / 680
3.7 Ταξινόμηση
Με επιλογή / Επιλογής (Selection sort)
495 / 680
3.7 Ταξινόμηση
Ευθείας εισαγωγής / Παρεμβολής (Insertion sort)
Αλγόριθμος
1. Συγκρίνουμε αρχικά τα δύο πρώτα στοιχεία και τα
αντιμεταθέτουμε αν αυτό χρειάζεται.
2. Ελέγχουμε τα υπόλοιπα στοιχεία και τα τοποθετούμε στη
σωστή θέση, σε σχέση με τα προηγούμενα.
496 / 680
3.7 Ταξινόμηση
Ευθείας εισαγωγής / Παρεμβολής (Insertion sort)
Με διαδοχικές αντιμεταθέσεις
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
ΓΙΑ j ΑΠΟ i ΜΕΧΡΙ 2 ΜΕ_ΒΗΜΑ -1
ΑΝ Πίνακας[j-1] > Πίνακας[j] ΤΟΤΕ !< για φθίνουσα
προσωρινή <- Πίνακας[j-1]
Πίνακας[j-1] <- Πίνακας[j]
Πίνακας[j] <- προσωρινή
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
497 / 680
3.7 Ταξινόμηση
Ευθείας εισαγωγής / Παρεμβολής (Insertion sort)
Βελτιωμένη Έκδοση 1
Με διαδοχικές αντιμεταθέσεις και διακοπή της εσωτερικής
εντολής επανάληψης
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
stop <- ΨΕΥΔΗΣ
j <- i !ΓΙΑ: ΑΠΟ i
ΟΣΟ j >= 2 ΚΑΙ ΟΧΙ stop ΕΠΑΝΑΛΑΒΕ !ΓΙΑ: ΜΕΧΡΙ 2
ΑΝ Πίνακας[j-1] > Πίνακας[j] ΤΟΤΕ
προσωρινή <- Πίνακας[j-1]
Πίνακας[j-1] <- Πίνακας[j]
Πίνακας[j] <- προσωρινή
ΑΛΛΙΩΣ
stop <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
j <- j - 1 !ΓΙΑ: ΜΕ_ΒΗΜΑ -1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
498 / 680
3.7 Ταξινόμηση
Ευθείας εισαγωγής / Παρεμβολής (Insertion sort)
Βελτιωμένη Έκδοση 2
Με διαδοχικές αντιμεταθέσεις και διακοπή της εσωτερικής
εντολής επανάληψης
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
έγινε_αντιμετάθεση <- ΨΕΥΔΗΣ
j <- i !ΓΙΑ: ΑΠΟ i
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ Πίνακας[j-1] > Πίνακας[j] ΤΟΤΕ
προσωρινή <- Πίνακας[j-1]
Πίνακας[j-1] <- Πίνακας[j]
Πίνακας[j] <- προσωρινή
έγινε_αντιμετάθεση <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
j <- j - 1 !ΓΙΑ: ΜΕ_ΒΗΜΑ -1
ΜΕΧΡΙΣ_ΟΤΟΥ j = 1 Η ΟΧΙ έγινε_αντιμετάθεση !ΓΙΑ: ΜΕΧΡΙ 2 (⇔ j <
2)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
499 / 680
3.7 Ταξινόμηση
Ευθείας εισαγωγής / Παρεμβολής (Insertion sort)
Βελτιωμένη Έκδοση 3
Με "ολίσθηση" και διακοπή της εσωτερικής εντολής επανάληψης
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
προσωρινή <- Πίνακας[i] !Το στοιχείο προς τοποθέτηση
stop <- ΨΕΥΔΗΣ
j <- i !ΓΙΑ: ΑΠΟ i
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ Πίνακας[j-1] > προσωρινή ΤΟΤΕ
Πίνακας[j] <- Πίνακας[j-1] !Ολίσθηση προς τα δεξιά
j <- j - 1 !ΓΙΑ: ΜΕ_ΒΗΜΑ -1
ΑΛΛΙΩΣ
stop <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ j = 1 Η stop !ΓΙΑ: ΜΕΧΡΙ 2 (⇔ j < 2)
ΑΝ j <> i ΤΟΤΕ
Πίνακας[j] <- προσωρινή
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
500 / 680
3.7 Ταξινόμηση
Ευθείας εισαγωγής / Παρεμβολής (Insertion sort)
Βελτιωμένη Έκδοση 3
Με "ολίσθηση" και διακοπή της εσωτερικής εντολής επανάληψης
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν
προσωρινή <- Πίνακας[i] !Το στοιχείο προς τοποθέτηση
stop <- ΨΕΥΔΗΣ
j <- i !ΓΙΑ: ΑΠΟ i
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ Πίνακας[j-1] > προσωρινή ΤΟΤΕ
Πίνακας[j] <- Πίνακας[j-1] !Ολίσθηση προς τα δεξιά
j <- j - 1 !ΓΙΑ: ΜΕ_ΒΗΜΑ -1
ΑΛΛΙΩΣ
stop <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ j = 1 Η stop !ΓΙΑ: ΜΕΧΡΙ 2 (⇔ j < 2)
ΑΝ j <> i ΤΟΤΕ
Πίνακας[j] <- προσωρινή
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
501 / 680
3.7 Ταξινόμηση
Αντιστροφή Ταξινόμησης
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ (Ν DIV 2)
T <- Πίνακας[i]
Πίνακας[i] <- Πίνακας[Ν+1-i]
Πίνακας[Ν+1-i] <- T
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
502 / 680
3.7 Ταξινόμηση
Αντιστροφή Ταξινόμησης
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ (Ν DIV 2)
T <- Πίνακας[i]
Πίνακας[i] <- Πίνακας[Ν+1-i]
Πίνακας[Ν+1-i] <- T
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Γιατί όχι ΜΕΧΡΙ Ν;
Επιτρέπεται το N/2 στη θέση του Ν DIV 2;
Παίζει ρόλο αν ο πίνακας έχει περιττό αριθμό στοιχείων ή
όχι;
503 / 680
3.7 Ταξινόμηση
Συγχώνευση Ταξινομημένων Πινάκων
i <- 1 !Δείκτης για τον πίνακα Α
j <- 1 !Δείκτης για τον πίνακα Β
k <- 1 !Δείκτης για τον τελικό πίνακα Γ
ΟΣΟ i <= Μ ΚΑΙ j <= Ν ΕΠΑΝΑΛΑΒΕ
ΑΝ Α[i] < Β[j] ΤΟΤΕ !Το μικρότερα βρέθηκε στον Α…
Γ[k] <- Α[i] !… τοποθέτησέ το στον Γ…
i <- i + 1 !… και αύξησε τον δείκτη του Α
ΑΛΛΙΩΣ !Το μικρότερα βρέθηκε στον Β…
Γ[k] <- Β[j] !… τοποθέτησέ το στον Γ…
j <- j+1 !… και αύξησε τον δείκτη του Β
ΤΕΛΟΣ_ΑΝ
k <- k + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ i > Μ ΤΟΤΕ !«Εξαντλήθηκαν» τα στοιχεία του
πιν. Α
ΓΙΑ l ΑΠΟ j ΜΕΧΡΙ Ν !Μετάφερε τα υπόλοιπα στοιχεία του
πιν. Β στον Γ
Γ[k] <- Β[l]
k <- k + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΛΛΙΩΣ !(j > Ν) «Εξαντλήθηκαν» τα στοιχεία
του πιν. Β
ΓΙΑ l ΑΠΟ i ΜΕΧΡΙ Μ !Μετάφερε τα υπόλοιπα στοιχεία του
πιν. Α στον Γ
Γ[k] <- Α[l]
k <- k + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
Δες επίσης: ΑΕΠΠ Παράρτημα Α, Οδηγίες Μελέτης Μαθητή (2η Έκδοση), §4.3.3, σελ.77
504 / 680
3.7 Ταξινόμηση
Συγχώνευση Ταξινομημένων Πινάκων
Σε μία ΓΙΑ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ (10 + 15)
από_α <- ΨΕΥΔΗΣ
ΑΝ k <= 10 ΤΟΤΕ
ΑΝ l > 15 ΤΟΤΕ !Θα μπορούσαν να συνδυαστούν σε μία συνθήκη;
από_α <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ_ΑΝ Α[k] <= Β[l] ΤΟΤΕ
από_α <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΑΝ από_α ΤΟΤΕ !Γιατί όχι: ΑΝ k<=10 ΚΑΙ (l>15 Η Α[k]<=Β[l]) ΤΟΤΕ
Γ[i] <- Α[k]
k <- k + 1
ΑΛΛΙΩΣ
Γ[i] <- Β[l]
l <- l + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
505 / 680
3.7 Ταξινόμηση
Έλεγχος για Ταξινόμηση
είναι <- ΑΛΗΘΗΣ
i <- 2
ΟΣΟ i <= Ν ΚΑΙ είναι ΕΠΑΝΑΛΑΒΕ
ΑΝ Α[i-1] > Α[i] ΤΟΤΕ ! < για φθίνουσα
είναι <- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ
i <- i + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ είναι ΤΟΤΕ
ΓΡΑΨΕ 'Ο πίνακας Α είναι ταξινομημένος'
ΤΕΛΟΣ_ΑΝ
506 / 680
3.7 Ταξινόμηση
Εισαγωγή στοιχείου σε ταξινομημένο πίνακα
Με εύρεση της θέσης που πρέπει να εισαχθεί το στοιχείο και
ολίσθηση προς τα δεξιά
ΔΙΑΒΑΣΕ x
θ <- 0
i <- 1
ΟΣΟ i <= Ν ΚΑΙ θ = 0 ΕΠΑΝΑΛΑΒΕ !Εύρεση της θέσης εισαγωγής
ΑΝ Α[i] > x ΤΟΤΕ
θ <- i
ΑΛΛΙΩΣ
i <- i + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ θ <> 0 ΤΟΤΕ
ΓΙΑ i ΑΠΟ Ν - 1 ΜΕΧΡΙ θ ΜΕ_ΒΗΜΑ -1 !Ολίσθηση προς τα δεξιά
Α[i+1] <- Α[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Α[θ] <- x
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Το στοιχείο ', x, ' '
ΓΡΑΨΕ ' είναι μεγαλύτερο από όλα τα στοιχεία του πίνακα'
ΤΕΛΟΣ_ΑΝ
507 / 680
3.7 Ταξινόμηση
Εισαγωγή στοιχείου σε ταξινομημένο πίνακα
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
Εύρεση k "καλύτερων" τιμών
Χωρίς ισοβαθμίες
509 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
Δες επίσης: ΑΕΠΠ Παράρτημα Α, Οδηγίες Μελέτης Μαθητή (2η Έκδοση), §4.3, Παράδειγμα
2, σελ.80-81
510 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
511 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
513 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
Δες επίσης: ΑΕΠΠ Παράρτημα Α, Οδηγίες Μελέτης Μαθητή (2η Έκδοση), §4.3, Παράδειγμα
3, σελ.81-82
514 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
515 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
517 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
519 / 680
3.7 Ταξινόμηση
Ταξινόμηση σε παράλληλους πίνακες
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 1
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τις
επιδόσεις 100 αθλητών (σε πίνακες ΟΝ, ΕΠΙΔ) και να εμφανίζει τα
ονόματα των 5 καλύτερων αθλητών (θεωρείστε πως δεν
υπάρχουν ισοβαθμίες), σε φθίνουσα σειρά βάσει της επίδοσής
τους.
521 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 1
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τις
επιδόσεις 100 αθλητών (σε πίνακες ΟΝ, ΕΠΙΔ) και να εμφανίζει τα
ονόματα των 5 καλύτερων αθλητών (θεωρείστε πως δεν
υπάρχουν ισοβαθμίες), σε φθίνουσα σειρά βάσει της επίδοσής
τους.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
ΔΙΑΒΑΣΕ ΟΝ[i], ΕΠΙΔ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 100
ΓΙΑ j ΑΠΟ 100 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1
ΑΝ ΕΠΙΔ[j-1] < ΕΠΙΔ[j] ΤΟΤΕ !Φθίνουσα
Τ1 <- ΕΠΙΔ[j-1]
ΕΠΙΔ[j-1] <- ΕΠΙΔ[j]
ΕΠΙΔ[j] <- Τ1
Τ2 <- ΟΝ[j-1]
ΟΝ[j-1] <- ΟΝ[j]
ΟΝ[j] <- Τ2
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΓΡΑΨΕ ΟΝ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
522 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 2
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τις
βαθμολογίες 28 μαθητών (σε πίνακες ΟΝ, ΒΑΘ) και να εμφανίζει
τα ονόματα των μαθητών με την καλύτερη βαθμολογία,
αλφαβητικά.
523 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 2
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τις
βαθμολογίες 28 μαθητών (σε πίνακες ΟΝ, ΒΑΘ) και να εμφανίζει
τα ονόματα των μαθητών με την καλύτερη βαθμολογία,
αλφαβητικά.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 28
ΔΙΑΒΑΣΕ ΟΝ[i], ΒΑΘ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 28
ΓΙΑ j ΑΠΟ 28 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1
ΑΝ ΒΑΘ[j-1] < ΒΑΘ[j] Η
& ΒΑΘ[j-1] = ΒΑΘ[j] ΚΑΙ ΟΝ[j-1] > ΟΝ[j] ΤΟΤΕ
Τ1 <- ΒΑΘ[j-1]
ΒΑΘ[j-1] <- ΒΑΘ[j]
ΒΑΘ[j] <- Τ1
Τ2 <- ΟΝ[j-1]
ΟΝ[j-1] <- ΟΝ[j]
ΟΝ[j] <- Τ2
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 28
ΑΝ ΒΑΘ[i] = ΒΑΘ[1] ΤΟΤΕ
ΓΡΑΨΕ ΟΝ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
524 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 3
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα, τη χώρα και
τα εισοδήματα 1.000.000 εταιρειών (σε πίνακες ΟΝ, ΧΩΡ, ΕΙΣ) και
να εμφανίζει τις 10 πιο κερδοφόρες εταιρείες από Ελλάδα
(θεωρείστε πως δεν υπάρχουν ισοβαθμίες), σε φθίνουσα σειρά
βάσει των εισπράξεών τους. Αν οι εταιρείες από Ελλάδα είναι
λιγότερες από 10, να εμφανίζονται όλες.
525 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 3
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα, τη χώρα και
τα εισοδήματα 1.000.000 εταιρειών (σε πίνακες ΟΝ, ΧΩΡ, ΕΙΣ) και
να εμφανίζει τις 10 πιο κερδοφόρες εταιρείες από Ελλάδα
(θεωρείστε πως δεν υπάρχουν ισοβαθμίες), σε φθίνουσα σειρά
βάσει των εισπράξεών τους. Αν οι εταιρείες από Ελλάδα είναι
λιγότερες από 10, να εμφανίζονται όλες.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 1000000
ΔΙΑΒΑΣΕ ΟΝ[i], ΧΩΡ[i], ΕΙΣ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 1000000
ΓΙΑ j ΑΠΟ 1000000 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1
ΑΝ ΕΙΣ[j-1] < ΕΙΣ[j] ΤΟΤΕ
Τ1 <- ΕΙΣ[j-1]
ΕΙΣ[j-1] <- ΕΙΣ[j]
ΕΙΣ[j] <- Τ1
Τ2 <- ΟΝ[j-1]
ΟΝ[j-1] <- ΟΝ[j]
ΟΝ[j] <- Τ2
Τ2 <- ΧΩΡ[j-1] !Τ2
ΧΩΡ[j-1] <- ΧΩΡ[j]
ΧΩΡ[j] <- Τ2
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
πλ <- 0
i <- 1
ΟΣΟ i <= 1000000 ΚΑΙ πλ < 10 ΕΠΑΝΑΛΑΒΕ
ΑΝ ΧΩΡ[i] = 'ΕΛΛΑΔΑ' ΤΟΤΕ
ΓΡΑΨΕ ΟΝ[i]
πλ <- πλ + 1
ΤΕΛΟΣ_ΑΝ
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
526 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 4
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τις
επιδόσεις 50 αθλητών (σε πίνακες ΟΝ, ΕΠΙΔ). Στη συνέχεια το
πρόγραμμα να ζητά μια επίδοση (σε μέτρα) και να εμφανίζει τα
ονόματα των αθλητών που ξεπέρασαν την επίδοση αυτή. Η σειρά
εμφάνισης των ονομάτων θα πρέπει να είναι με τις καλύτερες
επιδόσεις πρώτες και σε περίπτωση ισοβαθμίας με τη σειρά που
αγωνίστηκαν οι αθλητές.
527 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 4
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τις
επιδόσεις 50 αθλητών (σε πίνακες ΟΝ, ΕΠΙΔ). Στη συνέχεια το
πρόγραμμα να ζητά μια επίδοση (σε μέτρα) και να εμφανίζει τα
ονόματα των αθλητών που ξεπέρασαν την επίδοση αυτή. Η σειρά
εμφάνισης των ονομάτων θα πρέπει να είναι με τις καλύτερες
επιδόσεις πρώτες και σε περίπτωση ισοβαθμίας με τη σειρά που
αγωνίστηκαν οι αθλητές.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50
ΔΙΑΒΑΣΕ ΟΝ[i], ΕΠΙΔ[i]
ΣΕΙΡΑ[i] <- i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 50
ΓΙΑ j ΑΠΟ 50 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1
ΑΝ ΕΠΙΔ[j-1] < ΕΠΙΔ[j] Η
& ΕΠΙΔ[j-1] = ΕΠΙΔ[j] ΚΑΙ ΣΕΙΡΑ[j-1] > ΣΕΙΡΑ[j] ΤΟΤΕ
Τ1 <- ΕΠΙΔ[j-1]
ΕΠΙΔ[j-1] <- ΕΠΙΔ[j]
ΕΠΙΔ[j] <- Τ1
Τ2 <- ΟΝ[j-1]
ΟΝ[j-1] <- ΟΝ[j]
ΟΝ[j] <- Τ2
Τ3 <- ΣΕΙΡΑ[j-1]
ΣΕΙΡΑ[j-1] <- ΣΕΙΡΑ[j]
ΣΕΙΡΑ[j] <- Τ3
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ επίδοση
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50
ΑΝ ΕΠΙΔ[i] > επίδοση ΤΟΤΕ
ΓΡΑΨΕ ΟΝ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
528 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 5
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τα μεγέθη
100 αρχείων (σε πίνακες ΟΝ, ΜΕΓ) και να εμφανίζει τα ονόματα
των 10 μεγαλύτερων αρχείων, αλφαβητικά (τα ονόματα είναι
μοναδικά). Σε περίπτωση που στην τελευταία θέση υπάρχουν
περισσότερα από ένα αρχεία με το ίδο μέγεθος, να εμφανίζονται
όλα αυτά τα αρχεία.
529 / 680
3.7 Ταξινόμηση
Ασκήσεις
Άσκηση 5
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα και τα μεγέθη
100 αρχείων (σε πίνακες ΟΝ, ΜΕΓ) και να εμφανίζει τα ονόματα
των 10 μεγαλύτερων αρχείων, αλφαβητικά (τα ονόματα είναι
μοναδικά). Σε περίπτωση που στην τελευταία θέση υπάρχουν
περισσότερα από ένα αρχεία με το ίδο μέγεθος, να εμφανίζονται
όλα αυτά τα αρχεία.
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
ΔΙΑΒΑΣΕ ΟΝ[i], ΜΕΓ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 100
ΓΙΑ j ΑΠΟ 100 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1
ΑΝ ΜΕΓ[j-1] < ΜΕΓ[j] Η
& ΜΕΓ[j-1] = ΜΕΓ[j] ΚΑΙ ΟΝ[j-1] > ΟΝ[j] ΤΟΤΕ
Τ1 <- ΜΕΓ[j-1]
ΜΕΓ[j-1] <- ΜΕΓ[j]
ΜΕΓ[j] <- Τ1
Τ2 <- ΟΝ[j-1]
ΟΝ[j-1] <- ΟΝ[j]
ΟΝ[j] <- Τ2
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ΟΝ[1]
i <- 2
ΟΣΟ i <= 10 Η ΜΕΓ[i] = ΜΕΓ[i-1] ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ ΟΝ[i]
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
530 / 680
531 / 680
Συμπλήρωση Κενών
2019 / Θέμα Β1 (Λύσεις)
o Παραλλαγή της σειριακής αναζήτησης (για 3 στοιχεία)
532 / 680
Δες επίσης: ΑΕΠΠ Παράρτημα Α, Οδηγίες Μελέτης Μαθητή (2η Έκδοση), §4.2, σελ.63
533 / 680
534 / 680
Ολικά
Σ <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ν !j ↔ στήλες
Σ <- Σ + Π[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ
535 / 680
Ανά γραμμή
!Μόνο για εμφάνιση
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
Σ <- 0
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ν !j ↔ στήλες
Σ <- Σ + Π[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αποθήκευση σε πίνακα
!για χρήση αργότερα
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
Σ[i] <- 0
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ν !j ↔ στήλες
Σ[i] <- Σ[i] + Π[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
…
537 / 680
Ανά στήλη
!Μόνο για εμφάνιση
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ν !j ↔ στήλες
Σ <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
Σ <- Σ + Π[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ Σ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αποθήκευση σε πίνακα
!για χρήση αργότερα
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ν !j ↔ στήλες
Σ[j] <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
Σ[j] <- Σ[j] + Π[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
…
538 / 680
Ολικά
min <- Π[1,1]
max <- Π[1,1]
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !ΠΡΟΣΟΧΗ: όχι από 2
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ν !ΠΡΟΣΟΧΗ: όχι από 2
ΑΝ Π[i,j] < min ΤΟΤΕ
min <- Π[i,j]
ΑΛΛΙΩΣ_ΑΝ Π[i,j] > max ΤΟΤΕ
max <- Π[i,j]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ min, max
539 / 680
Ανά γραμμή
!Μόνο για εμφάνιση
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
min <- Π[i,1]
max <- Π[i,1]
ΓΙΑ j ΑΠΟ 2 ΜΕΧΡΙ Ν !j ↔ στήλες
ΑΝ Π[i,j] < min ΤΟΤΕ
min <- Π[i,j]
ΑΛΛΙΩΣ_ΑΝ Π[i,j] > max ΤΟΤΕ
max <- Π[i,j]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ min, max
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αποθήκευση σε πίνακα
!για χρήση αργότερα
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
min[i] <- Π[i,1]
max[i] <- Π[i,1]
ΓΙΑ j ΑΠΟ 2 ΜΕΧΡΙ Ν !j ↔ στήλες
ΑΝ Π[i,j] < min[i] ΤΟΤΕ
min[i] <- Π[i,j]
ΑΛΛΙΩΣ_ΑΝ Π[i,j] > max[i] ΤΟΤΕ
max[i] <- Π[i,j]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
…
541 / 680
9.3 Πολυδιάστατοι πίνακες
Εύρεση Μέγιστου / Ελάχιστου
Ανά στήλη
!Μόνο για εμφάνιση
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Μ !j ↔ στήλες
min <- Π[1,j]
max <- Π[1,j]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν !i ↔ γραμμές
ΑΝ Π[i,j] < min ΤΟΤΕ
min <- Π[i,j]
ΑΛΛΙΩΣ_ΑΝ Π[i,j] > max ΤΟΤΕ
max <- Π[i,j]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ min, max
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αποθήκευση σε πίνακα
!για χρήση αργότερα
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Μ !j ↔ στήλες
min[j] <- Π[1,j]
max[j] <- Π[1,j]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν !i ↔ γραμμές
ΑΝ Π[i,j] < min[j] ΤΟΤΕ
min[j] <- Π[i,j]
ΑΛΛΙΩΣ_ΑΝ Π[i,j] > max[j] ΤΟΤΕ
max[j] <- Π[i,j]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
…
542 / 680
Ολικά
ΔΙΑΒΑΣΕ key
πλήθος <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N
ΑΝ Π[i,j] = key ΤΟΤΕ
πλήθος <- πλήθος + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ πλήθος
543 / 680
9.3 Πολυδιάστατοι πίνακες
Μετρητές / Πλήθος
Ανά γραμμή
!Μόνο για εμφάνιση
ΔΙΑΒΑΣΕ key
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M !i ↔ γραμμές
πλήθος <- 0
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N !j ↔ στήλες
ΑΝ Π[i,j] = key ΤΟΤΕ
πλήθος <- πλήθος + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ πλήθος
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αποθήκευση σε πίνακα
!για χρήση αργότερα
ΔΙΑΒΑΣΕ key
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M !i ↔ γραμμές
πλήθος[i] <- 0
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N !j ↔ στήλες
ΑΝ Π[i,j] = key ΤΟΤΕ
πλήθος[i] <- πλήθος[i] + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
…
545 / 680
9.3 Πολυδιάστατοι πίνακες
Μετρητές / Πλήθος
Ανά στήλη
!Μόνο για εμφάνιση
ΔΙΑΒΑΣΕ key
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N !j ↔ στήλες
πλήθος <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M !i ↔ γραμμές
ΑΝ Π[i,j] = key ΤΟΤΕ
πλήθος <- πλήθος + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ πλήθος
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αποθήκευση σε πίνακα
!για χρήση αργότερα
ΔΙΑΒΑΣΕ key
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N !j ↔ στήλες
πλήθος[j] <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M !i ↔ γραμμές
ΑΝ Π[i,j] = key ΤΟΤΕ
πλήθος[j] <- πλήθος[j] + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
…
546 / 680
Ολικά
ΔΙΑΒΑΣΕ key
βρέθηκε <- ΨΕΥΔΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N
ΑΝ Π[i,j] = key ΤΟΤΕ
βρέθηκε <- ΑΛΗΘΗΣ
θέση_i <- i
θέση_j <- j
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ βρέθηκε = ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ 'Βρέθηκε στη θέση ', θέση_i, ',', θέση_j
ΤΕΛΟΣ_ΑΝ
547 / 680
9.3 Πολυδιάστατοι πίνακες
Σειριακή Αναζήτηση
Ανά γραμμή
!Μόνο για εμφάνιση
ΔΙΑΒΑΣΕ key
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M !i ↔ γραμμές
βρέθηκε <- ΨΕΥΔΗΣ
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N !j ↔ στήλες
ΑΝ Π[i,j] = key ΤΟΤΕ
βρέθηκε <- ΑΛΗΘΗΣ
στήλη <- j
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ βρέθηκε = ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ 'Για τη γραμμή ', i
ΓΡΑΨΕ ' βρέθηκε στη ', στήλη
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
!Αποθήκευση σε πίνακα
!για χρήση αργότερα
ΔΙΑΒΑΣΕ key
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M !i ↔ γραμμές
βρέθηκε[i] <- ΨΕΥΔΗΣ
θέση[i] <- 0
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N !j ↔ στήλες
ΑΝ Π[i,j] = key ΤΟΤΕ
βρέθηκε[i] <- ΑΛΗΘΗΣ
!Σε ποια στήλη j
! βρέθηκε για τη γραμμή i
θέση[i] <- j
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
…
550 / 680
Άσκηση 1
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα 20 μαθητών, σε πίνακα ΟΝ[20], καθώς και τις
βαθμολογίες τους σε 14 μαθήματα, σε πίνακα ΒΑΘ[20,14].
Κατόπιν να υπολογίζει και να εμφανίζει:
552 / 680
Άσκηση 1
Να γραφεί πρόγραμμα που να διαβάζει και να αποθηκεύει τα
ονόματα 20 μαθητών, σε πίνακα ΟΝ[20], καθώς και τις
βαθμολογίες τους σε 14 μαθήματα, σε πίνακα ΒΑΘ[20,14].
Κατόπιν να υπολογίζει και να εμφανίζει:
Άσκηση 2
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα 100 παιχτών
του NBA και να τα αποθηκεύει σε πίνακα ΟΝ[100], καθώς και τα
σκορ τους σε 24 παιχνίδια και να τα αποθηκεύει σε πίνακα
ΣΚΟΡ[100,24]. Στη συνέχεια:
554 / 680
Άσκηση 2
Να γραφεί πρόγραμμα που να διαβάζει τα ονόματα 100 παιχτών
του NBA και να τα αποθηκεύει σε πίνακα ΟΝ[100], καθώς και τα
σκορ τους σε 24 παιχνίδια και να τα αποθηκεύει σε πίνακα
ΣΚΟΡ[100,24]. Στη συνέχεια:
Άσκηση 3
Να γραφεί πρόγραμμα που διαβάζει τα ονόματα 6 ομάδων
μπάσκετ και να τα αποθηκεύει σε πίκανα ΟΜΑΔΑ[6], καθώς και τα
σκορ των 36 μεταξύ τους αγώνων και να τα αποθηκεύει σε
πίνακα ΜΑΤΣ[30,4], ως εξής: στη στήλη 1 αποθηκεύεται ο
αριθμός της γηπεδούχου ομάδας, στήλη 2 ο αριθμός της
φιλοξενούμενης ομάδας, στήλη 3 το σκορ της γηπεδούχου
ομάδας και στήλη 4 το σκορ της φιλοξενούμενης ομάδας. Στη
συνέχεια το πρόγραμμα να υπολογίζει και να εμφανίζει:
556 / 680
558 / 680
560 / 680
561 / 680
562 / 680
563 / 680
564 / 680
565 / 680
566 / 680
567 / 680
574 / 680
Με μονή ΓΙΑ
ΓΙΑ k ΑΠΟ 1 ΜΕΧΡΙ M*Ν
i <- (k-1) DIV N + 1
j <- (k-1) MOD N + 1
ΜΟΝ[k] <- ΔΙΣ[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ k ΑΠΟ 1 ΜΕΧΡΙ M*Ν
i <- (k-1) DIV N + 1
j <- (k-1) MOD N + 1
ΔΙΣ[i,j] <- ΜΟΝ[k]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
577 / 680
Δύο γραμμών
ΓΡΑΨΕ 'Δώστε αριθμούς γραμμών προς αντιμετάθεση: '
ΔΙΑΒΑΣΕ α, β
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ Ν !j ↔ στήλες
temp <- Π[α,j]
Π[α,j] <- Π[β,j]
Π[β,j] <- temp
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
578 / 680
Δύο στηλών
ΓΡΑΨΕ 'Δώστε αριθμούς στηλών προς αντιμετάθεση: '
ΔΙΑΒΑΣΕ α, β
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Μ !i ↔ γραμμές
temp <- Π[i,α]
Π[i,α] <- Π[i,β]
Π[i,β] <- temp
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
579 / 680
580 / 680
Σε μία γραμμή
ΔΙΑΒΑΣΕ αρ_γρ
ΓΙΑ k ΑΠΟ 2 ΜΕΧΡΙ Ν !Ν ↔ στήλες
ΓΙΑ j ΑΠΟ Ν ΜΕΧΡΙ k ΜΕ ΒΗΜΑ -1
ΑΝ Α[αρ_γρ,j-1] > Α[αρ_γρ,j] ΤΟΤΕ !Σε αύξουσα
Τ <- Α[αρ_γρ,j-1]
Α[αρ_γρ,j-1] <- Α[αρ_γρ,j]
Α[αρ_γρ,j] <- Τ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
582 / 680
588 / 680
Πολλαπλασιασμός με αριθμό
ΔΙΑΒΑΣΕ x
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N
ΔΙΑΒΑΣΕ Π[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ M
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ N
Π[i,j] <- Π[i,j] * x
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
590 / 680
591 / 680
592 / 680
593 / 680
Πιο απλή
Λιγότερο αποτελεσματική
594 / 680
Πιο απλή
Λιγότερο αποτελεσματική
595 / 680
5.2 Εκσφαλμάτωση
5.2.3 Εκσφαλμάτωση λογικών λαθών σε πίνακες
596 / 680
5.2 Εκσφαλμάτωση
5.2.3 Εκσφαλμάτωση λογικών λαθών σε πίνακες
Παράδειγμα
Ενότητα §5.2.3, Παράδειγμα 8 (μονοδιάστατοι)
Δραστηριότητα
Ενότητα §5.2.3, Δραστηριότητα 4 (δισδιάστατοι)
597 / 680
1.1 Στοίβα
Στοίβα (stack), ονομάζεται μια δομή δεδομένων το σύνολο των
στοιχείων της οποίας είναι διατεταγμένο με τέτοιο τρόπο, ώστε
τα στοιχεία που βρίσκονται στην κορυφή της στοίβας
λαμβάνονται πρώτα, ενώ αυτά που βρίσκονται στο βάθος της
στοίβας λαμβάνονται τελευταία.
598 / 680
1.1 Στοίβα
Οι κύριες λειτουργίες σε μια στοίβα είναι δύο:
599 / 680
1.1 Στοίβα
Υλοποίηση στοίβας με χρήση μονοδιάστατου πίνακα
Χρησιμοποιούμε μια βοηθητική μεταβλητή (top), που
δείχνει το στοιχείο που τοποθετήθηκε τελευταίο στην
κορυφή της στοίβας.
Η ώθηση ενός νέου στοιχείου στη στοίβα (εισαγωγή
στοιχείου στον πίνακα) γίνεται πάντα στην κορυφή της.
Συγκεκριμένα, η μεταβλητή top αυξάνεται κατά ένα: top<-
top+1 και στη συνέχεια γίνεται η ώθηση του στοιχείου.
600 / 680
1.1 Στοίβα
Σε μια κενή στοίβα/πίνακα θεωρούμε ότι η αρχική τιμή της
μεταβλητής top είναι μηδέν (top<-0). Η μεταβλητή top είναι η
μεταβλητή που δείχνει τη θέση που τοποθετήθηκε το τελευταίο
στοιχείο στη στοίβα/πίνακα (δηλ. δείχνει την κορυφή της
στοίβας).
1.1 Στοίβα
Παράδειγμα 2 – Ώθηση στοιχείου στην κορυφή της στοίβας
με χρήση μονοδιάστατου πίνακα
ΓΡΑΨΕ 'Δώσε στοιχείο για να εισαχθεί στην στοίβα Α: '
ΔΙΑΒΑΣΕ στοιχείο
ΑΝ top < 10 ΤΟΤΕ
top <- top + 1
Α[top] <- στοιχείο
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Υπερχείλιση στοίβας'
ΤΕΛΟΣ_ΑΝ
602 / 680
1.1 Στοίβα
Παράδειγμα 3 – Απώθηση στοιχείου στην κορυφή της
στοίβας με χρήση μονοδιάστατου πίνακα
ΑΝ top >= 1 ΤΟΤΕ
ΓΡΑΨΕ Α[top]
top <- top - 1
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Υποχείλιση στοίβας'
ΤΕΛΟΣ_ΑΝ
603 / 680
1.1 Στοίβα
Σε μια στοίβα N θέσεων, τι τιμή θα έχει ο δείκτης top όταν:
604 / 680
1.1 Στοίβα
Σε μια στοίβα N θέσεων, τι τιμή θα έχει ο δείκτης top όταν:
605 / 680
1.1 Στοίβα
Σε μια στοίβα N θέσεων, τι τιμή θα έχει ο δείκτης top όταν:
606 / 680
1.1 Στοίβα
Σε μια στοίβα N θέσεων, τι τιμή θα έχει ο δείκτης top όταν:
607 / 680
1.1 Στοίβα
Σε μια στοίβα N θέσεων, τι τιμή θα έχει ο δείκτης top όταν:
608 / 680
1.1 Στοίβα
Παράδειγμα
ΠΡΟΓΡΑΜΜΑ Παράδειγμα_Στοίβα
ΣΤΑΘΕΡΕΣ
Ν = 5
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Στοίβα[Ν], top, x
ΧΑΡΑΚΤΗΡΕΣ: επιλογή
ΑΡΧΗ
top <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Επίλεξε λειτουργία:'
ΓΡΑΨΕ 'Ω = Ώθηση'
ΓΡΑΨΕ 'Α = Απώθηση'
ΓΡΑΨΕ 'Τ = Τέλος'
ΔΙΑΒΑΣΕ επιλογή
ΜΕΧΡΙΣ_ΟΤΟΥ επιλογή = 'Α' Η επιλογή = 'Ω' Η επιλογή = 'Τ'
ΕΠΙΛΕΞΕ επιλογή
ΠΕΡΙΠΤΩΣΗ 'Ω'
ΑΝ top < Ν ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε στοιχείο για ώθηση: '
ΔΙΑΒΑΣΕ x
top <- top + 1
Στοίβα[top] <- x
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Υπερχείλιση στοίβας'
ΤΕΛΟΣ_ΑΝ
ΠΕΡΙΠΤΩΣΗ 'Α'
ΑΝ top > 0 ΤΟΤΕ
ΓΡΑΨΕ 'Στοιχείο: ', Στοίβα[top]
top <- top - 1
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Υποχείλιση στοίβας'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επιλογή = 'Τ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
609 / 680
1.1 Στοίβα
Παράδειγμα 4 – Επιβίβαση & Αποβίβαση αυτοκινήτων σε
πλοίο
ΠΡΟΓΡΑΜΜΑ Πλοίο_Στοίβα
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: τοπ, επ1, πλ1, πλ2
ΧΑΡΑΚΤΗΡΕΣ: επ2, αρ, π[250]
ΑΡΧΗ
τοπ <- 0
πλ1 <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
πλ2 <- 0
ΓΡΑΨΕ 'Μενού Επιλογών'
ΓΡΑΨΕ '1. Επιβίβαση'
ΓΡΑΨΕ '2. Αποβίβαση'
ΓΡΑΨΕ '3. Έξοδος'
ΓΡΑΨΕ 'Δώσε επιλογή:'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ επ1
ΑΝ επ1 < 1 Η επ1 > 3 ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος επιλογή. Ξαναπροσπάθησε!!!'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επ1 >= 1 ΚΑΙ επ1 <= 3
ΑΝ επ1 = 1 ΤΟΤΕ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Υπάρχει όχημα για επιβίβαση (Ν/Ο);'
ΔΙΑΒΑΣΕ επ2
ΑΝ επ2 <> 'Ν' ΚΑΙ επ2 <> 'ν' ΚΑΙ επ2 <> 'Ο' ΚΑΙ επ2 <> 'ο'
ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος επιλογή. Ξαναπροσπάθησε!!!'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επ2 = 'Ο' Η επ2 = 'ο' Η επ2 = 'Ν' Η επ2 = 'ν'
ΑΝ επ2 = 'Ν' Η επ2 = 'ν' ΤΟΤΕ
ΑΝ τοπ < 250 ΤΟΤΕ !Στο βιβλίο λέει τοπ <= 250
ΓΡΑΨΕ 'Δώσε αριθμό κυκλοφορίας του οχήματος:'
ΔΙΑΒΑΣΕ αρ
τοπ <- τοπ + 1
π[τοπ] <- αρ
πλ1 <- πλ1 + 1
ΑΝ τοπ = 250 ΤΟΤΕ
ΓΡΑΨΕ 'Το πλοίο δεν χωρά άλλα οχήματα'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ τοπ = 250 Η επ2 = 'Ο' Η επ2 = 'ο'
ΑΛΛΙΩΣ_ΑΝ επ1 = 2 ΤΟΤΕ
ΟΣΟ τοπ >= 1 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'Αποβιβάζεται το όχημα:', π[τοπ]
τοπ <- τοπ - 1
πλ2 <- πλ2 + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Οχήματα που αποβιβάστηκαν στην ΑΙΓΙΝΑ ', πλ2
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επ1 = 3
ΓΡΑΨΕ 'Οχήματα που επιβιβάστηκαν στον ΠΕΙΡΑΙΑ:', πλ1
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
610 / 680
1.1 Στοίβα
Παραδείγματα
Ενότητα §1.1.1
Ερωτήσεις - Ασκήσεις
Ενότητα §1.1.2
611 / 680
1.2 Ουρά
Ουρά (Queue), ονομάζεται μια δομή δεδομένων το σύνολο των
στοιχείων της οποίας είναι διατεταγμένο με τέτοιο τρόπο, ώστε
τα στοιχεία που τοποθετήθηκαν πρώτα στην ουρά να
λαμβάνονται επίσης πρώτα.
612 / 680
1.2 Ουρά
Οι κύριες λειτουργίες που εκτελούνται σε μια ουρά είναι δύο:
613 / 680
1.2 Ουρά
Υλοποίηση ουράς με χρήση μονοδιάστατου πίνακα
614 / 680
1.2 Ουρά
Παράδειγμα 2 – Εισαγωγή στοιχείου σε ουρά με χρήση
μονοδιάστατου πίνακα
ΓΡΑΨΕ 'Δώσε στοιχείο για εισαγωγή στην ουρά Α: '
ΔΙΑΒΑΣΕ στοιχείο
ΑΝ rear = 10 ΤΟΤΕ
ΓΡΑΨΕ 'Γεμάτη ουρά'
ΑΛΛΙΩΣ_ΑΝ (front = 0 ΚΑΙ rear = 0) ΤΟΤΕ
front <- 1
rear <- 1
A[rear] <- στοιχείο
ΑΛΛΙΩΣ
rear <- rear + 1
A[rear] <- στοιχείο
ΤΕΛΟΣ_ΑΝ
615 / 680
1.2 Ουρά
Παράδειγμα 3 – Εξαγωγή στοιχείου από ουρά με χρήση
μονοδιάστατου πίνακα
ΑΝ (front = 0 ΚΑΙ rear = 0) ΤΟΤΕ
ΓΡΑΨΕ 'Άδεια ουρά'
ΑΛΛΙΩΣ_ΑΝ (front = rear) ΤΟΤΕ
ΓΡΑΨΕ 'Εξάγεται το στοιχείο: ', A[front]
front <- 0
rear <- 0
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Εξάγεται το στοιχείο: ', A[front]
front <- front + 1
ΤΕΛΟΣ_ΑΝ
616 / 680
1.2 Ουρά
Σε μια ουρά N θέσεων, τι ισχύει για τους δείκτες front & rear όταν:
617 / 680
1.2 Ουρά
Σε μια ουρά N θέσεων, τι ισχύει για τους δείκτες front & rear όταν:
1.2 Ουρά
Σε μια ουρά N θέσεων, τι ισχύει για τους δείκτες front & rear όταν:
619 / 680
1.2 Ουρά
Σε μια ουρά N θέσεων, τι ισχύει για τους δείκτες front & rear όταν:
620 / 680
1.2 Ουρά
Σε μια ουρά N θέσεων, τι ισχύει για τους δείκτες front & rear όταν:
621 / 680
1.2 Ουρά
Παράδειγμα
ΠΡΟΓΡΑΜΜΑ Παράδειγμα_Ουρά
ΣΤΑΘΕΡΕΣ
Ν = 5
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ουρά[Ν], front, rear, x
ΧΑΡΑΚΤΗΡΕΣ: επιλογή
ΑΡΧΗ
front <- 1
rear <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Επίλεξε λειτουργία:'
ΓΡΑΨΕ 'ΕΣ = Εισαγωγή'
ΓΡΑΨΕ 'ΕΞ = Εξαγωγή'
ΓΡΑΨΕ 'Τ = Τέλος'
ΔΙΑΒΑΣΕ επιλογή
ΜΕΧΡΙΣ_ΟΤΟΥ επιλογή = 'ΕΣ' Η επιλογή = 'ΕΞ' Η επιλογή = 'Τ'
ΕΠΙΛΕΞΕ επιλογή
ΠΕΡΙΠΤΩΣΗ 'ΕΣ'
ΑΝ rear < Ν ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε στοιχείο για εισαγωγή: '
ΔΙΑΒΑΣΕ x
rear <- rear + 1
Ουρά[rear] <- x
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ουρά πλήρης (στο τέλος)'
ΤΕΛΟΣ_ΑΝ
ΠΕΡΙΠΤΩΣΗ 'ΕΞ'
ΑΝ front <= rear ΤΟΤΕ
ΓΡΑΨΕ 'Στοιχείο: ', Ουρά[front]
front <- front + 1
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ουρά άδεια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επιλογή = 'Τ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
622 / 680
1.2 Ουρά
Παράδειγμα - Ολίσθηση για την ανάκτηση των "χαμένων"
θέσεων
πλ <- rear - front + 1
!Πριν την εισαγωγή
ΑΝ rear = Ν ΚΑΙ front > 1 ΤΟΤΕ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ πλ
ΟΥΡΑ[i] <- ΟΥΡΑ[front - 1 + i] !front + i - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
front <- 1
rear <- πλ
ΤΕΛΟΣ_ΑΝ
!Πριν την εισαγωγή
ΑΝ rear = Ν ΚΑΙ front > 1 ΤΟΤΕ
k <- 0 !πλήθος
ΓΙΑ i ΑΠΟ front ΜΕΧΡΙ rear
k <- k + 1
ΟΥΡΑ[k] <- ΟΥΡΑ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
front <- 1
rear <- k
ΤΕΛΟΣ_ΑΝ
623 / 680
1.2 Ουρά
Παράδειγμα 4 – Επιβίβαση και Αποβίβαση αυτοκινήτων σε
πλοίο
ΠΡΟΓΡΑΜΜΑ Πλοίο_Ουρά
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αρχ, τελος, επ1, πλ
ΧΑΡΑΚΤΗΡΕΣ: επ2, αρ, π[250]
ΑΡΧΗ
αρχ <- 0
τελος <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Μενού Επιλογών'
ΓΡΑΨΕ '1. Επιβίβαση'
ΓΡΑΨΕ '2. Αποβίβαση'
ΓΡΑΨΕ '3. Έξοδος'
ΓΡΑΨΕ 'Δώσε επιλογή: '
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ επ1
ΑΝ επ1 < 1 Η επ1 > 3 ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος επιλογή. Ξαναπροσπάθησε!!!'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επ1 >= 1 ΚΑΙ επ1 <= 3
ΑΝ επ1 = 1 ΤΟΤΕ
ΑΝ τελος = 250 ΤΟΤΕ
ΓΡΑΨΕ 'Το πλοίο είναι πλήρες και δε χωρά άλλα οχήματα'
ΑΛΛΙΩΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Υπάρχει όχημα για επιβίβαση (Ν/Ο); '
ΔΙΑΒΑΣΕ επ2
ΑΝ επ2 <> 'Ν' ΚΑΙ επ2 <> 'ν' ΚΑΙ επ2 <> 'Ο' ΚΑΙ επ2 <>
'ο' ΤΟΤΕ
ΓΡΑΨΕ 'Λάθος επιλογή. Ξαναπροσπάθησε!!!'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επ2 = 'Ο' Η επ2 = 'ο' Η επ2 = 'Ν' Η επ2 = 'ν'
ΑΝ επ2 = 'Ν' Η επ2 = 'ν' ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε αριθμό κυκλοφορίας του οχήματος: '
ΔΙΑΒΑΣΕ αρ
ΑΝ (αρχ = 0 ΚΑΙ τελος = 0) ΤΟΤΕ
αρχ <- 1
τελος <- 1
π[τελος] <- αρ
ΑΛΛΙΩΣ
τελος <- τελος + 1
π[τελος] <- αρ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ τελος = 250 Η επ2 = 'Ο' Η επ2 = 'ο'
ΑΝ τελος = 250 ΤΟΤΕ
ΓΡΑΨΕ 'Το πλοίο είναι πλήρες και δε χωρά άλλα οχήματα'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ_ΑΝ επ1 = 2 ΤΟΤΕ
πλ <- 0
ΑΝ (αρχ = 0 ΚΑΙ τελος = 0) ΤΟΤΕ
ΓΡΑΨΕ 'Το πλοίο είναι άδειο'
ΑΛΛΙΩΣ_ΑΝ αρχ = τελος ΤΟΤΕ
ΓΡΑΨΕ 'Αποβιβάζεται το μοναδικό όχημα: ', π[αρχ]
π[αρχ] <- ''
αρχ <- 0
τελος <- 0
πλ <- πλ + 1
ΑΛΛΙΩΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Αποβιβάζεται το όχημα: ', π[αρχ]
π[αρχ] <- ''
αρχ <- αρχ + 1
πλ <- πλ + 1
ΜΕΧΡΙΣ_ΟΤΟΥ (αρχ > τελος)
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ 'Οχήματα που αποβιβάστηκαν στην ΑΙΓΙΝΑ: ', πλ
αρχ <- 0
τελος <- 0
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ επ1 = 3
ΓΡΑΨΕ 'ΕΞΟΔΟΣ ΑΠΟ ΤΟ ΠΡΟΓΡΑΜΜΑ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
624 / 680
1.2 Ουρά
Παραδείγματα
Ενότητα §1.2.1
Ερωτήσεις - Ασκήσεις
Ενότητα §1.2.2
625 / 680
626 / 680
627 / 680
628 / 680
629 / 680
630 / 680
10.4 Παράμετροι
Μία παράμετρος είναι μία μεταβλητή που επιτρέπει το πέρασμα
της τιμής της από ένα τμήμα προγράμματος σε ένα άλλο.
Σημείωση
Αυτή η δήλωση είναι περισσότερο αληθής για της Συναρτήσεις.
Στις Διαδικασίες δεν περνάει απλά η τιμή της μεταβλητής αλλά
μια αναφορά στην ίδια τη μεταβλητή (στο βιβλίο αναφέρεται
πως στο τέλος της Διαδικασίας γίνεται μεταφορά των τιμών πίσω
στις παραμέτρους).
631 / 680
632 / 680
633 / 680
Παράδειγμα
ΠΡΟΓΡΑΜΜΑ Παράδειγμα_2
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : R, Εμ
ΑΡΧΗ
ΚΑΛΕΣΕ Είσοδος_δεδομένων (R)
Εμ <- Εμβαδό_κύκλου (R)
ΚΑΛΕΣΕ Εκτύπωση (Εμ)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
…
634 / 680
635 / 680
Μια ΣΥΝΑΡΤΗΣΗ:
636 / 680
637 / 680
Σύνταξη
ΚΑΛΕΣΕ <Όνομα διαδικασίας> (<λίστα παραμέτρων>)
Παράδειγμα
ΚΑΛΕΣΕ Πράξεις (Α, Β, Διαφορά)
Λειτουργία
Η εκτέλεση του προγράμματος διακόπτεται και εκτελούνται οι
εντολές της διαδικασίας που καλείται. Μετά το τέλος της
διαδικασίας η εκτέλεση του προγράμματος συνεχίζεται από την
εντολή που ακολουθεί. Η λίστα των παραμέτρων ορίζει τις τιμές
που περνούν στη διαδικασία και τις τιμές που αυτή επιστρέφει.
Η λίστα παραμέτρων δεν είναι υποχρεωτική.
638 / 680
Παράδειγμα
ΠΡΟΓΡΑΜΜΑ Παράδειγμα_2
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : R, Εμ
ΑΡΧΗ
ΚΑΛΕΣΕ Είσοδος_δεδομένων (R)
Εμ <- Εμβαδό_κύκλου (R)
ΚΑΛΕΣΕ Εκτύπωση (Εμ)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Είσοδος_δεδομένων(Αριθμός)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : Αριθμός
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την ακτίνα'
ΔΙΑΒΑΣΕ Αριθμός
ΜΕΧΡΙΣ_ΟΤΟΥ Αριθμός>0
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Εκτύπωση(Αποτέλεσμα)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: Αποτέλεσμα
ΑΡΧΗ
ΓΡΑΨΕ 'Το εμβαδό του κύκλου είναι:', Αποτέλεσμα
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
…
639 / 680
640 / 680
641 / 680
642 / 680
643 / 680
644 / 680
10.6 Εμβέλεια μεταβλητών – σταθερών
Περιορισμένη εμβέλεια
645 / 680
646 / 680
2006 / Θέμα 1ο - Γ
o Διαδικασία
2007 / Θέμα 2ο
o Συνάρτηση
Πίνακες τιμών
2014 επάν. / Θέμα Β1 (Λύσεις)
o Συνάρτηση
647 / 680
Μετατροπής
2007 / Θέμα 2ο
o Συνάρτηση σε Διαδικασία
648 / 680
5.2 Εκσφαλμάτωση
5.2.4 Εκσφαλμάτωση λογικών λαθών στα υποπρογράμματα
649 / 680
5.2 Εκσφαλμάτωση
5.2.4 Εκσφαλμάτωση λογικών λαθών στα υποπρογράμματα
650 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
651 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
📖 Ένα σενάριο ελέγχου (test case) περιγράφει τα δεδομένα
εισόδου ολόκληρου του προγράμματος ή τμήματος του
προγράμματος (διαδικασία, συνάρτηση) και τα αναμενόμενα
αποτελέσματα. Τα σενάρια ελέγχου εκτελούνται, είτε σε
πραγματικό περιβάλλον προγραμματισμού είτε εικονικά με
δημιουργία πίνακα τιμών των μεταβλητών. Σε περίπτωση
αποκλίσεων μεταξύ των αναμενόμενων και των πραγματικών
αποτελεσμάτων, υπάρχει λάθος το οποίο πρέπει να εντοπιστεί
και να διορθωθεί
652 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
653 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
654 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
655 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
656 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
657 / 680
5.2 Εκσφαλμάτωση
5.2.5 Μέθοδος ελέγχου «Μαύρο Κουτί»
658 / 680
659 / 680
660 / 680
661 / 680
662 / 680
663 / 680
664 / 680
1.3 Άλλες δομές δεδομένων
1.3.1 Λίστες
665 / 680
666 / 680
667 / 680
668 / 680
…
Μπορούμε να έχουμε ένα απλό δένδρο, το οποίο να απαρτίζεται
από έναν μόνο κόμβο. Αυτός ο κόμβος είναι και ρίζα του απλού
αυτού δένδρου, διότι δεν έχει γονέα και φύλλο, και διότι δεν έχει
παιδιά
669 / 680
Ένα δένδρο (tree) είναι μία δομή που αποτελείται από ένα
σύνολο κόμβων και ένα σύνολο ακμών μεταξύ των κόμβων με
βάση τους εξής κανόνες:
670 / 680
671 / 680
672 / 680
…
Υπάρχουν δύο λόγοι για τους οποίους τα δένδρα είναι τόσο
ισχυρά. Ο πρώτος λόγος αναφέρεται στη δυναμικότητα των
δένδρων. Είναι πολύ εύκολο να προσθέσετε, να αφαιρέσετε ή να
αναζητήσετε ένα στοιχείο σε ένα δένδρο, όπως θα δούμε στη
συνέχεια. Ο δεύτερος βασικός λόγος είναι ότι η δομή των
δένδρων μεταφέρει πληροφορίες.
673 / 680
674 / 680
Δυαδικά Δένδρα
Ένα δυαδικό δένδρο (binary tree) είναι ένα διατεταγμένο δένδρο,
στο οποίο κάθε κόμβος έχει το πολύ δύο παιδιά, το αριστερό και
το δεξί παιδί. Μπορούμε, συνεπώς, να μιλάμε για αριστερό και
δεξιό υποδένδρο ενός κόμβου.
675 / 680
1.3 Άλλες δομές δεδομένων
1.3.2 Δένδρα
676 / 680
677 / 680
Ένα δένδρο μπορεί μόνο να ρέει προς μία κατεύθυνση, από τον
κόμβο ρίζας σε κόμβους φύλλων ή κόμβους παιδιών. Ένα δένδρο
μπορεί να έχει μόνο μονόδρομες συνδέσεις - ένας κόμβος
παιδιού μπορεί να έχει μόνο έναν γονέα και ένα δένδρο δεν
μπορεί να έχει βρόχους ή κυκλικούς δεσμούς.
678 / 680
679 / 680
Τύποι Γράφων
📖 Εάν όλες οι ακμές σε έναν γράφο έχουν κατεύθυνση, ο γράφος
ονομάζεται κατευθυνόμενος γράφος (directed graph). Εάν
όλες οι ακμές σε έναν γράφο δεν έχουν κατεύθυνση, ο γράφος
ονομάζεται μη κατευθυνόμενος γράφος (undirected graph)
680 / 680
3 / 680
Paused
Help
Keyboard shortcuts
↑, ←, Go to
Pg previous
Up, k slide
↓, →,
Pg
Go to next
Dn,
slide
Space
,j
Hom Go to first
e slide
Go to last
End
slide
Num
ber + Go to specific
Retur slide
n
Toggle
blackout /
b /
mirrored /
m / f
fullscreen
mode
Clone
c
slideshow
Toggle
p presenter
mode
Restart the
t presentation
timer
Toggle this
?, h
help
Es Back to
c slideshow