ΤΜΗΜΑ ΔΗΛΩΣΕΩΝ

Ξεκίνησε από George Eco, 08 Ιουλ 2020, 04:47:01 ΜΜ

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

pgrontas

Παράθεση από: Marfoto2 στις 31 Μαρ 2026, 01:04:52 ΜΜΔεν ξέρω αν είναι το κατάλληλο τόπικ αλλά μιας και ονομάζεται τμήμα δηλώσεων μάλλον κολλάει.
Το  σύμβολο '=' σύμφωνα με το βιβλίο στον πίνακα της σελίδας 139 είναι συγκριτικός τελεστής.
Όταν όμως θέλουμε να αποδώσουμε τιμή σε σταθερά πάλι χρησιμοποιούμε το σύμβολο '='.
Σε αυτήν την περίπτωση τι θεωρείται αυτό το σύμβολο;
Good catch! Δεν υπάρχει κάποιος σχετικός προσδιορισμός στο βιβλίο, οπότε μάλλον είναι απροσδιόριστο.
Απλά, μια παρατήρηση δεν αποδίδουμε τιμή σταθερά αλλά η σταθερά είναι ένα συμβολικό όνομα για την τιμή.
Οι θεματοδότες θα πρέπει να είναι προσεκτικοί ώστε να διευκρινίζουν ότι το = που θέλουν να χαρακτηριστεί δεν εμφανίζεται σε τμήμα δηλώσεων. Αν το βάλουν σε κάποιο τμήμα κώδικα χωρίς να το συμπεριλαμβάνουν δεν θα υπάρχει πρόβλημα νομίζω.

Παράθεση από: Marfoto2 στις 31 Μαρ 2026, 01:04:52 ΜΜ"Όλες οι εκτελέσιμες εντολές περιλαμβάνονται υποχρεωτικά ανάμεσα στις λέξεις ΑΡΧΗ και ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ"
Τι βάζουμε; Σωστό γιατί έτσι λέει το βιβλίο ή Λάθος γιατί εκτελέσιμες εντολές περιλαμβάνονται πχ. και ανάμεσα στις λέξεις ΑΡΧΗ και ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ;
Πάλι good catch! Με βάση αυστηρά τα δεδομένα (μπράβο στη μαθήτρια για την προσοχή στη λεπτομέρεια - νομίζω της ταιριάσει ο προγραμματισμός σε αυτό τον τομέα) θα πρέπει να χαρακτηριστεί λάθος, όμως δεν είμαι καθόλου βέβαιος ότι αυτή θα είναι και η αποδεκτή απάντηση (τόσο από τους θεματοδότες, όσο και από την πλειοψηφία μαθητών και καθηγητών).

Δυστυχώς αυτά συμβαίνουν όταν πας να βγάλεις από την μύγα ξύγκι. Και γι'αυτό δεν φταίνε οι συγγραφείς, αλλά κυρίως το σύστημα εξέτασης και διδασκαλίας.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Marfoto2

Παράθεση από: pgrontas στις 31 Μαρ 2026, 09:22:52 ΜΜΑπλά, μια παρατήρηση δεν αποδίδουμε τιμή σταθερά αλλά η σταθερά είναι ένα συμβολικό όνομα για την τιμή.

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

Και μια ερώτηση ακόμα, σχετική και με τις 2 προηγούμενες απορίες που ανέφερα.

ΠΡΟΓΡΑΜΜΑ τεστ
ΣΤΑΘΕΡΕΣ
  α = 10
  γ = α + 10
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: β
ΑΡΧΗ
  β <- 5
  ΓΡΑΨΕ α, β, γ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Το πρόγραμμα μου δίνει κανονικά έξοδο: 10 5 20

Δλδ στη δήλωση της σταθεράς γ επιτρέπεται μετά το '=' να γίνει αριθμητική πράξη και να χρησιμοποιηθεί αριθμητικός τελεστής.
Αυτό συμβαίνει σε πολλές γλώσσες προγραμματισμού. Πχ. το δοκίμασα και σε Pascal.

Η ερώτησή μου είναι η εξής: Αυτή η πράξη που γίνεται στο τμήμα δηλώσεων των σταθερών θεωρείται εκτελέσιμη εντολή;
Γιατί αν είναι εκτελέσιμη τότε προφανώς δεν ισχύει το όλες οι εκτελέσιμες βρίσκονται μεταξύ των λέξεων ΑΡΧΗ και ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ή ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ κτλ.
Αν δεν είναι εκτελέσιμη, τι είναι η υλοποίηση μια πράξης στο τμήμα δηλώσεων των Σταθερών;


pgrontas

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

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

Σίγουρα ο Άλκης θα μπορεί να απαντήσει καλύτερα / ορθότερα.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

George Eco

Παράθεση από: Marfoto2 στις 01 Απρ 2026, 01:30:20 ΠΜΗ ερώτησή μου είναι η εξής: Αυτή η πράξη που γίνεται στο τμήμα δηλώσεων των σταθερών θεωρείται εκτελέσιμη εντολή;

Καταπληκτική ερώτηση.
Μπορείς να έχεις και κάτι σα

λ = 1.23455534  * 10^120

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

alkisg

Νομίζω η ειδοποιός διαφορά φαίνεται στη συνημμένη εικόνα:



Το μήνυμα "Ξεκίνησε το πρόγραμμα" δεν εμφανίζεται αν υπάρχει π.χ. διαίρεση με το μηδέν παρακάτω, σε διαδικασία που δεν έχει ακόμα καλεστεί.
Δηλαδή, τις σταθερές τις υπολογίζει ο compiler ΠΡΙΝ την εκτέλεση, και αντικαθιστά την τιμή της σταθεράς σε όλο το σχετικό υποπρόγραμμα.
(οπότε να και μια περίπτωση που η διαίρεση με το μηδέν είναι σφάλμα μεταγλώττισης και όχι εκτέλεσης)

Όταν τελικά παραχθεί το εκτελέσιμο, δεν γίνεται πράξη 1/0 ή οποιαδήποτε άλλη, αλλά υπάρχει απευθείας το αποτέλεσμα. Άρα, οι εντολές κάτω από το ΣΤΑΘΕΡΕΣ δεν είναι εκτελέσιμες, δεν υπάρχουν καν στο εκτελέσιμο πρόγραμμα.

Τώρα σχετικά με το = ή το <-, θα πρέπει να σκεφτούμε ότι η ΓΛΩΣΣΑ έχει αρκετές ρίζες στην Pascal, όπου το ΣΤΑΘΕΡΕΣ λέγεται const και χρησιμοποιεί =, και η εκχώρηση τιμής χρησιμοποιεί :=. Υποθέτω ότι ο Wirth ήθελε να δώσει ένα στίγμα ότι κάτι διαφορετικό συμβαίνει στις σταθερές σε σχέση με τις μεταβλητές...

Marfoto2

#20
Παράθεση από: George Eco στις 01 Απρ 2026, 04:16:41 ΜΜΚαταπληκτική ερώτηση.
Μπορείς να έχεις και κάτι σα

λ = 1.23455534  * 10^120

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

Καλησπέρα Eco. Κι όμως μπορεί να υπάρξει πράξη και στο τμήμα δηλώσεων των μεταβλητών.


ΠΡΟΓΡΑΜΜΑ Πράξεις

ΜΕΤΑΒΛΗΤΕΣ

  ΑΚΕΡΑΙΕΣ: κ, Π[1 + 1] 

ΑΡΧΗ
  κ<- 1
  Π[1] <- 1

  Π[2] <- 2

  ΓΡΑΨΕ Π[1], Π[2] , κ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Το πρόγραμμα παράγει έξοδο κανονικά 1 2 1

George Eco

Εντάξει, μιλάς για δείκτες πίνακα, αλλά ναι αν πρέπει να είμαστε τυπικοί... κοίτα να δεις!!!