Εργαστήριο Τεχνολογίας Λογισμικού
+1 vote
367 views

Στον κώδικα μου είχα ορίσει την συναρτηση FUNC int gcd, που υπολόγιζε τον μέγιστο κοινό διαιρέτη δύο αριθμών (num και den). Για οικονομία μεταβλητών έκανα ανάθεση τιμής στην μεταβλητή num ως εξής: num = num / gcd (num, den) και δεν μου έβγαζε σωστά αποτελέσματα. Φταίει το γεγονός ότι γίνεται ανάθεση τιμής στη μεταβλητή και αλλάζει η τιμή της μεταβλητής μου μέσα στη συνάρτηση, και αν ναι γιατί? Όταν άλλαξα τη μεταβλητή μου και έκανα αυτό: numf = num / gcd(num, den) το πρόβλημα λύθηκε, αλλά χρησιμοποίησα μια ακόμη μεταβλητή.

in progintro by (210 points) | 367 views
+1

Εικάζω πώς στην 1η υλοποίηση μετά την εντολη num = num / gcd(num, den), ακολουθεί η εντολή den = den / gcd(num, den). Εδώ όμως αυτό που συμβαίνει είναι ότι στην δεύτερη εντολή υπολογίζεται άλλος Μέγιστος Κοινός Διαίρετης (η τιμή του num έχει αλλάξει). Άρα διαιρείς τον αριθμητή και τον παρονομαστή με διαφορετικό αριθμό, όποτε το κλάσμα που λαμβάνεις δεν είναι ίσο με το αρχικό.

Θα πρότεινα να ορίσεις μια μεταβλητή που να βάζεις τον gcd και μετά να διαιρείς με αυτή την μεταβλητή τους num και den. (με αυτόν τον τρόπο γλιτώνεις και τον διπλό υπολογισμό του gcd)

+1

Καλησπέρα AndreasS, σου έδωσα κάποια bonus points για να μπορείς να απαντάς από τώρα. Αν θες, μετέφερε το σχόλιο σε απάντηση.

1 Answer

+1 vote

Εικάζω πώς στην 1η υλοποίηση μετά την εντολη num = num / gcd(num, den), ακολουθεί η εντολή den = den / gcd(num, den). Εδώ όμως αυτό που συμβαίνει είναι ότι στην δεύτερη εντολή υπολογίζεται άλλος Μέγιστος Κοινός Διαίρετης (η τιμή του num έχει αλλάξει). Άρα διαιρείς τον αριθμητή και τον παρονομαστή με διαφορετικό αριθμό, όποτε το κλάσμα που λαμβάνεις δεν είναι ίσο με το αρχικό.

Θα πρότεινα να ορίσεις μια μεταβλητή που να βάζεις τον gcd και μετά να διαιρείς με αυτή την μεταβλητή τους num και den. (με αυτόν τον τρόπο γλιτώνεις και τον διπλό υπολογισμό του gcd)

by (2.9k points)
0

Ευχαριστώ πολύ, τελικά αυτό ήταν το πρόβλημα!

301 questions

289 answers

288 comments

903 users