Γενικό Λύκειο > Θεωρία

ΤΑ ΕΙΔΗ ΕΚΦΡΑΣΕΩΝ ΚΑΙ ΠΑΡΑΔΕΙΓΜΑΤΑ και "Ο ΦΡΟΥΡΟΣ"

<< < (3/4) > >>

George Eco:

--- Παράθεση από: vageo στις 17 Ιουλ 2020, 01:50:00 μμ ---1. Δηλαδή η τιμή φρουρός ως τιμή εισόδου εισάγεται ΜΟΝΟ με εντολή ΔΙΑΒΑΣΕ;

2. Μπορώ να γράψω ένα υποπρόγραμμα με το οποίο να ετοιμάζω μια τιμή που όταν θα την δεχθεί το κύριο πρόγραμμα τότε  " ... με την οποία ο χρήστης να σηματοδοτεί την λήξη κάποιας δομής επανάληψης, όταν αυτή δε λήγει με άλλο τρόπο. ...";

3. Η μορφή, ΓΙΑ μεταβλητή ΑΠΟ τ1 ΜΕΧΡΙ τ2 ΜΕ_ΒΗΜΑ β , της δομής επανάληψης είναι αδύνατον να τερματίσει με τιμή φρουρό; (εξυπακούεται ότι δεν πρέπει-μπορώ να μεταβάλλω τις τιμές τ1, τ2, και β μέσα στις εντολές της δομής)

--- Τέλος παράθεσης ---

1] Συνήθως τη χρησιμοποιούμε σε υλοποιήσεις άγνωστου πλήθους επαναλήψεων. Για παράδειγμα, ένα πρόγραμμα δέχεται τελικούς βαθμούς μαθητών, μέχρι να λάβει τη τιμή -1 (τιμή φρουρός) η οποία είναι αδιανόητη ως βαθμολογία και την ορίζουμε ως τη τιμή λήξης της δομής επανάληψης.
Τιμή φρουρός εδώ μπορεί να είναι και το -10. Αυθαίρετα διαλέγω μία. Θα μπορούσε η εκφώνηση να λέει μέχρι να πάρει αρνητικό αριθμό ως τιμή.

Κάποιος μπορεί να βάλει ως πρώτο αριθμό έναν αρνητικό.
Άλλος μπορεί να βάλει δέκα σωστούς βαθμούς και μετά τη τιμή φρουρό.
Άλλος χρήστης τρέχοντας το πρόγραμμα, μπορεί να εισάγει 300 βαθμολογίες και να βάλει μετά τιμή φρουρό.

ΑΓΝΩΣΤΟ το πλήθος των επαναλήψεων λοιπόν.

3] Στα πλαίσια του μαθήματος η ΓΙΑ χρησιμοποιείται για γνωστό πλήθος βημάτων. Οπότε κι ουδεμία σχέση έχει με τη τιμή φρουρό.

2] Μπορώ να γράψω ένα υποπρόγραμμα με το οποίο να ετοιμάζω μια τιμή φρουρό;
Τι εννοείς;
Συνάρτηση που να επιστρέφει τιμή φρουρό ας πούμε υπό συνθήκη, αλλιώς σωστή τιμή;
Συνάρτηση που να επιστρέφει τιμή σε έλεγχο βρόχου;
Τι θα δέχεται ως ορίσματα η συνάρτηση όμως;
Θα δέχεται τιμές από το χρήστη σε κάθε επανάληψη; Σε αυτή τη περίπτωση απλά κάνεις σχεδόν το ίδιο που λέμε, με ενδιάμεση στάση... ένα υποπρόγραμμα. Τμηματοποιείς ένα πρόγραμμα με άγνωστο πλήθος επαναλήψεων κι αυτό είναι οκ.

Δηλαδή αν έχω:

--- Κώδικας: ---ΠΡΟΓΡΑΜΜΑ ΑΒΓ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: α,β,γ
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΔΙΑΒΑΣΕ α,β
    γ <- α+β
ΜΕΧΡΙΣ_ΟΤΟΥ β = ΦΡΟΥ(α)

ΣΥΝΑΡΤΗΣΗ ΦΡΟΥ(χ): ΠΡΑΓΜΑΤΙΚΗ
  ΜΕΤΑΒΛΗΤΕΣ
    ΠΡΑΓΜΑΤΙΚΕΣ: χ
ΑΡΧΗ
  ΦΡΟΥ <- χ * 2
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

--- Τέλος κώδικα ---
...τότε πολύ απλά υπολογίζεται μία τιμή φρουρός με άγνωστο πλήθος επαναλήψεων. Μέχρι να δώσει β ακριβώς διπλάσιο του α. Άγνωστο πλήθος (τα διαβάζει σε κάθε επανάληψη τα α,β ε!)

Αν δέχεται όμως τιμές από το ίδιο το πρόγραμμα της ΓΛΩΣΣΑΣ, είναι γνωστό το πλήθος των επαναλήψεων, έτσι δεν είναι;
Τι έχεις κατά νου; Τι εννοείς;
Ένα ΣΥΓΚΕΚΡΙΜΕΝΟ παράδειγμα θα βοηθούσε να απαντούσα εδώ με μεγαλύτερη σιγουριά αν έχουμε τιμή φρουρό ή όχι.
Γενικά, είναι πολύ μα πολύ δύσκολο να σου επιβεβαιώσω ή να σου αποκλείσω κάτι.

vageo:
Το πρόγραμμα που έγραψες με 2 μικρές αλλαγές:


--- Κώδικας: ---ΠΡΟΓΡΑΜΜΑ ΑΒΓ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: α,β,γ
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΔΙΑΒΑΣΕ α,β
    γ <- α+β
    Σ <- ΦΡΟΥ(α)
ΜΕΧΡΙΣ ΟΤΟΥ Σ = 10

ΣΥΝΑΡΤΗΣΗ ΦΡΟΥ(χ): ΠΡΑΓΜΑΤΙΚΗ
  ΜΕΤΑΒΛΗΤΕΣ
    ΠΡΑΓΜΑΤΙΚΕΣ: χ
ΑΡΧΗ
  ΦΡΟΥ <- χ * 2
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

--- Τέλος κώδικα ---

Για το παραπάνω πρόγραμμα, υπάρχει τιμή φρουρός; ΑΝ ΝΑΙ τότε ποια είναι (ΜΟΝΟ ΜΙΑ ΤΙΜΗ). Να δικαιολογήσετε την απάντησή σας και στις δύο περιπτώσεις (ΝΑΙ ή ΌΧΙ).

1. Υπάρχει τιμή φρουρός και είναι η τιμή 5 διότι αυτή πρέπει να πληκτρολογηθεί κατά την εκτέλεση της εντολής ΔΙΑΒΑΣΕ ... , ώστε στη συνέχεια να εξέλθει του βρόχου η δομή.
2. Υπάρχει τιμή φρουρός και είναι η τιμή 10 διότι με αυτή την τιμή η συνθήκη που ελέγχει την επανάληψη καθίσταται αληθής και η δομή εξέρχεται του βρόχου επανάληψης.
3. Δεν υπάρχει τιμή φρουρός διότι για να είναι τέτοια πρέπει αυτό που θα πληκτρολογηθεί να καθιστά την συνθήκη αληθή και να έχει σαν συνέπεια την έξοδο από την επανάληψη.

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

George Eco:

--- Παράθεση από: vageo στις 23 Ιουλ 2020, 12:26:03 πμ ---Το πρόγραμμα που έγραψες με 2 μικρές αλλαγές:


--- Κώδικας: ---ΠΡΟΓΡΑΜΜΑ ΑΒΓ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: α,β,γ
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΔΙΑΒΑΣΕ α,β
    γ <- α+β
    Σ <- ΦΡΟΥ(α)
ΜΕΧΡΙΣ_ΟΤΟΥ Σ = 10

ΣΥΝΑΡΤΗΣΗ ΦΡΟΥ(χ): ΠΡΑΓΜΑΤΙΚΗ
  ΜΕΤΑΒΛΗΤΕΣ
    ΠΡΑΓΜΑΤΙΚΕΣ: χ
ΑΡΧΗ
  ΦΡΟΥ <- χ * 2
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

--- Τέλος κώδικα ---

Για το παραπάνω πρόγραμμα, υπάρχει τιμή φρουρός; ΑΝ ΝΑΙ τότε ποια είναι (ΜΟΝΟ ΜΙΑ ΤΙΜΗ). Να δικαιολογήσετε την απάντησή σας και στις δύο περιπτώσεις (ΝΑΙ ή ΌΧΙ).

1. Υπάρχει τιμή φρουρός και είναι η τιμή 5 διότι αυτή πρέπει να πληκτρολογηθεί κατά την εκτέλεση της εντολής ΔΙΑΒΑΣΕ ... , ώστε στη συνέχεια να εξέλθει του βρόχου η δομή.
2. Υπάρχει τιμή φρουρός και είναι η τιμή 10 διότι με αυτή την τιμή η συνθήκη που ελέγχει την επανάληψη καθίσταται αληθής και η δομή εξέρχεται του βρόχου επανάληψης.
3. Δεν υπάρχει τιμή φρουρός διότι για να είναι τέτοια πρέπει αυτό που θα πληκτρολογηθεί να καθιστά την συνθήκη αληθή και να έχει σαν συνέπεια την έξοδο από την επανάληψη.

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

--- Τέλος παράθεσης ---


Ενδιαφέρον σημείο αυτό που θίγεις. Αλλά τιμή φρουρός μπορεί να είναι αυθαίρετα οποιαδήποτε τιμή μπορεί να σπάσει την επαναληπτικότητα ενός βρόχου. Δε σε νοιάζει αν είναι μία η δυνατή τιμή ή πολλές. Σε νοιάζει να υπάρχει όμως τουλάχιστο μία, αλλιώς το κριτήριο περατότητας σπάει.
Λες "κινδυνεύουν" να ονομαστούν όλες τιμές φρουροί. Να ξεκαθαρίσω, μιλάμε για τιμές του α, που παίρνουμε σε κάθε ΔΙΑΒΑΣΕ α,β εδώ.
Τώρα εδώ η τιμή φρουρός στο εν λόγω παράδειγμα είναι μία.

Αν είχαμε όμως ΜΕΧΡΙΣ_ΟΤΟΥ Σ >= 0 (έχω φάει μια κάτω παύλα στα προηγούμενα εδώ...) θα είχαμε  οποιαδήποτε δυνατή τιμή πάνω από 5 ως ικανή να είναι τιμή Φρουρός.

Αν δε σου αρέσει έτσι μπορείς να το προγραμματίσεις αλλιώς.
Αλλά αν σου πέσει εκφώνηση που να ζητά  ΜΕΧΡΙΣ_ΟΤΟΥ Σ >= 0 δε μπορείς να κάνεις αλλιώς.

Τώρα, αν θες ΔΙΑΚΡΙΤΟ πλήθος (συνήθως μία) τιμής φρουρό, θα απαιτείται κι έλεγχος εγκυρότητας από την άσκηση φαντάζομαι, οπότε και θα εξαλείφεις από εκεί άλλες πιθανές τιμές.

Παράδειγμα:
Θα δέχεσαι βαθμολογίες.
Αποδεκτές βαθμολογίες είναι ακέραιες από 0 μέχρι 20 και η τιμή -1 που θα τερματίζει την εισαγωγή. BOOM! Ξεκάθαρη τιμή φρουρός το -1.





vageo:
Από ότι καταλαβαίνω από αυτό: " ... Να ξεκαθαρίσω, μιλάμε για τιμές του α, που παίρνουμε σε κάθε ΔΙΑΒΑΣΕ α,β εδώ. ... "
μάλλον έχεις την άποψη (ή μήπως όχι), ότι η τιμή φρουρός πρέπει να εισαχθεί από το χρήστη με εντολή ΔΙΑΒΑΣΕ ... έστω και έμμεσα (στο παραπάνω παράδειγμα, ενώ πληκτρολογώ το 5, η τιμή για την οποία σπάει η επανάληψη είναι η 10.

Επιμένω (μπορεί να κάνω και λάθος), σε μία τιμή ως τιμή φρουρός, διότι όταν αποτιμάται η απαραίτητη λογική έκφραση που ελέγχει μια οποιαδήποτε επανάληψη, εκείνη τη στιγμή, όλες οι υπάρχουσες μεταβλητές (ή ονοματισμένες σταθερές ή συναρτήσεις ή παράμετροι), έχουν συγκεκριμένη τιμή βάσει της οποίας στη συνέχεια η λογική έκφραση αποκτά με τη σειρά της και αυτή κάποια τιμή (ή μόνο αληθής ή μόνο ψευδής).
Για αυτή τη συγκεκριμένη τιμή προκύπτει το σπάσιμο του επαναληπτικού βρόχου.

Στο τελευταίο παράδειγμα προφανώς όπως τίθεται, η τιμή -1 είναι τέτοια, επίσης η τιμή -2 είναι επίσης τιμή φρουρός κ.τ.λ. αλλά εδώ υπάρχουν και άλλες σκέψεις:

Όταν οι αποδεικτές τιμές ανήκουν σε κάποιο διάστημα (κλειστό ή ανοιχτό ή ένωση) τιμών (όπως στο παράδειγμα με τη βαθμολογία), τότε Η ΕΚΦΩΝΗΣΗ είναι καλύτερα να ζητάει έλεγχο εγκυρότητας.
Ενώ όταν αποδεκτές τιμές είναι όλες τότε μία τιμή πρέπει να κάνει το break και σε αυτή την περίπτωση Η ΕΚΦΩΝΗΣΗ να ζητάει τιμή φρουρό.

Και επειδή αναφέρθηκε στη συζήτηση και ο έλεγχος εγκυρότητας να θέσω:

ΘΕΜΑ Α
Α2. α) Να περιγράψετε ποια/ες είναι η/οι διαφορά/ες ανάμεσα στον έλεγχο εγκυρότητας και στην τιμή φρουρό;
      β) Να δώσετε ένα παράδειγμα για τα παραπάνω.

George Eco:

--- Παράθεση από: vageo στις 27 Ιουλ 2020, 08:22:45 μμ ---Από ότι καταλαβαίνω ....
μάλλον έχεις την άποψη (ή μήπως όχι), ότι η τιμή φρουρός πρέπει να εισαχθεί από το χρήστη με εντολή ΔΙΑΒΑΣΕ ... έστω και έμμεσα (στο παραπάνω παράδειγμα, ενώ πληκτρολογώ το 5, η τιμή για την οποία σπάει η επανάληψη είναι η 10.

--- Τέλος παράθεσης ---

Ναι. Αυτό νομίζω.
Αν το πρόγραμμα τρέξει και κάνει διαδικασίες που σου είναι άγνωστο πόσες είναι, αλλά κάθε φορά είναι ίσες με ν, τότε είναι γνωστό το πλήθος επαναλήψεων. Είναι ν επαναλήψεις. Μπορεί να μη το έχουμε υπολογίσει εμείς και να μη ξέρουμε εμείς πόσα είναι τα βήματα, αλλά είναι πάντοτε ν. Οπότε πρόβλημά μας αν δεν υπολογίσαμε πόσα είναι τα ΣΤΑΘΕΡΑ βήματα ν. Είναι ΓΝΩΣΤΟΣ ο αριθμός επαναλήψεων, οπότε δεν έχει θέση σε αυτή τη περίπτωση η τιμή φρουρός εδώ.

Τώρα για να μεταβάλλεται το ν έχεις δύο περιπτώσεις...
Α] Δέχεσαι κάποια τιμή από το χρήστη, που άμεσα ή έμμεσα δίνει τιμή φρουρό στη μεταβλητή που υπάρχει στον έλεγχο του βρόχου.
Β] Με κάποιο τρόπο ορίζεις τυχαίες τιμές να δημιουργούνται από το πρόγραμμα, δυνατότητα που ΔΕΝ υπάρχει στη ΓΛΩΣΣΑ κι άρα είναι πέρα από τα πλαίσια του μαθήματος. Ελπίζω μιλάμε στα πλαίσια του μαθήματος εδώ.



--- Παράθεση από: vageo στις 27 Ιουλ 2020, 08:22:45 μμ ---Όταν οι αποδεικτές τιμές ανήκουν σε κάποιο διάστημα (κλειστό ή ανοιχτό ή ένωση) τιμών (όπως στο παράδειγμα με τη βαθμολογία), τότε Η ΕΚΦΩΝΗΣΗ είναι καλύτερα να ζητάει έλεγχο εγκυρότητας.
Ενώ όταν αποδεκτές τιμές είναι όλες τότε μία τιμή πρέπει να κάνει το break και σε αυτή την περίπτωση Η ΕΚΦΩΝΗΣΗ να ζητάει τιμή φρουρό.

--- Τέλος παράθεσης ---

Δε νομίζω πως διαφωνώ σε κάτι. Αν καταλαβαίνω, σου κάθεται άσχημα πως τιμή φρουρός μπορεί να είναι σε ένα διάστημα ( πλην άπειρο, 0) πες, μια οποιαδήποτε τιμή από το διάστημα αυθαίρετα. Ναι οκ, θα μου άρεσε η εκφώνηση να είχε πιο συγκεκτιμένη τιμή φρουρό, αλλά αν γουστάρει κανεις μπορεί να σου πει πως όλες οι αρνητικές τιμές είναι τιμές φρουροί.

ΚΑΤΑΝΟΩ ΑΠΟΛΥΤΑ το τι σε βασανίζει...
Σε ένα πρόγραμμα μπορούμε να έχουμε άπειρες δυνατές τιμές φρουρούς.
Σωστό ή Λάθος;
Αυτό είναι το ερώτημά σου και δε μπορώ να σου απαντήσω με 100% σιγουριά κάτι από τα δύο. Αλλά έχω 99% τάση προς το ΣΩΣΤΟ.
Ειλικρινά δε θυμάμαι. Αλλά αν υπάρχει έστω μία άσκηση ή ακόμα καλύτερα θέμα Πανελληνίων, που να απαιτεί διάστημα τιμών ως φρουρό, δηλαδή άπειρες δυνατές τιμές φρουρούς, τότε απαντάς στην ερώτησή σου.
Αν το σκάψεις και βρεις κάτι πες μας!



Να περιγράψετε ποια/ες είναι η/οι διαφορά/ες ανάμεσα στον έλεγχο εγκυρότητας και στην τιμή φρουρό;
 ???  ???  ???
Ο έλεγχος εγκυρότητας φροντίζει να εξαναγκάσει το χρήστη να εισάγει ορθές τιμές προτού προχωρήσει το πρόγραμμα παρακάτω.
Η τιμή φρουρός φροντίζει να σπάει ένας κατά κάθε άλλη περίπτωση ατέρμων βρόχος, έτσι ώστε να διατηρείται το κριτήριο της περατότητας.
Γιατί να το ρωτήσουμε έτσι αυτό στα παιδάκια; Δε διαφωνώ, αλλά οκ, μου φαίνεται παράξενη.  :D

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

[*] Προηγούμενη σελίδα

Μετάβαση στην πλήρη έκδοση