Κάνω χρόνια το μάθημα σε φροντιστήρια και η άσκηση που με δυσκόλεψε περισσότερο είναι η εξής:
ʼσκησηΝα γραφεί αλγόριθμος, ο οποίος να δημιουργεί πίνακα ν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
|
Θα ήθελα κάποια υπόδειξη ή αναφορά για την λύση της συγκεκριμένης.
Όποιος πιστός προσέλθει...
Μια λύση χωρίς πολλά μαθηματικά, σε στυλ Logo (όπου τρακάρω στρίβω).
Μειονέκτημα: χρειάζεται αρχικοποίηση του πίνακα σε μηδενικά (αλλά αυτό δεν αυξάνει την πολυπλοκότητα).
Και η αντίστοιχη υλοποίηση με μαθηματικά.
Μειονέκτημα: είναι λίγο δύσκολο να καταλάβει κανείς τη χρήση της μεταβλητής "στροφές" αν δεν τα πάει καλά με τη γεωμετρία.
(καλά το στέκι σήμερα από σέρνεται μέχρι δεν πάει καθόλου...)
Ευχαριστώ πολύ για την απάντηση, όμως η πρόσβαση στο steki είναι σχεδόν αδύνατη
Έχουν πρόβλημα στην Αθήνα μου είπε κάποιος τεχνικός... υπομονή! Όλο το http://users.sch.gr υποφέρει...
Θα συμφωνήσω κι εγώ, πολύ μου άρεσε αυτή η άσκηση!
Να και η λύση μου, ελπίζω το φίδι να μην έχει κανένα ζουζούνι... Αν ο πίνακας έχει μία γραμμή ή μια στήλη πρέπει να τροποποιηθεί κάπως :)
Για δείτε και αυτή την απάντηση. Πιστεύω να είναι κατανοητή.
ΠΡΟΓΡΑΜΜΑ ΦΙΔΙ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ν, Μ, γρ, στ, χ, ψ, αρχγρ, αρχστ, 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
στ <- στ + ψ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Μια παρόμοιου τύπου άσκηση (περίεργη σάρωση πίνακα 2 διαστάσεων) ήταν και αυτή που είχε ρωτήσει ο μαθητής Dem (σάρωση zig zag).
https://alkisg.mysch.gr/steki/index.php?topic=937.0
Για τη συγκεκριμένη σάρωση (όπως κουλουριάζεται το φίδι) μια προσέγγιση είναι η εξής (δίνω μόνο τρόπο σκέψης και όχι υλοποίηση):
Πρώτα πρέπει να δούμε τη γεωμετρία του σχήματος. Δηλαδή αν το προσέξουμε καλά είναι σα να γίνεται σάρωση πρώτα στον εξωτερικό «φλοιό», μετά στον αμέσως πιο μέσα κλπ.
Χρειάζονται 4 αριθμοί για να καθοριστούν τα άκρα του ορθογωνίου παραλληλογράμμου που σαρώνουμε: ένας που να δείχνει πιο είναι το πάνω άκρο σάρωσης, ένας για το κάτω, ένας για το αριστερά και ένας για το δεξιά. Με αυτούς τους 4 αριθμούς ξέρουμε τα φράγματά μας.
Βάζουμε 4 διαδοχικές Για (όχι εμφωλευμένες) οι οποίες κάνουν τα εξής (θέλει λίγο προσοχή στα άκρα):
Η πρώτη σαρώνει από πάνω αριστερά μέχρι πάνω δεξιά.
Η δεύτερη από πάνω δεξιά μέχρι κάτω δεξιά.
Η τρίτη από κάτω δεξιά μέχρι κάτω αριστερά
Η τέταρτη από κάτω αριστερά μέχρι πάνω δεξιά
Αφού τελειώσει η σάρωση του φλοιού μπαίνουν τα όρια σάρωσης μια θέση πιο μέσα.
Όλα αυτά θα μπουν μέσα σε βρόχο που θα σταματάει όταν 2 απέναντι διαστάσεις πέσουν η μια πάνω στην άλλη.
Γίνεται και πιο συμπαγής λύση (πχ να δουλέψεις με αποστάσεις από κάποιο νοητό κέντρο και να κρατάς μόνο τις 2 διαστάσεις του παραλληλογράμμου και όχι τα 4 φράγματα) αλλά η βασική ιδέα είναι η ίδια.
ΝΑ ΚΑΙ ΚΑΤΙ ΑΛΛΟ. ΕΛΠΙΖΩ ΝΑ ΕΙΝΑΙ ΣΩΣΤΟ
ΠΡΟΓΡΑΜΜΑ ΓΕΜΙΣΜΑ_ΦΙΔΑΚΙ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α[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
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ