Σταθερός πίνακας. Γίνετε?

Ξεκίνησε από giannakos, 13 Νοε 2021, 08:05:20 ΠΜ

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

giannakos

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

ΠΡΟΓΡΑΜΜΑ Παράδειγμα
ΣΤΑΘΕΡΕΣ
    Α[1] = 5
    Α[2] = 6
    Α[3] = 7

petrosp13

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

Κανένας

Δεν νομίζω ότι είναι σωστό.
Πρώτα απ' όλα είναι μη αποδεκτό συντακτικά.
Χρήση μη αποδεκτών χαρακτήρων ( [ , ] ) στο όνομα της σταθεράς.
Αλλά και ουσιαστικά, η συμβολική σταθερά αντικαθιστά μια σταθερή τιμή. Ο πίνακας είναι δομή δεδομένων, πρέπει να οριστεί
ο τύπος του και το μέγεθός του.
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

evry

Δεν αναφέρεται κάτι τέτοιο στο βιβλίο.
Δεν μιλάει πουθενά για σταθερούς πίνακες, αλλά ακόμα και αν αναφερόταν που είναι λογικό, αυτός ο τρόπος δήλωσης σταθεράς μου φαίνεται εντελώς λάθος.
Πιο λογικό θα ήταν κάτι τέτοιο:
Κώδικας: Cpp
A = {5,6,7}

Δεν θυμάμαι όμως αντίστοχο παράδειγμα σε κάποιο από τα βιβλία.
Στην ψευδογλώσσα θα μπορούσε να γίνει δεκτό, στην ΓΛΩΣΣΑ δεν νομίζω.
Αντιθέτως σε πολλά σημεία του τετραδίου μαθητή που θα μπορούσε να ορίσει σταθερά-πίνακα, ορίζει μεταβλητής π.χ. Στύλος1, Στύλο2, Στύλος3 στους πύργους του Ανόι
Θα έλεγα να μην το επιχειρήσετε.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

andreas_p

Υπομονή ... Έρχεται η Python.
L=[5,6,7]
print L[0]

George Eco

Αναρωτιέται κανείς:

Γίνεται να πούμε αυτό;

ΣΤΑΘΕΡΕΣ
    Α[1] = 5
    Α[2] = 6
    Α[3] = 7

Απάντηση στα πλαίσια του μαθήματος, από δικής μου πείρας και βάσει του συντακτικού της ΓΛΩΣΣΑΣ από το βιβλίο του Υπουργείου:

Όχι.

Τον πίνακα πρέπει να τον ορίσουμε πρώτα με τη μέγιστη δυνατή διάσταση, προτού ορίσουμε τιμές σε αυτόν, χώρια που στις σταθερές δεν ορίζεται τύπος δεδομένων, αλλά λειτουργεί ad-hoc με την άμεση απόδοση τιμής.

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

Η απάντηση είναι όχι, δε γίνεται.

petrosp13

Παράθεση από: evry στις 13 Νοε 2021, 12:18:35 ΜΜ
Κώδικας: Cpp
A = {5,6,7}


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

Δεν μπορώ να βρω κάτι λάθος στην σύνταξη
ΣΤΑΘΕΡΕΣ
      Α[1] = ...

Είναι συμβατή με ό,τι διδάσκουμε για τους πίνακες
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

Γιαννούλης Γιώργος

Παράθεση από: giannakos στις 13 Νοε 2021, 08:05:20 ΠΜ
ΠΡΟΓΡΑΜΜΑ Παράδειγμα
ΣΤΑΘΕΡΕΣ
    Α[1] = 5
    Α[2] = 6
    Α[3] = 7

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

Εκτός των παραπάνω θα μπορούσες να έκανες και αυτό :
ΠΡΟΓΡΑΜΜΑ Παράδειγμα
ΣΤΑΘΕΡΕΣ
    Α[1] = 5
    Α[2] = 6
    Α[10000] = 7

ή
ΠΡΟΓΡΑΜΜΑ Παράδειγμα
ΣΤΑΘΕΡΕΣ
    Α[1] = 5
    Α[2] = '6'
    Α[3] = 7.

αφού δεν γνωρίζει τι είναι το Α σε αυτό το σημείο ούτε τι μεγέθους είναι.

Αλλά νομίζω το πιο εύστοχο σχόλιο είναι αυτό:
Παράθεση από: andreas_p στις 13 Νοε 2021, 01:20:47 ΜΜ
Υπομονή ... Έρχεται η Python.

George Eco

Παράθεση από: petrosp13 στις 13 Νοε 2021, 02:15:42 ΜΜ
Ίσα ίσα Ευρυπίδη, θα έλεγα ότι τέτοια σύνταξη δεν ταιριάζει με καμία αντίστοιχη στο βιβλίο
Πίνακας χωρίς αγκύλες και με κόμματα ανάμεσα στις τιμές;

Δεν μπορώ να βρω κάτι λάθος στην σύνταξη
ΣΤΑΘΕΡΕΣ
      Α[1] = ...

Είναι συμβατή με ό,τι διδάσκουμε για τους πίνακες

Διαφωνώ συνάδελφε. Είναι εντελώς ασύμβατη.
Δεν ορίζεται τύπος (ας πούμε γίνεται ad hoc βάσει σταθερών και του τελεστή ανάθεσης τιμής μετά υπολογισμού = των σταθερών)
Πού ορίσαμε μέγιστο μέγεθος πίνακα; Επίσης στη ΓΛΩΣΣΑ ο πίνακας ορίζεται ως στατική δομή κι εδώ αντιμετωπίζεται ως δυναμική. Πρόβλημα μεγάλο.
Λες
Α[1] = 10
Ο πίνακας έχει μέγεθος ενός στοιχείου
Α[2] = 21
Ο πίνακας ΑΛΛΑΖΕΙ ΜΕΓΕΘΟΣ σε δύο στοιχεία. Αντιμετωπίζεται ως δυναμική δομή, που πάει κόντρα με τη θεωρία στο βιβλίο.
Εντελώς ασύμβατο δυστυχώς. Σου δίνω χίλια δίκια να αναρωτιέσαι γιατί όχι, αλλά δυστυχώς, μιλάμε για μάθημα Πανελληνίων. Δε μπορούμε να πάμε πέραν όσων λέει το βιβλίο αυτόβουλα.

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

giannakos

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

Επίσης θα συμφωνήσω απόλυτα και με το σχόλιο του George Eco
Παράθεση από: George Eco στις 13 Νοε 2021, 02:38:40 ΜΜ
Α[1] = 10
Ο πίνακας έχει μέγεθος ενός στοιχείου
Α[2] = 21
Ο πίνακας ΑΛΛΑΖΕΙ ΜΕΓΕΘΟΣ σε δύο στοιχεία. Αντιμετωπίζεται ως δυναμική δομή, που πάει κόντρα με τη θεωρία στο βιβλίο.

Και πάλι σας ευχαριστώ.

pgrontas

#10
Ένας λόγος για τον οποίο δεν θα έπρεπε να επιτρέπεται ένας τέτοιος πίνακας στην ενότητα των σταθερών είναι ότι οι σταθερές δεν είναι read-only μεταβλητές, αλλά συμβολικά ονόματα (εξ'ου και το = αντί για το <-)
Δηλαδή κατά την μετάφραση, αυτές αντικαθίστανται με τις τιμές τους χωρίς να καταλαμβάνουν αυτόνομες θέσεις μνήμης.
Δεν βγάζει νόημα κατά συνέπεια να έχεις κάποια ομαδοποίηση σε αυτές χρησιμοποιώντας τον συμβολισμό του πίνακα (ως συντακτική ευκολία, όχι επειδή θες τις θέσεις μνήμης) γιατί έτσι κι αλλιώς θα είναι περιορισμένες σε αριθμό.

Edit:Κανένας μόλις τώρα πρόσεξα ότι είπαμε το ίδιο πράγμα.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Προσωπικά θεωρώ ότι οι σταθερές τύπου πίνακα θα είχαν νόημα, π.χ.

Κώδικας: ΓΛΩΣΣΑ
ΣΤΑΘΕΡΕΣ
  HΜΕΡΕΣ[7] = ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο']  ! (με ή χωρίς το [7])


Έτσι θα οριζόταν και το μέγεθος του πίνακα που προφανώς θα ήταν και στατικός και σταθερός, αφού δεν έχει νόημα να δηλώνεται ένας πίνακας ημερών ως μεταβλητός.
Όσον αφορά την οργάνωση της μνήμης, θα μπορούσε να είναι η ίδια με τις υπόλοιπες σταθερές π.χ. `Π = 3.14` ή `σχολείο <- "1ο Λύκειο"`, όπου το "1ο Λύκειο" είναι αλφαριθμητική σταθερά που ήδη υποστηρίζει η ΓΛΩΣΣΑ και υλοποιείται εσωτερικά ως σταθερός πίνακας χαρακτήρων. Δεν μας ενδιαφέρουν οι λεπτομέρειες, ανάλογα με την αρχιτεκτονική και τον compiler άλλοτε πάνε στο code segment, άλλοτε στο data segment κλπ.

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

George Eco

#12
Παράθεση από: alkisg στις 14 Νοε 2021, 10:32:39 ΠΜ
Προσωπικά θεωρώ ότι οι σταθερές τύπου πίνακα θα είχαν νόημα, π.χ.

Κώδικας: ΓΛΩΣΣΑ
ΣΤΑΘΕΡΕΣ
  HΜΕΡΕΣ[7] = ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο']  ! (με ή χωρίς το [7])



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

Παράθεση από: pgrontas στις 14 Νοε 2021, 10:07:55 ΠΜ
Ένας λόγος για τον οποίο δεν θα έπρεπε να επιτρέπεται ένας τέτοιος πίνακας στην ενότητα των σταθερών είναι ότι οι σταθερές δεν είναι read-only μεταβλητές, αλλά συμβολικά ονόματα.
Δηλαδή κατά την μετάφραση, αυτές αντικαθίστανται με τις τιμές τους χωρίς να καταλαμβάνουν αυτόνομες θέσεις μνήμης.
Δεν βγάζει νόημα κατά συνέπεια να έχεις κάποια ομαδοποίηση σε αυτές χρησιμοποιώντας τον συμβολισμό του πίνακα (ως συντακτική ευκολία, όχι επειδή θες τις θέσεις μνήμης) γιατί έτσι κι αλλιώς θα είναι περιορισμένες σε αριθμό.

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

Κανένας

#13
Σε Pascal:
const
  Alphabet: array [1..26] of char = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z') ;

Σε C, C++:
const char Alphabet[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} ;

Σε Java:
final char Alphabet[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} ;
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

akalest0s

Παράθεση από: alkisg στις 14 Νοε 2021, 10:32:39 ΠΜ
να επιτρέπεται και η δήλωση global σταθερών για να ισχύουν σε όλα τα υποπρογράμματα...
σκέτη γλύκα θα ήταν κάτι τέτοιο!

Παράθεση από: andreas_p στις 13 Νοε 2021, 01:20:47 ΜΜ
Υπομονή ... Έρχεται η Python.

Έχουμε εξελίξεις ή το λες ελπίζοντας;
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK