εισαγωγη της λογικης των κλειδιων σε ασκησεις

Ξεκίνησε από nekis, 05 Απρ 2006, 09:01:41 ΠΜ

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

nekis

Καλημέρα
Θέλω να προτείνω και να ρωτήσω συνάμα την παρέα πως βλέπει την εισαγωγή της λογικής των κλειδιών των βάσεων στο μάθημα, ως εξής:

Ας υποθέσουμε ότι έχουμε έναν μονοδιάστατο πίνακα ονομάτων, έναν δισδιάστατο πίνακα τιμών και έναν ακόμα μονοδιάστατο πίνακα στον οποίο υπολογίζουμε πχ τους μέσους όρους. Έστω ότι θέλουμε να ταξινομήσουμε αυτόν τον πίνακα των ΜΟ και θέλουμε πχ να εμφανίσουμε πληροφορία του τύπου:
Το όνομα Ο[ι] είχε τις τιμές Α[ι,1] ,… Α[ι,κ] και μέσο όρο ΜΟ[ι] κατά αύξουσα ή φθίνουσα σειρά.
Έχουμε πάντα την επιλογή να ταξινομήσουμε ολόκληρη τη δομή, αλλά θα μπορούσαμε επίσης  να δημιουργήσουμε αντί για πίνακα μιας στήλης ΜΟ, εναν πχ ΜΟ[100,2] όπου η δεύτερη στήλη να περιέχει τους αριθμούς των γραμμών ώστε να αναφέρομαι, όπως και με τα κλειδία των βάσεων δεδομένων στους κόμβους της δομής χωρίς συνολική ταξινόμηση πχ
Το όνομα Ο[J] είχε τις τιμές Α[J,1] ,… Α[J,κ] και μέσο όρο ΜΟ[1,J] κλπ
Παρακαλώ για τις ιδέες σας
ΝΚυριακου

nekis

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

gpapargi

Ουσιαστικά είναι σαν να προσπαθείς να λύσεις την παρακάτω άσκηση:

Δίνεται πίνακας μονοδιάστατος. Να φτιάξεις ένα άλλο πίνακα (πχ με όνομα «σειρά») ίδιου μεγέθους που σε κάθε θέση του να έχει τη σειρά του αντίστοιχου στοιχείου του αρχικού πίνακα, (όπως θα προέκυπτε μετά από ταξινόμηση).

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

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

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

Μετά από αυτό θα πρέπει να ενσωματωθεί αυτή η τεχνική στους πίνακες 2 διαστάσεων. Γίνεται αλλά δεν ξέρω αν είναι για το επίπεδο του μαθήματος. Θα το σκεφτώ. Στο μεταξύ ας τοποθετηθούν και οι άλλοι.

Επίσης να θέσω ένα ακόμα ερώτημα σε αυτή την κατεύθυνση.

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

Δεν το έχω σκεφτεί ακόμα. Τι λέτε και οι υπόλοιποι;
 

alkisg

Η άσκηση που αναφέρει ο Νεκτάριος νομίζω ότι γενικεύεται στην εξής:
Χρησιμοποιείστε έναν πίνακα σαν δείκτη σε άλλο πίνακα
Δηλαδή σαν λύση χρειάζεται κάτι της μορφής A[key[ι]] για τους μονοδιάστατους και Α[key1[ι, κ], key2[ι, κ]] για τους δισδιάστατους.

Δεν ξέρω αν είναι του επιπέδου του μαθήματος, ίσως είναι λίγο πιο προχωρημένο.

Έστω ότι προσπαθούμε να λύσουμε την άσκηση που είπε ο Γιώργος (που είναι πιο απλή):
ΠαράθεσηΔίνεται πίνακας μονοδιάστατος. Να φτιάξεις ένα άλλο πίνακα (πχ με όνομα «σειρά») ίδιου μεγέθους που σε κάθε θέση του να έχει τη σειρά του αντίστοιχου στοιχείου του αρχικού πίνακα, (όπως θα προέκυπτε μετά από ταξινόμηση).

1) Δηλώνουμε έναν πίνακα ακεραίων key[N] και τον αρχικοποιούμε ώστε να περιέχει τις τιμές 1, 2, ..., Ν.
2) Κάνουμε κανονικά την ταξινόμηση, με τις παρακάτω δύο διαφορές:
2α) Σε κάθε προσπέλαση του πίνακα Α, αντί για Α[ι] βάζουμε A[key[ι]]
2β) Σε κάθε αντιμετάθεση της ταξινόμησης, αντί να αντιμεταθέτουμε το A[ι] με το Α[ι-1], αντιμεταθέτουμε το key[ι] με το key[ι-1].

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

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

gpapargi

Για τα strings, είχα στο νου μου  την αποθήκευση κάθε χαρακτήρα σε ξεχωριστή θέση. Δεν το σκέφτηκα πάρα πολύ αλλά νομίζω ότι με αυτό το τρόπο μπορούμε να κάνουμε σχεδόν τα πάντα. Βασικά νομίζω ότι δεν μπορούμε να εκτυπώσουμε οριζόντια τη φράση. Θα μπορούσαμε αν είχαμε μια «Γράψε» που να μη βάζει χαρακτήρα τέλους γραμμής ή τελεστή συνένωσης των αλφαριθμητικών. Τα άλλα νομίζω πως μπορούμε να τα παρακάμψουμε, εύκολα ή δύσκολα.

nekis

Γιώργο με αυτόν τον τρόπο κάνω αρκετές ασκήσεις όπως συχνότητα εμφάνισης γραμματων σε μια πρόταση η αν μια πρόταση είναι καρκινική-συμμετρική. Συμφωνώ ότι δεν μπορώ να τυπώσω σε μια γραμμή.Αντιστοιχο πρόβλημα είναι το παράδειγμα του ΟΤΕ στο 3 Κεφ (κάτω από το wirth) που αφήνεται η λύση στον αναγνώστη. Εκεί χρειάζεται ο χρήστης να δίνει την είσοδο του πρωτου γράμματος του ονόμτος που ψαχνει 2 φορές μια ξεχωριστά ώστε να γίνεται η αναζήτηση στον πίνακα των θέσεων και μια για την αναζήτηση από τον πίνακα των ονομάτων. Δεν έχω σκεφτεί καποια καλύτερη λύση. Αν έχετα σας παρακαλώ νατην αναφέρετε.
ΝΚυριακου

Επισκέπτης


gpapargi

Στο παράδειγμα του ΟΤΕ μπορείς να χρησιμοποιήσεις το ότι πχ 'Κ' < 'ΚΥΡΙΑΚΟΥ' < 'Λ'.

Παιχνίδια πολλά με την ταχύτητα δεν μπορείς να κάνεις στα πλαίσια της σχολικής ύλης γιατί είναι έξω η δυαδική αναζήτηση. Αν ήταν μέσα υπάρχουν κόλπα. Βέβαια από κάποιο σημείο και μετά αρχίζουν να μετράνε και τι άλλα κάνεις εκτός από αναζήτηση. Αν κάνεις εισαγωγές/ διαγραφές το πράγμα αλλάζει. Όλα αυτά είναι στο αντικείμενο του μαθήματος "Οργάνωση αρχείων και εισαγωγή στις βάσεις δεδομένων". Έχει πολύ ψωμί η ιστορία, αλλά αυτα όλα δεν έχουν σχέση με το μάθημα. 

nekis

Ναι αυτό εννοώ με έναν πίνακα ΓΡΑΜΜΑΤΑ[24,2] στον οποίο υπάρχουν στην πρώτη στήλη τα γράμματα και στην δευτερη οι θέσεις του πίνακα ΟΝΟΜΑΤΑ που αρχίζει το κάθε αρχικό γράμμα των ονομάτων χρησιμοποιώντας βέβαια την διάταξη που ανέφερες.
Ευχαριστώ