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

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή επανάληψης => Μήνυμα ξεκίνησε από: gpapargi στις 04 Δεκ 2007, 02:10:46 ΜΜ

Τίτλος: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: gpapargi στις 04 Δεκ 2007, 02:10:46 ΜΜ
Το παρακάτω θέμα έπεσε στις εξετάσεις του 2001

Δίνεται τ΅ή΅α αλγορίθ΅ου
   Χ ← Α
   Αρχή_επανάληψης
       Χ ← Χ + 2
       Εκτύπωσε το Χ
   Μέχρις_ότου Χ >= Μ
Να δώσετε τη δο΅ή επανάληψης "Για … από … ΅έχρι …βή΅α" η οποία τυπώνει ακριβώς τις ίδιες τι΅ές ΅ε το πιο πάνω τ΅ή΅α αλγορίθ΅ου.

Έχει κανείς υπόψη του ποια απάντηση δόθηκε από την επιτροπή θεμάτων σα σωστή; Εμένα μέ παίδεψε και νομίζω ότι την έλυσα κάπως αθέμιτα. Υπάρχει καμιά απλή λύση;
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 04 Δεκ 2007, 03:27:13 ΜΜ
Δεν ξέρω για την απάντηση της επιτροπής, αλλά τι λες για το παρακάτω;
Κώδικας (Ψευδογλώσσα) [Επιλογή]

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


Όσο για το (=) στη Μέχρις_ότου Χ >= Μ, πιστεύω ότι είναι λάθος, θα έπρεπε να έχει Μέχρις_ότου Χ > Μ.

Αν για κάποιον διεστραμμένο λόγο όντως εννοούσαν Χ >= Μ, τότε μπορεί να γραφεί έτσι:
Κώδικας (Ψευδογλώσσα) [Επιλογή]

  Χ ← Α
  Χ ← Χ + 2
  Εκτύπωσε το Χ
  τελική_τιμή ← Α+2
  Για Χ από Α+2 μέχρι Μ-2 με_βήμα 2
    Εκτύπωσε το Χ
    τελική_τιμή ← Χ
  τέλος_επανάληψης
  Αν τελική_τιμή < Μ τότε
    Χ ← Χ + 2
    Εκτύπωσε το Χ
  τέλος_αν


Τα παραπάνω χωρίς έλεγχο λόγω βιασύνης...
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: Laertis στις 04 Δεκ 2007, 06:05:09 ΜΜ
Δεν είμαι σίγουρος αλλά αν θυμάμαι καλά (πέρασαν 6 χρόνια) δόθηκε η προφανής λάθος απάντηση απο την επιτροπή

Για Χ απο Α+2 μέχρι Μ+2 με_βήμα 2
..........
το οποίο ισύχει μόνο όταν Α<=Μ.

Θα ψάξω τα χαρτιά μου για να το επιβεβαιώσω. Ελπίζω να το βρω στο αρχείο μου ...
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: Αλεξόπουλος Ανδρέας στις 04 Δεκ 2007, 08:30:37 ΜΜ
Παράθεση από: alkisg στις 04 Δεκ 2007, 03:27:13 ΜΜ
Όσο για το (=) στη Μέχρις_ότου Χ >= Μ, πιστεύω ότι είναι λάθος, θα έπρεπε να έχει Μέχρις_ότου Χ > Μ.

Η εκφώνηση έχει και το ίσον στο Μέχρις_Ότου, άρα δεν μπορούμε να το παραβλέψουμε. Μια λύση που έγραψα τώρα και φαίνεται να δουλεύει σωστά σε κάθε περίπτωση είναι η εξής:
Κώδικας [Επιλογή]

Χ<-Α
Χ<-Χ+2
Τύπωσε το Χ
Για Χ Από Α+2 Μέχρι Μ-1 Με_Βήμα 2
   Τύπωσε το (Χ+2)
Τέλος_Επανάληψης


Δηλαδή
1)γράφω μια φορά τις εντολές του βρόχου πριν από το Για, για να εξασφαλίσω ότι θα εκτελεστούν τουλάχιστον μια φορά, ανεξάρτητα από τις αρχικές τιμές του Α και του Μ,
2)αρχική τιμή του μετρητή βάζω το Α+2 αφού το Χ έχει αυξηθεί κατά 2 όταν αρχίζει η επανάληψη του Για, και τελική τιμή το (Μ-1) αφού υπάρχει το (Χ>=Μ) στο Μέχρις_Ότου
3)τυπώνουμε το (Χ+2) και όχι το Χ μέσα στην επανάληψη αφού αν προσέξουμε το βήμα (δηλαδή το Χ<-Χ+2), αυξάνεται πριν από το εκτύπωσε και όχι στο τέλος της επανάληψης όπως γίνεται συνήθως

Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 04 Δεκ 2007, 09:32:13 ΜΜ
Άμα είναι λάθος είμαστε υποχρεωμένοι να το παραβλέψουμε, ακόμα κι αν δεν εντοπίστηκε τότε και δεν είχε δοθεί σχετική διευκρίνηση από την επιτροπή. Δεν (θα) είναι το μόνο εσφαλμένο θέμα που έχει πέσει σε πανελλαδικές...

Δεν ορίζεται τύπος δεδομένων, άρα οι αριθμοί μπορεί να περιέχουν δεκαδικά. Επομένως το να αφαιρέσουμε -1 από το Μ δεν λύνει το πρόβλημα.

Ακολουθεί παράδειγμα με τις 3 υλοποιήσεις, όπου φαίνεται ότι δεν είναι ισοδύναμες.

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

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

  ΓΡΑΨΕ 'ʼλκης'
  Χ <- Α
  Χ <- Χ + 2
  ΓΡΑΨΕ Χ
  τελική_τιμή <- Α + 2
  ΓΙΑ Χ ΑΠΟ Α + 2 ΜΕΧΡΙ Μ - 2 ΜΕ_ΒΗΜΑ 2
    ΓΡΑΨΕ Χ
    τελική_τιμή <- Χ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΝ τελική_τιμή < Μ ΤΟΤΕ
    Χ <- Χ + 2
    ΓΡΑΨΕ Χ
  ΤΕΛΟΣ_ΑΝ

  ΓΡΑΨΕ 'Ανδρέας'
  Χ <- Α
  Χ <- Χ + 2
  ΓΡΑΨΕ Χ
  ΓΙΑ Χ ΑΠΟ Α + 2 ΜΕΧΡΙ Μ - 1 ΜΕ_ΒΗΜΑ 2
    ΓΡΑΨΕ Χ + 2
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Κώδικας (Αποτελέσματα) [Επιλογή]

Αρχικό:
3.00
5.00
ʼλκης
3.00
5.00
Ανδρέας
3.00


Υ.Γ. για μένα το να χρειαστούμε καμία 10ριά υλοποιήσεις μέχρι να βρούμε κάποια ισοδύναμη είναι από μόνο του απόδειξη ότι το = ήταν λάθος...   ::)
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: Αλεξόπουλος Ανδρέας στις 04 Δεκ 2007, 09:59:02 ΜΜ
οκ, απλώς εγώ θεώρησα ότι οι αριθμοί είναι ακέραιοι (μάλλον λανθασμένα αφού δεν το λέει πουθενά), οπότε έχεις δίκιο στην απάντηση που δίνεις.
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 04 Δεκ 2007, 10:02:12 ΜΜ
Στην ψευδογλώσσα επειδή δεν έχουν οριστεί οι τύποι δεδομένων συνήθως θεωρούμε τους αριθμούς πραγματικούς, εκτός αν ζητάει συγκεκριμένα ακεραίους το πρόβλημα...
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: Αλεξόπουλος Ανδρέας στις 04 Δεκ 2007, 10:51:56 ΜΜ
Παράθεση από: alkisg στις 04 Δεκ 2007, 10:02:12 ΜΜ
Στην ψευδογλώσσα επειδή δεν έχουν οριστεί οι τύποι δεδομένων συνήθως θεωρούμε τους αριθμούς πραγματικούς, εκτός αν ζητάει συγκεκριμένα ακεραίους το πρόβλημα...

Χωρίς να θέλω να αμφισβητήσω αυτά που λες, μιας και είσαι πιο παλιός και πιο έμπειρος στον χώρο από εμένα, υπάρχει κάπου αυτό γραμμένο ή απλά το θεωρούμε έτσι γενικά; Θέλω να πω, πως το "συνήθως θεωρούμε" δεν αποτελεί μια τεκμηριωμένη απάντηση για να το πεις σε ένα παιδί και πολύ εύκολα δημιουργεί παρερμηνείες σε μια άσκηση, όπως και στην συγκεκριμένη που εγώ την έλυσα για ακεραίους κι εσύ για πραγματικούς.
Εκτός αν το γράφει κάπου και μου έχει διαφύγει εμένα.
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 04 Δεκ 2007, 11:43:25 ΜΜ
Αντρέα αναλυτική αιτιολόγηση αύριο γιατί τώρα τρέχω με τις διορθώσεις του βιβλίου. :-\
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: gpapargi στις 05 Δεκ 2007, 01:04:53 ΠΜ
Άλκη για Α=0 και Μ=4 νομίζω πως στραβώνει και η δικιά σου λύση.
Εννοείται φυσικά ότι θέλουμε και το = αφού αυτό ζητάει η εκφώνηση και μιλάμε για πανελλήνιες.
Νομίζω πως δίκαια διαμαρτύρομαι.
Εμένα η άσκηση με παίδεψε. Έχω κάνει μια απόπειρα απόδειξης (με ένα σωρό ακροβασίες) και πάλι δεν είμαι σίγουρος ότι δε σκαλώνει κάπου το πράγμα...
Αλήθεια... αν μας δώσουν ένα υποψήφιο ισοδύναμο κώδικα πως καταλαβαίνουμε αν είναι σωστή λύση; Κάνοντας ένα σωρό δοκιμές (που τελικά δεν αποδεικνύουν τίποτα) ή θα πρέπει να ζητάμε και απόδειξη από τα παιδιά; 
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 05 Δεκ 2007, 01:33:16 ΠΜ
Όντως στραβώνει, θέλει κοίταγμα λίγο στα όρια και στα +-2 αλλά νομίζω ότι το σκεπτικό είναι σωστό. Διόρθωση αύριο...
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: evry στις 05 Δεκ 2007, 08:53:55 ΠΜ

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

Κώδικας [Επιλογή]

ΓΙΑ Χ ΑΠΟ Α+2 ΜΕΧΡΙ Μ + (Μ mod 2) ΜΕ ΒΗΜΑ 2
      Εκτύπωσε το Χ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 05 Δεκ 2007, 09:23:42 ΠΜ
Νομίζω ότι η επιτροπή δεν είχε στο μυαλό της ακεραίους, αλλά να μην υπήρχε το (=). Αλλιώς είναι υπερβολικά δύσκολο θέμα για μαθητή, ακόμα και με ακέραιους.

Με την παρακάτω αλλαγή νομίζω ότι δουλεύει σωστά είτε για ακέραιους είτε για πραγματικούς. Δοκίμασα ΓΙΑ Α, Μ ΑΠΟ -10 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ 0.5 οπότε το λέω με σχετική ασφάλεια.

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

      Χ <- Α
      Χ <- Χ + 2
      ΓΡΑΨΕ Χ   
      τελική_τιμή <- Χ
      ΓΙΑ Χ ΑΠΟ Α + 4 ΜΕΧΡΙ Μ - 2 ΜΕ_ΒΗΜΑ 2
        ΓΡΑΨΕ Χ   
        τελική_τιμή <- Χ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      Χ <- τελική_τιμή
      ΑΝ Χ < Μ ΤΟΤΕ
        Χ <- Χ + 2
        ΓΡΑΨΕ Χ   
        ΑΝ Χ < Μ ΤΟΤΕ
          Χ <- Χ + 2
          ΓΡΑΨΕ Χ   
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ


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

Το τελική_τιμή το έβαλα επειδή δεν είναι σωστό να χρησιμοποιούμε την τιμή του μετρητή Χ μετά από τη ΓΙΑ.
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: Αλεξόπουλος Ανδρέας στις 05 Δεκ 2007, 11:42:07 ΠΜ
Παράθεση από: alkisg στις 05 Δεκ 2007, 09:23:42 ΠΜ
Το τελική_τιμή το έβαλα επειδή δεν είναι σωστό να χρησιμοποιούμε την τιμή του μετρητή Χ μετά από τη ΓΙΑ.

Κι αυτό το λέει κάπου; Με ένα γρήγορο ξεφύλλισμα που έκανα πάλι τώρα στο βιβλίο δεν το είδα να αναφέρεται κάπου. Δηλαδή το ακόλουθο είναι λάθος;
Κώδικας [Επιλογή]

α<-0
Για ι Από 0 Μέχρι 5 Με_Βήμα 2
   α<- α + ι
Τέλος_Επανάληψης
Εμφάνισε α, ι

Φαντάζομαι όλοι έχουμε δει τέτοιες ασκήσεις που ζητάν να εμφανιστεί η τιμή ενός μετρητή αφού έχει τελειώσει η ΓΙΑ. Αν ισχύει ότι δεν μπορούμε να τον χρησιμοποιήσουμε μετά το Τέλος_Επανάληψης, τότε είναι λάθος.

Επίσης, δεν μου απάντησες γιατί όταν σε έναν αλγόριθμο έχουμε 'ΔΙΑΒΑΣΕ Χ', θεωρούμε το Χ σαν πραγματικό αν δεν αναφέρεται κάτι άλλο;

Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 05 Δεκ 2007, 12:02:50 ΜΜ
Αντρέα, για την τιμή μετά το ΓΙΑ κάνε μια αναζήτηση στο φόρουμ, έχει αναφερθεί παλιότερα.

Για τους πραγματικούς:
Παράθεση από: Βιβλίο καθηγητή, σελίδα 72
Όπως θα παρατήρησε ήδη ο αναγνώστης, στο ρεπερτόριο των εντολών της ψευδογλώσσας δεν υπάρχουν δηλώσεις τύπων δεδομένων των χρησιμοποιούμενων μεταβλητών. Κάτι τέτοιο δεν είναι απαραίτητο στο επίπεδο της αλγοριθμικής ψευδογλώσσας. Για παράδειγμα ένας αλγόριθμος που βρίσκει τον ελάχιστο ν αριθμών, είναι ο ίδιος είτε οι αριθμοί είναι ακέραιοι, είτε πραγματικοί. Αν από τα δεδομένα του προβλήματος πρέπει να δηλωθεί ο τύπος των μεταβλητών, τότε αυτό γίνεται στην εκφώνηση. Ωστόσο δεν είναι λάθος στις περιπτώσεις αυτές να συμπληρώνεται ο τύπος των μεταβλητών στη γραμμή των δεδομένων.

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

Κι αφού οι πραγματικοί είναι υπερσύνολο των ακεραίων, αρκεί οι αλγόριθμοι που φτιάχνουμε να ισχύουν για πραγματικούς.
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: Duck στις 05 Δεκ 2007, 09:48:10 ΜΜ
Καλησπέρα. Πειραματιστικά και γω με την παραπάνω άσκηση και κατέληξα στις παρακάτω λύσεις.
Η (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 στις 05 Δεκ 2007, 09:53:06 ΜΜ
Δοκίμασέ το για Α = 1 και Μ = 1, δεν δουλεύει σωστά.

Επιμένω στην αρχική μου τοποθέτηση ότι άμα είναι να χρειαστούμε 10 υλοποιήσεις μέχρι να το καταφέρουμε, τότε το (=) ήταν λάθος της επιτροπής!  :D
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: Duck στις 05 Δεκ 2007, 10:02:34 ΜΜ
Όντως έτσι είναι, έχεις δίκιο  ::)
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: andreas_p στις 06 Δεκ 2007, 07:45:40 ΠΜ
Καλημέρα σας.

Θ1Δ_2001.07.09

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

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

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

Η λύση :

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

Ανδρέας
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 06 Δεκ 2007, 08:39:56 ΠΜ
Αυτή είναι η προτεινόμενη λύση;

Βγάζει λάθος αποτελέσματα για Α=1 και Μ=5.5.
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: gpapargi στις 06 Δεκ 2007, 08:47:22 ΠΜ
Αντρέα και η παραπάνω λύση στραβώνει για Α=1.1 και Μ=4.

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

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

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

Για μένα πάντως είναι σίγουρα φάουλ η επιτροπή.
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 06 Δεκ 2007, 12:06:40 ΜΜ
Γιώργο είναι λάθος για Α=4 και Μ=6.
Επίσης κλέβεις γιατί βάζεις ΑΝ μέσα στην επανάληψη!  :police:  :P  ;D

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

Περαστικά!
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: amanou στις 06 Δεκ 2007, 12:30:20 ΜΜ
Η λύση για κάθε περίπτωση μεταξύ Α και Μ (ακέραιων και πραγματικών) είναι η ακόλουθη:

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

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

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

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

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


Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: gpapargi στις 06 Δεκ 2007, 01:41:59 ΜΜ
Με πρόλαβε ο Τάκης. Νομίζω ότι βγάζει σωστό αποτέλεσμα για Α=4 και Μ=6 (εκτυπώνει μόνο το 6). Βέβαια δεν αποκλείεται να χαλάει αλλού. Δεν είμαι και σε φόρμα σήμερα…

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

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

Ευχαριστώ για τις ευχές  :)
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 06 Δεκ 2007, 01:50:03 ΜΜ
Yeap, δουλεύει μια χαρά για Α, Μ από -10 μέχρι 10 με_βήμα 0.5
Σόρρυ για το λάθος, η βιασύνη του διαλείμματος...

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

Ευχαριστώ!!!!!  :)
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: andreas_p στις 07 Δεκ 2007, 04:32:01 ΜΜ
Καλησπέρα σας.

Θ1Δ_2001.07.09

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


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

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


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

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

Ανδρέας
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: alkisg στις 07 Δεκ 2007, 05:26:57 ΜΜ
@imark: Καλωσήρθες.
Όχι, δεν χρειάζεται να είναι ακέραιοι, π.χ.
ΓΙΑ χ ΑΠΟ 1.5 ΜΕΧΡΙ 7.5 ΜΕ_ΒΗΜΑ 2

@andreas_p: Μια χαρά μου φαίνεται, νομίζω είναι η καλύτερη λύση μέχρι τώρα.
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: gpapargi στις 07 Δεκ 2007, 07:47:42 ΜΜ
Παράθεση από: andreas_p στις 07 Δεκ 2007, 04:32:01 ΜΜ
Η (νέα - τροποοιημένη λύση) λύση :

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


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

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

Για Α=4 και Μ=6 βγάζει ένα 8 παραπάνω. Έχει αρχίσει και έχει πλάκα αυτό το θεματάκι  :D :D Δεν ξέρεις  πότε θα σκάσει μια λύση και θα της βρούμε τρύπα. Μπορεί και για λύσεις που φαίνονται σωστές μέχρι στιγμής να βρούμε τρύπα αύριο. Νομίζω πως καλά κάνω και θέλω απόδειξη 
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: andreas_p στις 09 Δεκ 2007, 09:28:34 ΠΜ
Παράθεση
Για Α=4 και Μ=6 βγάζει ένα 8 παραπάνω. Έχει αρχίσει και έχει πλάκα αυτό το θεματάκι.

Γιώργο, καλημέρα.

Ρίξε  μια 2η ματιά   για  Α=4  και Μ=6.

Μέχρις_ότου  ->  6  και 8
Για               ->  6 και 8

Μήπως τελικά ... δεν 'μπάζει' άλλο ;;;;

Ανδρέας
Τίτλος: Απ: Μετατροπή Μέχρις_ότου σε Για (θέμα εξετάσεων)
Αποστολή από: gpapargi στις 04 Ιαν 2008, 03:00:14 ΜΜ
Λοιπόν χρωστάω και μια «απόπειρα απόδειξης» για τη λύση που έδωσα. Έκατσα και τέλειωσα ένα κείμενο που είχα ξεκινήσει την προηγούμενη φορά που τέθηκε το θέμα. Έχω επιφυλάξεις επιφυλάξεις. Όποιος θέλει ας το δει και τα λέμε.
Δεν το πήγα με δοκιμές αλλά προσπάθησα θεωρητικά να περάσω σε ισοδύναμους αλγορίθμους. Θα εξηγήσω βήμα βήμα το σκεπτικό της μετατροπής. Πιστεύω όμως ότι για να μιλάμε για μετατροπές θα πρέπει να παρέχουμε απόδειξη για να είμαστε σίγουροι. Ποιος δεν ξεγελάστηκε έστω και προσωπινά με τους κώδικες που παρουσιάστηκαν νομίζοντας τους αρχικά για σωστούς ενώ τελικά  είχαν λάθος;

Κάνω λοιπόν την απόπειρα

Ο αρχικός κώδικας είναι:

Χ ← Α
Αρχή_επανάληψης
     Χ ← Χ + 2
     Εκτύπωσε το Χ
Μέχρις_ότου Χ >= Μ

Αυτό ισοδύναμα μετατρέπεται σε:

Χ ← Α
Χ ← Χ + 2
Εκτύπωσε το Χ
Όσο Χ<Μ επανάλαβε
    Χ ← Χ + 2
    Εκτύπωσε το Χ
Τέλος_επανάληψης

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

Για να πάω στη Για έχω να παρακάμψω 2 εμπόδια. Το ένα είναι ο μετρητής στο τέλος (θα ήθελε για να είναι στο τέλος για ομαλή μετάβαση σε Για) και το άλλο είναι ο συγκριτικός τελεστής < (θα ήθελα να είναι <= για την ομαλή μετάβαση σε Για).

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

Άρα «ισοδύναμα» έχω (τα εισαγωγικά έχουν νόημα γιατί στην πραγματικότητα έχω κλέψει):
Χ ← Α
Χ ← Χ + 2
Εκτύπωσε το Χ
Όσο Χ<Μ επανάλαβε
    Εκτύπωσε το Χ+2
    Χ ← Χ + 2
Τέλος_επανάληψης

Τώρα το μόνο που με ενοχλεί είναι ο τελεστής <. Θα ήθελα να τον κάνω <= για ομαλή μετάβαση σε Για.

Η σκέψη είναι να γράψω το Χ<Μ σαν (Χ<Μ ή Χ=Μ) και Χ<>Μ
Αυτά όντως είναι ισοδύναμα αφού
(Χ<Μ ή Χ=Μ) και Χ<>Μ ~                      ! (με επιμερισμό του και ως προς το ή)
(Χ<Μ και Χ<>Μ) ή (Χ=Μ και Χ<>Μ) ~ ! (σύζευξη αντιθέτων)
(Χ<Μ και Χ<>Μ) ή  Ψευδής ~                 ! (κάτι ή ψευδής μας κάνει το κάτι)
Χ<Μ και Χ<>Μ  ~                                    ! (η πρώτη συνθήκη περιέχει τη δεύτερη)
Χ<Μ
ʼρα η παραπάνω σχέση γίνεται:

Χ ← Α
Χ ← Χ + 2
Εκτύπωσε το Χ
Όσο (Χ<Μ ή Χ=Μ) και Χ<>Μ επανάλαβε
    Εκτύπωσε το Χ+2
    Χ ← Χ + 2
Τέλος_επανάληψης

Αυτό γράφεται ισοδύναμα
Χ ← Α
Χ ← Χ + 2
Εκτύπωσε το Χ
Όσο (Χ<=Μ) και Χ<>Μ επανάλαβε
    Εκτύπωσε το Χ+2
    Χ ← Χ + 2
Τέλος_επανάληψης

Όπου απλά έγραψα το (Χ<Μ ή Χ=Μ) σαν Χ<=Μ (για να εμφανιστεί ο τελεστής που θέλω για ομαλή μετάβαση σε Για.

Ο έλεγχος της Όσο σημαίνει
Αν  (Χ<=Μ) και Χ<>Μ τότε
…

Το οποίο μπορεί να γραφτεί ισοδύναμα
Αν Χ<=Μ τότε
    Αν Χ<>Μ τότε
       …

Όπου απλά άλλαξε τη σύνθετη συνθήκη με εμφώλευση.
Έτσι προκύπτει:

Χ ← Α
Χ ← Χ + 2
Εκτύπωσε το Χ
Όσο (Χ<=Μ) επανάλαβε
   Αν Χ<> Μ τότε
      Εκτύπωσε το Χ+2
      Χ ← Χ + 2
    Τέλος_αν
Τέλος_επανάληψης

Εδώ υπάρχει ένα λεπτό σημείο: Η εντολή «Εκτύπωσε το Χ» πρέπει να εκτελείται μόνο όταν το Χ είναι μικρότερο του Μ (ο ρόλος του Αν είναι να μην εκτελεστεί η εντολή εμφάνισης όταν Χ=Μ). Αλλά η Χ<-Χ+2 πρέπει να εκτελείται κάθε φορά που μπαίνουμε στην Όσο έτσι ώστε να φύγουμε από το Χ=Μ και να τερματίσει ο βρόχος. Έτσι ο προηγούμενος κώδικας γίνεται:
Χ ← Α
Χ ← Χ + 2
Εκτύπωσε το Χ
Όσο (Χ<=Μ) επανάλαβε
   Αν Χ<> Μ τότε
      Εκτύπωσε το Χ+2
    Τέλος_αν
    Χ ← Χ + 2
Τέλος_επανάληψης

Οι 2 τελευταίοι ψευδοκώδικες είναι ίδιοι με μια μόνο διαφορά: Στην περίπτωση που το Χ γίνει Μ ο πρώτος δεν εκτελεί καμία εντολή ενώ ο δεύτερος εκτελεί μόνο τη δεύτερη. Έτσι το Χ αυξάνεται και τερματίζει ο βρόχος.

Τώρα είμαστε έτοιμη για μετάβαση σε Για. 
Χ ← Α
Χ ← Χ + 2
Εκτύπωσε το Χ
Για Χ από Α+2 μέχρι Μ με_βήμα 2
   Αν Χ<> Μ τότε
      Εκτύπωσε το Χ+2
    Τέλος_αν
Τέλος_επανάληψης