Άσκηση πολύ καλή

Ξεκίνησε από ikariofil, 03 Σεπ 2008, 10:36:41 ΠΜ

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

ikariofil

Κάνω χρόνια το μάθημα σε φροντιστήρια και η άσκηση που με δυσκόλεψε περισσότερο είναι η εξής:

ʼσκηση
Να γραφεί αλγόριθμος, ο οποίος να δημιουργεί πίνακα ν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

Μια λύση χωρίς πολλά μαθηματικά, σε στυλ Logo (όπου τρακάρω στρίβω).
Μειονέκτημα: χρειάζεται αρχικοποίηση του πίνακα σε μηδενικά (αλλά αυτό δεν αυξάνει την πολυπλοκότητα).

alkisg

Και η αντίστοιχη υλοποίηση με μαθηματικά.
Μειονέκτημα: είναι λίγο δύσκολο να καταλάβει κανείς τη χρήση της μεταβλητής "στροφές" αν δεν τα πάει καλά με τη γεωμετρία.

(καλά το στέκι σήμερα από σέρνεται μέχρι δεν πάει καθόλου...)

ikariofil

Ευχαριστώ πολύ για την απάντηση, όμως η πρόσβαση στο steki είναι σχεδόν αδύνατη

alkisg

Έχουν πρόβλημα στην Αθήνα μου είπε κάποιος τεχνικός... υπομονή! Όλο το http://users.sch.gr υποφέρει...

sstergou

Θα συμφωνήσω κι εγώ, πολύ μου άρεσε αυτή η άσκηση!

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


ntzios kostas

Για δείτε και αυτή την απάντηση. Πιστεύω να είναι κατανοητή.
ΠΡΟΓΡΑΜΜΑ ΦΙΔΙ 
ΜΕΤΑΒΛΗΤΕΣ 
  ΑΚΕΡΑΙΕΣ: Ν, Μ, γρ, στ, χ, ψ, αρχγρ, αρχστ, 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

Μια παρόμοιου τύπου άσκηση (περίεργη σάρωση πίνακα 2 διαστάσεων) ήταν και αυτή που είχε ρωτήσει ο μαθητής Dem (σάρωση zig zag).
https://alkisg.mysch.gr/steki/index.php?topic=937.0

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

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

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

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

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

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

Γίνεται και πιο συμπαγής λύση (πχ να δουλέψεις με αποστάσεις από κάποιο νοητό κέντρο και να κρατάς μόνο τις 2 διαστάσεις του παραλληλογράμμου και όχι τα 4 φράγματα) αλλά η βασική ιδέα είναι η ίδια.

Dinos

ΝΑ ΚΑΙ ΚΑΤΙ ΑΛΛΟ. ΕΛΠΙΖΩ ΝΑ ΕΙΝΑΙ ΣΩΣΤΟ


ΠΡΟΓΡΑΜΜΑ ΓΕΜΙΣΜΑ_ΦΙΔΑΚΙ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Α[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
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ



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