Υπάρχουν 2 θέματα. Το πρώτο είναι η χρήση της «Για» που πάει μέχρι το τέλος και δεν σταματάει μόλις βρει το στοιχείο. Το δεύτερο είναι η μη χρήση της λογικής μεταβλητής.
Στο θέμα της Για η πάγια θέση μου είναι ότι θα έπρεπε να κόβουμε βαθμούς όταν γίνονται εμφανώς περιττές επαναλήψεις. Είναι εμφανές ότι ο μαθητής αποφεύγει να χρησιμοποιήσει την Όσο. Κάνει λάθος επιλογή στη δομής επανάληψης. Βέβαια με βάση τα δεδομένα δεν τίθεται θέμα απώλειας βαθμών. Βαθμολογείται η ορθότητα (αν και κατά τη γνώμη μου θα έπρεπε να μετράει και η ποιότητα). Υπάρχουν μάλιστα και πολύ χειρότερα, δηλαδή αλγόριθμοι που αλλάζουν την τάξη.
Για μια αναλυτική συζήτηση στο παραπάνω θέμα υπάρχει το παρακάτω θέμα:
https://alkisg.mysch.gr/steki/index.php?topic=988.0Τώρα το δεύτερο θέμα δηλαδή στη χρήση θέσης και όχι λογικής μεταβλητής.
Θεωρώ θαυμάσια τη λύση για πολλούς λόγους. Να μερικοί:
Όπου δεν υπάρχουν λογικές μεταβλητές η δουλειά γίνεται με ακεραίους. Πχ 0 για ψευδής και 1 για αληθής. Το βασικό concept είναι ότι αν συμβεί κάτι (συνθήκη αν) τότε αλλάζει κάτι για να το καταλάβουμε στον επόμενο έλεγχο επανάληψης, είτε είναι μετάβαση από ψευδής σε αληθής είτε 0 σε ένα είτε οτιδήποτε.
Επίσης η συγκεκριμένη έκδοση με τη θέση δίνει περισσότερη πληροφορία. Όχι μόνο αν υπάρχει κάτι αλλά και που υπάρχει.
Επίσης αν θέλουμε να φτιάξουμε συνάρτηση αναζήτησης σίγουρα θα το κάνουμε με τη θέση αφού θέλουμε η συνάρτησή μας να είναι γενικής χρήσεως και όχι να εφαρμόζεται μόνο σε προβλήματα που θέλουμε να μάθουμε αν υπάρχει κάτι ή όχι. Αν το κάνεις με τη θέση, έχεις μια συνάρτηση γενικής χρήσεως που τη βάζεις σε βιβλιοθήκη. Η γενικότητα της χρήσης είναι μια από τις πολύ βασικές αρχές κατασκευής υποπρογραμμάτων.
Τέλος η χρήση ακεραίων αντί για λογικές τιμές μπορεί να κάνει κάτι που δεν το κάνει η μια λογική τιμή: Όταν κάνεις αναζήτηση σε ταξινομημένο και θέλεις να σταματήσεις μόλις περάσεις τη θέση και δε βρεις το στοιχείο, τότε γίνεται εύκολα με ακεραίους. Πχ αρχικά έχεις τιμή 0 που σημαίνει «Δεν έχει βρεθεί». 1 σημαίνει «βρέθηκε» και 2 σημαίνει «πέρασε». Έτσι μπορείς να καταλάβεις για πιο λόγο σταμάτησε η επανάληψη.
Με 2 λόγια μια αναζήτηση με Όσο και εύρεση θέσης είναι η καλύτερη λύση.