Καλημερα!!!
Είναι γνωστη ότι η αντιμετάθεση με χρήση μιασ επιπλέον προσωρινής μεταβλητής....
Αλλά χωρίς τη χρήση μεταβλητής???
Έχω βρεί κάτι που μου φαίνεται σωστό αλλά είναι???
Αν α και β οι μεταβλητές που θέλω να αντιμεταθέσω, τότε:
α <- α - β
β <- β + α
α <- β - α
Πώς σας φαίνεται?
Έστω χ, ψ οι αρχικές τιμές των μεταβλητών α, β. Κάνε πίνακα τιμών συναρτήσει των χ, ψ και απέδειξε ότι όντως έτσι είναι. Μόνο που ισχύει για αριθμητικές μεταβλητές εφόσον οι τελεστές είναι αριθμητικοί.
Μπορεί να γίνει και με άλλους τρόπους. Πχ για διάφορους του μηδενός μπορείς να κάνεις (αν δε μου ξέφυγε κάτι):
α<-α/β
β<-β*α
α<-β/α
Το να βρεθούν όλοι οι τρόποι θυμίζει θεωρία ομάδων που παίζει με ιδιότητες πράξεων.
Να επισημάνουμε ότι ο τρόπος αυτός μπορεί να αξιοποηθεί μόνο σε αριθμητικές μεταβλητές.
ΣΔ
Το γνωστό swap γίνεται και με 2 εντολές αλλά σε assembly .... Θα το βρω και θα το γράψω (δεν είμαι σίγουρος αν τις θυμάμαι σωστά)
Παράθεση από: zavag στις 08 Σεπ 2009, 01:46:22 ΜΜ
Το γνωστό swap γίνεται και με 2 εντολές αλλά σε assembly .... Θα το βρω και θα το γράψω (δεν είμαι σίγουρος αν τις θυμάμαι σωστά)
http://pdos.csail.mit.edu/6.828/2008/readings/i386/XCHG.htm
π.χ. xchg ax, bx
==> μία εντολή. :)
Το βασικό είναι ότι σε επίπεδο μηχανής (όχι assembly) πάλι η εναλλαγή δεδομένων περιλαμβάνει 3 θέσεις (βασικά πολύ περισσότερες, αλλά τέλος πάντων). Ας μείνουμε στη θεωρία, γιατί στην πράξη γίνεται χαμός... :D
Σε 80286 μιλούσα ...
XOR AX, BX
XOR BX, AX
τέλος πάντων ... :)
Ναι η xchg υπάρχει από εποχής 8086/8088, απλά παρέθεσα το πρώτο link που βρήκα στο google. Να ένα άλλο για 8086: http://www.packetstormsecurity.org/programming-tutorials/Assembly/opcode.html
Δεν νομίζω όμως ότι έχει σημασία η assembly... κάποιος μπορεί κάλλιστα να φτιάξει έναν επεξεργαστή που να έχει ενσωματωμένη εντολή bubblesort! :P :D
Ναι, Μαρία πρόσεξε αυτό που έγραψε ο Σπύρος