Γενικό Λύκειο > Εντολή ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ

μεταβλητή στο βήμα ή το από της Για

<< < (3/5) > >>

alkisg:

--- Παράθεση από: George Eco στις 05 Απρ 2020, 11:01:55 πμ ---Τώρα για το πώς να αλλάξει ο Διερμηνευτής, η θέση μου είναι έτσι ώστε να ακολουθεί τις οδηγίες του Υπουργείου.

--- Τέλος παράθεσης ---

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

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

evry:
Το λάθος εκτέλεσης είναι στις οδηγίες του υπουργείου.
Με τόσες αντικρουόμενες οδηγίες και συνεχή μπαλώματα τα οποία αρχικά είναι προσωρινά αλλά στη συνέχεια γίνονται μόνιμα, έχουν καταλήξει σε μια φανταστική γλώσσα προγραμματισμού η οποία δεν μπορεί να υλοποιηθεί. Φαντάζομαι ότι αυτό δεν έχει μεγάλη σημασία αφού κάνουμε .......... Αλγοριθμική σωστά?
Τέλος πάντων, αυτό που ζητάνε εδώ δεν είναι δυνατόν να ελεγχθεί όπως έχουμε πει και άλλες φορές. Ο έλεγχος αυτός μπορεί να γίνει μόνο σε χρόνο εκτέλεσης, άρα σίγουρα δεν μπορεί να θεωρηθεί συντακτικό λάθος. Από την άλλη όμως είναι μέρος του (ανύπαρκτου αλλά έμμεσου) ορισμού της..... ΓΛΩΣΣΑΣ. Καλό ε;
Αυτό με την αρχική τιμή που αναφέρεις Άλκη είναι κλασικό παράδειγμα του παραλογισμού του πνεύματος των οδηγιών. Πραγματικά τι πειράζει δηλαδή να μεταβάλλεται η αρχική τιμή? Αφού είναι ουσιαστικά έξω από την επανάληψη.

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

bugman:
Μπορεί να υλοποιηθεί εύκολα η μη αλλαγή της μεταβλητής της ΓΙΑ. Το λάθος θα βγαίνει συντακτικό αν υπάρχει εκχώρηση τιμής. Το κόλπο βρίσκεται στο τύπο της μεταβλητής. Ο τύπος πρέπει να είναι μεταβλητή μόνο για ανάγνωση για όλο το εύρος της Για. Η αλλαγή τιμής γίνεται μόνο εσωτερικά από τον μηχανισμό της ΓΙΑ. Με μια σημαία που να δηλώνει ότι είναι μόνο για ανάγνωση, το οποίο θα περνάει και σε περίπτωση περάσματος με αναφορά σε διαδικασία, μπορεί ο διερμηνευτής να βρει πριν την εκτέλεση αν υπάρχει εντολή εκχώρησης σε μεταβλητή μόνο για ανάγνωση και να αναφέρει λάθος, και να σταματήσει.
Το διάστημα τιμών υποχρεωτικά πρέπει να περιλαμβάνει μια τιμή για μια τουλάχιστον εκτέλεση της Για. Αυτός ο κανόνας δίνει λάθος σε χρόνο εκτέλεσης, πάλι εύκολα όταν κατά την εκτέλεση το πρόγραμμα βρίσκει ότι δεν θα εκτελεστεί ο κώδικας της Για.

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

alkisg:
Γιώργο υπάρχουν δύο θεματάκια. Ένα, στη ΓΛΩΣΣΑ οι παράμετροι μεταβιβάζονται με αντιγραφή, copy-restore, όχι με αναφορά.

Δύο:


--- Κώδικας: ΓΛΩΣΣΑ ---ΔΙΑΔΙΚΑΣΙΑ ΚάποιαΔιαδικασία(Ν)ΑΡΧΗ  ΆλλεςΕντολέςΠουΔενΠειράζουνΤοΝ  ΑΝ ΚάποιαΣυνθήκη ΤΟΤΕ    Ν <- Κάτι  ΤΕΛΟΣ_ΑΝΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Η ΚάποιαΣυνθήκη μπορεί να είναι πάντα ΨΕΥΔΗΣ όταν αυτή η διαδικασία καλείται με παράμετρο μετρητή της ΓΙΑ, και να είναι ΑΛΗΘΗΣ μόνο όταν καλείται από άλλα σημεία του προγράμματος. Θα το καταλάβεις στο runtime, όχι στο compile time.

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

bugman:
Ναι υπάρχει αυτό που λες. Οπότε καλύτερα θα ήταν να γίνει λάθος κατά την εκτέλεση.
Τσέκαρα τον έλεγχο μη αρχικοποίησης σε τυπική μεταβλητή διαδικασίας. Ο έλεγχος γίνεται στη χρήση. Δηλαδή έχει προηγηθεί το copy in. Ο Διερμηνευτής κρατάει σημαία για μη αρχικοποίηση. Μάλιστα αν αρχικοποιήσουμε τη μεταβλητή εντός της διαδικασίας τότε στο copy out μεταβιβάζεται και η σημαία...που λέει ότι έχει αρχικοποιηθεί. Άρα μπορεί να μπει και μια δεύτερη σημαία που να λέει..μόνο για ανάγνωση . Το οποίο ομοίως θα μεταβιβάζεται και δεν θα αφήνει εκχωρήσεις τιμών. Αυτό θα το παραβλέπει μόνο η Για που θα το έχει δεσμεύσει  προσωρινά. Μετά το τέλος της Για θα σβήνει η σημαία μόνο για ανάγνωση.
Επίσης η Για θα ελέγχει αν η μεταβλητή είναι ήδη μόνο για ανάγνωση την πρώτη φορά πριν την εκχώρηση της πρώτης τιμής.

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

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


--- Κώδικας: ---ΠΡΟΓΡΑΜΜΑ ΑΛΦΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: ΑΛΦΑ1, Ι
ΑΡΧΗ
  ΚΑΛΕΣΕ ΒΗΤΑ(2.0)
  ΚΑΛΕΣΕ ΒΗΤΑ(ΑΛΦΑ1)
  ΓΡΑΨΕ ΑΛΦΑ1
  ΓΙΑ Ι ΑΠΟ 300.0 ΜΕΧΡΙ 300.0 ΜΕ ΒΗΜΑ 1.0
    ΚΑΛΕΣΕ ΒΗΤΑ(Ι)
    ΓΡΑΨΕ Ι
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΒΗΤΑ(ΑΛΦΑ1)
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: ΑΛΦΑ1
ΑΡΧΗ
  ΓΡΑΨΕ "ΟΚ"
  ΑΛΦΑ1 <- 100
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
--- Τέλος κώδικα ---

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

[*] Προηγούμενη σελίδα

Μετάβαση στην πλήρη έκδοση