Αποστολέας Θέμα: Σειριακή αναζήτηση.  (Αναγνώστηκε 1459 φορές)

manosteach

  • Βετεράνος
  • ****
  • Μηνύματα: 89
    • ΔΩΡΕΑΝ ONLINE ΜΑΘΗΜΑΤΑ ΑΕΠΠ & ECDL
Σειριακή αναζήτηση.
« στις: 02 Απρ 2012, 04:55:13 μμ »
Συνάδελφοι έχω μια ερώτηση!
Την σειριακή αναζήτηση δεν είναι πιο σωστό να την διδάσκουμε με την δομή επανάληψης Μέχρις_οτου αντί για την Όσο;
Το σκεπτικό μου είναι το εξής: Λόγω του οτι πρέπει να κάνουμε μία τουλάχιστον σύγκριση θα χρησιμοποιήσουμε την Μέχρις _οτου.
Για να βοηθάω τους μαθητές να επιλέγουν την καλύτερη δομή επανάληψης τους έχω δώσει σαν κριτήριο την διαφορά της Όσο με την Μεχρις_οτου.
Δηλαδή στην Όσο μπορεί να μην εκτελεστούν ούτε μια φορά η εντολές της επανάληψης ενώ στην Μεχρις_ότου   θα εκτελεστούν τουλάχιστον μία φορά.
Δωρεάν online μαθήματα μέσω internet.
http://www.manosteach.com

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3305
  • agent romanoff you miss me?
    • P.Tsiotakis
Απ: Σειριακή αναζήτηση.
« Απάντηση #1 στις: 02 Απρ 2012, 06:10:20 μμ »
δε διαφωνώ μαζί σου,
προσωπικά επιμένω στην Όσο, γιατί αυτήν χρησιμοποιεί το βιβλίο για λόγους ομοιομορφίας...

manosteach

  • Βετεράνος
  • ****
  • Μηνύματα: 89
    • ΔΩΡΕΑΝ ONLINE ΜΑΘΗΜΑΤΑ ΑΕΠΠ & ECDL
Απ: Σειριακή αναζήτηση.
« Απάντηση #2 στις: 03 Απρ 2012, 02:10:49 μμ »
Πως σας φαίνεται αυτός ο αλγόριθμος σειριακής αναζήτησης

ι<--0
Αρχή_Επανάληψης
ι<--ι+1
Μέχρις_οτου ι>Ν ή Α[ι]=τιμή
Αν Α[ι]= τιμή τότε
Γράψε ' Βρέθηκε'
αλλιώς
Γράψε ' Δεν Βρέθηκε '
Τέλος_αν
Δωρεάν online μαθήματα μέσω internet.
http://www.manosteach.com

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3531
  • to Iterate is human to Recurse divine
Απ: Σειριακή αναζήτηση.
« Απάντηση #3 στις: 03 Απρ 2012, 02:19:04 μμ »
Έχει πρόβλημα με την καθοριστικότητα αφού
αν δεν υπάρχει στον πίνακα
θα πάει να υπολογίσει το Α(Ν+1) που δεν υπάρχει (δεν έχουμε short-circuit evaluation)
πρέπει να χρησιμοποιήσεις λογική μεταβλητή ή αντί για αυτή
μια μεταβλητή θέση != 0

πάντως ακόμα και να είχαμε short-circuit evaluation, πάλι θα είχε πρόβλημα γιατί έξω από την επανάληψη χρησιμοποιείς την παράσταση Α(i).

Πως σας φαίνεται αυτός ο αλγόριθμος σειριακής αναζήτησης

ι<--0
Αρχή_Επανάληψης
ι<--ι+1
Μέχρις_οτου ι>Ν ή Α[ι]=τιμή
Αν Α[ι]= τιμή τότε
Γράψε ' Βρέθηκε'
αλλιώς
Γράψε ' Δεν Βρέθηκε '
Τέλος_αν
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3305
  • agent romanoff you miss me?
    • P.Tsiotakis
Απ: Σειριακή αναζήτηση.
« Απάντηση #4 στις: 03 Απρ 2012, 02:28:57 μμ »
όπως ανέφερε ο συνάδελφος, είναι λάθος
διότι στην περίπτωση που το στοιχείο δεν υπάρχει στον πίνακα ο αλγόριθμος επικαλείται θέση του πίνακα εκτός ορίων (την N+1)
αυτό θα μπορούσε να είναι ένα ωραίο ερώτημα εύρεσης λάθους

Σπύρος Δουκάκης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 831
  • Έτερος εξ ετέρου σοφός, το τε πάλαι το τε νυν
    • http://sdoukakis.wordpress.com/
Απ: Σειριακή αναζήτηση.
« Απάντηση #5 στις: 03 Απρ 2012, 02:47:25 μμ »
Ένας αλγόριθμος που έχει γραφεί στο παρελθόν για την αναζήτηση είναι ο ακόλουθος:

Κώδικας: [Επιλογή]
Αλγόριθμος Αναζήτηση
Δεδομένα // Π, Ν, Ζ //
i ← 0
Αρχή_επανάληψης
  i ← i + 1
Μέχρις_ότου Π[i] = Ζ ή i = Ν
Αν Π[i] = Ζ τότε
  Εμφάνισε "Υπάρχει", i
αλλιώς
  Εμφάνισε "Δεν υπάρχει"
Τέλος_αν
Τέλος Αναζήτηση

Με την παραπάνω διόρθωση ο αλγόριθμος που έγραψες δεν έχει πρόβλημα.

Πως σας φαίνεται αυτός ο αλγόριθμος σειριακής αναζήτησης

ι<--0
Αρχή_Επανάληψης
ι<--ι+1
Μέχρις_οτου ι>Ν ή Α[ι]=τιμή
Αν Α[ι]= τιμή τότε
Γράψε ' Βρέθηκε'
αλλιώς
Γράψε ' Δεν Βρέθηκε '
Τέλος_αν