Απορία σε μετατρόπες απο μια δομή επανάληψης σε μια άλλη

Ξεκίνησε από theoni, 24 Μαΐου 2016, 06:59:13 ΠΜ

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

theoni

Καλήμερα μήπως κάποιος θα μπορούσε να μου λύσει την παρακάτω απορία???
Δίνεται η εξής εκφώνηση να ξαναγράψετε το τμήμα αυτό χρησιμοποιώντας την εντολή για αντι της όσο
Σ<--0
χ<--5
Οσο χ<26 επαναλαβε
   Χ<-χ+7
    Σ<--Σ+χ
Τελος επαναληψης
ΕμφανισεΣ


Η απάντηση που δίνεται είναι η εξης:
Σ<--0
Για χ απο 5 μεχρι 19 με βημα 7
     Σ<--Σ+χ
Τελος επαναληψης
Εχω την εξής απορία αν η ασκηση δεν μας λεει ισοδυναμη μετατροπη θα κανουμε μονο τις βασικες αλλαγες στον τροπο γραφεις μεταξυ των δυο δομων επαναληψης????

Laertis

Κατ 'αρχάς η απάντηση που παραθέτεις έχει σοβαρότατα λάθη. Δεν είναι σωστή η μετατροπή το Οσο σε Για ( το χ μέχρι το 19 που κολλάει; Το Σ υπολογίζει άλλο άθροισμα κ.ο.κ)

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

Λαμπράκης Μανώλης

Καλημέρα σε όλους

Το "τρικ" της μετατροπής είναι αυτό που μπήκε στην περσινή μετατροπή... δηλαδή στο όσο μπορούμε να αλλάξουμε πρώτα τοβ μετρητή και μετά να τον χρησιμοποίσουμε ενώ στο για όχι, οπότε πρέπει να βρούμε πως θα κάνουμε την αλλαγή...το όσο προσθέτει 5+7, για αυτό υποετω βάζει τις τιμές αυτές..ομως αυτό τι για θα προσθέσει 5+12+19 συμφωνώ και εγώ είναι αν το βλέπω σωστά τελείως λάθος..έχω την εντύπωση έτσι εξηγείται η φιλοσοφία της άσκησης

theoni

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



Σ<--0
Για χ απο 12 μεχρι  26 με βημα 7
     Σ<--Σ+χ
Τελος επαναληψης
   

theoni

Και συγνωμη στην οσο η συνθηκη ειναι χ<26 εφαγα ενα 2

Λαμπράκης Μανώλης

αυτό αλλάζει τα πράγματα  ;D :D .....  σε σχέση με τις τιμές που έχουν πιο πολύ νόημα τώρα....ουσιάστικά πάει τις τιμές του ΓΙΑ "μία τιμή πάνω" (σε σχήση με το βήμα) για να συμβαδίζουν με τις τιμές που θα προσθέσεις στο Όσο, γιατί είπαμε στο για δεν μπορώ να αλλάξω βήμα μέσα στην δομή, οπότε αλλάζω τις τιμές

theoni


Λαμπράκης Μανώλης

αν δεν κάνω κάποιο λάθος είναι σωστή, το όσο κάνει επαναλήψεις στις τιμές 5,12,19 και σταματάει στην 26, και στο άθροισμα προσθέτει "τις επόμενες τιμές", δηλαδή 12+19+26 ... το ίδιο κάνει και το Για που έχεις γράψει ..

Vagnes

Επίσης σωστή είναι και αυτή κατα τη γνώμη μου... Αν οχι διορθώστε με..

Σ<--0
Για χ απο 5 μεχρι  25 με βημα 7
     Σ<--Σ+(χ+7)
Τελος επαναληψης

Λαμπράκης Μανώλης

συνάδελφε και εγώ αυτή τη λύση θα έκανα να πω την αλήθεια ... το για λαμβάνει τις τιμές του όσο, μειώνουμε κατά 1 το 25 για να μην κάνει επανάληψη στο 26  και σε κάθε επανάληψη εμφανίζουμε τον "επόμενο" αριθμό με βάση το βήμα

gpapargi

Με τα θέματα μετατροπών εγώ έχω γενικά ένα πρόβλημα και το έχω ξαναγράψει και αναλύσει στο παρελθόν:
Θα πρέπει να ξεκαθαρίσουμε τι εννοούμε όταν λέμε μετατροπή από τη μια εντολή στην άλλη.
1) Εννοούμε να έχουν την ίδια έξοδο αν δεχτούν την ίδια είσοδο;
2) Εννοούμε να έχουν στο τέλος και τις ίδιες τιμές στις μεταβλητές;
3) Εννοούμε να έχουν και τον ίδιο αριθμό βημάτων;
4) Εννοούμε να κάνουν τα ίδια ακριβώς βήματα και  με την ίδια ακριβώς σειρά;

Για μένα μόνο το 4 είναι σωστό. Όλα τα άλλα θα οδηγήσουν σε ασυνέπειες από μέρους μας.
Δίνω ένα παράδειγμα για να γίνει σαφές τι εννοώ:
Έστω ότι θέλω να βρω το άθροισμα των στηλών ενός δισδιάστατου πίνακα α[30,15] και να το αποθηκεύω σε κατάλληλο μονοδιάστατο S[15] που έχει ήδη αρχικοποιηθεί με μηδενικά. Γράφω 2 κώδικες. Ο ένας σαρώνει κατά γραμμή και ο άλλος κατά στήλη.
! σάρωση κατά γραμμή
Για γ από 1 μέχρι 30
  Για σ από 1 μέχρι 15
    S[σ]<--S[σ]+α[γ,σ]
  Τέλος_επανάληψης
Τέλος_επανάληψης

! σάρωση κατά στήλη
Για σ από 1 μέχρι 15
  Για γ από 1 μέχρι 30
    S[σ]<--S[σ]+α[γ,σ]
  Τέλος_επανάληψης
Τέλος_επανάληψης

Ας πούμε ότι μετατρέπω έναν από τους 2 σε κάποια άλλη εντολή εκτός της Για. Έχω ίδια έξοδο για την ίδια είσοδο. Έχω και τις ίδιες τιμές στις μεταβλητές στο τέλος. Έχω και ίδιο αριθμό βημάτων. Αλλά δεν έχω ίδια βήματα και με την ίδια σειρά. Οι δύο αλγόριθμοι κάνουν άλλα πράγματα.
Αυτό εννοώ όταν λέω ότι οι ερμηνείες 1 ως 3 οδηγούν σε ασυνέπειες.

Λαμπράκης Μανώλης

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

gpapargi

Παράθεση από: Λαμπράκης Μανώλης στις 25 Μαΐου 2016, 01:49:58 ΜΜ
Καλημέρα σε όλους..
όντως είναι κάπως γενικός ο ορισμός της μετατροπής μεταξύ δομών επανάληψης..στο συγκεκριμένο παράδειγμα ας πούμε, το για δεν μπορεί  πρώτα να αλλάξει τιμή στη μεταβλητή και μετά να την χρησιμοποιήσει, οπότε το κάνει έμμεσα..θεωρείς συνάδελφε πως δεν έχει νόημα γενικά αυτή η μετατροπη; Με τις λύσεις διαφωνείς;
Βασικά διαφωνώ με το πρόβλημα :)
Κατά τη γνώμη μου ο ορισμός 4 είναι ο μόνος που δεν οδηγεί σε ασυνέπειες (τις οποίες προσπάθησα να δείξω με το παράδειγμα που έδωσα). Στη συγκεκριμένη άσκηση δίνουμε μια Όσο με αλλαγή του μετρητή στην αρχή και όχι στο τέλος όπως το κάνει η Για. Επίσης στη συνθήκη της Όσο ο συγκριτικός τελεστής είναι < και όχι <= όπως στη Για. Άρα με τον ορισμό 4 η άσκηση δεν είναι σωστή.
Δηλαδή για να μιλάμε για τέτοιες ασκήσεις θα πρέπει πρώτα να εξηγήσουμε με συνεπή τρόπο τι εννοούμε όταν λέμε "μετατροπή". Διαφορετικά ο καθένας θα θεωρεί σωστό κάτι που ο άλλος το θεωρεί λάθος. πχ έβλεπες πέρυσι να σου λέει κάποιος  η λύση αυτή δίνει ίδια έξοδο αλλά δεν αφήνει τις ίδιες τιμές στις μεταβλητές. Προφανώς ο πρώτος έδινε σαν ορισμό τον 1 και ο άλλος τον 2.
Η συζήτηση θα πρέπει να ξεκινήσει από τον ορισμό. Να θέσουμε πρώτα "καλώς" το πρόβλημα και μετά να το λύσουμε. Διαφορετικά ο καθένας λύνει ότι θέλει.

Laertis

Παράθεση από: gpapargi στις 25 Μαΐου 2016, 02:06:49 ΜΜ
Βασικά διαφωνώ με το πρόβλημα :)
Κατά τη γνώμη μου ο ορισμός 4 είναι ο μόνος που δεν οδηγεί σε ασυνέπειες (τις οποίες προσπάθησα να δείξω με το παράδειγμα που έδωσα). Στη συγκεκριμένη άσκηση δίνουμε μια Όσο με αλλαγή του μετρητή στην αρχή και όχι στο τέλος όπως το κάνει η Για. Επίσης στη συνθήκη της Όσο ο συγκριτικός τελεστής είναι < και όχι <= όπως στη Για. Άρα με τον ορισμό 4 η άσκηση δεν είναι σωστή.
Δηλαδή για να μιλάμε για τέτοιες ασκήσεις θα πρέπει πρώτα να εξηγήσουμε με συνεπή τρόπο τι εννοούμε όταν λέμε "μετατροπή". Διαφορετικά ο καθένας θα θεωρεί σωστό κάτι που ο άλλος το θεωρεί λάθος. πχ έβλεπες πέρυσι να σου λέει κάποιος  η λύση αυτή δίνει ίδια έξοδο αλλά δεν αφήνει τις ίδιες τιμές στις μεταβλητές. Προφανώς ο πρώτος έδινε σαν ορισμό τον 1 και ο άλλος το
Η συζήτηση θα πρέπει να ξεκινήσει από τον ορισμό. Να θέσουμε πρώτα "καλώς" το πρόβλημα και μετά να το λύσουμε. Διαφορετικά ο καθένας λύνει ότι θέλει.

Ο ορισμός της μετατροπής σε ισοδύναμο αλγόριθμο, ακολουθώντας τη μέχρι τώρα πρακτική των θεμάτων, ακολουθεί όλα τα άλλα εκτός απο το 4. Τον ορισμό 4 τον έβαλες εσύ Γιώργο για να θολώσεις τα νερά  ;D
Τι σημαίνει "κάνουν τα ίδια ακριβώς βήματα και  με την ίδια ακριβώς σειρά;' . Ο όρος της λέξης μετατροπή όντως είναι το πρόβλημα, κι εγώ αντιλαμβάνομαι τη μετατροπή ως τα 1,2 και 3 χωρίς υποχρεωτικά το 4. Ίσως μας βοηθήσει η λέξη "ισοδύναμος" που δε σημαίνει κατ 'αναγκη αυτό που λές. Άσε που είναι και εξαιρετικά επίκαιρος (ισοδύναμα μέτρα κλπ)
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

gpapargi

Ναι ουσιαστικά διαφωνώ με τη λογική των θεμάτων  >:D  :)
Για να δεις τι μπορεί να πάει στραβά με τα 1,2,3 χωρίς το 4 δες το παράδειγμα που αναφέρω στο αρχικό μου μήνυμα σε αυτό το θέμα. Πες πως σου δίνει τον πρώτο κώδικα εύρεσης αθροίσματος στηλών και ζητάει μετατροπή σε Όσο. Και κάποιος απαντάει με τον δεύτερο χρησιμοποιώντας όμως Όσο αντί για Για. Δεν παραβίασε τα 1,2,3 αλλά δεν μπορούμε να πούμε ότι έκανε τη μετατροπή γιατί ο κώδικάς του κάνει άλλα πράγματα από τα αρχικά.
Θέλουμε δηλαδή ένα ορισμό της μετατροπής (ή της ισοδυναμίας).
Για μένα σωστό είναι να μιλάμε για μετατροπή του ίδιου αλγορίθμου (ίδιων βημάτων)   με τη ζητούμενη εντολή (άλλη κωδικοποίηση δηλαδή).