ALEX_
Πολύ δραστήριο μέλος


Ως γνωστόν για να κάνουμε ανταλλαγή τιμών (το λεγόμενο swap) ανάμεσα σε δύο μεταβλητές Α και Β,ο καθιερωμένος τρόπος είναι ο εξής:
C=A;
A=B;
B=C;
Το ερώτημα είναι...
Υπάρχει τρόπος να κάνουμε ανταλλαγή τιμών χωρίς τη χρήση βοηθητικής μεταβλητής?(της C δηλαδή)
Περιμένω τις απαντήσεις σας!

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος



Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
ALEX_
Πολύ δραστήριο μέλος


Πρέπει να είναι σωστή η σκέψη μου.... Check it out![]()
Σωστοοοοοος!

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Subject to change
e-steki.gr Founder



Άντε κάντε μια βόλτα και απο τη ΘΑ

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
ALEX_
Πολύ δραστήριο μέλος


Έστειλα κι εγώ.
Άντε κάντε μια βόλτα και απο τη ΘΑ![]()
Σωστή και η Μισέλ!


Υ.Γ.:Έβαλες κι άλλο?Πάω να δω!

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
ALEX_
Πολύ δραστήριο μέλος



Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
ALEX_
Πολύ δραστήριο μέλος


Σωστά μαντέψατε.....
Σωστή και η io-io....



Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
io-io
Διάσημο μέλος






Λυσε τη θεωρια αριθμων της Μισελ τωρα!

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
ALEX_
Πολύ δραστήριο μέλος


Λυσε τη θεωρια αριθμων της Μισελ τωρα!![]()
Ομολογώ ότι ψιλοσκάλωσα εκεί....

Σημείωση: Το μήνυμα αυτό γράφτηκε 18 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Λοιπόν το πρόβλημα είναι προγραμματιστικής φύσεως αλλά θεωρώ ότι ταιριάζει περισσότερο εδώ μιας και αφορά καθαρή μαθηματική σκέψη...
Ως γνωστόν για να κάνουμε ανταλλαγή τιμών (το λεγόμενο swap) ανάμεσα σε δύο μεταβλητές Α και Β,ο καθιερωμένος τρόπος είναι ο εξής:
C=A;
A=B;
B=C;
Το ερώτημα είναι...
Υπάρχει τρόπος να κάνουμε ανταλλαγή τιμών χωρίς τη χρήση βοηθητικής μεταβλητής?(της C δηλαδή)
Περιμένω τις απαντήσεις σας!![]()
Καθαρά προγραμματιστικά με αυτό τον τρόπο(χωρίς χρήση του C) μπορεί να δημιουργηθούν προβλήματα πάντως.

Αν η λύση είναι αυτή που αφαιρούμε από το Α το Β και το αποθηκεύουμε στο Α κοκ.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Subject to change
e-steki.gr Founder


Ακριβώς. Διότι αν έχουμε πχ 2 μεταβλητές τύπου byte, που χωράει μέχρι 1 byte (στη Java), το να τους αθροίσουμε και να τους βάλουμε στη μια εκ των δύο, μπορεί να οδηγήσει σε overflow και να χάσουμε δεδομένα. Πχ το byte πάει μέχρι 255. Αν Α=130 και Β=150, τότε το να τους αθροίσουμε έχει αποτέλεσμα 280, που δεν "χωράει" σε μεταβλητή τύπου byte.Καθαρά προγραμματιστικά με αυτό τον τρόπο(χωρίς χρήση του C) μπορεί να δημιουργηθούν προβλήματα πάντως.
Αν η λύση είναι αυτή που αφαιρούμε από το Α το Β και το αποθηκεύουμε στο Α κοκ.
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Archie
Νεοφερμένο μέλος



τελος παντων, περιμενω απαντηση
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Ακριβώς. Διότι αν έχουμε πχ 2 μεταβλητές τύπου byte, που χωράει μέχρι 1 byte (στη Java), το να τους αθροίσουμε και να τους βάλουμε στη μια εκ των δύο, μπορεί να οδηγήσει σε overflow και να χάσουμε δεδομένα. Πχ το byte πάει μέχρι 255. Αν Α=130 και Β=150, τότε το να τους αθροίσουμε έχει αποτέλεσμα 280, που δεν "χωράει" σε μεταβλητή τύπου byte.
Έχω την εντύπωση ότι δε χάνουμε δεδομένα εξαιτίας της υπερχείλισης.
Μάλλον εννοείς το ακόλουθο:
A = A+B
B = A-B
A = A-B
Πχ με τις αριθμητικές τιμές που δίνεις, μετά την εκτέλεση θα έχουμε
A = 130+150 = 280 => A = 24 λόγω υπερχείλισης
Β = 24-150 = -126 => Β=130 λόγω υπερχείλισης
Α = 24-130 = -106 => Α=150 λόγω υπερχείλισης
Θα προσπαθήσω να το αποδείξω χωρίς τη χρήση mod για να μην μπερδευτούμε..
Αρχικά Α=α, Β=β. Υποθέτουμε ότι α+β > 256
Α = Α+Β --> Το Α θα πάρει κανονικά την τιμή α+β αλλά λόγω υπερχείλισης γίνεται Α=α+β-256. Προς το παρόν το Β είναι ίσο με β
Β = Α-Β --> Υπολογίζω το Α-Β. Είναι ίσο με (α+β-256)-β = α-256. Αλλά λόγω υπερχείλισης το Β θα πάρει την τιμή α
Α = Α-Β --> Το Α-Β τώρα είναι ίσο με (α+β-256)-α = β-256. Λόγω υπερχείλισης το Α τελικά παίρνει την τιμή β
ΥΓ έστειλα κι εγώ μία απάντηση σε pm
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Μια πιο γενική λύση είναι με την χρήση xor ή με την χρήση & και | που υποκαθιστούν τις προσθαφαιρέσεις (όμως και πάλι δεν μπορείς να το εφαρμόσεις αυτό γενικά).
Τέλος, αν εφαρμοστεί η μέθοδος προσθαφαιρέσεων τότε μπορεί λόγω των στρογγυλοποιήσεων να εξαχθεί διαφορετικό αποτέλεσμα από το αναμενόμενο.
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Franky5465
Νεοφερμένο μέλος


σε python αυτό γίνεται α,β=β,α αμέσως
αν και δημιουργούνται ενδιάμεσα instances νομίζω
πάντως οι παραπάνω ιδέες είναι πράγματι πολύ ωραίες
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
EpaRon
Εκκολαπτόμενο μέλος


Επίσης στο κάθε πρόβλημα μπορείτε να δείτε και πόσα άτομα κατάφεραν να το λύσουν!
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
-
Φορτώνει...
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.