Μαθηματικά Προγραμματιστικά Προβλήματα

ALEX_

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

Ο ALEX_ αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλλεται Μαθηματικός. Έχει γράψει 1.466 μηνύματα.
Λοιπόν το πρόβλημα είναι προγραμματιστικής φύσεως αλλά θεωρώ ότι ταιριάζει περισσότερο εδώ μιας και αφορά καθαρή μαθηματική σκέψη...

Ως γνωστόν για να κάνουμε ανταλλαγή τιμών (το λεγόμενο swap) ανάμεσα σε δύο μεταβλητές Α και Β,ο καθιερωμένος τρόπος είναι ο εξής:

C=A;
A=B;
B=C;

Το ερώτημα είναι...

Υπάρχει τρόπος να κάνουμε ανταλλαγή τιμών χωρίς τη χρήση βοηθητικής μεταβλητής?(της C δηλαδή)

Περιμένω τις απαντήσεις σας!:)

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

 
Πρέπει να είναι σωστή η σκέψη μου.... Check it out :)

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

 
Έστειλα κι εγώ. :)
Άντε κάντε μια βόλτα και απο τη ΘΑ :)

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

 
Έστειλα κι εγώ. :)
Άντε κάντε μια βόλτα και απο τη ΘΑ :)

Σωστή και η Μισέλ!:clapup::clapup:

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

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

 
Σωστό tralala!:clapup:

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

 
Ναι....

Σωστά μαντέψατε.....

Σωστή και η io-io....

:clapup::clapup::clapup:

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

 
:D:D:D:D


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

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

 
:D:D:D:D


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

Ομολογώ ότι ψιλοσκάλωσα εκεί....:(...και έχω ξαναλύσει τέτοια ρε γαμώτο...

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

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

Ως γνωστόν για να κάνουμε ανταλλαγή τιμών (το λεγόμενο swap) ανάμεσα σε δύο μεταβλητές Α και Β,ο καθιερωμένος τρόπος είναι ο εξής:

C=A;
A=B;
B=C;

Το ερώτημα είναι...

Υπάρχει τρόπος να κάνουμε ανταλλαγή τιμών χωρίς τη χρήση βοηθητικής μεταβλητής?(της C δηλαδή)

Περιμένω τις απαντήσεις σας!:)

Καθαρά προγραμματιστικά με αυτό τον τρόπο(χωρίς χρήση του C) μπορεί να δημιουργηθούν προβλήματα πάντως.:P
Αν η λύση είναι αυτή που αφαιρούμε από το Α το Β και το αποθηκεύουμε στο Α κοκ.

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

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

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

 
εστειλα κι εγω μια απαντηση με βαση τις γνωσεις λυκειου που εχω (δεν ειμαι φοιτητης ακομα σαν εσας:()

τελος παντων, περιμενω απαντηση

Σημείωση: Το μήνυμα αυτό γράφτηκε 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 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

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

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

 
αν κατάλαβα καλά θέλουμε σε επίπεδο προγραμματισμού να κάνουμε swap μεταβλητών
σε python αυτό γίνεται α,β=β,α αμέσως
αν και δημιουργούνται ενδιάμεσα instances νομίζω
πάντως οι παραπάνω ιδέες είναι πράγματι πολύ ωραίες

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

 
Από το λίγο που έχω δει η python τα σπάει.[/off topic]

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

 
Στη σελίδα https://projecteuler.net/ μπορείτε να βρείτε ένα σωρό μαθηματικών προβλημάτων που υλοποιούνται σε pc με κλιμακούμενη δυσκολία. Από πολύ εύκολα, μέχρι και πολύ δύσκολα.
Επίσης στο κάθε πρόβλημα μπορείτε να δείτε και πόσα άτομα κατάφεραν να το λύσουν!

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

 

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 0 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 0 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Back
Top