Θεμα 2005(α)

Ξεκίνησε από kiro, 06 Φεβ 2006, 06:27:54 ΜΜ

« προηγούμενο - επόμενο »

kiro

Θα ήθελα μια διευκρίνηση σχετικά με το πώς λειτουργεί η επανάληψη όσο ..επανάλαβε….. ή αρχη_επαναληψης..μεχρις_οτου μεσα σε επαναληψη Για..από μεχρι….Συγκεκριμενα στο 4ο θεμα του 2005 στο α ρώτημα που ζητάει να διαβαστεί ο πίνακας και να γίνει έλεγχος εισόδου των στοιχείων που εισάγονται δηλ. να επιτρέπει να εισάγονται στοιχεία μόνο αν είναι ΄Σ¨, ¨Λ¨ και ¨Ξ¨

Αλγόριθμος Θέμα_4
Για i από 1 μέχρι 100
      Για j από 1 μέχρι 50
            διάβασε ΑΠ[i,j]
            Όσο (ΑΠ[i,j]< >&#8220;Σ&#8221;) και (ΑΠ[i,j]< >&#8220;Λ&#8221;) και (ΑΠ[i,j]< >&#8220;Ξ&#8221;) επανάλαβε
                  εμφάνισε &#8220;Λάθος τιμή. Ξαναπροσπάθησε&#8221;
                  διάβασε ΑΠ[i,j]
            Τέλος_επανάληψης
      Τέλος_επανάληψης

Πχ. πριν τελειώσει η όσο έχει διάβασε ΑΠ[i,j]. Εχει δηλ τη δυνατότητα να διαβάζει επόμενο στοιχείο χωρίς να ξανάπαει πάνω στη Για&#8230;? Το ίδιο και με την Αρχή_ επανάληψης, μπορεί να διαβάζει το επόμενο στοιχείο μέσα από την Αρχή_Επανάληψης
            διάβασε ΑΠ[i,j]
και να δεν βρει Σ ή Λ ή Ξ τελειώνει η επανάληψη και αρχίζει πάλι από που

Αλγόριθμος Θέμα_4
Για i από 1 μέχρι 100
      Για j από 1 μέχρι 50
            Αρχή_Επανάληψης
            διάβασε ΑΠ[i,j]
            Μέχρις_ότου ΑΠ[i,j]=&#8220;Σ&#8221; και ΑΠ[i,j]=&#8220;Λ&#8221; και ΑΠ[i,j]=&#8220;Ξ&#8221;
            Τέλος_επανάληψης
      Τέλος_επανάληψης

Ευχαριστω!

alkisg

#1
Η Όσο στο πρώτο παράδειγμα (αλλά και η Αρχή_επανάληψης στο δεύτερο) είναι στο εσωτερικό του Για. Έτσι, καθόλη τη διάρκεια της Όσο, οι μετρητές i, j δεν αλλάζουν. Επομένως δε διαβάζει το επόμενο στοιχείο του πίνακα, αλλά το ίδιο στοιχείο.

Σαν να λέμε (αντίστοιχο παράδειγμα χωρίς Για και χωρίς πίνακες)
[glossa] Διάβασε α
Όσο α <> "Σ" επανάλαβε
  Γράψε "Λάθος τιμή, ξαναδώσε το α:  "
  Διάβασε α
τέλος_επανάληψης[/glossa]

kiro

Αν διαβάζει το ίδιο στοιχείο τι νόημα έχει ? Αν δηλ διαβάσει ΑΠ[i,j] και δεν είναι κανένα από τα Σ, Λ ή Ξ ξαναρχίζει από την αρχή και ξαναδιαβάζει το ίδιο?
Θα μπορούσε ένας που ρωτήθηκε να είχε δώσει μια άλλη απάντηση πχ ΄Τ΄ εμείς με κάποιο τρόπο δε θα έπρεπε να διαβάζουμε τις απαντήσεις και να αποθηκεύουμε όσες είναι  Σ, Λ ή Ξ. ενώ σε περιπτωση που είναι Τ να σταματάει η επαναληψη? πχ

Διαβασε ΑΠ[i,j]
Όσο ΑΠ[i,j]="Σ" και ΑΠ[i,j]="Λ" και ΑΠ[i,j]="Ξ" επανάλαβε
Διαβασε ΑΠ[i,j]
 τέλος_επανάληψης

ή
Αρχή_Επανάληψης  
  διάβασε ΑΠ[i,j]
  Μέχρις_ότου όχι (ΑΠ[i,j]=Σ"και ΑΠ[i,j]="Λ" και ΑΠ[i,j]="Ξ" )



andreas

Διόρθωση  :

Διαβασε ΑΠ[i,j]
Όσο ΑΠ[i,j]<>"Σ" και ΑΠ[i,j]<>"Λ" και ΑΠ[i,j]<>"Ξ" επανάλαβε  
     Διαβασε ΑΠ[i,j]
 τέλος_επανάληψης
 

Ανδρέας

EleniK

Kiro
αυτό που εννοεί ο Αλκης είναι ότι διαβάζει νέα τιμή για το ίδιο στοιχείο, δηλαδή νέα τιμή που θα την αποθηκεύει στην ίδια θέση του πίνακα. Και οι δυο τρόποι για εγκυρότητα είναι σωστοί.
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

xaidi

Αν χρησιμοποιήσουμε την αρχή επανάληψης για τους γνωστούς λόγους η εντολή διάβασε γράφεται μια φορά εντός της επαναληπτικής δομής.
Στην περίπτωση που χρησιμοποιούμε την όσο η εντολή διάβασε γράφεται μια φορά εκτός για την πρώτη τιμή ελέγχου της συνθήκης. Σε περίπτωση μη αποδεκτής τιμής διαβάζει από την εσωτερική τιμή πια την καινούργια τιμή για το ίδιο κελί.
Και οι δύο τρόποι είναι αποδεκτοί. Προσωπική κρίση: η αρχή επανάληψης είναι λίγο πιο απλή στη σκέψη.
Ευχαριστώ,

Βαγγέλης

Δεν εχω καταλάβει ότι οι μαθητές μου έχουν τέτοιο πρόβλημα σαν και αυτό που παρουσιάσε ο kiro.  Νομίζω ότι έχει ερευνητικό ενδιαφέρον.
Προσωπικά τονίζω να χρησιμοποιούν πάντοτε την Αρχή_επανάληψης γιατί είναι πιο κομψη (ένα διάβασε λιγότερο και δεύτερον η συνθήκη ελέγχου  στο τέλος διατυπώνεται με πιο φυσικό τρόπο. Π.χ Μέχρις ότου P[i,j]<>'Σ'  ή ...κ.λπ

Βαγγέλης

evry

   Κατ'αρχήν ο λόγος που διαβάζει το ίδιο στοιχείο έχει το σκεπτικό "Δεν αφήνω το χρήστη να προχωρήσει παρακάτω αν δεν δώσει κάποια από τις αποδεκτές τιμές". Ο χρήστης δεν έχει άλλη επιλογή.
     Τώρα όσον αφορά το θέμα αν θα χρησιμοποιήσουμε Αρχή επανάληψης ή Όσο Επαναλάβε προφανώς και τα δυο είναι σωστά. Όμως στη σελίδα  176 του βιβλίου λέει ξεκάθαρα ότι

Χαρακτηριστική περίπτωση όπου προτιμάται η εντολή ΜΕΧΡΙΣ_ΟΤΟΥ είναι στον έλεγχο αποδεκτών τιμών καθώς και στην επιλογή από προκαθορισμένες απαντήσεις ή μενού

   Και μετά στην επόμενη σελίδα ακολουθεί ένα παράδειγμα όπου χρησιμοποιείται η ΜΕΧΡΙΣ_ΟΤΟΥ για αυτόν τον σκοπό.
   Εγώ προσωπικά λέω στους μαθητές μου να χρησιμοποιούν μόνο ΜΕΧΡΙΣ_ΟΤΟΥ για έλεγχο εγκυρότητας ώστε να έχουν το κεφάλι τους ήσυχο.
   Απλά επειδή από τις τρεις δομές επανάληψης που διδάσκονται έχουν μάθει να χρησιμοποιούν περισσότερο τις άλλες δυο (εδώ μάλλον φταίω και εγώ :-)) η μέχρις ότου ίσως να τους ξενίζει λίγο.
   Γενικότερα πάντως έχω παρατηρήσει ότι όσοι καθηγητές γνωρίζουν κυρίως Pascal χρησιμοποιούν περισσότερο τη ΜΕΧΡΙΣ_ΟΤΟΥ (λόγω repeat...until (ήταν πιο δημοφιλής στην Pascal)) ενώ όσοι έχουν δουλέψει περισσότερο με C, C++, Java προτιμούν την ΟΣΟ...ΕΠΑΝΑΛΑΒΕ λόγω της while...do.
Αυτά

ΠαράθεσηΑν διαβάζει το ίδιο στοιχείο τι νόημα έχει ? Αν δηλ διαβάσει ΑΠ[i,j] και δεν είναι κανένα από τα Σ, Λ ή Ξ ξαναρχίζει από την αρχή και ξαναδιαβάζει το ίδιο?
Θα μπορούσε ένας που ρωτήθηκε να είχε δώσει μια άλλη απάντηση πχ ΄Τ΄ εμείς με κάποιο τρόπο δε θα έπρεπε να διαβάζουμε τις απαντήσεις και να αποθηκεύουμε όσες είναι  Σ, Λ ή Ξ. ενώ σε περιπτωση που είναι Τ να σταματάει η επαναληψη?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr