μεταβλητή για βήμα

Ξεκίνησε από droopy, 31 Οκτ 2007, 12:23:59 ΠΜ

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

droopy

ΕΙΝΑΙ ΣΩΣΤΟ ΤΟ ΠΑΡΑΚΑΤΩ ΤΜΗΜΑ ΚΩΔΙΚΑ?

ΔΙΑΒΑΣΕ Ν
ΓΙΑ Χ ΑΠΟ 1 ΜΕΧΡΙ 10 ΜΕ ΒΗΜΑ Ν
ΕΜΦΑΝΙΣΕ Χ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


ΕΥΧΑΡΙΣΤΩ

alexis_zoure

Προσωπικα νομιζω πως ναι, αν Ν να ειναι δηλωμενος ως ακεραιος...
Αλλα δεν ειμαι σιγουρος,μπορει να κανω λαθος,αρα ας περιμενουμε καποιον εμπειροτερο!!! ;)
Αλεξανδρος Ζουρελιδης
Μαθητης Γ Λυκειου

COACH

Συγχωρέστε με αν αγνοώ κάτι αλλά...

Το Ν δεν καταλαβαίνω γιατί πρέπει να είναι ακέραιος...
Σελ. 44 στο βιβλίο λέει ότι οι τιμές
από
μέχρι
με_βήμα
δεν είναι απαραίτητο να είναι ακέραιες...
μπορεί να είναι και πραγματικές και έχει και παράδειγμα...
ΔΗΜΗΤΡΗΣ ΘΩΜΟΥ

Eri

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

alexis_zoure

#4
Πραγματι εχετε δικιο...Ν<>0 και τελειωνει η δουλεια...
Αλεξανδρος Ζουρελιδης
Μαθητης Γ Λυκειου

alkisg

Κώδικας: ΓΛΩΣΣΑ
ΠΡΟΓΡΑΜΜΑ τεστ 
ΜΕΤΑΒΛΗΤΕΣ 
  ΠΡΑΓΜΑΤΙΚΕΣ: χ, Ν 
ΑΡΧΗ 
  Ν <- 1.1 
  ΓΙΑ χ ΑΠΟ 1 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ Ν 
    ΓΡΑΨΕ χ 
    Ν <- Ν + 5 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Κώδικας: Αποτελέσματα
1.00
2.10
3.20
4.30
5.40
6.50
7.60
8.70
9.80


Προσέξτε την εντολή Ν <- Ν + 5.

(Δεν βλέπω το λόγο γιατί να μην) επιτρέπεται, απλά το Ν (υποχρεωτικά) αποτιμάται μία μόνο φορά, κατά την αρχή της ΓΙΑ. Ειδάλλως, αν η ΓΙΑ χρησιμοποιούσε κάθε φορά τη νέα τιμή του Ν, και το Ν γινόταν άλλοτε θετικό και άλλοτε αρνητικό, ο βρόχος θα μπορούσε να είναι ατέρμων ή να μην έχει σταθερό αριθμό επαναλήψεων, κάτι που έρχεται σε αντιδιαστολή με τον ορισμό της ΓΙΑ.

Το αρνητικό Ν δεν πειράζει, απλά η ΓΙΑ δεν θα εκτελεστεί ποτέ. Δεν παραβιάζεται η περατότητα.

COACH

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

1)Έχω ακριβώς την ίδια άποψη μαζί σου για την περίπτωση που Ν αρνητικός (στο βιβλίο βέβαια λέει ότι πρέπει αν το βήμα είναι αρνητικό, η τελική τιμή να είναι μικρότερη της αρχικής...)Αλλά νομίζω ότι αν κάποιος απαντήσει ότι
η εντολή μέσα στο σώμα της επανάληψης δεν εκτελείται ποτέ και με την υποσημείωση ότι όταν το βήμα είναι αρνητικό για να εκτελείται η εντολή μέσα στό σώμα της επανάληψης ΠΡΕΠΕΙ η τελική τιμή να είναι μικρότερη της αρχικής ώστε να φαίνεται και η θεωρία του βιβλίου
τότε είμαστε καλυμένοι από κάθε άποψη

2)Αν το βήμα είναι 0 πρέπει να απαντήσουμε ότι η εντολή μέσα στο σώμα επανάληψης εκτελείται άπειρες φορές άρα ο αλγόριθμος δεν πληρεί το κριτήριο της περατότητας διότι ποτέ δεν βγαίνουμε από το σώμα της επανάληψης...
τότε είμαστε καλυμένοι από κάθε άποψη

3)Όσο για το τελευταίο που λες...δεν το είχα σκεφτεί ποτέ...
Όντως στο βιβλίο δεν το απαγορεύει άρα μάλλον μπορεί να γίνει...
Όμως έχω ένσταση στον τρόπο με τον οποίο δουλεύει...
Δεν λέω ότι η πρότασή σου για την λειτουργία του είναι λάθος...
το αντίθετο μάλιστα...μου φαίνεται πολύ σωστή...
αλλά αφού δεν μας υπαγορεύει το βιβλίο πουθενά ότι πρέπει να γίνει έτσι γιατί να μην δουλεύει με  τον άλλο τρόπο??
Δεν θα μπορούσε να δουλεύει και με τον άλλο τρόπο που περιγράφεις με κάποιο ΠΡΕΠΕΙ???
Και επαναλαμβάνω ότι η δική σου ιδέα και πρόταση μου φαίνεται πιο λογική αλλά δεν ξέρω αν μπορούμε να την υιοθετήσουμε...

ΔΗΜΗΤΡΗΣ ΘΩΜΟΥ

gpapargi

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

Συγκεκριμένα στο πρώτο post του Droopy φαίνεται πως θέλουμε να εκτυπώσουμε τους αριθμούς από το 1 μέχρι το 10 βηματίζοντας ανά ν. Η ενδεδειγμένη προσέγγιση είναι με μια από τις άλλες 2 εντολές. Πχ

Διάβασε ν
χ<-1
Όσο Χ<=10 επανάλαβε
  Εμφάνισε χ
  χ<- χ+ν
Τέλος_επανάληψης

alkisg

Παράθεση από: COACH στις 31 Οκτ 2007, 09:36:24 ΠΜ
3)Όσο για το τελευταίο που λες...δεν το είχα σκεφτεί ποτέ...
Όντως στο βιβλίο δεν το απαγορεύει άρα μάλλον μπορεί να γίνει...
Όμως έχω ένσταση στον τρόπο με τον οποίο δουλεύει...
Δεν λέω ότι η πρότασή σου για την λειτουργία του είναι λάθος...
το αντίθετο μάλιστα...μου φαίνεται πολύ σωστή...
αλλά αφού δεν μας υπαγορεύει το βιβλίο πουθενά ότι πρέπει να γίνει έτσι γιατί να μην δουλεύει με  τον άλλο τρόπο??
Δεν θα μπορούσε να δουλεύει και με τον άλλο τρόπο που περιγράφεις με κάποιο ΠΡΕΠΕΙ???
Και επαναλαμβάνω ότι η δική σου ιδέα και πρόταση μου φαίνεται πιο λογική αλλά δεν ξέρω αν μπορούμε να την υιοθετήσουμε...

Το βιβλίο αναφέρει ρητά ότι η ΓΙΑ χρησιμοποιείται για συγκεκριμένο αριθμό επαναλήψεων. Με μεταβλητό βήμα δεν υπάρχει συγκεκριμένος αριθμός επαναλήψεων. Γι' αυτό λέω "ΠΡΕΠΕΙ" υποχρεωτικά το βήμα να αποτιμάται μόνο μία φορά.
Δεν ισχύει γενικά στις γλώσσες προγραμματισμού, π.χ. στη C μεταβάλλεις ό,τι θέλεις. Το λέω απλά και μόνο με βάση το σκεπτικό του βιβλίου.


Παράθεση από: gpapargi στις 31 Οκτ 2007, 09:49:28 ΠΜ
Συγκεκριμένα στο πρώτο post του Droopy φαίνεται πως θέλουμε να εκτυπώσουμε τους αριθμούς από το 1 μέχρι το 10 βηματίζοντας ανά ν. Η ενδεδειγμένη προσέγγιση είναι με μια από τις άλλες 2 εντολές.

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

Eri

Ναι έχουν δίκιο οι συνάδελφοι καθηγητές-προγραμματιστές...
Όμως θα ήταν καλό μιας και διαβάζουν τις απαντήσεις μαθητές που τώρα μαθαίνουν αλγοριθμική και έχουν
εύλογες και βασικές αποροίες να είμαστε λίγο πιο συνοπτικοί και σαφείς στις απάντησεις για να γινομαστε και κατανοητοί..
 
Οσό αφορά στο παράδειγμα του μαθητή:
Η ΠΕΡΑΤΟΤΗΤΑ στο παράδειγμα παραβιάζεται ΜΟΝΟ στην περίπτωση που το βήμα
(στην προκειμένη περίπτωση το Ν) ισούται με το μηδεν....
Βιαστηκά απάντησα και θεώρησα το βρόχο ατέρμων και για την περίπτωση που Ν<0...  :-X
Όταν το Ν<0 -και ας με διορθώσουν οι συνάδελφοι- το τμήμα το αλγορίθμου δεν θα εκτελεστεί ΚΑΜΙΑ ΦΟΡΑ (το
θέμα είναι κατα πόσο το τμήμα αλγορίθμου σε αυτή την περίπτωση θεωρείται αλγοριθμικά αποδεκτο;;Ή μήπως έχει λογικό σφάλμα;;)
Όταν τέλος το Ν>0 τότε δεν υπάρχει πρόβλημα ... εκτελείται βρόχος κάποιες φορές
(ανάλογα με το βήμα και βάσει του τύπου: ((τελική τιμή - αρχική τιμή) DIV N) + 1)..

ΟΛΑ τα παραπάνω ισχύουν για την προκειμένη περίπτωση που η τελικη τιμή είναι μεγαλύτερη της αρχικής (διότι 10>1) ..


P.Tsiotakis

Μπράβο Άλκη, καλύπτεις απόλυτα τα θέματα που τέθηκαν
Σωστή και η παρατήρηση του/της  Eri

gpapargi

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

Ομολογώ πάντως πως δεν θα συμβούλευα το μαθητή να βάλει μεταβλητή διαβασμένη από είσοδο στο βήμα της «Για» και θα πρότεινα μια από τις άλλες 2 εντολές. Αυτό δε σημαίνει πως αν το κάνεις πρόκειται για την τεχνική που καταδικάζουμε. Μάλλον ο τρόπος που λειτουργεί μέσα μου είναι κάτι σαν ταμπού. (Και λέω ταμπού γιατί δε με χαλάει η μεταβλητή που παίρνει τιμή από είσοδο στο άνω άκρο της «Για»). Ίσως δεν το εφαρμόζω στην πράξη… για αυτό και κάτι αντιδράει μέσα μου.

evry

Η παρακάτω επανάληψη πόσες φορές θα εκτελεστεί;

ΓΙΑ Ι ΑΠΟ 4 ΜΕΧΡΙ 5 ΜΕ ΒΗΜΑ -1


όπως επίσης και η παρακάτω

ΓΙΑ Ι ΑΠΟ 5 ΜΕΧΡΙ 4 ΜΕ ΒΗΜΑ 1



Αν κατάλαβα καλά δεν θα εκτελεστούν καμία φορά. Δεν ξέρω αλλά κάτι δε μου αρέσει εδώ. Από τη στιγμή που λέμε από 4 ΜΕΧΡΙ 5 τότε στην Όσο...Επανάλαβε δεν θα έπρεπε να είναι Ι<=5 ανεξάρτητα από το βήμα? Όταν το βήμα είναι αρνητικό θεωρούμε ότι ντε και καλά I>=5 ?
Αν είναι έτσι τότε ποια είναι η ισοδύναμη δομή Για..από...μέχρι της παρακάτω δομής

Ι<-10
ΟΣΟ Ι<=12 ΕΠΑΝΑΛΑΒΕ
     Ι <-Ι-1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ



What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

Το βασικό σημείο είναι ότι "η ΓΙΑ χρησιμοποιείται για συγκεκριμένο αριθμό επαναλήψεων".

Η παραπάνω ΌΣΟ είναι ατέρμων βρόχος, δεν είναι συγκεκριμένος αριθμός επαναλήψεων... Γιατί να πρέπει ντε και καλά να αντιστοιχεί σε μία ΓΙΑ;

Τι χρησιμότητα θα είχε (είτε προγραμματιστική είτε παιδαγωγική) μία ΓΙΑ που θα μας επέτρεπε να κάνουμε ατέρμονες βρόχους;

evry


   Απλά μου φαίνεται περίεργο το ότι η φορά της ανισότητας στη συνθήκη τερματισμού εξαρτάται από το πρόσημο του βήματος. Κάτι δεν πάει καλά. Ναι μεν το λέει στο βιβλίο καθηγητή ξεκάθαρα, αλλά αυτό δε σημαίνει ότι είναι και σωστό.
   Όσον για τον ατέρμων βρόχο όλοι οι servers υλοποιούνται με έναν ατέρμων βρόχο, οπότε προγραμματιστικά έχει κάποια αξία. Τώρα για το παιδαγωγικό κομμάτι όταν λες σε κάποιον ότι πηγαίνω από το 3 στο 4 με βήμα -1 πιο λογικό μου φαίνεται να σου πει ότι πρόκειται για ατέρμων βρόχο παρά ότι δεν εκτελείται καμία φορά.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr