Αποστολέας Θέμα: Θεμα 2005(α)  (Αναγνώστηκε 3649 φορές)

kiro

  • Βετεράνος
  • ****
  • Μηνύματα: 52
  • Γράψτε το προσωπικό σας σλόγκαν!
Θεμα 2005(α)
« στις: 06 Φεβ 2006, 06:27:54 μμ »
Θα ήθελα μια διευκρίνηση σχετικά με το πώς λειτουργεί η επανάληψη όσο ..επανάλαβε….. ή αρχη_επαναληψης..μεχρις_οτου μεσα σε επαναληψη Για..από μεχρι….Συγκεκριμενα στο 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

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 6014
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Re: Θεμα 2005(α)
« Απάντηση #1 στις: 07 Φεβ 2006, 10:31:37 πμ »
Η Όσο στο πρώτο παράδειγμα (αλλά και η Αρχή_επανάληψης στο δεύτερο) είναι στο εσωτερικό του Για. Έτσι, καθόλη τη διάρκεια της Όσο, οι μετρητές i, j δεν αλλάζουν. Επομένως δε διαβάζει το επόμενο στοιχείο του πίνακα, αλλά το ίδιο στοιχείο.

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

kiro

  • Βετεράνος
  • ****
  • Μηνύματα: 52
  • Γράψτε το προσωπικό σας σλόγκαν!
Re: Θεμα 2005(α)
« Απάντηση #2 στις: 07 Φεβ 2006, 11:07:12 πμ »
Αν διαβάζει το ίδιο στοιχείο τι νόημα έχει ? Αν δηλ διαβάσει ΑΠ[i,j] και δεν είναι κανένα από τα Σ, Λ ή Ξ ξαναρχίζει από την αρχή και ξαναδιαβάζει το ίδιο?
Θα μπορούσε ένας που ρωτήθηκε να είχε δώσει μια άλλη απάντηση πχ ΄Τ΄ εμείς με κάποιο τρόπο δε θα έπρεπε να διαβάζουμε τις απαντήσεις και να αποθηκεύουμε όσες είναι  Σ, Λ ή Ξ. ενώ σε περιπτωση που είναι Τ να σταματάει η επαναληψη? πχ

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

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



andreas

  • Νέος
  • *
  • Μηνύματα: 9
  • Γράψτε το προσωπικό σας σλόγκαν!
Re: Θεμα 2005(α)
« Απάντηση #3 στις: 07 Φεβ 2006, 11:58:37 πμ »
Διόρθωση  :

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


Ανδρέας

EleniK

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 708
Re: Θεμα 2005(α)
« Απάντηση #4 στις: 07 Φεβ 2006, 12:06:55 μμ »
Kiro
αυτό που εννοεί ο Αλκης είναι ότι διαβάζει νέα τιμή για το ίδιο στοιχείο, δηλαδή νέα τιμή που θα την αποθηκεύει στην ίδια θέση του πίνακα. Και οι δυο τρόποι για εγκυρότητα είναι σωστοί.
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

xaidi

  • Ομάδα διαγωνισμάτων 2009
  • *
  • Μηνύματα: 111
  • who is WHO!!!!!!
Re: Θεμα 2005(α)
« Απάντηση #5 στις: 07 Φεβ 2006, 12:22:30 μμ »
Αν χρησιμοποιήσουμε την αρχή επανάληψης για τους γνωστούς λόγους η εντολή διάβασε γράφεται μια φορά εντός της επαναληπτικής δομής.
Στην περίπτωση που χρησιμοποιούμε την όσο η εντολή διάβασε γράφεται μια φορά εκτός για την πρώτη τιμή ελέγχου της συνθήκης. Σε περίπτωση μη αποδεκτής τιμής διαβάζει από την εσωτερική τιμή πια την καινούργια τιμή για το ίδιο κελί.
Και οι δύο τρόποι είναι αποδεκτοί. Προσωπική κρίση: η αρχή επανάληψης είναι λίγο πιο απλή στη σκέψη.
Ευχαριστώ,

Βαγγέλης

  • Επισκέπτης
Re: Θεμα 2005(α)
« Απάντηση #6 στις: 08 Φεβ 2006, 11:28:15 πμ »
Δεν εχω καταλάβει ότι οι μαθητές μου έχουν τέτοιο πρόβλημα σαν και αυτό που παρουσιάσε ο kiro.  Νομίζω ότι έχει ερευνητικό ενδιαφέρον.
Προσωπικά τονίζω να χρησιμοποιούν πάντοτε την Αρχή_επανάληψης γιατί είναι πιο κομψη (ένα διάβασε λιγότερο και δεύτερον η συνθήκη ελέγχου  στο τέλος διατυπώνεται με πιο φυσικό τρόπο. Π.χ Μέχρις ότου P[i,j]<>'Σ'  ή ...κ.λπ

Βαγγέλης

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3609
  • to Iterate is human to Recurse divine
Re: Θεμα 2005(α)
« Απάντηση #7 στις: 08 Φεβ 2006, 01:07:36 μμ »
   Κατ'αρχήν ο λόγος που διαβάζει το ίδιο στοιχείο έχει το σκεπτικό "Δεν αφήνω το χρήστη να προχωρήσει παρακάτω αν δεν δώσει κάποια από τις αποδεκτές τιμές". Ο χρήστης δεν έχει άλλη επιλογή.
    Τώρα όσον αφορά το θέμα αν θα χρησιμοποιήσουμε Αρχή επανάληψης ή Όσο Επαναλάβε προφανώς και τα δυο είναι σωστά. Όμως στη σελίδα  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