Δημοσιεύτηκε: 25 Αύγ 2011, 11:59
από evolgen
Λοιπόν, το βρήκα. Μισό λεπτό να το γράψω...

Οι αρχικές πράξεις είναι:

a = b + 2
c = b - 3
b = a + c

Στην test έχει ορίσει τη σειρά των μεταβλητών ως εξής: πρώτα α, μετά b και τέλος c. (Γιατί ((int *a, int b, int *c)) .)
Στην πρώτη περίπτωση καλεί τη συνάρτηση test, κρατώντας σταθερό το b = 3. Η σειρά των μεταβλητών είναι ίδια με την test, δηλαδή όπου α το α, όπου b to b και όπου c το c.

Άρα, a = 3 + 2 = 5
c = 3 - 3 = 0
b = 3 (δεν το υπολογίζει, το κρατά σταθερό)

Τυπώνει λοιπόν:
5 3 0

==================================

Πάμε στη δεύτερη περίπτωση. Εδώ δεν τις καλεί με τη σειρά, όπως πριν, αλλά b, c, a. Εδώ θα βάλεις όπου a της test το b, όπου b της test το c και όπου c της test το α. Κρατάς όμως σταθερό το c = 0.

Οι πράξεις μετασχηματίζονται σε:

b = c + 2
a = c - 3
c = b + a

Για c = 0:
b = 0 + 2 = 2
a = 0 - 3 = -3
c = 0 (σταθερό)

Στο τέλος για να τυπώσει στην οθόνη όμως, μπορεί να καλέσει τις μεταβλητές με όποια σειρά θέλει, στην προκειμένη a, b, c.
Τυπώνει λοιπόν:
-3 2 0

Ομοίως και το 3ο, ενώ οι πράξεις γίνονται

c = a + 2
b = a - 3
a = c + b



============================
Το πρόγραμμα σε μπερδεύει γιατί χρησιμοποιεί τα ίδια ονόματα μεταβλητών στην test και στην main. Αν στην test είχε α, b, c και στην main greece, france, england, θα ήταν πιο ξεκάθαρο. Θα έβαζε όπου Greece το a, όπου France το b και όπου England το c.