Αποστολέας Θέμα: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο  (Αναγνώστηκε 8745 φορές)

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2812
  • Πύργος Ηλείας
Δίνεται δισδιάστατος πίνακας Α με μ γραμμές και ν στήλες. Να αντιγραφούν τα στοιχεία του γραμμή προς γραμμή σε έναν μονοδιάστατο πίνακα Β (εννοείται μ*ν στοιχείων!).

1) Με λίγους δείκτες και αριθμητικές εκφράσεις:

α) Με εμφωλευμένες Για (με 2 δείκτες για τον δισδιάστατο πίνακα):

Για i από 1 μέχρι μ
   Για j από 1 μέχρι ν
      Β[(i-1)*ν+j] <- A[i, j]
   Τέλος_επανάληψης
Τέλος_επανάληψης

β) Με μία Για (με 1 δείκτη για τον μονοδιάστατο πίνακα):

Για i από 1 μέχρι μ*ν
   B[ i ] <- Α[(i-1) div ν+1, (i-1) mod ν+1]
Τέλος_επανάληψης

2) Με ξεχωριστούς δείκτες:

α) Με εμφωλευμένες Για:

κ <- 1
Για i από 1 μέχρι μ
   Για j από 1 μέχρι ν
      Β[κ] <- A[i, j]
      κ <- κ+1
   Τέλος_επανάληψης
Τέλος_επανάληψης

β) Με μία Για:

γρ <- 1
στ <- 1
Για i από 1 μέχρι μ*ν
   B[ i ] <- Α[γρ, στ]
   στ <- στ+1
   Αν στ>ν τότε
      στ <- 1
      γρ <- γρ+1
   Τέλος_αν
Τέλος_επανάληψης

Παρατηρήσεις:
1. Οι παραπάνω λύσεις μπορούν να χρησιμοποιηθούν και για την αντίστροφη αντιγραφή στοιχείων (από τον μονοδιάστατο στον δισδιάστατο) με απλή αντιστροφή των εντολών εκχώρησης.
2. Θεωρώ πως φαίνεται αναλυτικά αυτό που λέει ο Σέργιος στο:
Η πρώτη λύση, είναι σχετικά πιό σύντομη στην υλοποίηση αλλά πιό μαθηματική
Η δεύτερη, είναι πάλι αρκετά σύντομη στην υλοποίηση, λιγότερο μαθηματική, αλλά απαιτεί ευχέρεια του μαθητή στη διαχείριση δεικτών
3. Βλ. σχετικά θέματα στο: https://alkisg.mysch.gr/steki/index.php?topic=3761 και ίσως στο: https://alkisg.mysch.gr/steki/index.php?topic=3762
« Τελευταία τροποποίηση: 12 Απρ 2011, 01:02:28 πμ από Νίκος Αδαμόπουλος »

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #1 στις: 08 Μάρ 2011, 01:33:42 πμ »
Για παράδειγμα:



Τα ονόματα των 10 καλύτερων αθλητών για κάθε ένα από τους 3 συλλόγους μίας περιοχής, βρίσκονται καταχωρημένα (από τον καλύτερο προς τον χειρότερο) σε πίνακα Ο[10, 3] και τα ονόματα των συλλόγων σε πίνακα Σ[3]. 

Να γίνει αλγόριθμος ο οποίος θα αντιγράφει τα ονόματα όλων των αθλητών σε πίνακα Όνομα[30] και, σε παράλληλο πίνακα Σύλλογος[30] το όνομα του συλλόγου στον οποίο ανήκει ο καθένας, ως εξής:
α) Ανά θέση κατάταξης, ώστε οι 3 πρώτοι (ένας από κάθε σύλλογο) να βρίσκονται στις θέσεις 1 έως 3, ακολουθούμενοι από τους δεύτερους.. κ.ο.κ.
β) Ανά σύλλογο, ώστε πρώτοι να τοποθετηθούν οι αθλητές του 1ου συλλόγου, ακολουθούμενοι από εκείνους του 2ου και τελευταίους εκείνους του 3ου
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

andreas_p

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 1057
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #2 στις: 08 Μάρ 2011, 10:34:25 πμ »
Νίκο, καλημέρα.

1) Με λίγους δείκτες και αριθμητικές εκφράσεις:

α) Με εμφωλευμένες Για (με 2 δείκτες για τον δισδιάστατο πίνακα):

Για i από 1 μέχρι μ
   Για j από 1 μέχρι ν
      Β[(i-1)*μ+j] <- A[i, j]
   Τέλος_επανάληψης
Τέλος_επανάληψης


Μήπως είναι :

Β[(i-1)*ν+j] <- A[i, j]   ;;

Α


Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2812
  • Πύργος Ηλείας
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #3 στις: 08 Μάρ 2011, 10:42:48 πμ »
Σωστός! Πάντα μια 2η ματιά βοηθάει... Συνήθως η ματιά αυτού που το γράφει αρχικά... είναι μια... τεμπέλικη ματιά!!!

pgrontas

  • Ομάδα διαγωνισμάτων 2016
  • *
  • Μηνύματα: 1427
  • There are always possibilities...
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #4 στις: 08 Μάρ 2011, 10:46:58 πμ »
Από τους δύο τρόπους που παρέθεσε ο Νίκος, προσωπικά διδάσκω τον δεύτερο.
Ο λόγος είναι ότι ταιριάζει με την αλγοριθμική φύση του μαθήματος. Δηλαδή βοηθάει τα παιδιά να καταλάβουν τα βήματα με τα οποία γίνεται η μετατροπή.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

Σπύρος Δουκάκης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 831
  • Έτερος εξ ετέρου σοφός, το τε πάλαι το τε νυν
    • http://sdoukakis.wordpress.com/
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #5 στις: 08 Μάρ 2011, 11:27:51 πμ »
Στον δεύτερο τρόπο, η πρότασή μου είναι

κ <- 0
Για i από 1 μέχρι μ
   Για j από 1 μέχρι ν
     κ <- κ+1     
     Β[κ] <- A[i, j]
   Τέλος_επανάληψης
Τέλος_επανάληψης

ώστε μετά να είναι "συμβατή" η εκτύπωση του νέου πίνακα...

Επίσης, ο τρόπος που έδωσε ο Νίκος μπορεί να αξιοποιηθεί σε οποιαδήποτε περίπτωση αντιγράφω ή διαχωρίζω πίνακα μονοδιάσταο ή δισδιάστατο.

Ο α τρόπος είναι όμορφος, αλλά δυστυχώς απουσιάζει το μαθηματικό υπόβαθρο των παιδιών (δεν κάνουν μοτίβα (pattern) στα μαθηματικά...) Θέλουν αρκετό χρόνο για να το βγάλουν... μόνα τους!

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #6 στις: 08 Μάρ 2011, 02:41:42 μμ »
Ο α τρόπος είναι όμορφος, αλλά δυστυχώς απουσιάζει το μαθηματικό υπόβαθρο των παιδιών (δεν κάνουν μοτίβα (pattern) στα μαθηματικά...) Θέλουν αρκετό χρόνο για να το βγάλουν... μόνα τους!

Έτσι είναι.. Ακόμα και τα μαθηματικά που έχουν διδαχθεί, συχνά δεν ξέρουν να τα χρησιμοποιούν αποτελεσματικά (δυστυχώς).  Ο συνάδελφος Βασίλης (lycos)έχει ανοίξει ένα πολύ ενδιαφέρον θέμα στο οποίο επισημαίνει μια πολύ συνηθισμένη αδυναμία των μαθητών που, ενώ φαίνεται απίστευτο, δυστυχώς παρατηρείται σε μεγάλη μερίδα μαθητών.  Παρόλα αυτά, η αλγοριθμική προσέγγιση στην επίλυση προβλημάτων, μπορεί να ανοίξει και σε αυτούς τους μαθητές καινούργιους τρόπους σκέψης και επίλυσης προβλημάτων.  Απ αυτή τη σκοπιά, συμφωνώ απολύτως οτι ο δεύτερος τρόπος, είναι καταλληλότερος και συνάμα πολύ χρήσιμος στο πλαίσιο του μαθήματος.
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #7 στις: 08 Μάρ 2011, 02:48:39 μμ »
Στον δεύτερο τρόπο, η πρότασή μου είναι

κ <- 0
Για i από 1 μέχρι μ
   Για j από 1 μέχρι ν
     κ <- κ+1     
     Β[κ] <- A[i, j]
   Τέλος_επανάληψης
Τέλος_επανάληψης

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

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

Να γίνει αλγόριθμος που θα εξετάζει τις ηλικίες των μαθητών μιας κατασκήνωσης και θα δημιουργεί νέο πίνακα με τα ονόματα των ανηλίκων:

Κώδικας: [Επιλογή]
Αλγόριθμος Επιλογή_Ανηλίκων
Δεδομένα //Ον, Ηλ, Ν//
π <- 0
Για ι από 1 μέχρι Ν
  Αν Ηλ[ι] < 18 τότε
    π <- π + 1
    Ον_Αν[π] <- Ον[ι]
  Τέλος_αν
Τέλος_επανάληψης
Αποτελέσματα //Ον_Αν//
Τέλος Επιλογή_Ανηλίκων

Σε ασκήσεις όμως σαν την παραπάνω, η και εκείνη που ξεκίνησε τη συζήτηση, προτιμώ την προσέγγιση του Νίκου αφού η αρχικοποίηση με την πρώτη αποδεκτή τιμή, οδηγεί συνήθως σε απλούστερες λύσεις.
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #8 στις: 08 Μάρ 2011, 02:49:24 μμ »
ώστε μετά να είναι "συμβατή" η εκτύπωση του νέου πίνακα...

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

Σπύρος Δουκάκης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 831
  • Έτερος εξ ετέρου σοφός, το τε πάλαι το τε νυν
    • http://sdoukakis.wordpress.com/
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #9 στις: 08 Μάρ 2011, 06:05:33 μμ »
Συμφωνώ με την προσέγγιση που λες με διαφορετικά όμως επιχειρήματα.

π.χ.

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

Άρα αν αντιγράφω ολόκληρο τον πίνακα τότε δεν έχει σημασία από που ξεκινώ.

αντίθετα

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

Κώδικας: [Επιλογή]
Αλγόριθμος Επιλογή_Ανηλίκων
Δεδομένα //Ον, Ηλ, Ν//
π <- 0
Για ι από 1 μέχρι Ν
  Αν Ηλ[ι] < 18 τότε
    π <- π + 1
    Ον_Αν[π] <- Ον[ι]
  Τέλος_αν
Τέλος_επανάληψης
Αποτελέσματα //Ον_Αν//
Τέλος Επιλογή_Ανηλίκων

Εδώ αν θέλω να εκτυπώσω τον νέο πίνακα και έχω δουλέψει με τον βοηθητικό δείκτη από 1... θα γράφαμε:

Κώδικας: [Επιλογή]
...
Για ι από 1 μέχρι π - 1
  Εκτύπωσε Ον_Αν[ι]
Τέλος_επανάληψης
...

αφού το π έχει λάβει + μία τιμή...

σε αντίθεση με την προσέγγιση του μηδενός που μπορούμε να γράψουμε

Κώδικας: [Επιλογή]
...
Για ι από 1 μέχρι π
  Εκτύπωσε Ον_Αν[ι]
Τέλος_επανάληψης
...

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

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

Ωστόσο αν κατάλαβα καλά(??) αυτό

Κώδικας: [Επιλογή]
ορχ <- 1
Για ι από 2 μέχρι 88 με_βήμα 4
   γράψε ορχ, ". ", ον[ι]
   ορχ <- ορχ + 1
Τέλος_επανάληψης

κατά την γνώμη μου μπορει να γίνει και ως:

Κώδικας: [Επιλογή]
ορχ <- 0
Για ι από 2 μέχρι 88 με_βήμα 4
  ορχ <- ορχ + 1
  γράψε ορχ, ". ", ον[ι]
Τέλος_επανάληψης

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

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

Τέλος, το τι ξέρουν ή δεν ξέρουν οι μαθητές από τα μαθηματικά που έχουν διδαχτεί στο σχολείο ή στο πανεπιστήμιο από την αλγοριθμική που έχουν διδαχθεί στο σχολείο... είναι θέμα βαρύ και ασήκωτο... αν έχεις χρόνο... δες το https://alkisg.mysch.gr/steki/index.php?topic=2261.0

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #10 στις: 08 Μάρ 2011, 10:01:44 μμ »
Εδώ όμως προκύπτει ένα άλλο ερώτημα για μένα. Ο αλγόριθμος που έφτιαξες με τους ανήλικους τι αποτελέσματα επιστρέφει αν τελικά κανένα στοιχείο δεν αντιγραφεί στον πίνακα Ον_Αν;

Πολύ σωστή παρατήρηση.. !

Ο αλγόριθμος που έδωσα παραπάνω έχει ΛΑΘΟΣ έξοδο, ακόμα και αν υπάρξουν στοιχεία που να αντιγραφούν στο νέο πίνακα. Διορθώνω:


Να γίνει αλγόριθμος που θα εξετάζει τις ηλικίες των μαθητών μιας κατασκήνωσης και θα δημιουργεί νέο πίνακα με τα ονόματα των ανηλίκων:

Κώδικας: [Επιλογή]
Αλγόριθμος Επιλογή_Ανηλίκων
Δεδομένα //Ον, Ηλ, Ν//
π <- 0
Για ι από 1 μέχρι Ν
  Αν Ηλ[ι] < 18 τότε
    π <- π + 1
    Ον_Αν[π] <- Ον[ι]
  Τέλος_αν
Τέλος_επανάληψης
Αποτελέσματα //Ον_Αν, π//
Τέλος Επιλογή_Ανηλίκων



Η έξοδος του αλγόριθμου, είναι ένας πίνακας με στοιχεία στις πρώτες π θέσεις..  Ένας πίνακας, δηλαδή, μεταβλητού πάτου.

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

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


Να αναπτύξετε, σε προγραμματιστικό περιβάλλον ΓΛΩΣΣΑΣ, εφαρμογή που να ζητάει τα ονόματα και τις ηλικίες των 170 μαθητών μιας κατασκήνωσης και να καταχωρίζει τις τιμές σε κατάλληλες δομές δεδομένων.  Στη συνέχεια να δημιουργεί νέα δομή με τα ονόματα των ανήλικων κατασκηνωτών και να .. .. .. .. .. Ο αλγόριθμος να ελέγχει τις τιμές που δίνει ο χρήστης και να τις δέχεται μόνο εφόσον είναι θετικές, από 10 μέχρι 40 και δεν έχουν περισσότερα από 1 δεκαδικά ψηφία...

Κώδικας: [Επιλογή]
Πρόγραμμα Επιλογή_Ανηλίκων
Σταθερές
  Ν = 170
Μεταβλητές
  Ακέραιες: ι
  Πραγματικές: Ηλ[Ν]
  Χαρακτήρες: Ον[Ν], Ον_Αν[Ν]
Αρχή
! Είσοδος Δεδομένων
! -----------------------
  Για ι από 1 μέχρι Ν
    Γράψε 'Ποιό είναι το όνομα του ', ι, 'ου κατασκηνωτή;'
    Διάβασε Ον[ι]
    Αρχή_επανάληψης
      Γράψε 'Ποιά είναι η ηλικία του κατασκηνωτή με όνομα ', Ον[ι], '; '
      Γράψε 'Να δώσεις αριθμό, από 10 μέχρι 40, με ένα δεκαδικό το πολύ!'
      Διάβασε Ηλ[ι]
    Μέχρις_ότου Ηλ[ι] > 0 και ηλ[ι] < 40 και ηλ[ι]*10=Α_Μ(ηλ[ι]*10)
  Τέλος_επανάληψης

! Επιλογή Ανηλίκων
! -----------------------
  π <- 0
  Για ι από 1 μέχρι Ν
    Αν Ηλ[ι] < 18 τότε
      π <- π + 1
      Ον_Αν[π] <- Ον[ι]
    Τέλος_αν
  Τέλος_επανάληψης
  ..
  ..
  ..
[hr]
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #11 στις: 08 Μάρ 2011, 11:16:01 μμ »
Αν καταλαβαίνω καλά τι λες, συμφωνώ απόλυτα στο θέμα της συνέπειας που πρέπει να διακρίνει τον αλγόριθμο σε σχέση με την τιμή μιας μεταβλητής.  Θα πρόσθετα ότι η ίδια συνέπεια πρέπει να μας διακρίνει και στην επιλογή του ονόματός της αλλά ας μην επεκταθούμε.  Νομίζω ότι στο θέμα αυτό, υιοθετούμε την ίδια ακριβώς οπτική γωνία.  Μόνο που πιστεύω ότι ο τρόπος χειρισμού των μεταβλητών (προκειμένου να εξασφαλίζεται αυτή η συνέπεια) έχει βασικά να κάνει με το ρόλο που αποδίδουμε στη συγκεκριμένη μεταβλητή.

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

Αυτοί οι ρόλοι εξυπηρετούν αρκετά καλά για το συγκεκριμένο αλγόριθμο αφού βοηθούν στην άμεση αναφορά στα σημαντικά στοιχεία της διαδικασίας (τιμές που συγκρίνονται):
Κώδικας: [Επιλογή]
Όσο ι <= Ν και ξ <= Μ επανάλαβε
  Αν Π[ι] < Ρ[ξ] τότε
     Σ[κ] <- Π[ι]
     ι <- ι + 1
  Αλλιώς
     Σ[κ] <- Ρ[ξ]
     ξ <- ξ + 1
  Τέλος_αν
  κ <- κ + 1
Τέλος_επανάληψης

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

Όμως τότε, ο κώδικας του αλγόριθμου θα χρειαζόταν αλλαγές στη θέση των εντολών ενημέρωσης των δεικτών.  Επιπλέον για αναφορά στα σημαντικά στοιχεία (τιμές που συγκρίνονται) θα χρειαζόταν κάποια "αριθμητική":
Κώδικας: [Επιλογή]
Όσο ι < Ν και ξ < Μ επανάλαβε
  κ <- κ + 1
  Αν Π[ι+1] < Ρ[ξ+1] τότε
     ι <- ι + 1
     Σ[κ] <- Π[ι]
  Αλλιώς
     ξ <- ξ + 1
     Σ[κ] <- Ρ[ξ]
  Τέλος_αν
Τέλος_επανάληψης
το οποίο είναι ασφαλώς σωστό, μόνο που δύσκολα απαλείφεται η ανάγκη "αριθμητικής δεικτών" και αυτό επειδή οι ρόλοι που αναθέσαμε δεν είναι οι καταλληλότεροι για τη διαδικασία στην οποία συμμετέχουν. 

Νομίζω, δηλαδή, πως για όλα τα παραπάνω, μεγάλη σημασία έχει ο ρόλος που αποδίδουμε σε μια μεταβλητή.  Αυτός επηρεάζει τόσο το όνομά της, όσο και την τιμή που οφείλει να έχει, αλλά και την ερμηνεία που δίνουμε στην τιμή που έχει.  Και συχνά, λανθασμένος ρόλος μεταβλητής, οδηγεί σε άδικα σύνθετα, δυσνόητο και ευαίσθητο (σε λάθη) αλγόριθμο.
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #12 στις: 08 Μάρ 2011, 11:26:03 μμ »
..
Εδώ αν θέλω να εκτυπώσω τον νέο πίνακα και έχω δουλέψει με τον βοηθητικό δείκτη από 1... θα γράφαμε:

Κώδικας: [Επιλογή]
...
Για ι από 1 μέχρι π - 1
  Εκτύπωσε Ον_Αν[ι]
Τέλος_επανάληψης
...

αφού το π έχει λάβει + μία τιμή...

σε αντίθεση με την προσέγγιση του μηδενός που μπορούμε να γράψουμε

Κώδικας: [Επιλογή]
...
Για ι από 1 μέχρι π
  Εκτύπωσε Ον_Αν[ι]
Τέλος_επανάληψης
...

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

Ακριβώς :)

Και αυτό επειδή ενώ στην πρώτη περίπτωση, το π έχει τον ρόλο του "πάτου", στη δεύτερη έχει το ρόλο του "επόμενου διαθέσιμου".  Οπότε ουσιαστικά υπάρχει η σχέση:

πάτος = επόμενο - 1

Επομένως και σε αυτό το παράδειγμα, η άστοχη ανάθεση ρόλου σε μεταβλητή, οδηγεί σε πιό σύνθετο (και ίσως δυσνόητο) κώδικα..
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

Sergio

  • Αστέριος Φανίκος, Καθηγητής Πληροφορικής, fanikosaATschDOTgr
  • Δεινόσαυρος
  • *****
  • Μηνύματα: 802
  • Κάλλιο γνώση, παρά γρόσι.. (ΛΑΪΚΗ ΠΑΡΟΙΜΙΑ)
    • Προσωπική Σελίδα
Απ: Μετασχηματισμός δισδιάστατου πίνακα <==> μονοδιάστατο
« Απάντηση #13 στις: 08 Μάρ 2011, 11:42:25 μμ »
Θα πω πάντως ότι έχω χάσει κάποια επεισόδια... λόγω υποχρεώσεων συγγραφής... και δεν είχα δει από που ξεκίνησε η συζήτηση.

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

Για να μη βαρύνουμε όμως άλλο αυτό το thread προτείνω, για τις εύστοχες παρατηρήσεις σου που αφορούν στην άσκηση με τις ορχήστρες, να συνεχίσουμε εκεί.
« Τελευταία τροποποίηση: 09 Μάρ 2011, 03:43:01 μμ από Sergio »
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)