Δήλωση πίνακα Ν στοιχείων

Ξεκίνησε από Akis73, 23 Οκτ 2021, 03:32:05 ΜΜ

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

Akis73

Καλησπέρα σε όλους,

Όπως το λέει ήδη και ο τίτλος ::) πως γίνεται ακριβώς η δήλωση ενός πίνακα Ν στοιχείων στο τμήμα δηλώσεων ενός προγράμματος;
Στον διερμηνευτή μου εμφανίζει το παρακάτω μήνυμα όταν προσπαθώ να τον δηλώσω ως Π[Ν]

"Δεν επιτρέπονται μεταβλητές ή μη ενσωματωμένες συναρτήσεις στη δήλωση των ορίων του πίνακα"

Laertis

#1
Παράθεση από: Akis73 στις 23 Οκτ 2021, 03:32:05 ΜΜ
Καλησπέρα σε όλους,

Όπως το λέει ήδη και ο τίτλος ::) πως γίνεται ακριβώς η δήλωση ενός πίνακα Ν στοιχείων στο τμήμα δηλώσεων ενός προγράμματος;
Στον διερμηνευτή μου εμφανίζει το παρακάτω μήνυμα όταν προσπαθώ να τον δηλώσω ως Π[Ν]

"Δεν επιτρέπονται μεταβλητές ή μη ενσωματωμένες συναρτήσεις στη δήλωση των ορίων του πίνακα"
Αν στείλω ένα παιδί στο περίπτερο να μου πάρει Ν τσίχλες, πόσες εννοώ, πόσες θα ζητήσει, και πόσες θα του δώσει ο περιπτεράς;  :laugh:
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

alkisg

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

Κώδικας: ΓΛΩΣΣΑ
ΔΙΑΔΙΚΑΣΙΑ Ταξινόμηση(Α, Ν)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν, Α[Ν]


Έτσι όπως είναι τώρα, θέλουμε άλλη διαδικασία Ταξινόμηση για έναν πίνακα 20 καθηγητών, και άλλη για έναν πίνακα 100 μαθητών...

Akis73

Στους αλγόριθμους επιτρέπεται να γράψουμε το παρακάτω:

Δεδομένα // Ν,Π //

Στα προγράμματα δεν υπάρχει κάποιος τρόπος δηλαδή; Τι κάνουμε στις ασκήσεις που ζητάνε να διαβαστούν πίνακες Ν στοιχείων;

alkisg

Δηλώνεις όλους τους πίνακες π.χ. με 1000 στοιχεία, και θέτεις περιορισμό το Ν να είναι <= 1000...

pvs

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

ΣΤΑΘΕΡΕΣ
Ν=1000
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:Α[Ν]

George Eco

#6
Παράθεση από: alkisg στις 23 Οκτ 2021, 08:38:14 ΜΜ
Δηλώνεις όλους τους πίνακες π.χ. με 1000 στοιχεία, και θέτεις περιορισμό το Ν να είναι <= 1000...

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

Akis73 ας πούμε πως υποθέτεις πως το Ν είναι προκαθορισμένη σταθερά, μπας και τα καταφέρουμε...

Δυστυχώς η  εντολή σε ψευδογλώσσα

ΔΕΔΟΜΕΝΑ // //

όπως ορίζεται στα πλαίσια του μαθήματος υπονοεί
ΔΙΑΒΑΣΕ Ν
ή
Σταθερά Ν με συγκεκριμένη τιμή στη καλύτερη, που πρέπει όμως να δοθεί σε ΓΛΩΣΣΑ ρητά πριν την ΑΡΧΗ,
οπότε έρχεται κι η ρήξη με τη ΓΛΩΣΣΑ.


Η ΓΛΩΣΣΑ είναι ασύμβατη με τη ψευδογλώσσα.

Pvs δεν είχα δει την απάντησή σου κι έδωσα διπλότυπο κατεβατό. Σωστός, πολύ σωστός.

pgrontas

#7
Παράθεση από: George Eco στις 23 Οκτ 2021, 10:24:08 ΜΜ
Οι αλγόριθμοι σε ψευδογλώσσα που έχει, αντιμετωπίζουν τους πίνακες ως δυναμικές δομές, μετά η ΓΛΩΣΣΑ απαιτεί ως στατική δομή τους πίνακες και τη συνέχεια σε αλγορίθμους πάνω σε πίνακες που πρέπει να μάθουν τα παιδιά για αναζήτηση και ταξινόμηση έρχεται η ρήξη.

Akis73 ας πούμε πως υποθέτεις πως το Ν είναι προκαθορισμένη σταθερά, μπας και τα καταφέρουμε...

Δυστυχώς η  εντολή σε ψευδογλώσσα

ΔΕΔΟΜΕΝΑ // //

όπως ορίζεται στα πλαίσια του μαθήματος υπονοεί
ΔΙΑΒΑΣΕ Ν
ή
Σταθερά Ν με συγκεκριμένη τιμή στη καλύτερη, που πρέπει όμως να δοθεί σε ΓΛΩΣΣΑ ρητά πριν την ΑΡΧΗ,
οπότε έρχεται κι η ρήξη με τη ΓΛΩΣΣΑ.


Η ΓΛΩΣΣΑ είναι ασύμβατη με τη ψευδογλώσσα.

Pvs δεν είχα δει την απάντησή σου κι έδωσα διπλότυπο κατεβατό. Σωστός, πολύ σωστός.

Η εντολή δεδομένα ΔΕΝ είναι ισοδύναμη με το τμήμα δηλώσεων.
Δείχνει κάποιες τιμές τις οποίες 'γνωρίζει' ο αλγόριθμος πριν ξεκινήσει την εκτέλεση. Δεν μας ενδιαφέρει το πώς τα γνωρίζει καθώς έχει στόχο ακριβώς να απαλλάξει τον αλγόριθμο από τέτοιες λεπτομέρειες.
Κατά συνέπεια όταν σε κάποιον αλγόριθμο εμφανίζεται ΔΕΔΟΜΕΝΑ //Π,Ν// όπου Π πίνακας, εννοείται ότι το Ν είναι γνωστό  ΠΡΙΝ την εκτέλεση και ΔΕΝ χρειάζεται να ξαναδιαβαστεί από τον αλγόριθμο και ότι ο πίνακας έχει Ν στοιχεία προσυμπληρωμένα και ούτε αυτά χρειάζεται να ξαναδιαβαστούν.
Άρα η εντολή δεδομένα δεν αναιρεί την στατικότητα της δομής.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

George Eco

#8
Παράθεση από: pgrontas στις 24 Οκτ 2021, 10:47:52 ΠΜ
Η εντολή δεδομένα ΔΕΝ είναι ισοδύναμη με το τμήμα δηλώσεων.
Προφανώς, δεν είπε ποτέ κανείς κάτι τέτοιο.

Παράθεση από: pgrontas στις 24 Οκτ 2021, 10:47:52 ΠΜ
Κατά συνέπεια όταν σε κάποιον αλγόριθμο εμφανίζεται ΔΕΔΟΜΕΝΑ //Π,Ν// όπου Π πίνακας, εννοείται ότι το Ν είναι γνωστό  ΠΡΙΝ την εκτέλεση και ΔΕΝ χρειάζεται να ξαναδιαβαστεί από τον αλγόριθμο και ότι ο πίνακας έχει Ν στοιχεία προσυμπληρωμένα και ούτε αυτά χρειάζεται να ξαναδιαβαστούν.
Κι αφού αυτό είναι ΑΔΥΝΑΤΟ με ΓΛΩΣΣΑ έρχεται σε ρήξη.
Η εντολή ΔΕΔΟΜΕΝΑ είναι ασύμβατη με τη ΓΛΩΣΣΑ εδώ. Δε γίνεται να γεμίσεις πίνακα στο τμήμα δηλώσεων συνάδελφε. Κι ούτε να δώσεις τη διάστασή του μετά την ΑΡΧΗ, λόγω στατικότητας στα πλαίσια του μαθήματος. Αυτό λέω. Ακόμα κι αν προσπαθήσουμε να συνηγορήσουμε με Ν = σταθερά κι ορισμένη στο τμήμα δηλώσεων, ε δε γίνεται να πάρει τιμή από το χρήστη.

Πώς λοιπόν επέρχεται το συμπέρασμα πως η εντολή ΔΕΔΟΜΕΝΑ δεν αναιρεί την στατικότητα της δομής κατά την υλοποίηση σε ΓΛΩΣΣΑ; Μια χαρά την αναιρεί, δυστυχώς, όταν κληθούμε να κάνουμε υλοποίηση στη ΓΛΩΣΣΑ.

Αν το Ν είναι γνωστή τιμή τότε θα έπρεπε εξ αρχής να ξεκαθαρίζεται στο μαθητή.
Για παράδειγμα θα μπορούσαν να πουν:
"Ο παρακάτω αλγόριθμος κάνει αναζήτηση σε ένα πίνακα εκατό στοιχείων."
Γιατί να μπουρδουκλώνουν τα πράγματα με ένα ΓΕΝΙΚΟ αλγόριθμο που δεν υλοποιείται γενικά σε ΓΛΩΣΣΑ;

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

pgrontas θα συμφωνήσω όμως μαζί σου. Η ΔΕΔΟΜΕΝΑ δε δημιουργεί πρόβλημα στη στατικότητα, αν μελετήσουμε τη ψευδογλώσσα μόνη της. Πολύ καλά το λες. Το πρόβλημα είναι στη ΓΛΩΣΣΑ και στον ορισμό της στο βιβλίο. Τι να κάνουμε; Άσε που όποιο παιδί ξέρει τη REDIM της Visual Basic έχει άμεσα απορίες που απαντώνται στο κλίμα, "Ε, τι να κάνουμε, η ΓΛΩΣΣΑ ως εργαλείο, όπως την όρισαν, αντιμετωπίζει τον πίνακα ως στατική δομή". Κι όταν τα παιδιά ρωτάνε γιατί δε κάνουμε Python όπως στα ΕΠΑΛ, ή Java (υπάρχουν παιδιά που ρωτούν τέτοια), τότε δε ξέρω τι να απαντήσω...


pgrontas

Παράθεση από: George Eco στις 24 Οκτ 2021, 12:32:19 ΜΜ
Προφανώς, δεν είπε ποτέ κανείς κάτι τέτοιο.
Μπορεί να μην γράφτηκε ρητά αλλά πλανάται στην συζήτηση, οπότε θεωρησα καλό να ξεκαθαριστεί. Έπρεπε να το βάλω πάνω από το quote για να γίνει πιο σαφές.

Παράθεση από: George Eco στις 24 Οκτ 2021, 12:32:19 ΜΜ
Η εντολή ΔΕΔΟΜΕΝΑ είναι ασύμβατη με τη ΓΛΩΣΣΑ εδώ. Δε γίνεται να γεμίσεις πίνακα στο τμήμα δηλώσεων συνάδελφε. Κι ούτε να δώσεις τη διάστασή του μετά την ΑΡΧΗ, λόγω στατικότητας στα πλαίσια του μαθήματος. Αυτό λέω. Ακόμα κι αν προσπαθήσουμε να συνηγορήσουμε με Ν = σταθερά κι ορισμένη στο τμήμα δηλώσεων, ε δε γίνεται να πάρει τιμή από το χρήστη.

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

Στον αλγόριθμο ενδιαφερόμαστε για την περιγραφή της λύσης, στο πρόγραμμα ενδιαφερόμαστε για την εκτέλεση της λύσης.
Κατά συνέπεια στον πρώτο μπορούμε να κρύψουμε κάποιες λεπτομέρειες, όπως πχ. πως αποκτούμε κάποια δεδομένα. Στο πρόγραμμα θα πρέπει να τις προσδιορίσουμε.
Η στατικότητα δεν πρέπει καν να μας απασχολεί στον αλγόριθμο. Είναι μια λεπτομέρεια υλοποίησης που θα την κρίνει η τελική γλώσσα προγραμματισμού. Δηλαδή ένας αλγόριθμος με ΔΕΔΟΜΕΝΑ //Π,Ν// μπορεί να υλοποιηθεί κάλλιστα τόσο με στατική (όπως προτάθηκε) όσο και με δυναμική δομή.

Παράθεση από: George Eco στις 24 Οκτ 2021, 12:32:19 ΜΜ
Αν το Ν είναι γνωστή τιμή τότε θα έπρεπε εξ αρχής να ξεκαθαρίζεται στο μαθητή.
Για παράδειγμα θα μπορούσαν να πουν:
"Ο παρακάτω αλγόριθμος κάνει αναζήτηση σε ένα πίνακα εκατό στοιχείων."
Είναι νομίζω προφανές πως αν έλεγαν ότι ο αλγόριθμος αφορά πίνακα 100 στοιχείων, τότε εύλογα προκύπτει η ερώτηση: "Με 101 στοιχεία δεν ισχύει ο αλγόριθμος?". 
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Να γραφεί ένα <Χ> που να ταξινομεί έναν πίνακα Ν στοιχείων.
Όπου το <Χ> είναι αλγόριθμος σε Ψευδογλώσσα, διαδικασία, ή πρόγραμμα σε ΓΛΩΣΣΑ.

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

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

Εάν μπορούσαμε να προτείνουμε αλλαγές στο βιβλίο, θα έπρεπε να ζητήσουμε και στις δύο περιπτώσεις να επιτρέπεται δήλωση πίνακα Α[Ν]. Αυτό δεν σημαίνει δυναμικότητα πινάκων, είναι ακόμα στατική δομή αφού το Ν είναι γνωστό πριν την εκτέλεση του σχετικού (υπο)προγράμματος. Τώρα στην Ψευδογλώσσα δεν καταλαβαίνουμε καν ότι το Α είναι πίνακας έτσι που το δηλώνουμε.

Αλλά και το να ορίζουμε ένα μέγιστο 1000 και να χρησιμοποιούμε τελικά τα Ν πρώτα, δεν μειώνει ιδιαίτερα την ποιότητα της λύσης μας... και στην Pascal 30 χρόνια πριν, έτσι κάναμε...

George Eco

Καλά το είπες Άλκη. Πριν 30 χρόνια.  Πάντα το λέω, το μάθημα πρέπει να προχωρήσει. Πρέπει να αναβαθμιστεί.
Φυσικά καταλαβαίνω πως δεν είναι και τόσο απλό. Το κατανοώ. Αλλά έχω μια ελπίδα για το καλύτερο.

dpa2006

Πρέπει να πάμε μπροστά
Δεν είναι εύκολες οι μεταβατικές περίοδοι αλλά πρέπει να δρομολογηθεί η μετάβαση...
Μια ιδέα...
https://plirom.schools.ac.cy/index.php/el/yliko/didaktiko-yliko
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

George Eco

#13
Παράθεση από: dpa2006 στις 30 Οκτ 2021, 10:26:58 ΜΜ
Πρέπει να πάμε μπροστά
Δεν είναι εύκολες οι μεταβατικές περίοδοι αλλά πρέπει να δρομολογηθεί η μετάβαση...
Μια ιδέα...
https://plirom.schools.ac.cy/index.php/el/yliko/didaktiko-yliko
Συνάδελφε αυτά είναι της Κύπρου έτσι;
Προσωπικά θέλω εδώ να τοποθετηθώ. Δεν έχω κοιτάξει τα βιβλία εις βάθος, αλλά σε γενικές γραμμές, βλέπω πως έχει πολλή ύλη. Δε ξέρω κατά πόσο θα είχαν όφελος όλα αυτά και σε τι βαθμό, στα παιδιά στη Γ Λυκείου. Δε ξέρω το Πρόγραμμα Σπουδών της Κύπρου και ποιος δίνει αυτό το μάθημα και για ποιες Σχολές, αλλά νομίζω πως σε αυτό το σημείο το μάθημα πραγματεύεται ύλη που θα ήταν καλό να μελετηθεί σε Τριτοβάθμιο ίδρυμα στο πρώτο του έτος.  Από τη μία μου αρέσει περισσότερο από το βιβλίο που έχουμε σε ΓΛΩΣΣΑ, προφανώς, αλλά από την άλλη, Β Έκδοση 2018 κι επιλέξαν μια κλασική γλώσσα προγραμματισμού, αντί μιας μοντέρνας. Δε διαφέρει και πολύ από το να πάμε σε pascal.

Νομίζω πως χάνεται εδώ το βασικό νόημα του εκμοντερνισμού του μαθήματος. Θα μου άρεσε Java αλλά είναι σκληρή γλώσσα για παιδιά Γ Λυκείου, έτσι νομίζω. Κι αυτή για πρωτοετείς θα την έβαζα, σε κάποια Σχολή, αν κι αγαπημένη μου. Εξού κι είχα προτείνει στο άλλο thread που το συζητούσαμε τη Python3. Αντί να εστιάζουμε τόσο πολύ σε δομές δεδομένων, θα μπορούσαμε να βλέπαμε το μάθημα σε στυλ δομημένος διαδικαστικός προγραμματισμός στην αρχή κι αντικειμενοστραφής προγραμματισμός στη συνέχεια. Έχοντας πλούτο υλικού, για μια εύχρηστη, ζωντανή γλώσσα, δοκιμασμένη επιτυχώς σε παιδιά στο ΕΠΑΛ, νομίζω είναι η βέλτιστη επιλογή.
Επίσης η μετάβαση από ΓΛΩΣΣΑ σε Python3 μπορεί να γίνει σχετικά εύκολα.

Βέβαια, όπως είπα, C++ καλύτερα από ΓΛΩΣΣΑ, αλλά ο εχθρός του καλύτερου είναι το ακόμα πιο καλό. Αλλά το τι είναι καλό, τι καλύτερο και τι κακό, είναι υποκειμενικά.

Νομίζω πως πρέπει να αναβαθμιστεί ΟΛΟ το Πρόγραμμα Σπουδών.

akalest0s

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

Παράθεση από: George Eco στις 24 Οκτ 2021, 12:32:19 ΜΜ
Αν το Ν είναι γνωστή τιμή τότε θα έπρεπε εξ αρχής να ξεκαθαρίζεται στο μαθητή.
Για παράδειγμα θα μπορούσαν να πουν:
"Ο παρακάτω αλγόριθμος κάνει αναζήτηση σε ένα πίνακα εκατό στοιχείων."
Γιατί να μπουρδουκλώνουν τα πράγματα με ένα ΓΕΝΙΚΟ αλγόριθμο που δεν υλοποιείται γενικά σε ΓΛΩΣΣΑ;
Που είναι το μπουρδούκλωμα; Ξαναλέω, προσωπικά θα προτιμούσα να μην έχουμε και τα δύο, στα πλαίσια του ΑΕΠΠ, αλλά από την άλλη δεν είναι και τόσο μεγάλο θέμα. Δεν υπάρχει λόγος να μεταφέρεις λέξη προς λέξη, μια άσκηση Γλώσσας σε ψευδογλώσσα, ή αντίστροφα. Τα παιδιά, αν τους εξηγήσεις, ξέρουν τι θα πει γενίκευση και εφαρμογή. Καταλαβαίνουν τι θα πει επίσης, να μιλάς άνθρωπος με άνθρωπο ή άνθρωπος με μηχανή. Οι κατάλληλες μετατροπές προκύπτουν αβίαστα.

πχ. Αν ο ψευδοκώδικας μιλάει για πίνακα μεγέθους Ν, στην Γλώσσα θα χρησιμοποιήσεις όποιο μέγεθος θες, ίδιο σύνολο με το Ν, ώστε να εφαρμόσεις κατάλληλα.
"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