Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)

Ξεκίνησε από gpapargi, 04 Δεκ 2007, 02:10:46 ΜΜ

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

Duck

Καλησπέρα. Πειραματιστικά και γω με την παραπάνω άσκηση και κατέληξα στις παρακάτω λύσεις.
Η (A) αναφέρεται σε ακέραιες τιμές (ακέραιο βήμα) και οι (Β1) & (Β2) σε πραγματικές (πραγματικό βήμα).

Α)
ΠΡΟΓΡΑΜΜΑ Δοκιμή
ΣΤΑΘΕΡΕΣ
  Α = 2
  Μ = 8
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Χ
ΑΡΧΗ
  ΓΡΑΨΕ 'Αρχικό:'
  Χ <- Α
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    Χ <- Χ + 2
    ΓΡΑΨΕ Χ
  ΜΕΧΡΙΣ_ΟΤΟΥ Χ >= Μ
  ΓΡΑΨΕ 'Duck'
  ΓΙΑ Χ ΑΠΟ Α ΜΕΧΡΙ Μ - 1 ΜΕ_ΒΗΜΑ 2
    ΓΡΑΨΕ Χ + 2
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Δοκιμή

Β1)
ΠΡΟΓΡΑΜΜΑ Δοκιμή
ΣΤΑΘΕΡΕΣ
  Α = 1
  Μ = 3.5
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Χ
ΑΡΧΗ
  ΓΡΑΨΕ 'Αρχικό:'
  Χ <- Α
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    Χ <- Χ + 2
    ΓΡΑΨΕ Χ
  ΜΕΧΡΙΣ_ΟΤΟΥ Χ >= Μ
  ΓΡΑΨΕ 'Duck'
  ΓΙΑ Χ ΑΠΟ Α ΜΕΧΡΙ Μ - 0.1 ΜΕ_ΒΗΜΑ 2
    ΓΡΑΨΕ Χ + 2
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Δοκιμή

Β2)
ΠΡΟΓΡΑΜΜΑ Δοκιμή
ΣΤΑΘΕΡΕΣ
  Α = 1
  Μ = 3.5
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: Χ
ΑΡΧΗ
  ΓΡΑΨΕ 'Αρχικό:'
  Χ <- Α
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    Χ <- Χ + 0.3
    ΓΡΑΨΕ Χ
  ΜΕΧΡΙΣ_ΟΤΟΥ Χ >= Μ
  ΓΡΑΨΕ 'Duck'
  ΓΙΑ Χ ΑΠΟ Α ΜΕΧΡΙ Μ - 0.1 ΜΕ_ΒΗΜΑ 0.3
    ΓΡΑΨΕ Χ + 0.3
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Δοκιμή


alkisg

Δοκίμασέ το για Α = 1 και Μ = 1, δεν δουλεύει σωστά.

Επιμένω στην αρχική μου τοποθέτηση ότι άμα είναι να χρειαστούμε 10 υλοποιήσεις μέχρι να το καταφέρουμε, τότε το (=) ήταν λάθος της επιτροπής!  :D

Duck


andreas_p

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

Θ1Δ_2001.07.09

Τα 3 ΔΕΝ της επιτροπής του 2001  :

1.  ΔΕΝ έκανε λάθος.
2. ΔΕΝ έδωσε διευκρίνηση.
3. ΔΕΝ έδωσε υπο-ερώτημα δ)  όπου Α>=Μ
    (το οποίο διευκολύνει τη λύση)

   δ)  Τι θα τυπωθεί, αν  Α=3  και Μ=1 ;

Η λύση :

Τύπωσε  Α+2
Για  Χ  από  Α+4  μέχρι  Μ+1  με_βήμα  2 
     Τύπωσε  Χ
  Τέλος_επανάληψης

Ανδρέας

alkisg

Αυτή είναι η προτεινόμενη λύση;

Βγάζει λάθος αποτελέσματα για Α=1 και Μ=5.5.

gpapargi

Αντρέα και η παραπάνω λύση στραβώνει για Α=1.1 και Μ=4.

Για μένα δεν τίθεται θέμα περιορισμού στους ακεραίους. Αν ζητήται ισοδύναμος ψευδοκώδικας τότε εννοούμε ισοδύναμο ψευδοκώδικα δηλαδή που να κάνει το ίδιο.

Ταυτίζομαι απόλυτα με τον Άλκη. Της ξέφυγε της επιτροπής. Για μένα της ξέφυγε και ο μετρητής στη μέση του βρόχου. Λόγω του ότι είμαι με γαστρεντερίτιδα από χθες δε θα γράψω για τον τρόπο σκέψης τώρα, απλά θα γράψω τη λύση στην οποία κατέληξα.
x<-A
x<-x+2
Εμφάνισε x
Για x από Α+2 μέχρι Μ με_βήμα 2
   Αν x<> M τότε
        Εμφάνισε x+2
   Τέλος_αν
Τέλος_επανάληψης  

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

Για μένα πάντως είναι σίγουρα φάουλ η επιτροπή.

alkisg

Γιώργο είναι λάθος για Α=4 και Μ=6.
Επίσης κλέβεις γιατί βάζεις ΑΝ μέσα στην επανάληψη!  :police:  :P  ;D

Για το μετρητή στη μέση του βρόχου τι εννοείς; Σε ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ είμαστε...

Περαστικά!

amanou

#22
Η λύση για κάθε περίπτωση μεταξύ Α και Μ (ακέραιων και πραγματικών) είναι η ακόλουθη:

x<-A
x<-x+2
Εμφάνισε x
Αν Α_Μ(Μ) = Μ και Α_Μ(Α) = Α τότε
    Μ <- Μ-1
τέλος_αν
Για x από Α+2 μέχρι Μ με_βήμα 2
         Εμφάνισε x+2
Τέλος_επανάληψης 

Επίσης δεν νομίζω να υλοποιείται χωρίς την επιλογή.

Δηλαδή μόνο στην περίπτωση που και οι δυο είναι ακέραιοι θα έχει νόημα να μειωθεί η τιμή της μεταβλητής Μ

Για να την τσεκάρουμε....
Αντώνης Μανουσάκης

Ηλεκτρονικός και Μηχανικός Η/Υ

koniordos

Γειά σας μετά από καιρό
Νομίζω πως η λύση του Γιώργου Παπαργύρη (περαστικά !) είναι ολόσωστη για όλα τα ενδεχόμενα τιμών. Άλκη, για Α = 4 και Μ = 6 εμφανίζεται το 6 καί από τους δύο αλγορίθμους.
Συμφωνώ επίσης πως μάλλον ξέφυγε από την επιτροπή. Θα μπορούσε να 'μαζευτεί' με έναν από τους εξής δύο τρόπους
α. να αναφερθεί πως το χ είναι ακέραιος (άρα και όλοι οι υπόλοιποι)
β. να φύγει το ίσον από τη σύγκριση.
Καί στις δύο περιπτώσεις απλουστεύεται η κατάσταση

x<-Α+2
Εμφάνισε x
Για x από Α+2 μέχρι Μ(β) ή Μ-1(α) με_βήμα 2
         Εμφάνισε x+2
Τέλος_επανάληψης 


Τσορώνης Τάκης
Ηλ.Μηχ. & Μηχ. Η/Υ ΕΜΠ

gpapargi

Με πρόλαβε ο Τάκης. Νομίζω ότι βγάζει σωστό αποτέλεσμα για Α=4 και Μ=6 (εκτυπώνει μόνο το 6). Βέβαια δεν αποκλείεται να χαλάει αλλού. Δεν είμαι και σε φόρμα σήμερα…

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

Αντώνη οι λύσεις που έστειλες είναι ισοδύναμες με αυτή που έστειλε ο Αντρέας (και νομίζω πως αυτή κυκλοφόρησε τότε ως η ενδεδειγμένη λύση).Χαλάει για Α=1.1 και Μ=4

Ευχαριστώ για τις ευχές  :)

alkisg

Yeap, δουλεύει μια χαρά για Α, Μ από -10 μέχρι 10 με_βήμα 0.5
Σόρρυ για το λάθος, η βιασύνη του διαλείμματος...

Μένει το θέμα με το παραπανίσιο ΑΝ! :)

imark

Καλησπέρα και καλώς σας βρήκα.
Έχω μία απλή ερώτηση. Εφόσον στην εντολή Για έχω με_βήμα 2 (ακέραιο αριθμό), δεν πρέπει και οι αριθμοί με τους οποίους κάνω πράξεις να είναι ακέραιοι; Αν ναι, μπορώ να εφαρμόσω λύση με τη χρήση της mod στη μεταβλητή M και στην Α για να δω πια θα είναι η τιμή της μέχρι.

Ευχαριστώ!!!!!  :)

andreas_p

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

Θ1Δ_2001.07.09

ΘΑ ΜΑΣ ΤΡΕΛΑΝΕΙ ΑΥΤΟ ΤΟ θεματάκι !!!


Η (νέα - τροποοιημένη λύση) λύση :

Τύπωσε  Α+2
Για  Χ  από  Α+4  μέχρι  Μ+2  με_βήμα  2 
     Τύπωσε  Χ
  Τέλος_επανάληψης


με  Α, Μ, Χ  δηλωμένα ως  ΠΡΑΓΜΑΤΙΚΕΣ.

Υ.Γ.   Τώρα από πού 'μπάζει' ;

Ανδρέας

alkisg

@imark: Καλωσήρθες.
Όχι, δεν χρειάζεται να είναι ακέραιοι, π.χ.
ΓΙΑ χ ΑΠΟ 1.5 ΜΕΧΡΙ 7.5 ΜΕ_ΒΗΜΑ 2

@andreas_p: Μια χαρά μου φαίνεται, νομίζω είναι η καλύτερη λύση μέχρι τώρα.

gpapargi

Παράθεση από: andreas_p στις 07 Δεκ 2007, 04:32:01 ΜΜ
Η (νέα - τροποοιημένη λύση) λύση :

Τύπωσε  Α+2
Για  Χ  από  Α+4  μέχρι  Μ+2  με_βήμα  2 
     Τύπωσε  Χ
  Τέλος_επανάληψης


με  Α, Μ, Χ  δηλωμένα ως  ΠΡΑΓΜΑΤΙΚΕΣ.

Υ.Γ.   Τώρα από πού 'μπάζει' ;

Για Α=4 και Μ=6 βγάζει ένα 8 παραπάνω. Έχει αρχίσει και έχει πλάκα αυτό το θεματάκι  :D :D Δεν ξέρεις  πότε θα σκάσει μια λύση και θα της βρούμε τρύπα. Μπορεί και για λύσεις που φαίνονται σωστές μέχρι στιγμής να βρούμε τρύπα αύριο. Νομίζω πως καλά κάνω και θέλω απόδειξη