Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Θεωρία => Μήνυμα ξεκίνησε από: chzisi στις 02 Φεβ 2016, 09:04:16 μμ

Τίτλος: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: chzisi στις 02 Φεβ 2016, 09:04:16 μμ
Καλησπέρα σας. Σύμφωνα με το βιβλίο κατά την εκτέλεση μιας εντολής "για" η αύξηση του i λογαριάζεται ως 1 πράξη ανα επανάληψη.  :o
Η πράξη i <- i+1 δεν λογαριάζεται ως 2 πράξεις;
Αν έχω μια εντολή "Για" και την αντίστοιχή της σε "Όσο" πρέπει τα παιδιά να γνωρίζουν ότι η "για" εκτελείται γρηγορότερα;
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: ΣΧΟΙΝΑΣ ΚΩΣΤΑΣ στις 03 Φεβ 2016, 12:13:03 πμ
 συμφωνώ έτσι είναι η μεταβολή του μετρητή στην εντολή Για είναι μία πράξη ενώ η μεταβολή μέσω εντολής εκχώρησης  με χρήση της Όσο είναι 2 πράξεις
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: gthal στις 03 Φεβ 2016, 09:38:31 πμ
Διαφωνώ.
Πιστεύω ότι η αύξηση του μετρητή πρέπει να είναι 2 πράξεις σε κάθε περίπτωση και το βιβλίο έχει τυπογραφικό (ή ίσως και.. λογικό) λάθος.
Το αν στη Για γίνεται διαφορετικά απ' ότι στην όσο είναι μάλλον ζήτημα του εκάστοτε μεταγλωττιστή, πράγμα που δεν θα έπρεπε να μας αφορά (αν και δεν μπορώ να δω πώς θα κατάφερνε κάτι τέτοιο ακόμα κι ένας μεταγλωττιστής)

Έχω κι εγώ μια καινούρια παρόμοια απορία (αν και λιγότερο εμφανή μέσα στις Για που μας δίνει το βιβλίο):
1) η συνθήκη μ=0 ή ν=0 είναι τρεις πράξεις, έτσι? (δύο συγκρίσεις και μία διάζευξη)
2) η συνθήκη i<10 ή i=10 επίσης τρεις πράξεις
3) η ισοδύναμή της i<=10 (δηλ ο "έλεγχος του i") στο βιβλίο μετράει σαν μία πράξη αλλά δεν θα έπρεπε να είναι κι αυτή τρεις πράξεις ? (αφού στην ουσία είναι δύο συγκρίσεις: αν το i είναι μεγαλύτερο ή αν είναι ίσο - δεν μπορείς να τα ελέξγεις και τα δύο ταυτόχρονα). θα μπορούσε βέβαια να πει κανείς ότι μπορεί να ελέγχεται η i>10 και να υπολογίζεται η άρνησή της, οπότε είναι δύο πράξεις: ΟΧΙ(i>10) ... οπότε ... χαιρετίσματα
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: apoldem στις 03 Φεβ 2016, 01:54:04 μμ
Το i<=0 ο compiler το μετατρέπει σε OXI(i>0) και γι' αυτό γίνεται μία πράξη.
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: itt στις 03 Φεβ 2016, 02:44:54 μμ
Nομίζω ότι θα πρέπει, αφού απουσιάζει κάποια επεξήγηση, να σταθούμε στην σημειογραφία του βιβλίου. Δεν πιστεύω δηλαδή ότι η αύξηση του μετρητή είναι ισοδύναμη με το i <- i + 1 στο context της Για, οπότε αξιωματικά θα πρέπει να πάρουμε αυτό που αναφέρει το βιβλίο.

Τώρα εαν υπάρξει ερώτηση Σ-Λ που θα εξετάζει κάτι τέτοιο, θα πρέπει να ζητάει τη σύγκριση της ασυμπτωτικής συμπεριφοράς δύο αλγορίθμων με τις δύο διαφορετικές επαναλήψεις οπότε και να μην μας απασχολήσει κάτι τόσο βλακώδες.
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: meteo_xampos στις 03 Φεβ 2016, 07:56:55 μμ
Καλησπέρα σας!!! Η εντολή χ<- Π[ι-1] κάνει 2 πράξεις;
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: itt στις 03 Φεβ 2016, 09:09:24 μμ
Καλησπέρα σας!!! Η εντολή χ<- Π[ι-1] κάνει 2 πράξεις;

Εγώ θα έλεγα τρεις. Υπολογισμός του index (i - 1), προσπέλαση του πίνακα και μετά ανάθεση της τιμής στο x.
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: petrosp13 στις 03 Φεβ 2016, 09:34:56 μμ
Η προσπέλαση του πίνακα γιατί να είναι πράξη; Ή μια πράξη;
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: apoldem στις 03 Φεβ 2016, 10:44:04 μμ
Η προσπέλαση σε πίνακα δεν θεωρείται πράξη. Δεν χρειάζεται να κάνει κάτι ο επεξεργαστής. Απλώς φέρνει την θέση μνήμης που του ζητήθηκε. Οπότε το χ<- Π[ι-1] είναι δύο πράξεις.

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

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

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

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

Πράγματι η προσπέλαση σε πίνακα δεν έχει λογική να θεωρείται επιπλέον πράξη.
Με δεδομένο αυτο το στοιχείο της pascal δικαιολογείται κάπως και αυτή η ιδιαιτερότητα στη ΓΛΩΣΣΑ.
Προφανώς και πρέπει να διδαχθεί ακριβώς όπως παρουσιάζεται.
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: itt στις 04 Φεβ 2016, 08:14:47 πμ
Η προσπέλαση σε πίνακα δεν θεωρείται πράξη. Δεν χρειάζεται να κάνει κάτι ο επεξεργαστής. Απλώς φέρνει την θέση μνήμης που του ζητήθηκε. Οπότε το χ<- Π[ι-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 στις 04 Φεβ 2016, 01:11:07 μμ
Συμφωνούμε itt. Εννοούσα δεν χρειάζεται να κάνει κάτι ο επεξεργαστής από τις πράξεις όπως τις αντιλαμβάνεται το βιβλίο.

Η ειρωνία είναι ότι ενώ μέχρι πέρσι δεν μας ενδιέφερε καθόλου η πολυπλοκότητα, (η εύρεση του μεγίστου μπορούσε να γίνει με ταξινόμηση) τώρα ασχολούμαστε με εξαντλητικό μέτρημα πράξεων και το πόσες φορές έβηξε ο επεξεργαστής! Είμαστε των άκρων τελικά.
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: petrosp13 στις 04 Φεβ 2016, 01:44:32 μμ
To θέμα δεν είναι τόσο αυτό, όσο το ότι δεν ασχολήθηκε σοβαρά μια ομάδα καθηγητών για την αποσαφήνιση τέτοιων ασαφειών πριν ενταχθούν στην ύλη αυτά τα κομμάτια
Τι είχες Γιάννη, τι είχα πάντα..
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: tasospap στις 04 Φεβ 2016, 05:44:48 μμ
Μπορείτε να καταλάβετε τι γούστα βγάζουν μαζί μας, μαθητές που διαβάζουν αυτό το forum;
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: itt στις 04 Φεβ 2016, 05:59:54 μμ
Συμφωνούμε itt. Εννοούσα δεν χρειάζεται να κάνει κάτι ο επεξεργαστής από τις πράξεις όπως τις αντιλαμβάνεται το βιβλίο.

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

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

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

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

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

Για πες μας. (Δεν το γράφω με ειρωνεία btw)
Τίτλος: Απ: Απορία στον υπολογισμό πράξεων σε Για
Αποστολή από: tasospap στις 05 Φεβ 2016, 12:32:40 μμ
Για το ίδιο πρόβλημα δίνουμε 2-3-4 διαφορετικές απαντήσεις χωρίς να ξέρουμε ποια είναι ή σωστή τελικά (ή ποια θα θεωρηθεί σωστή σε επίπεδο πανελλαδικών).  :D :D :D :D :D

Αυτή τη στιγμή ο καθένας διδάσκει το κεφάλαιο 5 σύμφωνα με τα πιστεύω του.....