ψευδογλώσσα και πίνακες

Ξεκίνησε από gthal, 30 Μαΐου 2010, 02:23:04 ΜΜ

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

jkapsi

Παράθεση από: gpapargi στις 02 Ιουν 2010, 10:43:11 ΠΜ
jkapsi το θέμα που συζητάμε είναι το εξής:
Έστω ότι δεχόμαστε σα σωστό το:
Διάβασε Ν
Για ι από 1 μέχρι Ν
  Διάβασε α[ι]
Τέλος_επανάληψης

Η ερώτηση είναι αν είμαστε υποχρεωμένοι ή όχι να θεωρήσουμε σωστό και το:
ι<-0
Διάβασε χ
Όσο χ <>0 επανάλαβε
   ι<-ι+1
   Α[ι]<-χ
   Διάβασε χ
Τέλος_επανάληψης 


Με άλλα λόγια η ορθότητα του πρώτου συνεπάγεται την ορθότητα και του δεύτερου ή μήπως γίνεται να θεωρήσουμε σωστό το πρώτο και λάθος το δεύτερο;
Μιλάμε για ψευδογλώσσα.

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


gpapargi

Για το παρακάτω τι λες;
Διάβασε ν
Για ι από 1 μέχρι ν
   Διάβασε α[ι]
Τέλος_επανάληψης
Διάβασε α[ν+1]

sstergou

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

Έχει πλάκα πάντως γιατί το παράδειγμα που γράφεις με α[ν + 1] το έχω χρησιμοποιήσει για αποδείξω ότι οι πίνακες της ψευδογλώσσας δεν γίνεται να υλοποιηθούν με μη δυναμικό τρόπο! Παρ' όλα αυτά δεν μας ενδιαφέρει η υλοποίηση αλλά η χρησιμοποίηση της αφηρημένης δομής του πίνακα.

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

Στον τελευταίο αλγόριθμό σου, αν εκεί τελειώνει η προσθήκη τιμών στον πίνακα τότε νομίζω ότι ο πίνακας μπορεί να υλοποιηθεί στατικά και έχει μέγεθος ν + 1.

gpapargi

Παράθεση από: sstergou στις 02 Ιουν 2010, 11:17:13 ΠΜ
Γιώργο, νομίζω μπορούμε να κάνουμε αυτόν τον διαχωρισμό.
Στην πρώτη περίπτωση έχουμε πίνακα με μέγεθος Ν, ενώ στην δεύτερη πίνακα αγνώστου πλήθους στοιχείων.

Έχει πλάκα πάντως γιατί το παράδειγμα που γράφεις με α[ν + 1] το έχω χρησιμοποιήσει για αποδείξω ότι οι πίνακες της ψευδογλώσσας δεν γίνεται να υλοποιηθούν με μη δυναμικό τρόπο! Παρ' όλα αυτά δεν μας ενδιαφέρει η υλοποίηση αλλά η χρησιμοποίηση της αφηρημένης δομής του πίνακα.

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

Στον τελευταίο αλγόριθμό σου, αν εκεί τελειώνει η προσθήκη τιμών στον πίνακα τότε νομίζω ότι ο πίνακας μπορεί να υλοποιηθεί στατικά και έχει μέγεθος ν + 1.


Και ποιος μας λέει ότι το Διάβασε ν σημαίνει ότι έχω πίνακα μεγέθους ν;

Μπορεί πχ η εκφώνηση να λέει «Να γραφτεί αλγόριθμος που θα διαβάζει ένα ακέραιο ν ο οποίος θα αντιστοιχεί στο πλήθος των κλασμάτων που θα εισαχθούν και στη συνέχεια θα διαβάζει τους αριθμητές και παρονομαστές τους και θα τους καταχωρεί σε πίνακα μεγέθους 2ν»

Έτσι το Διάβασε ν δεν σημαίνει ότι έχουμε πίνακα μεγέθους ν. Στο συγκεκριμένο παράδειγμα που αναφέρω μπορεί να σημαίνει ότι έχω μέγεθος 2ν. Βασικά αυτό θέλω να πω: ότι το Διάβασε ν δε σημαίνει τίποτα για το μέγεθος του πίνακα. Μόνο μετά το τέλος της εκτέλεσης όλου του αλγορίθμου μπορείς να ξέρεις τι μέγεθος είχε τελικά ο πίνακας. Κανείς δεν με εμποδίζει στην προτελευταία γραμμή να γράψω
Διάβασε μ
και στην τελευταία να γράψω
Διάβασε α[ν+μ]

Αφού λοιπόν μόνο μετά το τέλος του αλγορίθμου μπορώ να ξέρω τι μέγεθος είχε τελικά ο πίνακας τότε γιατί είναι λάθος το παρακάτω παράδειγμα;
ι<-0
Διάβασε χ
Όσο χ <>0 επανάλαβε
   ι<-ι+1
   Α[ι]<-χ
   Διάβασε χ
Τέλος_επανάληψης

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

sstergou

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

Ο μόνος τρόπος να ξέρουμε σίγουρα τις προθέσεις του προγραμματιστή είναι ο πίνακας να έχει δηλωθεί μαζί με το μέγεθός του (εντολή Δεδομένα). Σε όλες τις άλλες περιπτώσεις δεν γίνεται να ξέρουμε χωρίς την εκτέλεση του αλγορίθμου. Τι κάνουμε λοιπόν; Τα παίρνουμε όλα λάθος και αφήνουμε μόνο τα δεδομένα;

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

merlin

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

Η άποψή μου είναι η εξής:
Οι μαθητές του σχολείου δεν θα γίνουν όλοι προγραμματιστές, ούτε όλοι μαθηματικοί, φυσικοί κλπ.
Στην Β' γυμνασίου (αν δεν κάνω λάθος) μαθαίνουν ότι η 2βάθμια εξίσωση με αρνητική διακρίνουσα δεν έχει λύση (τουλάχιστον στο R). Στή Γ λυκείου επεκτείνουν τις γνώσεις τους μαθαίνοντας τους μιγαδικούς. Σε πανεπιστήμιο διαφορικές εξισώσεις και πάει λέγοντας.


Νομίζω ότι πρέπει να "κρύψουμε" κάποια πράγματα από τους μαθητές στην παρούσα φάση. Δεν είναι καλό να τους μιλήσουμε για δυναμικές δομές ή στατικές που ορίζονται κατά την εκτέλεση (που συμβαίνει σε κάποιες γλώσσες όπως η C).

Θα πρέπει να "φράξουμε" τις λύσεις τους σε ένα πιο στενό πλαίσιο (όχι τόσο στενό που να φράζεται και η δημιουργικότητά τους όμως).

Παρασκευάς Πανάγου
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής ΠΕ20

gkipos

Παράθεση από: ntzios kostas στις 02 Ιουν 2010, 01:01:11 ΠΜ


Όταν λέω προεκτάσεις Βαγγέλη δεν εννοώ ότι η άσκηση δεν μπορεί να λυθεί με πίνακες, απλά ότι αλλάζουν κάποια δεδομένα στο μάθημα ως προς την χρήση πινάκων. Του χρόνου να μας απαντήσουν η ΕΠΥ και η ΠΕΚΑΠ τι θα λέμε στους μαθητές μας σε παρόμοιες ασκήσεις, σε ασκήσεις με τιμή φρουρό (γιατί και αυτές λύνονται με πίνακες πλεον ή και αν δεν λύνονται 1 με 2 μόρια θα χαθούν άρα συμφέρει να τις λύσω με πίνακες), αλλά και με τους αρνητικούς δείκτες.
Συγνώμη Κώστα αλλά πιστέυω ότι το μάθημα δεν πρέπει να τυποποιηθεί. Αυτό είναι το καλό στον προγραμματισμό. Μην το κάνουμε Μαθηματικά που είναι τυποποιημένα κατά 90%. 'Εχω αυτό, κάνω αυτό, έχω το άλλο κάνω το άλλο. Αυτό θα ήταν καταστροφή. 'Ισως υπάρχουν χιλιάδες παραδείγματα που δεν είναι σωστή η χρησιμοποίηση πίνακα. Αλλά τώρα μιλάμε για το συγκεκριμένο πρόβλημα. Ξέρω πως δυσκολεύει την διδασκαλία αλλά μιλάμε για αλγοριθμική σκέψη η οποία σαφώς πρέπει να έχει κανόνες αλλά να μην είναι και τυφλοσούρτης.Το να αποκτήσουν τα παιδιά σωστή αλγοριθμική σκέψη κρίνωντας σε πολλές περιπτώσεις αναγκαστικά, με βάση τα δεδομένα του προβλήματος, είναι κάτι δύσκολο αλλά όχι και ακατόρθωτο. Σίγουρα πάντως δεν φτάνουν οι δύο ώρες σε ένα σχολικό έτος.
Το πράγμα θέλει συζήτηση.

sstergou

Παράθεση από: merlin στις 02 Ιουν 2010, 11:49:57 ΠΜ

Νομίζω ότι πρέπει να "κρύψουμε" κάποια πράγματα από τους μαθητές στην παρούσα φάση. Δεν είναι καλό να τους μιλήσουμε για δυναμικές δομές ή στατικές που ορίζονται κατά την εκτέλεση (που συμβαίνει σε κάποιες γλώσσες όπως η C).
Θα πρέπει να "φράξουμε" τις λύσεις τους σε ένα πιο στενό πλαίσιο (όχι τόσο στενό που να φράζεται και η δημιουργικότητά τους όμως).

Δεν με βρίσκει αντίθετο αυτή η λογική. Ίσως τελικά να πρέπει να ορίσουμε τον πίνακα σαν αφηρημένη δομή και να την χρησιμοποιούμε έτσι.  Η πληροφορική όμως έχει να κάνει και με περιορισμούς, θα πρέπει να βρούμε έναν τρόπο να η ελευθερία αυτή να μην γίνει μπούμερανγκ και στο τέλος κάποιοι χρησιμοποιούν άπειρους πίνακες κτλ. Είμαι σίγουρος όμως ότι η στατικότητα δεν είναι ούτε ο λόγος ούτε ο τρόπος να το πετύχουμε αυτό. Κάτι άλλο πρέπει να βρούμε!


Γιάννης Αναγνωστάκης

Παράθεση από: gpapargi στις 02 Ιουν 2010, 11:32:06 ΠΜ
Και ποιος μας λέει ότι το Διάβασε ν σημαίνει ότι έχω πίνακα μεγέθους ν;

Μπορεί πχ η εκφώνηση να λέει «Να γραφτεί αλγόριθμος που θα διαβάζει ένα ακέραιο ν ο οποίος θα αντιστοιχεί στο πλήθος των κλασμάτων που θα εισαχθούν και στη συνέχεια θα διαβάζει τους αριθμητές και παρονομαστές τους και θα τους καταχωρεί σε πίνακα μεγέθους 2ν»

Έτσι το Διάβασε ν δεν σημαίνει ότι έχουμε πίνακα μεγέθους ν. Στο συγκεκριμένο παράδειγμα που αναφέρω μπορεί να σημαίνει ότι έχω μέγεθος 2ν. Βασικά αυτό θέλω να πω: ότι το Διάβασε ν δε σημαίνει τίποτα για το μέγεθος του πίνακα. Μόνο μετά το τέλος της εκτέλεσης όλου του αλγορίθμου μπορείς να ξέρεις τι μέγεθος είχε τελικά ο πίνακας. Κανείς δεν με εμποδίζει στην προτελευταία γραμμή να γράψω
Διάβασε μ
και στην τελευταία να γράψω
Διάβασε α[ν+μ]

Αφού λοιπόν μόνο μετά το τέλος του αλγορίθμου μπορώ να ξέρω τι μέγεθος είχε τελικά ο πίνακας τότε γιατί είναι λάθος το παρακάτω παράδειγμα;
ι<-0
Διάβασε χ
Όσο χ <>0 επανάλαβε
   ι<-ι+1
   Α[ι]<-χ
   Διάβασε χ
Τέλος_επανάληψης

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


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



ntzios kostas

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

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


Απάντηση 1 :

για χωρ από 1 μέχρι 20
....διάβασε πληθ
....διάβασε ύψος
....μαχ <-ύψος
....για κατ από 2 μέχρι πλήθ
........διάβασε ύψος
........αν ύψος > μαχ τότε
...........μαχ <-ύψος
........τέλος_αν
.....τέλος_επανάληψης
.....γράψε μαχ
τέλος_επανάληψης

Απάντηση 2:

για χωρ από 1 μέχρι 20
....διάβασε πληθ
....διάβασε ύψος[1]
....μαχ <-ύψος[1]
....για κατ από 2 μέχρι πλήθ
........διάβασε ύψος[κατ]
........αν ύψος[κατ] > μαχ τότε
...........μαχ <-ύψος[κατ]
........τέλος_αν
.....τέλος_επανάληψης
.....γράψε μαχ
τέλος_επανάληψης


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

novulus

Απόλυτα. Παραβιάζει κάποιο αλγοριθμικό κριτήριο;
Thus spake the master programmer:
"When you have learned to snatch the error code from the trap frame, it will be time for you to leave."

sstergou

Μιλώντας για την υπάρχουσα ψευδογλώσσα και το υπάρχον βιβλίο πάντα :

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

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

Ξαναλέω ότι το πακέτο αυτό αφήνει να εννοηθεί με τα παραδείγματά του.

gpapargi

Παράθεση από: sstergou στις 02 Ιουν 2010, 11:44:03 ΠΜ
Κοίτα Γιώργο, αν θες να το δούμε τυπικά το θέμα, όσον αφορά το ερώτημα για το "αν κάποιος μπορεί να καταλάβει σε κάθε περίπτωση το μέγεθος του πίνακα χωρίς να εκτελέσει τον αλγόριθμο" τότε η απάντηση είναι όχι. Αλλά αυτό συμβαίνει σε όλες τις περιπτώσεις, ακόμη και αυτές για τις οποίες έχουμε καταλήξει ότι δεν υπάρχει κανένα λάθος.

Ο μόνος τρόπος να ξέρουμε σίγουρα τις προθέσεις του προγραμματιστή είναι ο πίνακας να έχει δηλωθεί μαζί με το μέγεθός του (εντολή Δεδομένα). Σε όλες τις άλλες περιπτώσεις δεν γίνεται να ξέρουμε χωρίς την εκτέλεση του αλγορίθμου. Τι κάνουμε λοιπόν; Τα παίρνουμε όλα λάθος και αφήνουμε μόνο τα δεδομένα;

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


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

Για το θέμα των δεδομένων, όπως είπα και πιο πριν... σημαίνει ότι είναι γνωστοί αριθμοί και τους ξέρουμε πριν ξεκινήσει η πρώτη γραμμή κώδικα. Δε μας νοιάζει πως, απλά τους ξέρουμε. Τα γράφω αναλυτικά στις 2 τελευταίες παραγράφους στο παρακάτω μήνυμα.
https://alkisg.mysch.gr/steki/index.php?topic=2937.msg29195#msg29195

Δε θα δει κανείς ποτέ Δεδομένα //χ// στο μέσον του αλγορίθμου. Μόνο στην αρχή. Ο αλγόριθμος συγχώνευσης που έχει το βιβλίο είναι σε ΓΛΩΣΣΑ και έχει δηλωμένα τα μεγέθη. Αν τα δηλώναμε σε ψευδογλώσσα με Δεδομένα //μ,ν// θα ήταν επίσης αποδεκτό.

ntzios kostas

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

sstergou

Γιώργο, διαφωνώ με την προσέγγιση που έχεις στα δεδομένα, πιστεύω είναι μια σαφής αναφορά στον τμηματικό προγραμματισμό. Οι μεταβλητές που περικλείονται μέσα σε αυτή την εντολή γίνονται γνωστές στον αλγόριθμο κατά την εκτέλεσή του. Δεν πιστεύω ότι είναι συντομογραφίες σταθερών τιμών. Τα παραδείγματα στο κεφ.3 και 4 στηρίζουν 100% αυτό που λέω.

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

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

Δεν θα είχα πρόβλημα επίσης να δεχτώ ότι στην ψευδογλώσσα, αυτού του βιβλίου, το μέγεθος πρέπει να είναι γνωστό πριν την εκτέλεση. Αυτό όμως δεν συμβαδίζει με τα παραδείγματα του πακέτου. Σε αυτό δεν φταίμε εμείς!

Δεν ξέρω αν ανοίγουμε τον ασκό του αιόλου αλλά αν έτσι είναι τα πράγματα τότε σίγουρα δεν είμαστε εμείς η αιτία. Ίσως ο ασκός να ήταν τόσο καιρό ανοιχτός και εμείς να το καταλάβαμε τώρα. Θεωρώ όμως λάθος την τακτική να προσπαθήσουμε να κρύψουμε το θέμα (αν όντως υπάρχει). Αν υπάρχει θα πρέπει να το αναδείξουμε και να το λύσουμε με κάποιο τρόπο είτε εμείς αυτοί που θα αναλάβουν την αναμόρφωση/επανασυγγραφή του βιβλίου.