Πρόβλημα στη συνθήκη της ΟΣΟ

Ξεκίνησε από mentat, 31 Μαΐου 2006, 12:31:23 ΜΜ

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

mentat

Καλημέρα σας ...

Ενας μαθητής μου επέλεξε για την επανάληψη την ΟΣΟ βάζοντας όμως μέσα στη συνθήκη το " ΧΩΡ > 0" διαμορφώνοντας μια λύση του τύπου που ακολουθεί :

Σ<--0
ΔΙΑΒΑΣΕ ΧΩΡΗΤΗΚΟΤΗΤΑ
ΟΣΟ ΧΩΡΗΤΗΚΟΤΗΤΑ >0 ΚΑΙ Σ<1500 ΕΠΑΝΑΛΑΒΕ
  ...
  ...
  ΔΙΑΒΑΣΕ ΧΩΡΗΤΗΚΟΤΗΤΑ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Εκτιμάτε ότι θα του στοιχήσει μονάδες και πόσες ??

Ευχαριστώ

Γιώργος

evry

Δεν βλέπω κάποιο λάθος. Μια χάρα μου φαίνεται. Εδώ δεν κόβουμε για την κακή χρήση της μνήμης (βλέπε πίνακες στο 3ο θέμα) και για μη αποδοτικούς αλγορίθμους, θα κόψουμε για μια περιττή συνθήκη η οποία στο κάτω κάτω είναι και σωστή; Θα μου πείτε φυσικά ότι δεν ζητείται κάτι τέτοιο, το πρόγραμμα όμως βγάζει σωστή απάντηση.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

mentat

Δεν συμφωνώ μαζί σου οτι είναι σωστή η συνθήκη αφού οδηγεί τον αλγόριθμο να σταματήσει αν δεχθεί λάθος είσοδο, δεν έχει δηλαδή την λειτουργία ενός ελέγχου εγκυρότητας. Παρ'ολα αυτά ελπίζω κι εγώ να μην χάσει ο άνθρωπος κάτι ...

SuperTz

Χωρίς προφανώς να μπορούμε ακόμα να πούμε για απώλειες μονάδων, εκτιμώ πως δεν είναι καλή επιλογή, αφού τερματίζει τις επαναλήψεις με το πρώτο μη έγκυρο δεδομένο που εισάγεται.  Αφ'ενός δε ζητούσε έλεγχο εγκυρότητας δεδομένων και αφ'ετέρου δεν τον επιτυγχάνει

prapasl

Εγώ θεωρώ ότι η λύση που αναφέρει ο mentat δεν είναι απολύτως σωστή για κάποιον άλλο λόγο. Η εκφώνηση λέει "... για κάθε αίθουσα να διαβάζεται η χωρητικότητά της και να εμφανίζει τον αριθμό των επιτηρητών που χρειάζονται ...", ενώ ο αλγόριθμος που αναφέρει ο mentat δεν το κάνει για την τελευταία αίθουσα της οποίας διαβάζει μόνο τη χωρητικότητα. Μάλιστα δεν την παίρνει καν υπόψιν για τον τερματισμό της συνθήκης. Πιστεύω ότι θα πρέπει να στοιχίσει στο μαθητή αλλά όλα αυτά πριν την  ενημέρωση των βαθμολογητών ...
Λεωνίδας Πράπας
Καθηγητής ΠΕ19, MSc Πληροφορικής

Laertis

Κατά την άποψή μου δεν υπάρχει πρόβλημα στη λειτουργία του αλγορίθμου.
Έλεγχος εγκυρότητας δε ζητείται και δε χρειάζεται.

Φίλε SuperTz,
"Αφ'ενός δε ζητούσε έλεγχο εγκυρότητας δεδομένων και αφ'ετέρου δεν τον επιτυγχάνει", αλλά τι προτείνεις ;
Και χωρίς το Χ > 0 στη συνθήκη θα τερματιστεί η επανάληψη αν δοθεί 1η και μοναδική τιμή στο >1500 ; Αφού δε ζητήθηκε έλεγχος εγκυρότητας νομίζω δεν είναι λάθος λύση.

Φίλε prapasl
όντως δεν είναι απολύτως σωστή αλλά και δεν επηρεάζει τη λειτουργία του αλγορίθμου. Απλά κάνει ένα περιττό διάβασμα στην τελευταία επανάληψη αφού προηγουμένως το ΣύνολοΧωρητικότητας έχει φτάσει ή ξεπεράσει το 1500. Σωστά δεν  παίρνει την τελευταία αίθουσα υπ'οψιν για τον τερματισμό της συνθήκης αφού αυτός ελέγχεται απο το ΣύνολοΧωρητικότητας. Υπενθιμίζω ότι ο αριθμός των αιθουσών επαρκεί για τους υποψήφιους οπότε μπορεί να είναι περισσότερες απο όσες χωράνε οι υποψήφιοι.

Εγώ προσωπικά δε θα έκοβα μονάδες. Ας δούμε όμως τι θα πούμε στα βαθμολογικά προηγουμένως ...
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

P.Tsiotakis

Το να διαβάσει μια τιμή επιπλέον ο αλγόριθμος (από αυτές που δίνονται) ΕΙΝΑΙ λάθος κατά τη γνώμη μου γιατί εισάγονται στοιχεία για μια αίθουσα παραπάνω από αυτές που χρησιμοποιούνται. Ο αλγόριθμος:

Σ<--0
ΔΙΑΒΑΣΕ ΧΩΡΗΤΗΚΟΤΗΤΑ
ΟΣΟ Σ < 1500 ΕΠΑΝΑΛΑΒΕ
  ...
  ...
  ΔΙΑΒΑΣΕ ΧΩΡΗΤΗΚΟΤΗΤΑ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

είναι λάθος. Μπορεί οι αίθουσες να είναι περισσότερες από τους υποψηφίους, αλλά δεν υπάρχει αίθουσα που να μην έχει υποψηφίους

Το ίδιο λογικό λάθος έχει και ο αλγόριθμος που φαίνεται προηγούμενα, αλλά θεωρώ οτι δεν πρέπει να αφαιρεθούν πάνω από 1-2 μόρια (μάλλον 1)

mentat

Κι εγώ συμφωνώ οτι το επιπλέον "διάβασμα" μιας τιμής είναι άστοχο και κατα συνέπεια εκτιμώ οτι πρέπει να υπάρξει "ποινή" 1-2 μορίων.

SuperTz

Παράθεση από: Laertis στις 31 Μαΐου 2006, 03:46:53 ΜΜ
Φίλε SuperTz,
"Αφ'ενός δε ζητούσε έλεγχο εγκυρότητας δεδομένων και αφ'ετέρου δεν τον επιτυγχάνει", αλλά τι προτείνεις ;
Και χωρίς το Χ > 0 στη συνθήκη θα τερματιστεί η επανάληψη αν δοθεί 1η και μοναδική τιμή στο >1500 ; Αφού δε ζητήθηκε έλεγχος εγκυρότητας νομίζω δεν είναι λάθος λύση.
Laertis δεν κατάλαβα τί εννοείς να προτείνω. Μπορείς να μου διευκρινίσεις; Αν καταλαβαίνω σωστά (λείπουν οι ενδιάμεσες εντολές !) στην περίπτωση που εισαχθεί π.χ. το 1600 δεν θα κάνει καμία εκτέλεση του βρόχου και μένει στιν τιμή 1600 που διάβασε. Αν και δε φαίνεται λογικό να υπάρχει αίθουσα με 3 επιτηρητές και 1600 υποψηφίους, από την εκφώνηση αυτό δεν αποκλείεται!

Laertis

Αυτό ακριβώς SuperTz,
απλά επισήμανα την επίκλησή σου ότι δεν πετυχαίνει τον έλεγχο εγκυρότητας ο οποίος δε ζητείται ούτως ή αλλώς και συνεπώς το Χ >0 στη συνθήκη δεν είναι για "κρέμασμα"¨τη στιγμή που χωρίς έλεγχο εγκυρότητας ο αλγόριθμος μπάζει από παντού με τις πιθανές τιμές του Χ. Αλλά αφού αυτό ζητήθηκε ...
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

mathitis

ΑΡΧΗ
Σύνολο_θέσεων <-- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
     ΓΡΑΨΕ 'Δώσε χωρητικότητα’
     ΔΙΑΒΑΣΕ χωρ
  ΜΕΧΡΙΣ_ΟΤΟΥ χωρ>0 ΚΑΙ χωρ<=1500
  ΓΡΑΨΕ ‘Αριθ΅ός επιτηρητών:’, Επιτηρητες(χωρ)
  Σύνολο_θέσεων <-- Σύνολο_θέσεων + χωρ
ΜΕΧΡΙΣ_ΟΤΟΥ Σύνολο_θέσεων = 1500
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ



Θα ηθελα λοιπον να ρωτησω κατα ποσο ειναι ορθη η προηγουμενη απαντηση και ποιο συγκεκριμενα, αν ειναι σωστος ο ελεγχος τιμων κατα το διαβασμα της χωρ και αν η συνθηκη τερματισμου στην  ΜΕΧΡΙΣ_ΟΤΟΥ ειναι σωστη. . .


Χρησιμοποιησα ΜΕΧΡΙΣ_ΟΤΟΥ Σύνολο_θέσεων = 1500 και  οχι ΜΕΧΡΙΣ_ΟΤΟΥ Σύνολο_θέσεων >= 1500 γιατι θεωρησα πως θα ζητηθουν  θεσεις ακριβως οσοι ειναι οι υποψηφιοι και οχι περισσοτερες ή λιγοτερες. . Δεν ειναι λογικο?

dozb

#11
Καλό αυτό. Θέλω να πω δεν έχεις κι άδικο που το σκέφτηκες, αλλά μια που ο έλεγχός σου δεν διασφαλίζει ότι θα βάλει ακριβώς τη χωρητικότητα που θέλεις (όταν το "Σύνολο_θέσεων " γίνει π.χ. 1400, μπορεί να εισαχθεί σα  "χωρ" το 101 από λάθος του χρήστη - λέμε τώρα- και να γίνει το Σύνολο 1501 και να μη βγει ποτέ)

Τέλειο θα ήταν να είχες βάλει και το

ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΓΡΑΨΕ 'Δώσε χωρητικότητα’
      ΔΙΑΒΑΣΕ χωρ
ΜΕΧΡΙΣ_ΟΤΟΥ (χωρ>0) ΚΑΙ (χωρ<=1500-Σύνολο_θέσεων)
Αλλά και πάλι έλεγχος τιμών δε ζητήθηκε.



P.Tsiotakis


Παιδιά, μπορεί να ξεπεραστεί η τιμή 1500, αφού διαβάζουμε τη χωρητικότητα της αίθουσας..

Αν το σύνολο_θέσεων είναι 1480 και διαβαστεί η τιμή 30, απλά στην τελευταία αίθουσα θα κάτσουν 20 άτομα ενώ χωράνε 30. Πάντως θέλει 3 επιτηρητές

Άρα η συνθήκη Μέχρις_ότου με = έχει ένα τοσοδούλι λάθος

Με εκτίμηση,

heartless

#13
Παράθεση από: ptsiotakis στις 02 Ιουν 2006, 06:25:11 ΜΜ

Παιδιά, μπορεί να ξεπεραστεί η τιμή 1500, αφού διαβάζουμε τη χωρητικότητα της αίθουσας..

Αν το σύνολο_θέσεων είναι 1480 και διαβαστεί η τιμή 30, απλά στην τελευταία αίθουσα θα κάτσουν 20 άτομα ενώ χωράνε 30. Πάντως θέλει 3 επιτηρητές

Άρα η συνθήκη Μέχρις_ότου με = έχει ένα τοσοδούλι λάθος

Με εκτίμηση,


Κ. Τσιοτακη διαφωνουμε σε πολλα..
http://img181.imageshack.us/img181/2033/e3etaseis2ri.gif
Νομιζω ειναι σαφεστατη η σημειωση..

Laertis

Δείτε λίγο το παρακάτω Πρόγραμμα :

ΑΡΧΗ
Σ <-- 1500
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
   ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
       ΓΡΑΨΕ 'Δώσε χωρητικότητα’
       ΔΙΑΒΑΣΕ χωρ
   ΜΕΧΡΙΣ_ΟΤΟΥ χωρ>0
   ΑΝ Σ >=χωρ ΤΟΤΕ
       Σ <-- Σ - χωρ
       Επ <-- Επιτηρητές(Χωρ)
   ΑΛΛΙΩΣ
        Επ <-- Επιτηρητές(Σ)
        Σ <-- 0
   ΤΕΛΟΣ_ΑΝ
   ΓΡΑΨΕ ‘Αριθ΅ός επιτηρητών:', Επ
ΜΕΧΡΙΣ_ΟΤΟΥ Σ = 0
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Ο παραπάνω αλγόριθμος υπολογίζει τους επιτηρητές ανάλογα με το πλήθος των μαθητών και όχι τη χωρητικότητα των αιθουσών. Η διαφορά είναι ότι στην τελευταία αίθουσα βγαίνουν τόσοι επιτηρητές αναλόγως με το πλήθος των μαθητών ενώ στη δεύτερη περίπτωση οι επιτηρητές υπολογίζονται με βάση τη χωρητικότητα.
Π. χ.
1η Περίπτωση  Χωρητικότητα=25   Μαθητές=14  Επιτηρητές=1
2η Περίπτωση  Χωρητικότητα=25   Μαθητές=14  Επιτηρητές=3

Ο παραπάνω αλγόριθμος τροποποιείται και δουλεύει και με το ΟΣΟ.

Σ'αυτή την περίπτωση και μόνο δε θα ξεπεραστεί το 1500, ενώ με τον υπολογισμό με βάση τη χωρητικότητα μπορεί και να ξεπεραστεί.

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






Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola