Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γενικές εξετάσεις => Γ΄ Λυκείου => Εξετάσεις 2004-2005 => Μήνυμα ξεκίνησε από: kiro στις 06 Φεβ 2006, 06:27:54 μμ

Τίτλος: Θεμα 2005(α)
Αποστολή από: kiro στις 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;
           Τέλος_επανάληψης
     Τέλος_επανάληψης

Ευχαριστω!
Τίτλος: Re: Θεμα 2005(α)
Αποστολή από: alkisg στις 07 Φεβ 2006, 10:31:37 πμ
Η Όσο στο πρώτο παράδειγμα (αλλά και η Αρχή_επανάληψης στο δεύτερο) είναι στο εσωτερικό του Για. Έτσι, καθόλη τη διάρκεια της Όσο, οι μετρητές i, j δεν αλλάζουν. Επομένως δε διαβάζει το επόμενο στοιχείο του πίνακα, αλλά το ίδιο στοιχείο.

Σαν να λέμε (αντίστοιχο παράδειγμα χωρίς Για και χωρίς πίνακες)
[glossa] Διάβασε α
Όσο α <> "Σ" επανάλαβε
 Γράψε "Λάθος τιμή, ξαναδώσε το α:  "
 Διάβασε α
τέλος_επανάληψης[/glossa]
Τίτλος: Re: Θεμα 2005(α)
Αποστολή από: kiro στις 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]="Ξ" )


Τίτλος: Re: Θεμα 2005(α)
Αποστολή από: andreas στις 07 Φεβ 2006, 11:58:37 πμ
Διόρθωση  :

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


Ανδρέας
Τίτλος: Re: Θεμα 2005(α)
Αποστολή από: EleniK στις 07 Φεβ 2006, 12:06:55 μμ
Kiro
αυτό που εννοεί ο Αλκης είναι ότι διαβάζει νέα τιμή για το ίδιο στοιχείο, δηλαδή νέα τιμή που θα την αποθηκεύει στην ίδια θέση του πίνακα. Και οι δυο τρόποι για εγκυρότητα είναι σωστοί.
Τίτλος: Re: Θεμα 2005(α)
Αποστολή από: xaidi στις 07 Φεβ 2006, 12:22:30 μμ
Αν χρησιμοποιήσουμε την αρχή επανάληψης για τους γνωστούς λόγους η εντολή διάβασε γράφεται μια φορά εντός της επαναληπτικής δομής.
Στην περίπτωση που χρησιμοποιούμε την όσο η εντολή διάβασε γράφεται μια φορά εκτός για την πρώτη τιμή ελέγχου της συνθήκης. Σε περίπτωση μη αποδεκτής τιμής διαβάζει από την εσωτερική τιμή πια την καινούργια τιμή για το ίδιο κελί.
Και οι δύο τρόποι είναι αποδεκτοί. Προσωπική κρίση: η αρχή επανάληψης είναι λίγο πιο απλή στη σκέψη.
Τίτλος: Re: Θεμα 2005(α)
Αποστολή από: Βαγγέλης στις 08 Φεβ 2006, 11:28:15 πμ
Δεν εχω καταλάβει ότι οι μαθητές μου έχουν τέτοιο πρόβλημα σαν και αυτό που παρουσιάσε ο kiro.  Νομίζω ότι έχει ερευνητικό ενδιαφέρον.
Προσωπικά τονίζω να χρησιμοποιούν πάντοτε την Αρχή_επανάληψης γιατί είναι πιο κομψη (ένα διάβασε λιγότερο και δεύτερον η συνθήκη ελέγχου  στο τέλος διατυπώνεται με πιο φυσικό τρόπο. Π.χ Μέχρις ότου P[i,j]<>'Σ'  ή ...κ.λπ

Βαγγέλης
Τίτλος: Re: Θεμα 2005(α)
Αποστολή από: evry στις 08 Φεβ 2006, 01:07:36 μμ
   Κατ'αρχήν ο λόγος που διαβάζει το ίδιο στοιχείο έχει το σκεπτικό "Δεν αφήνω το χρήστη να προχωρήσει παρακάτω αν δεν δώσει κάποια από τις αποδεκτές τιμές". Ο χρήστης δεν έχει άλλη επιλογή.
    Τώρα όσον αφορά το θέμα αν θα χρησιμοποιήσουμε Αρχή επανάληψης ή Όσο Επαναλάβε προφανώς και τα δυο είναι σωστά. Όμως στη σελίδα  176 του βιβλίου λέει ξεκάθαρα ότι

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

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

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