Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Πολυδιάστατοι πίνακες => Μήνυμα ξεκίνησε από: ikariofil στις 03 Σεπ 2008, 10:36:41 ΠΜ

Τίτλος: Άσκηση πολύ καλή
Αποστολή από: ikariofil στις 03 Σεπ 2008, 10:36:41 ΠΜ
Κάνω χρόνια το μάθημα σε φροντιστήρια και η άσκηση που με δυσκόλεψε περισσότερο είναι η εξής:

ʼσκηση
Να γραφεί αλγόριθμος, ο οποίος να δημιουργεί πίνακα νxμ που να περιέχει τους αριθμούς 1, 2, 3, ..., ν*μ με την ακόλουθη σειρά όπως στο παράδειγμα. (δηλ. να καταχωρεί τους συνεχόμενους αριθμούς προεπελαύνοντας τον πίνακα σαν ένα φιδάκι)

Για παράδειγμα αν ν=4, μ=5, τότε ο πίνακας που πρέπει να δημιουργηθεί είναι ο εξής:
1     2     3     4     5
14   15   16   17    6
13   20   19   18    7
12   11   10   9     8
Θα ήθελα κάποια υπόδειξη ή αναφορά για την λύση της συγκεκριμένης.
Όποιος πιστός προσέλθει...
Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: alkisg στις 03 Σεπ 2008, 11:24:29 ΠΜ
Μια λύση χωρίς πολλά μαθηματικά, σε στυλ Logo (όπου τρακάρω στρίβω).
Μειονέκτημα: χρειάζεται αρχικοποίηση του πίνακα σε μηδενικά (αλλά αυτό δεν αυξάνει την πολυπλοκότητα).
Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: alkisg στις 03 Σεπ 2008, 12:09:53 ΜΜ
Και η αντίστοιχη υλοποίηση με μαθηματικά.
Μειονέκτημα: είναι λίγο δύσκολο να καταλάβει κανείς τη χρήση της μεταβλητής "στροφές" αν δεν τα πάει καλά με τη γεωμετρία.

(καλά το στέκι σήμερα από σέρνεται μέχρι δεν πάει καθόλου...)
Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: ikariofil στις 03 Σεπ 2008, 01:42:53 ΜΜ
Ευχαριστώ πολύ για την απάντηση, όμως η πρόσβαση στο steki είναι σχεδόν αδύνατη
Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: alkisg στις 03 Σεπ 2008, 01:55:07 ΜΜ
Έχουν πρόβλημα στην Αθήνα μου είπε κάποιος τεχνικός... υπομονή! Όλο το http://users.sch.gr υποφέρει...
Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: sstergou στις 03 Σεπ 2008, 09:58:39 ΜΜ
Θα συμφωνήσω κι εγώ, πολύ μου άρεσε αυτή η άσκηση!

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

Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: ntzios kostas στις 04 Σεπ 2008, 12:01:11 ΠΜ
Για δείτε και αυτή την απάντηση. Πιστεύω να είναι κατανοητή.
Κώδικας [Επιλογή]
ΠΡΟΓΡΑΜΜΑ ΦΙΔΙ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν, Μ, γρ, στ, χ, ψ, αρχγρ, αρχστ, i, Α[4, 5]
 
ΑΡΧΗ
  Ν <- 5   !!όταν πάμε στην επόμενη στήλη μέχρι ποια μπορούμε να πάμε
  Μ <- 4    !όταν πάμε στην επόμενη γραμμή μέχρι ποια μπορούμε να πάμε
  γρ <- 1
  στ <- 1
  χ <- 0
  ψ <- 1
  αρχγρ <- 2  !όταν πάμε στην προηγούμενη γραμμή μέχρι ποια μπορούμε να πάμε
  αρχστ <- 1 !όταν πάμε στην προηγούμενη στήλη μέχρι ποια μπορούμε να πάμε
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 20
    Α[γρ, στ] <- i
    γρ <- γρ + χ
    στ <- στ + ψ
    ΑΝ στ > Ν ΚΑΙ ψ <> 0 ΤΟΤΕ
      Ν <- Ν - 1
      χ <- 1
      ψ <- 0
      στ <- στ - 1
      γρ <- γρ + χ
    ΑΛΛΙΩΣ_ΑΝ στ < αρχστ ΚΑΙ ψ <> 0 ΤΟΤΕ
      αρχστ <- αρχστ + 1
      χ <- -1
      ψ <- 0
      στ <- στ + 1
      γρ <- γρ + χ
    ΑΛΛΙΩΣ_ΑΝ γρ > Μ ΚΑΙ χ <> 0 ΤΟΤΕ
      Μ <- Μ - 1
      χ <- 0
      ψ <- -1
      γρ <- γρ - 1
      στ <- στ + ψ
    ΑΛΛΙΩΣ_ΑΝ γρ < αρχγρ ΚΑΙ χ <> 0 ΤΟΤΕ
      αρχγρ <- αρχγρ + 1
      χ <- 0
      ψ <- 1
      γρ <- γρ + 1
      στ <- στ + ψ
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: gpapargi στις 04 Σεπ 2008, 09:28:22 ΠΜ
Μια παρόμοιου τύπου άσκηση (περίεργη σάρωση πίνακα 2 διαστάσεων) ήταν και αυτή που είχε ρωτήσει ο μαθητής Dem (σάρωση zig zag).
https://alkisg.mysch.gr/steki/index.php?topic=937.0

Για τη συγκεκριμένη σάρωση (όπως κουλουριάζεται το φίδι) μια προσέγγιση είναι η εξής (δίνω μόνο τρόπο σκέψης και όχι υλοποίηση):

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

Χρειάζονται 4 αριθμοί για να καθοριστούν τα άκρα του ορθογωνίου παραλληλογράμμου που σαρώνουμε: ένας που να δείχνει πιο είναι το πάνω άκρο σάρωσης, ένας για το κάτω, ένας για το αριστερά και ένας για το δεξιά. Με αυτούς τους 4 αριθμούς ξέρουμε τα φράγματά μας.

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

Αφού τελειώσει η σάρωση του φλοιού μπαίνουν τα όρια σάρωσης μια θέση πιο μέσα.

Όλα αυτά θα μπουν μέσα σε βρόχο που θα σταματάει όταν 2 απέναντι διαστάσεις πέσουν η μια πάνω στην άλλη.

Γίνεται και πιο συμπαγής λύση (πχ να δουλέψεις με αποστάσεις από κάποιο νοητό κέντρο και να κρατάς μόνο τις 2 διαστάσεις του παραλληλογράμμου και όχι τα 4 φράγματα) αλλά η βασική ιδέα είναι η ίδια.
Τίτλος: Απ: Άσκηση πολύ καλή
Αποστολή από: Dinos στις 04 Σεπ 2008, 06:10:27 ΜΜ
ΝΑ ΚΑΙ ΚΑΤΙ ΑΛΛΟ. ΕΛΠΙΖΩ ΝΑ ΕΙΝΑΙ ΣΩΣΤΟ


ΠΡΟΓΡΑΜΜΑ ΓΕΜΙΣΜΑ_ΦΙΔΑΚΙ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Α[100, 100], Γ1, Γ2, Σ1, Σ2, Ν, Μ, ΑΡ, Ι, J

ΑΡΧΗ
  ΓΡΑΨΕ 'ΔΩΣΤΕ ΠΛΗΘΟΣ ΓΡΑΜΜΩΝ'
  ΔΙΑΒΑΣΕ Ν
  ΓΡΑΨΕ 'ΔΩΣΤΕ ΠΛΗΘΟΣ ΣΤΗΛΩΝ'
  ΔΙΑΒΑΣΕ Μ


  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ Μ
      Α[Ι, J] <-- 0
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  Γ1 <-- 1
  Σ1 <-- Μ
  Γ2 <-- Ν
  Σ2 <-- 1
  ΑΡ <-- 1
  ΟΣΟ ΑΡ <= Ν*Μ ΕΠΑΝΑΛΑΒΕ
    ΓΙΑ J ΑΠΟ Σ2 ΜΕΧΡΙ Σ1
      ΑΝ Α[Γ1, J] = 0 ΤΟΤΕ
        Α[Γ1, J] <-- ΑΡ
        ΑΡ <-- ΑΡ + 1
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


    ΓΙΑ Ι ΑΠΟ Γ1+1 ΜΕΧΡΙ Γ2
      ΑΝ Α[Ι, Σ1] = 0 ΤΟΤΕ
        Α[Ι, Σ1] <-- ΑΡ
        ΑΡ <-- ΑΡ + 1
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


    ΓΙΑ J ΑΠΟ Σ1-1 ΜΕΧΡΙ Σ2 ΜΕ ΒΗΜΑ -1
      ΑΝ Α[Γ2, J] = 0 ΤΟΤΕ
        Α[Γ2, J] <-- ΑΡ
        ΑΡ <-- ΑΡ + 1
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


    ΓΙΑ Ι ΑΠΟ Γ2-1 ΜΕΧΡΙ Γ1+1 ΜΕ ΒΗΜΑ -1
      ΑΝ Α[Ι, Σ2] = 0 ΤΟΤΕ
        Α[Ι, Σ2] <-- ΑΡ
        ΑΡ <-- ΑΡ + 1
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

    Γ1 <-- Γ1 + 1
    Γ2 <-- Γ2 - 1
    Σ1 <-- Σ1 - 1
    Σ2 <-- Σ2 + 1

  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΓΡΑΨΕ
    ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ Μ
      ΓΡΑΨΕ_ Α[Ι, J]:4
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ



ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ