Θέμα 1Α από επαναληπτικές ημερησίων 2003

Ξεκίνησε από Wizard, 03 Οκτ 2008, 06:09:27 ΜΜ

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

Wizard

Δίνεται η παρακάτω αλληλουχία εντολών:
Διάβασε α, β
Αν α > β  τότε
      c ← α / (β - 2)
Τέλος_αν
Εκτύπωσε c

α. Να απαντήσετε στο τετράδιό σας με Ναι ή Όχι αν η παραπάνω αλληλουχία εντολών ικανοποιεί όλα τα αλγοριθμικά κριτήρια.
β. Να αιτιολογήσετε την απάντησή σας.

1) Στο ερώτημα β', πρέπει ο μαθητής να γράψει έστω ένα κριτήριο που παραβιάζεται ή να αναφέρει ξεχωριστά κάθε κριτήριο και να εξηγήσει αν παραβιάζεται ή όχι;
2) Όταν έχουμε αλληλουχίες εντολών και όχι ολόκληρους αλγόριθμους μπορούμε να συζητάμε για είσοδο και έξοδο;
3) Στο προηγούμενο παράδειγμα, επειδή η μεταβλητή c μπορεί να μη λάβει τιμή, παραβιάζεται κάποιο κριτήριο με την εντολή Εκτύπωσε c ;

Καρκαμάνης Γεώργιος

1. Αν ο μαθητής απαντήσει ΝΑΙ τότε νομίζω πως πρέπει  να δικαιολογήσει πως ικανοποιείται το κάθε κριτήριο ξεχωριστά. Αν απαντήσει ΟΧΙ , τότε ποιο λογικό ακούγεται να γράψει το  κριτήριο που δεν ικανοποιείται και να το δικαιολογήσει. Δεν θυμάμαι και τι λύση και οδηγίες είχαν δοθεί από την επιτροπή εξετάσεων. Ας μας διαφωτίσει κάποιος παλιότερος.

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

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

Wizard

Δεν μπορούμε να πούμε τότε ότι παραβιάζεται και το κριτήριο της εξόδου αφού μπορεί η μεταβλητή c να μην πάρει τιμή;

petrosp13

Παράθεση από: Wizard στις 04 Οκτ 2008, 09:43:21 ΠΜ
Δεν μπορούμε να πούμε τότε ότι παραβιάζεται και το κριτήριο της εξόδου αφού μπορεί η μεταβλητή c να μην πάρει τιμή;

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

Wizard

Παράθεση από: petrosp_13 στις 04 Οκτ 2008, 12:30:23 ΜΜ
Παράθεση από: Wizard στις 04 Οκτ 2008, 09:43:21 ΠΜ
Δεν μπορούμε να πούμε τότε ότι παραβιάζεται και το κριτήριο της εξόδου αφού μπορεί η μεταβλητή c να μην πάρει τιμή;

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

Και ποια είναι όμως τότε η έξοδος;

alkisg

Παράθεση από: Wizard στις 04 Οκτ 2008, 03:16:40 ΜΜ
Δεν μπορούμε να πούμε τότε ότι παραβιάζεται και το κριτήριο της εξόδου αφού μπορεί η μεταβλητή c να μην πάρει τιμή;
Όχι, αφού υπάρχει εντολή εξόδου. Όμως, στο ερώτημα

Παράθεση από: Wizard στις 04 Οκτ 2008, 03:16:40 ΜΜ
Και ποια είναι όμως τότε η έξοδος;
δεν μπορούμε να απαντήσουμε (σκουπίδια της ram κτλ) και έτσι παραβιάζεται η καθοριστικότητα.

Αν το "Εκτύπωσε c" ήταν μέσα στην Αν, τότε θα παραβιαζόταν το κριτήριο της εξόδου:

Παράθεση από: Βιβλίο καθηγητή, σελίδες 64-65
Αλγόριθμος Πρόβλημα_2.
Δεδομένα // α, β, γ, δ //
χ ← α*(β+γ)
Αν δ≠0 τότε y ← χ/δ
Αποτελέσματα // y //
Τέλος Πρόβλημα_2

...

   Ωστόσο στον αλγόριθμο Πρόβλημα_2 παραμένει ένα ανοικτό ζήτημα. Ποιο εί-
ναι το αποτέλεσμα στην περίπτωση δ=0;

   Η αντιμετώπιση του ζητήματος αυτού επιδέχεται αρκετές λύσεις.

α)   Με τη χρήση της εντολής Αν...τότε...αλλιώς εμφανίζουμε ένα σχετικό μήνυ-
     μα. Π.χ.

Αλγόριθμος Πρόβλημα_2α.
Δεδομένα // α, β, γ, δ //
χ ← α*(β+γ)
Αν δ≠0 τότε
   y ← χ/δ
αλλιώς
   Γράψε “Αδύνατο”
Τέλος_αν
Αποτελέσματα // y //
Τέλος Πρόβλημα_2α

β) Υιοθετούμε μία λογική μεταβλητή με την οποία καθορίζεται στα αποτελέσμα-
   τα, αν υπάρχει λύση ή όχι. Π.χ.

Αλγόριθμος Πρόβλημα_2β.
Δεδομένα // α, β, γ, δ //
flag ← Αληθής
χ ← α*(β+γ)
Αν δ≠0 τότε
     y ← χ/δ
αλλιώς
   flag ← Ψευδής
Τέλος_αν
Αποτελέσματα // y, αν flag=αληθής, αλλιώς αδύνατο //
Τέλος Πρόβλημα_2β

γ) Παρόμοια με το (β), αλλά τα αποτελέσματα είναι δύο, το y και το flag. Π.χ.

Αλγόριθμος Πρόβλημα_2γ.
Δεδομένα // α, β, γ, δ //
flag ← Αληθής
χ ← α*(β+γ)
Αν δ≠0 τότε
     y ← χ/δ
αλλιώς
   flag ← Ψευδής
Τέλος_αν
Αποτελέσματα // y, flag //
Τέλος Πρόβλημα_2γ

    Από τις παραπάνω τρεις εναλλακτικές προτάσεις, η πλέον προφανής για το
μαθητή είναι η πρώτη. Άλλωστε είναι δυνατό μετά τον υπολογισμό του αποτελέ-
σματος y, να ακολουθεί η εντολή “Γράψε y”. Επίσης αντί για τη γραμμή Δεδομένα,
να υπάρχει η εντολή “Διάβασε α, β, γ, δ”. Ωστόσο χωρίς να απορρίπτουμε την
προσέγγιση αυτή, προτιμότερη είναι η τρίτη πρόταση για τους εξής λόγους:
I)   Ο αλγόριθμος λύνει το πρόβλημα και δεν ασχολείται με τον τρόπο εισαγωγής
     δεδομένων και παρουσίασης αποτελεσμάτων.
ΙΙ)  Αν ο αλγόριθμος υλοποιηθεί ως υποπρόγραμμα ή συνάρτηση, τότε είναι προ-
     τιμότερο να μην έχει εντολές εισόδου-εξόδου. Οι γραμμές Δεδομένα και Απο-
     τελέσματα παραπέμπουν ακριβώς στο πέρασμα παραμέτρων στη διαδικα-
     σία.

(οι δύο τελευταίες παράγραφοι είναι χρήσιμοι σαν επεξηγήσεις και σε άλλα παρόμοια ζητήματα)

ʼσχετη απορία: πόσοι από εμάς θα κόβαμε μονάδες για το
  Αποτελέσματα // y, αν flag=αληθής, αλλιώς αδύνατο //
που φαίνεται παραπάνω στο βιβλίο καθηγητή;  :D

P.Tsiotakis

1) Συμφωνώ και γω οτι το ενδεχόμενο να μην ορίζεται η προς εκτύπωση μεταβλητή (c) είναι λάθος που πρέπει να καταγραφεί

2) Στην κωδικοποίηση:

Διάβασε α, β
Αν α > β  τότε
      c ← α / (β - 2)
      Εκτύπωσε c
Τέλος_αν


δεν παραβιάζεται το κριτήριο της εξόδου, καθώς πρόκειται για τμήμα αλγορίθμου. Μπορεί να εκτυπώνεται κάτι παρακάτω. Δε θα είχε νόημα να ρωτάει μια άσκηση αν παραβιάζει τα κριτήρια εισόδου/εξόδου μια αλληλουχία εντολών...

Wizard

Παράθεση από: Τσιωτάκης Παναγιώτης στις 04 Οκτ 2008, 06:00:06 ΜΜ
1) Συμφωνώ και γω οτι το ενδεχόμενο να μην ορίζεται η προς εκτύπωση μεταβλητή (c) είναι λάθος που πρέπει να καταγραφεί

2) Στην κωδικοποίηση:

Διάβασε α, β
Αν α > β  τότε
      c ← α / (β - 2)
      Εκτύπωσε c
Τέλος_αν


δεν παραβιάζεται το κριτήριο της εξόδου, καθώς πρόκειται για τμήμα αλγορίθμου. Μπορεί να εκτυπώνεται κάτι παρακάτω. Δε θα είχε νόημα να ρωτάει μια άσκηση αν παραβιάζει τα κριτήρια εισόδου/εξόδου μια αλληλουχία εντολών...


Αν δεν συζητάμε για είσοδο/έξοδο σε αλληλουχία εντολών, γιατί συζητάμε για παραβίαση καθοριστικότητας της Εκτύπωσε; Δεν μπορεί η μεταβλητή c να έχει λάβει ήδη τιμή από προηγούμενες εντολές;

Νομίζω ότι έπρεπε η άσκηση να έχει ολόκληρο αλγόριθμο για να μην έχουμε τέτοιες αμφιβολίες.

P.Tsiotakis


Γιαννούλης Γιώργος

Παράθεση από: Wizard στις 04 Οκτ 2008, 09:15:46 ΜΜ
Αν δεν συζητάμε για είσοδο/έξοδο σε αλληλουχία εντολών, γιατί συζητάμε για παραβίαση καθοριστικότητας της Εκτύπωσε; Δεν μπορεί η μεταβλητή c να έχει λάβει ήδη τιμή από προηγούμενες εντολές;

Νομίζω ότι έπρεπε η άσκηση να έχει ολόκληρο αλγόριθμο για να μην έχουμε τέτοιες αμφιβολίες.

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