Απορία στον υπολογισμό πράξεων σε Για

Ξεκίνησε από chzisi, 02 Φεβ 2016, 09:04:16 ΜΜ

« προηγούμενο - επόμενο »

chzisi

Καλησπέρα σας. Σύμφωνα με το βιβλίο κατά την εκτέλεση μιας εντολής "για" η αύξηση του i λογαριάζεται ως 1 πράξη ανα επανάληψη.  :o
Η πράξη i <- i+1 δεν λογαριάζεται ως 2 πράξεις;
Αν έχω μια εντολή "Για" και την αντίστοιχή της σε "Όσο" πρέπει τα παιδιά να γνωρίζουν ότι η "για" εκτελείται γρηγορότερα;

ΣΧΟΙΝΑΣ ΚΩΣΤΑΣ

 συμφωνώ έτσι είναι η μεταβολή του μετρητή στην εντολή Για είναι μία πράξη ενώ η μεταβολή μέσω εντολής εκχώρησης  με χρήση της Όσο είναι 2 πράξεις
Καθηγητής πληροφορικής ΠΕ20

gthal

Διαφωνώ.
Πιστεύω ότι η αύξηση του μετρητή πρέπει να είναι 2 πράξεις σε κάθε περίπτωση και το βιβλίο έχει τυπογραφικό (ή ίσως και.. λογικό) λάθος.
Το αν στη Για γίνεται διαφορετικά απ' ότι στην όσο είναι μάλλον ζήτημα του εκάστοτε μεταγλωττιστή, πράγμα που δεν θα έπρεπε να μας αφορά (αν και δεν μπορώ να δω πώς θα κατάφερνε κάτι τέτοιο ακόμα κι ένας μεταγλωττιστής)

Έχω κι εγώ μια καινούρια παρόμοια απορία (αν και λιγότερο εμφανή μέσα στις Για που μας δίνει το βιβλίο):
1) η συνθήκη μ=0 ή ν=0 είναι τρεις πράξεις, έτσι? (δύο συγκρίσεις και μία διάζευξη)
2) η συνθήκη i<10 ή i=10 επίσης τρεις πράξεις
3) η ισοδύναμή της i<=10 (δηλ ο "έλεγχος του i") στο βιβλίο μετράει σαν μία πράξη αλλά δεν θα έπρεπε να είναι κι αυτή τρεις πράξεις ? (αφού στην ουσία είναι δύο συγκρίσεις: αν το i είναι μεγαλύτερο ή αν είναι ίσο - δεν μπορείς να τα ελέξγεις και τα δύο ταυτόχρονα). θα μπορούσε βέβαια να πει κανείς ότι μπορεί να ελέγχεται η i>10 και να υπολογίζεται η άρνησή της, οπότε είναι δύο πράξεις: ΟΧΙ(i>10) ... οπότε ... χαιρετίσματα
Φιλικά,
Γιώργος Θαλασσινός

apoldem

Το i<=0 ο compiler το μετατρέπει σε OXI(i>0) και γι' αυτό γίνεται μία πράξη.

itt

Nομίζω ότι θα πρέπει, αφού απουσιάζει κάποια επεξήγηση, να σταθούμε στην σημειογραφία του βιβλίου. Δεν πιστεύω δηλαδή ότι η αύξηση του μετρητή είναι ισοδύναμη με το i <- i + 1 στο context της Για, οπότε αξιωματικά θα πρέπει να πάρουμε αυτό που αναφέρει το βιβλίο.

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

meteo_xampos

Καλησπέρα σας!!! Η εντολή χ<- Π[ι-1] κάνει 2 πράξεις;

itt

Παράθεση από: meteo_xampos στις 03 Φεβ 2016, 07:56:55 ΜΜ
Καλησπέρα σας!!! Η εντολή χ<- Π[ι-1] κάνει 2 πράξεις;

Εγώ θα έλεγα τρεις. Υπολογισμός του index (i - 1), προσπέλαση του πίνακα και μετά ανάθεση της τιμής στο x.

petrosp13

Η προσπέλαση του πίνακα γιατί να είναι πράξη; Ή μια πράξη;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

apoldem

Η προσπέλαση σε πίνακα δεν θεωρείται πράξη. Δεν χρειάζεται να κάνει κάτι ο επεξεργαστής. Απλώς φέρνει την θέση μνήμης που του ζητήθηκε. Οπότε το χ<- Π[ι-1] είναι δύο πράξεις.

Στην Pascal υπήρχε πράγματι διαφορά στην ταχύτητα της Για με την Όσο. Η αύξηση του μετρητή στην Για γινόταν σε γλώσσα μηχανής ή με κάποιον άλλον μαγικό τρόπο και ήταν μία πράξη. Αυτός ήταν και ο λόγος που δεν μπορούσες να αλλάξεις τον μετρητή της Για και όχι οι υπόλοιπες τρίχες του βιβλίου για δήθεν πιο ευανάγνωστο κώδικα. Το πρόβλημα ήταν τεχνικό. Επίσης αυτός ήταν και ο λόγος που τα προγράμματα σε pascal (και basic) ήταν γεμάτα με βρόγχους Για, ενώ οι Όσο σπάνιζαν (τουλάχιστον μέχρι να εμφανιστεί η turbo pascal, αν θυμάμαι καλά).

Προτείνω να μείνετε δογματικά προσκολλημένοι σε ότι λέει το βιβλίο. Αν γράφουν κάτι οι συγγραφείς σημαίνει ότι αυτό ίσχυε τότε, οπότε πάρτε το ως δεδομένο.

chzisi

Παράθεση από: apoldem στις 03 Φεβ 2016, 10:44:04 ΜΜ
Η προσπέλαση σε πίνακα δεν θεωρείται πράξη. Δεν χρειάζεται να κάνει κάτι ο επεξεργαστής. Απλώς φέρνει την θέση μνήμης που του ζητήθηκε. Οπότε το χ<- Π[ι-1] είναι δύο πράξεις.

Στην Pascal υπήρχε πράγματι διαφορά στην ταχύτητα της Για με την Όσο. Η αύξηση του μετρητή στην Για γινόταν σε γλώσσα μηχανής ή με κάποιον άλλον μαγικό τρόπο και ήταν μία πράξη. Αυτός ήταν και ο λόγος που δεν μπορούσες να αλλάξεις τον μετρητή της Για και όχι οι υπόλοιπες τρίχες του βιβλίου για δήθεν πιο ευανάγνωστο κώδικα. Το πρόβλημα ήταν τεχνικό. Επίσης αυτός ήταν και ο λόγος που τα προγράμματα σε pascal (και basic) ήταν γεμάτα με βρόγχους Για, ενώ οι Όσο σπάνιζαν (τουλάχιστον μέχρι να εμφανιστεί η turbo pascal, αν θυμάμαι καλά).

Προτείνω να μείνετε δογματικά προσκολλημένοι σε ότι λέει το βιβλίο. Αν γράφουν κάτι οι συγγραφείς σημαίνει ότι αυτό ίσχυε τότε, οπότε πάρτε το ως δεδομένο.

Πράγματι η προσπέλαση σε πίνακα δεν έχει λογική να θεωρείται επιπλέον πράξη.
Με δεδομένο αυτο το στοιχείο της pascal δικαιολογείται κάπως και αυτή η ιδιαιτερότητα στη ΓΛΩΣΣΑ.
Προφανώς και πρέπει να διδαχθεί ακριβώς όπως παρουσιάζεται.

itt

#10
Παράθεση από: apoldem στις 03 Φεβ 2016, 10:44:04 ΜΜ
Η προσπέλαση σε πίνακα δεν θεωρείται πράξη. Δεν χρειάζεται να κάνει κάτι ο επεξεργαστής. Απλώς φέρνει την θέση μνήμης που του ζητήθηκε. Οπότε το χ<- Π[ι-1] είναι δύο πράξεις.

Tι εννοείς δεν χρειάζεται να κάνει κάτι ο επεξεργαστής; Πρέπει να υπολογίσει τη διεύθυνση μνήμης με βάση το base address του πίνακα και να μετακινήσει τη μνήμη σε register.  Oυσιαστικά θα πρέπει να κάνει κάτι τέτοιο (υποθέτωντας ότι δεν υπάρχουν optimizations γιατί αλλιώς δεν έχει βάση όλη η συζήτηση):

mov         eax,dword ptr [i]; Διαβάζει τη τιμή του μετρητή
mov         ecx,dword ptr [ebp + eax * 4 - 4]; Υποθέτωντας ότι το base address του πίνακα είναι στον ebp και ότι είναι πίνακας ακεραίων υπολογίζει το offset και φέρνει τη μνήμη στον ecx
mov         dword ptr [χ],ecx; Γράφει την τιμή του ecx στη μεταβλητή χ


οπότε δεν μπορώ να πω ότι η προσπέλαση του πίνακα δεν είναι πράξη. Αν βέβαια υπάρχει η λογική κάπου στο βιβλίο ότι η προσπέλαση του πίνακα δεν είναι πράξη, προφανώς και είναι 2 οι πράξεις.


apoldem

Συμφωνούμε itt. Εννοούσα δεν χρειάζεται να κάνει κάτι ο επεξεργαστής από τις πράξεις όπως τις αντιλαμβάνεται το βιβλίο.

Η ειρωνία είναι ότι ενώ μέχρι πέρσι δεν μας ενδιέφερε καθόλου η πολυπλοκότητα, (η εύρεση του μεγίστου μπορούσε να γίνει με ταξινόμηση) τώρα ασχολούμαστε με εξαντλητικό μέτρημα πράξεων και το πόσες φορές έβηξε ο επεξεργαστής! Είμαστε των άκρων τελικά.

petrosp13

To θέμα δεν είναι τόσο αυτό, όσο το ότι δεν ασχολήθηκε σοβαρά μια ομάδα καθηγητών για την αποσαφήνιση τέτοιων ασαφειών πριν ενταχθούν στην ύλη αυτά τα κομμάτια
Τι είχες Γιάννη, τι είχα πάντα..
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

tasospap

Μπορείτε να καταλάβετε τι γούστα βγάζουν μαζί μας, μαθητές που διαβάζουν αυτό το forum;

itt

Παράθεση από: apoldem στις 04 Φεβ 2016, 01:11:07 ΜΜ
Συμφωνούμε itt. Εννοούσα δεν χρειάζεται να κάνει κάτι ο επεξεργαστής από τις πράξεις όπως τις αντιλαμβάνεται το βιβλίο.

Η ειρωνία είναι ότι ενώ μέχρι πέρσι δεν μας ενδιέφερε καθόλου η πολυπλοκότητα, (η εύρεση του μεγίστου μπορούσε να γίνει με ταξινόμηση) τώρα ασχολούμαστε με εξαντλητικό μέτρημα πράξεων και το πόσες φορές έβηξε ο επεξεργαστής! Είμαστε των άκρων τελικά.

Ναι όπως είπα, δεν γνωρίζω ακριβώς ποιο είναι το πλαίσιο που απαντάμε τέτοιες ερωτήσεις. Αν υπάρχει κάτι πιο κατατοπιστικό στο θέμα που μπορεί να εξαχθεί από το βιβλίο, θα βοηθούσε. Εγώ τελοσπάντων, γράφω απλά τη γνώμη μου.

ΠαράθεσηTo θέμα δεν είναι τόσο αυτό, όσο το ότι δεν ασχολήθηκε σοβαρά μια ομάδα καθηγητών για την αποσαφήνιση τέτοιων ασαφειών πριν ενταχθούν στην ύλη αυτά τα κομμάτια
Τι είχες Γιάννη, τι είχα πάντα..

Παρόλο που το κεφάλαιο της πολυπλοκότητας σου δίνει τη δυνατότητα πλεον να απορρίψεις κάποιες πολύ κακές λύσεις, πιστεύω ότι δημιουργεί αρκετά περισσότερα προβλήματα από αυτά που λύνει.

ΠαράθεσηΜπορείτε να καταλάβετε τι γούστα βγάζουν μαζί μας, μαθητές που διαβάζουν αυτό το forum;

Για πες μας. (Δεν το γράφω με ειρωνεία btw)