Ο ανηψούλης μου από την Τενεούπολη με ρώτησε αν ο παρακάτω αλγόριθμος (για τον πολ/σμό αλά ρωσικά) είναι σωστός (δεν τον σκέφτηκε μόνος του):
Δεδομένα // Μ1, Μ2 //
P ← 0
Για Ε από Μ2 μέχρι 0 με_βήμα Κ
Αν Ε mod 2 = 1 τότε
P ← P + M1
Τέλος_αν
M1 ← M1*2
K ← M2 div 2
Τέλος_επανάληψης
Αποτελέσματα // P //
Ο γιατρός μου είπε οτι ήμουν πολύ τυχερός που τη γλύτωσα και πως πρέπει να προσέχω πολύ στο εξής. Σε επόμενη παρόμοια...συγκίνηση μπορεί να μην είμαι τόσο τυχερός. Δεν είναι και πολύ συνηθισμένες τέτοιες κρίσεις στα 29...
Με εκτίμηση,
Φίλε Παναγιώτη,
Καταλαβαίνω τη λογική του αλγόριθμου, αλλά αν δεν κάνω λάθος, δε δουλεύει...
Καταρχήν, φαντάζομαι ότι εννοούσες "με_βήμα -Κ"
Επίσης, φαντάζομαι ότι εννοούσες "K <-- E div 2" και όχι "K <-- M2 div 2"
Αλλά και πάλι αν αφαιρεί το Κ συνεχώς, στην περίπτωση που το Ε είναι περιττός δε δουλεύει...
Πρέπει να αφαιρεί το Κ+1... (και "μέχρι 1")
Έσπασα το κεφάλι μου να δω μήπως δεν έχω καταλάβει τη λογική σου και εννοείς κάτι διαφορετικό
από αυτό που κατάλαβα... Άν μπορείς εσύ ή κάποιος άλλος παρακαλώ απαντήστε μου, ευχαριστώ
εκ των προτέρων!
Αν έχω δίκιο τότε διορθωμένο πρέπει να είναι έτσι:
Δεδομένα // Μ1, Μ2 //
P ← 0
Για Ε από Μ2 μέχρι 1 με_βήμα -Κ
Αν Ε mod 2 = 1 τότε
P ← P + M1
K ← Ε div 2 + 1
Αλλιώς
K ← Ε div 2
Τέλος_αν
M1 ← M1*2
Τέλος_επανάληψης
Αποτελέσματα // P //
(Το δοκίμασα στη Γλωσσομάθεια και δουλεύει, απλά πρέπει να δωθεί αρχική τιμή στο Κ)
Φαντάζομαι οτι συμφωνείς πως είναι απαράδεκτο να αλλάζει η τιμή του μετρητή (του i ή εδώ του Ε)
μέσα στην επανάληψη. ʼραγε δεν είναι άσχημο να αλλάζει τιμή το βήμα (εδώ το Κ);