Αποστολέας Θέμα: μεταβλητή στο βήμα ή το από της Για  (Αναγνώστηκε 7652 φορές)

sstauross

  • Θαμώνας
  • ***
  • Μηνύματα: 23
μεταβλητή στο βήμα ή το από της Για
« στις: 05 Νοε 2011, 04:38:22 μμ »
Για ι απο α μέχρι β με_βήμα γ

επιτρέπεται;; να έχουμε μεταβλητές στα α και γ ;

Ευχαριστώ πολυ!

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3320
    • P.Tsiotakis
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #1 στις: 05 Νοε 2011, 06:49:10 μμ »
ναι μπορεί η αρχική, η τελική τιμή και το το βήμα να είναι μεταβλητές
ΑΛΛΑ δεν μπορούν να τροποποιούνται εντός του βρόχου



γιατί αν τροποποιηθούν εντός του βρόχου, θα έχουμε άλλη μια διασταύρωση απόψεων στο στέκι  :D

sstauross

  • Θαμώνας
  • ***
  • Μηνύματα: 23
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #2 στις: 05 Νοε 2011, 07:13:51 μμ »
υπάρχει κάπου στο βιβλίο αυτό;;
διότι τρέχοντας το παρακάτω στο http://www.pseudoglossa.gr/

Αλγόριθμος πχ
α← 1
Για ι απο 1 μέχρι 10 με_βήμα α
Διάβασε α
Τέλος_επανάληψης

Τέλος πχ

έτρεξε κανονικά...αν υπήρχε κάπου στο βιβλίο κάποια διευκρίνηση ή παράδειγμα που να το δείχνει θα βοηθούσε ιδιαίτερα!

Ευχαριστω..

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 988
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #3 στις: 06 Νοε 2011, 01:17:56 πμ »
Στο συγκεκριμένο σημείο υπάρχει μια διαφορά απόψεων.
Το βιβλίο αναφέρει ότι η αλλαγή του βήματος μέσα στον βρόχο πρέπει να αποφεύγεται.

Σχετικά με το αν αυτό είναι τυπικά λάθος έχουν γίνει πολλές συζητήσεις στο στέκι με τις δύο πλευρές να έχουν τα επιχειρήματά τους.

Όταν προγραμμάτιζα τον διερμηνευτή του pseudoglossa.gr δεν θεώρησα σκόπιμο να εισάγω τον περιορισμό της μη αλλαγής της τιμής του βήματος χωρίς αυτό να σημαίνει ότι αυτό είναι απαραίτητα συμβατό με το σχολικό βιβλίο.

Άσχετα με το αν είναι σωστό ή όχι η δομή Για πρέπει να χρησιμοποιείται για γνωστό αριθμό επαναλήψεων.

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2843
  • Πύργος Ηλείας

μ-Ziq

  • Νέος
  • *
  • Μηνύματα: 3
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #5 στις: 26 Νοε 2011, 04:35:00 μμ »

Καλησπέρα!

Αρχή_επανάληψης
 Διάβασε i
Μέχρις_ότου i <= 10
Για i από i μέχρι 10
 μπλαμπλα
Τέλος_επανάληψης

Σωστό ή Λάθος? (Αναφέρομαι προφανώς στο "Για i από i" κομμάτι.)

Ευχαριστώ!

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2843
  • Πύργος Ηλείας
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #6 στις: 26 Νοε 2011, 07:48:32 μμ »
Το ερώτημά σου βρίσκεται μέσα στις γκρίζες ζώνες του βιβλίου... Με λίγα λόγια, οι απόψεις διίστανται!

Από τον παραπάνω σύνδεσμο ( http://dide.ilei.sch.gr/keplinet/education/docs/aepp_yp_2010.pdf ) αντιγράφω το εξής:

Όσον αφορά τη μεταβολή του μετρητή μιας ΓΙΑ μέσα στο βρόχο του,  δεύτερη υπόδειξη της σελίδας 78  του Τετραδίου Μαθητή αναφέρεται:  «Ποτέ μην χρησιμοποιείς εντολές που αλλάζουν την αρχική τιμή, την τελική τιμή, το βήμα ή τη μεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ.  Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές,  να τις αποφεύγεις,  γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα». Από το απόσπασμα αυτό προκύπτει ότι η ΓΛΩΣΣΑ δεν περιλαμβάνεται στις «μερικές γλώσσες προγραμματισμού».  Επίσης,  στο Βιβλίο Μαθητή στην ενότητα 8.2.3,  σελ. 179,  για τη λειτουργία της ΓΙΑ … ΑΠΟ … ΜΕΧΡΙ αναφέρεται: «ΛΕΙΤΟΥΡΓΙΑ Οι εντολές του βρόχου εκτελούνται για όλες τις τιμές της μεταβλητής από την αρχική τιμή μέχρι την τελική τιμή,  αυξανόμενες με την τιμή του βήματος. Αν το βήμα είναι ίσο με 1, τότε παραλείπεται». 
Από τα προαναφερθέντα προκύπτει ότι η ΓΛΩΣΣΑ αποκλείει τη μεταβολή του μετρητή.


Με βάση λοιπόν το παραπάνω "σκεπτικό" θα συμπεράναμε ομοίως ότι "δεν πρέπει να αλλάζουμε την αρχική τιμή" της ΓΙΑ, επομένως το παράδειγμά σου θα έλεγα ότι: "δεν είναι σωστό", ή καλύτερα δεν είναι: "πολιτικώς ορθό" (!!!)

Υ.Γ.
Όλα τα παραπάνω βέβαια τα γράφω έχοντας την επίγνωση ότι θα υπάρχουν και αντίθετες απόψεις! Πιστεύω ότι το πιο σημαντικό για διάφορα τέτοια σημεία του βιβλίου είναι ακριβώς αυτό: "να έχουμε την επίγνωση ότι υπάρχουν και αντίθετες απόψεις" οπότε και να τα αντιμετωπίζουμε με την δέουσα προσοχή...

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2373
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #7 στις: 26 Νοε 2011, 08:34:57 μμ »
Σωστό, γιατί το i έχει συγκεκριμένη τιμή πριν την επανάληψη
Η μετατροπή του σε Όσο θα είχε την εξής μορφή

i <-- i
Όσο (i <= 10) επανάλαβε
    μπλαμπλα
    i <-- i + 1
Τέλος_Επανάληψης

Δεν υπάρχει λάθος
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 6099
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #8 στις: 05 Απρ 2020, 10:48:03 πμ »
Με αφορμή την οδηγία του Υπουργείου που γράφει ο Νίκος παραπάνω, να ζητήσω λίγο πάλι τη γνώμη σας για την υλοποίηση της ΓΙΑ στον Διερμηνευτή.

Από τα σημεία του βιβλίου τα οποία παραθέτει η οδηγία, εγώ είχα φτάσει σε διαφορετικό συμπέρασμα και υλοποίησα τη ΓΙΑ όπως κάνει η Pascal: ο Διερμηνευτής αποτιμά μόνο μια φορά την τελική τιμή και το βήμα, τα θυμάται, και έτσι δεν επηρεάζονται από τυχόν αλλαγές σε μεταβλητές εντός του βρόχου. Δηλαδή απλά "κακή πρακτική".

Το Υπουργείο λέει "η ΓΛΩΣΣΑ αποκλείει...", με βαρύ ύφος, που υποθέτω ότι σημαίνει ότι ο Διερμηνευτής θα πρέπει να αρνηθεί να το εκτελέσει.
Πρώτη ερώτηση: δηλαδή τι να βγάλει; Συντακτικό λάθος ή χρόνου εκτέλεσης;

Παρακάτω. Ας δούμε ένα πολύ συνηθισμένο παράδειγμα:

Κώδικας: ΓΛΩΣΣΑ
  1. ΓΙΑ μ ΑΠΟ 1 ΜΕΧΡΙ 10
  2.   ΚΑΛΕΣΕ ΚάποιαΔιαδικασία(μ)
  3. ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Με βάση λοιπόν την οδηγία του Υπουργείου, αυτό το πρόγραμμα (και ένα σωρό άλλα που διδάσκουμε) είναι λάθος! Ή ΚάποιαΔιαδικασία παίρνει σαν παράμετρο τον μετρητή μ με "αναφορά" (copy-restore), οπότε συντακτικά ισοδυναμεί με αλλαγή τιμής, είτε αλλάξει το μ εντός της διαδικασίας είτε όχι. Είναι ισοδύναμο με το να κάναμε μ <- μ, που γράφει στο μ κι ας μην το μεταβάλλει.

Άρα είτε θα πρέπει να εξηγήσουμε ότι έχουμε ένα σούπερ περίεργο interpreter/runtime-system που ελέγχει αν η τιμή που γράφεται είναι ίδια ή όχι, πριν βγάλει λάθος,
είτε η οδηγία του Υπουργείου είναι λάθος και πρέπει να αλλαχθεί σε "κακή πρακτική".

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

Οπότε, δεύτερη ερώτηση: να αλλάξει η υλοποίηση της ΓΙΑ του Διερμηνευτή, και πώς ακριβώς να γίνει;

Ως τρίτη ερώτηση, με την τρέχουσα υλοποίηση του Διερμηνευτή και της Pascal (προσωρινές μεταβλητές), η αρχική τιμή δεν μπορεί να αλλάξει εντός της επανάληψης, οποιεσδήποτε μεταβλητές κι αν πειράξει ο προγραμματιστής.
Η οδηγία του Υπουργείου έβαλε έναν επιπρόσθετο περιορισμό, ότι δεν μπορούμε να πειράζουμε την μεταβλητή της αρχικής τιμής, χωρίς αυτός ο περιορισμός να έχει νόημα ούτε στη ΓΙΑ ούτε κατά τη μετατροπή της σε ΟΣΟ... δηλαδή δημιούργησε κι άλλο πρόβλημα εκεί που δεν υπήρχε.

George Eco

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 481
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #9 στις: 05 Απρ 2020, 11:01:55 πμ »
Απαντώ.
Κατά τη γνώμη μου μάλλον χρόνου εκτέλεσης θα είναι.
Τώρα για το πώς να αλλάξει ο Διερμηνευτής, η θέση μου είναι έτσι ώστε να ακολουθεί τις οδηγίες του Υπουργείο.
Βέβαια προτιμώ να αλλάξει η γλώσσα προγραμματισμού, το έχω ξαναπει.

Η ΓΙΑ μπορεί να έχει μεταβλητές ως μετρητή, τιμή από, τιμή μέχρι, τιμή βήματος αρκεί το βήμα να μη πάρει τιμή 0 αν θυμάμαι καλά. Το θεωρεί βάσει ντιρεκτίβας μη αποδεκτό.


alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 6099
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #10 στις: 05 Απρ 2020, 11:41:36 πμ »
Τώρα για το πώς να αλλάξει ο Διερμηνευτής, η θέση μου είναι έτσι ώστε να ακολουθεί τις οδηγίες του Υπουργείου.

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

Αν το Υπουργείο πει ότι η ταξινόμηση γίνεται σε Ο(1), δεν σημαίνει ότι μπορεί και να υλοποιηθεί, θα πρέπει να αλλάξει η οδηγία... και ρωτάω μήπως έχω παραβλέψει κάτι, γιατί απ' όσο μπορώ να δω αυτό που ζητάνε είναι σχεδόν αδύνατο.

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3615
  • to Iterate is human to Recurse divine
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #11 στις: 05 Απρ 2020, 01:04:01 μμ »
Το λάθος εκτέλεσης είναι στις οδηγίες του υπουργείου.
Με τόσες αντικρουόμενες οδηγίες και συνεχή μπαλώματα τα οποία αρχικά είναι προσωρινά αλλά στη συνέχεια γίνονται μόνιμα, έχουν καταλήξει σε μια φανταστική γλώσσα προγραμματισμού η οποία δεν μπορεί να υλοποιηθεί. Φαντάζομαι ότι αυτό δεν έχει μεγάλη σημασία αφού κάνουμε .......... Αλγοριθμική σωστά?
Τέλος πάντων, αυτό που ζητάνε εδώ δεν είναι δυνατόν να ελεγχθεί όπως έχουμε πει και άλλες φορές. Ο έλεγχος αυτός μπορεί να γίνει μόνο σε χρόνο εκτέλεσης, άρα σίγουρα δεν μπορεί να θεωρηθεί συντακτικό λάθος. Από την άλλη όμως είναι μέρος του (ανύπαρκτου αλλά έμμεσου) ορισμού της..... ΓΛΩΣΣΑΣ. Καλό ε;
Αυτό με την αρχική τιμή που αναφέρεις Άλκη είναι κλασικό παράδειγμα του παραλογισμού του πνεύματος των οδηγιών. Πραγματικά τι πειράζει δηλαδή να μεταβάλλεται η αρχική τιμή? Αφού είναι ουσιαστικά έξω από την επανάληψη.

Άλκη δε νομίζω ότι έχει νόημα να κάνεις τίποτα, διότι αύριο μπορεί να έρθει μια άλλη οδηγία που να λέει άλλα.
Κανονικά κατά τη γνώμη μου είναι υποχρεωμένοι όσοι δίνουν αυτές τις οδηγίες να μας δίνουν και έναν διερμηνευτή της ΓΛΩΣΣΑΣ που να υλοποιεί τις οδηγίες αυτές.

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

bugman

  • Επισκέπτης
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #12 στις: 05 Απρ 2020, 02:53:36 μμ »
Μπορεί να υλοποιηθεί εύκολα η μη αλλαγή της μεταβλητής της ΓΙΑ. Το λάθος θα βγαίνει συντακτικό αν υπάρχει εκχώρηση τιμής. Το κόλπο βρίσκεται στο τύπο της μεταβλητής. Ο τύπος πρέπει να είναι μεταβλητή μόνο για ανάγνωση για όλο το εύρος της Για. Η αλλαγή τιμής γίνεται μόνο εσωτερικά από τον μηχανισμό της ΓΙΑ. Με μια σημαία που να δηλώνει ότι είναι μόνο για ανάγνωση, το οποίο θα περνάει και σε περίπτωση περάσματος με αναφορά σε διαδικασία, μπορεί ο διερμηνευτής να βρει πριν την εκτέλεση αν υπάρχει εντολή εκχώρησης σε μεταβλητή μόνο για ανάγνωση και να αναφέρει λάθος, και να σταματήσει.
Το διάστημα τιμών υποχρεωτικά πρέπει να περιλαμβάνει μια τιμή για μια τουλάχιστον εκτέλεση της Για. Αυτός ο κανόνας δίνει λάθος σε χρόνο εκτέλεσης, πάλι εύκολα όταν κατά την εκτέλεση το πρόγραμμα βρίσκει ότι δεν θα εκτελεστεί ο κώδικας της Για.

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

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 6099
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #13 στις: 05 Απρ 2020, 06:11:15 μμ »
Γιώργο υπάρχουν δύο θεματάκια. Ένα, στη ΓΛΩΣΣΑ οι παράμετροι μεταβιβάζονται με αντιγραφή, copy-restore, όχι με αναφορά.

Δύο:

Κώδικας: ΓΛΩΣΣΑ
  1. ΔΙΑΔΙΚΑΣΙΑ ΚάποιαΔιαδικασία(Ν)
  2. ΑΡΧΗ
  3.   ΆλλεςΕντολέςΠουΔενΠειράζουνΤοΝ
  4.   ΑΝ ΚάποιαΣυνθήκη ΤΟΤΕ
  5.     Ν <- Κάτι
  6.   ΤΕΛΟΣ_ΑΝ
  7. ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Η ΚάποιαΣυνθήκη μπορεί να είναι πάντα ΨΕΥΔΗΣ όταν αυτή η διαδικασία καλείται με παράμετρο μετρητή της ΓΙΑ, και να είναι ΑΛΗΘΗΣ μόνο όταν καλείται από άλλα σημεία του προγράμματος. Θα το καταλάβεις στο runtime, όχι στο compile time.

Αλλά ακόμα και ως runtime error αν υλοποιηθεί, παραβιάζει το copy-restore, που δεν νομίζω ότι ήταν στους στόχους της οδηγίας του Υπουργείου. Απλά δεν σκέφτηκαν τις παρενέργειες αυτού που αποφάσισαν.

bugman

  • Επισκέπτης
Απ: μεταβλητή στο βήμα ή το από της Για
« Απάντηση #14 στις: 05 Απρ 2020, 07:02:37 μμ »
Ναι υπάρχει αυτό που λες. Οπότε καλύτερα θα ήταν να γίνει λάθος κατά την εκτέλεση.
Τσέκαρα τον έλεγχο μη αρχικοποίησης σε τυπική μεταβλητή διαδικασίας. Ο έλεγχος γίνεται στη χρήση. Δηλαδή έχει προηγηθεί το copy in. Ο Διερμηνευτής κρατάει σημαία για μη αρχικοποίηση. Μάλιστα αν αρχικοποιήσουμε τη μεταβλητή εντός της διαδικασίας τότε στο copy out μεταβιβάζεται και η σημαία...που λέει ότι έχει αρχικοποιηθεί. Άρα μπορεί να μπει και μια δεύτερη σημαία που να λέει..μόνο για ανάγνωση . Το οποίο ομοίως θα μεταβιβάζεται και δεν θα αφήνει εκχωρήσεις τιμών. Αυτό θα το παραβλέπει μόνο η Για που θα το έχει δεσμεύσει  προσωρινά. Μετά το τέλος της Για θα σβήνει η σημαία μόνο για ανάγνωση.
Επίσης η Για θα ελέγχει αν η μεταβλητή είναι ήδη μόνο για ανάγνωση την πρώτη φορά πριν την εκχώρηση της πρώτης τιμής.

Παρακάτω είναι το πρόγραμμα ελέγχου. Δείχνει ότι η ΑΛΦΑ1 έχει αρχικοποιηθεί στην διαδικασία, και επίσης δείχει στη ΓΙΑ ότι τώρα δεν γίνεται έλεγχος και ότι η τιμή της Ι αλλάζει με συνέπεια να μην σταματάει η ΓΙΑ.

Αν φτιαχτεί σωστά η τελευταία ΚΑΛΕΣΕ θα βγάλει λάθος κατά την εκτέλεση.

Κώδικας: [Επιλογή]
ΠΡΟΓΡΑΜΜΑ ΑΛΦΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: ΑΛΦΑ1, Ι
ΑΡΧΗ
  ΚΑΛΕΣΕ ΒΗΤΑ(2.0)
  ΚΑΛΕΣΕ ΒΗΤΑ(ΑΛΦΑ1)
  ΓΡΑΨΕ ΑΛΦΑ1
  ΓΙΑ Ι ΑΠΟ 300.0 ΜΕΧΡΙ 300.0 ΜΕ ΒΗΜΑ 1.0
    ΚΑΛΕΣΕ ΒΗΤΑ(Ι)
    ΓΡΑΨΕ Ι
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΒΗΤΑ(ΑΛΦΑ1)
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: ΑΛΦΑ1
ΑΡΧΗ
  ΓΡΑΨΕ "ΟΚ"
  ΑΛΦΑ1 <- 100
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
« Τελευταία τροποποίηση: 05 Απρ 2020, 07:42:38 μμ από bugman »