Αιγόξηζκνη 2.2.7.4 Δομή επανάλητηρ Ενηολή Όζο Δηζαγσγή ζηηο Αξρέο ηεο Δπηζηήκεο ησλ Η/Υ 1
Λίγνη αιγόξηζκνη ρξεζηκνπνηνύλ κόλν ηηο δνκέο αθνινπζίαο θαη επηινγήο. Σηα ξεαιηζηηθά πξνβιήκαηα ρξεηάδεηαη ζπλήζσο κηα ζεηξά εληνιώλ λα επαλαιεθζεί πνιιέο θνξέο. Οη επαλαιεπηηθέο δηαδηθαζίεο κπνξεί λα έρνπλ δηάθνξεο κνξθέο θαη λα εκπεξηέρνπλ ζπλζήθεο επηινγώλ. Τν πόζεο θνξέο κπνξνύλ λα εθηειεζηνύλ νη εληνιέο επαλάιεςεο θαζνξίδεηαη κε δηαθνξεηηθνύο ηξόπνπο. 2
Οη εληνιέο πνπ ζπγθξνηνύλ κηα εληνιή επαλάιεςεο απνθαινύληαη βπόσορ (αγγι. loop, γαι. boucle). Πξνζνρή: βξόρνο, όρη βξόγρνο. Βξόρνο = ζειηά, βξόγρνο = πλεπκόλη. 3
Δληνιή Όζν Όζο Σπλζήθε επανάλαβε Δληνιέο Τέλορ_επανάλητηρ Δθηεινύληαη νη εληνιέο όζν ε ζπλζήθε είλαη αιεζήο 4
Παπάδειγμα 2.14 Να εθπνλεζεί αιγόξηζκνο ν νπνίνο ζα δηαβάδεη έλα ζεηηθό αθέξαην αξηζκό Ν θαη ζα εκθαλίδεη ηνπο αθέξαηνπο αξηζκνύο από ην 1 κέρξη θαη ηνλ αξηζκό Ν. 5
Οη δεηνύκελνη αξηζκνί κπνξνύλ λα παξαρζνύλ κε έλα ζπζηεκαηηθό ηξόπν, αθνύ ν θαζέλαο δεκηνπξγείηαη από ηνλ πξνεγνύκελό ηνπ πξνζζέηνληαο ην 1. Με ηελ αμηνπνίεζε απηνύ ηνπ γεγνλόηνο, ν αιγόξηζκνο δεκηνπξγεί θάζε λέν αξηζκό ζε κηα κεηαβιεηή, έζησ i. Απηό κπνξεί λα γίλεη κε ηε ρξήζε ηεο εληνιήο εθρώξεζεο: i i + 1. 6
Οπόηε πξνθύπηεη ην αθόινπζν: i 1 Γπάτε i! Δκθαλίδεηαη ην 1 i i + 1 Γπάτε i! Δκθαλίδεηαη ην 2 i i + 1 Γπάτε i! Δκθαλίδεηαη ην 3 i i + 1 Γπάτε i! Δκθαλίδεηαη ην Ν i i + 1 7
Τν δεύγνο ησλ εληνιώλ Γπάτε i i i + 1 επαλαιακβάλεηαη απηνύζην. Με κία εληνιή επαλάιεςεο νη εληνιέο απηέο κπνξνύλ λα γξαθνύλ κία θνξά θαη λα εθηειεζηνύλ Ν θνξέο. Σην παξάδεηγκα νη εληνιέο εθηεινύληαη όζν δηάζηεκα ε κεηαβιεηή i είλαη κηθξόηεξε ή ίζε ηεο κεηαβιεηήο Ν. Η εληνιή επαλάιεςεο όκσο εθηειείηαη Ν + 1 θνξέο (ρξεηάδεηαη θαη έλαο έιεγρνο όπσο ζα δνύκε γηα λα πξνθύςεη ε ζπλζήθε ςεπδήο). 8
Αλγόπιθμορ Σεηξά_αξηζκώλ Γπάτε "Γώζηε έλαλ ζεηηθό αθέξαην αξηζκό" Διάβαζε Ν i 1 Όζο i Ν επανάλαβε Γπάτε i i i + 1 Τέλορ_επανάλητηρ Τέλορ Σεηξά_αξηζκώλ 9
Σπρλά ε κεηαβιεηή i απνθαιείηαη κεηξεηήο, επεηδή απμάλεηαη θαηά 1. Σε άιιεο πεξηπηώζεηο όκσο ην βήκα αύμεζεο κπνξεί λα είλαη νπνηνδήπνηε. 10
Αλ θαη ζην ζπγθεθξηκέλν παξάδεηγκα είλαη γλσζηόο ν αξηζκόο ησλ θνξώλ πνπ ζα εθηειεζηεί ε εληνιή επαλάιεςεο, θαηά βάζε ε εληνιή Όζν ρξεζηκνπνηείηαη γηα άγλσζην αξηζκό εθηειέζεσλ. Γειαδή ην πόζεο θνξέο εθηειείηαη ε επαλάιεςε γίλεηαη γλσζηό κεηά ην ηέινο ησλ εθηειέζεσλ ηεο. 11
Αο ζπκεζνύκε ηνλ αιγόξηζκν ηνπ Δπθιείδε γηα ηελ εύξεζε ηνπ κέγηζηνπ θνηλνύ δηαηξέηε πνπ είδακε ζηα πξώηα καζήκαηα. Η πεξηγξαθή πνπ είρακε δώζεη γηα δύν αξηζκνύο πνπ θαηαρσξνύληαη ζηηο κεηαβιεηέο x θαη y ήηαλ ε αθόινπζε: Θέζε σο z ην y Όζν ην z είλαη δηάθνξν ηνπ 0, ππνιόγηζε ην ππόινηπν ηεο δηαίξεζεο ηνπ x κε ην y θαη ζέζε ην ππόινηπν ζην z, ην y ζην x θαη ην z ζην y Όηαλ ην z πξνθύςεη 0, ν ΜΚΓ είλαη ν x Οπόηε ε πινπνίεζε ηνπ ζε ςεπδνγιώζζα θαη ε εθηέιεζε ηνπ γηα ηνπο αξηζκνύο 72 θαη 27 είλαη: 12
Αλγόπιθμορ Εςκλείδηρ Διάβαζε x, y z y Όζο z 0 επανάλαβε z x mod y x y y z Τέλορ_επανάλητηρ Γπάτε x Τέλορ Εςκλείδηρ x y z z 0 Έξοδορ 78 27 27 Αιεζήο 24 27 24 Αιεζήο 3 24 3 Αιεζήο 0 3 0 Ψεπδήο 3 13
Όπσο θαίλεηαη από ηνλ παξαπάλσ πίλαθα ν αξηζκόο ησλ θνξώλ πνπ ζα εθηειεζηεί ε εληνιή Όζν εμαξηάηαη από ηηο ηηκέο εηζόδνπ θαη δελ είλαη ν ίδηνο θάζε θνξά. Αθόκε ζηελ εληνιή Όζο επανάλαβε νη εκπεξηερόκελεο εληνιέο κπνξεί λα κελ εθηειεζηνύλ πνηέ, αθνύ ε ζπλζήθε γηα ηελ εθηέιεζε ηνπο ή όρη ειέγρεηαη ζηελ αξρή. Απηό ζπκβαίλεη όηαλ γηα θάπνηα ραξαθηεξηζηηθή ηηκή ή ηηκέο εηζόδνπ, ε ζπλζήθε πξνθύπηεη ςεπδήο. Δίλαη πξνθαλέο όηη αλ δνζεί κία ηέηνηα ηηκή ηελ πξώηε θνξά πνπ ειέγρεηαη ε ζπλζήθε, νη εκπεξηερόκελεο εληνιέο δελ ζα εθηειεζηνύλ. 14
Παπάδειγμα 2.15. Να γξαθεί αιγόξηζκνο ν νπνίνο δηαβάδεη ην όλνκα ελόο καζεηή, ηνπο βαζκνύο ηνπ ζε ηξία καζήκαηα θαη ππνινγίδεη θαη ηππώλεη ην κέζν όξν ηνπ. Ο αιγόξηζκνο λα ζηακαηάεη, όηαλ γηα όλνκα καζεηή δνζεί ην θελό εκθαλίδνληαο ην πιήζνο ησλ καζεηώλ γηα ηνπο νπνίνπο ππνινγίζηεθε ν κέζνο όξνο. 15
Αλγόπιθμορ Μέζνο_όξνο π 0 Γπάτε "Γώζηε όλνκα" Διάβαζε όλνκα Όζο όλνκα '' '' επανάλαβε Γπάτε "Γώζηε ηνπο ηξεηο βαζκνύο" Διάβαζε α, β, γ Γπάτε (α + β + γ) / 3 π π + 1 Γπάτε "Γώζηε όλνκα" Διάβαζε όλνκα Τέλορ_επανάλητηρ Γπάτε "Γόζεθαλ ζηνηρεία γηα", π, "καζεηέο" Τέλορ Μέζνο_όξνο Ο θελόο ραξαθηήξαο είλαη κία ραξαθηεξηζηηθή ηηκή ε νπνία πξνθαιεί ηνλ ηεξκαηηζκό ηεο εθηέιεζεο ησλ εληνιώλ νη νπνίεο εκπεξηέρνληαη ζηε δνκή επαλάιεςεο. Άξα εθηέιεζε ησλ εληνιώλ ζα γίλεηαη κόλν όηαλ δελ εηζάγεηαη απηή ε ηηκή. Δπίζεο αλ ε ζπγθεθξηκέλε ηηκή εηζαρζεί ηελ πξώηε θνξά σο όλνκα, νη εκπεξηερόκελεο εληνιέο δελ ζα εθηειεζηνύλ πνηέ. Σηε κεηαβιεηή π εθρσξείηαη ην πιήζνο ησλ καζεηώλ γηα ηνπο νπνίνπο δόζεθαλ ζηνηρεία. Έηζη θάζε θνξά πνπ εθηεινύληαη νη εκπεξηερόκελεο εληνιέο απμάλεηαη θαηά 1. 16
Παπάδειγμα 2.16. Σε έλα ζνππεξκάξθεη θάζε πειάηεο δηθαηνύηαη κηα δσξνεπηηαγή 6 αλ ζπκπιεξώζεη 200 πόληνπο. Να αλαπηπρζεί αιγόξηζκνο ν νπνίνο ζα δηαβάδεη ηνπο πόληνπο πνπ θεξδίδεη έλαο ζπγθεθξηκέλνο πειάηεο ζε θάζε επίζθεςε ζην ζνππεξκάξθεη θαη ζα εκθαλίδεη κεηά από πόζεο επηζθέςεηο παίξλεη ηε δσξνεπηηαγή θαη πνηνο είλαη ν κέζνο όξνο πόλησλ ζε θάζε επίζθεςε. 17
Αλγόπιθμορ Παπάδειγμα Σ 0 π 0 Όζο Σ < 200 επανάλαβε Διάβαζε πόληνη Σ Σ + πόληνη π π + 1 Τέλορ_επανάλητηρ ΜΟ Σ / π Γπάτε π, ΜΟ Τέλορ Παπάδειγμα Η κεηαβιεηή Σ θαιείηαη θαη αζξνηζηήο. Ο ξόινο ηεο ζηελ αλάπηπμε ηνπ αιγνξίζκνπ είλαη λα θξαηήζεη ην άζξνηζκα ησλ πόλησλ πνπ ζπιιέγνληαη ζε θάζε αγνξά. Η κεηαβιεηή Σ αξρηθνπνηείηαη πξηλ από ηελ εληνιή επαλάιεςεο κε ηελ ηηκή κεδέλ ελώ απμάλεηαη θάζε θνξά θαηά ηνπο πόληνπο πνπ εηζάγνληαη. Τέινο ν κέζνο όξνο ππνινγίδεηαη αθνύ ζηακαηήζεη ε εθηέιεζε ηεο εληνιήο επαλάιεςεο θαη έρεη ππνινγηζηεί ην άζξνηζκα θαη ην πιήζνο ησλ αγνξώλ. 18
Να αζρνιεζείηε κε ηηο αζθήζεηο 19 ζηε ζειίδα 51 29 ζηε ζειίδα 52 32 ζηε ζειίδα 53 33 ζηε ζειίδα 53 19