Πολύ ωραιο το διαγωνισμα , συγχαρητηρια!!!
Ελυνα το θέμα 3ο και επειδη εχω μια απορια στο Γ3 αυτο το "επαναληπτικα" λιγο με μπερδευει, γιαυτο σας παραθετω από το θέμα 3, το Γ4 τη συναρτηση δηλαδη, να μου πειτε τη γνωμη σας.
Και επισης θα ηθελα να ρωτησω ποτε θα βγαλετε τις λυσεις!
Ευχαριστώ.
ΣΥΝΑΡΤΗΣΗ exist (A,B,pos) : ΛΟΓΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: i,j,m,pos
ΧΑΡΑΚΤΗΡΕΣ: A[10], B[100]
ΛΟΓΙΚΕΣ: flag
ΑΡΧΗ
i <-- 1
j <-- 1
m <-- 1
flag <-- ΨΕΥΔΗΣ
ΟΣΟ flag=ΨΕΥΔΗΣ ΚΑΙ j<90 ΕΠΑΝΑΛΑΒΕ
ΟΣΟ A=B[j] ΕΠΑΝΑΛΑΒΕ
m <-- m+1
i <-- i+1
j <-- j+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ m<>10 ΤΟΤΕ
m <-- 0
i <-- 0
ΑΛΛΙΩΣ
flag <-- ΑΛΗΘΗΣ
pos <-- i-10
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
exist <-- flag
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
Πέρα από το τι ζητάει η εκφώνηση είναι πολύ σημαντικό να καταλάβεις και τη βασική ιδέα του τμηματικού προγραμματισμού. Ο τμηματικός προγραμματισμός δεν υπάρχει για να μας κάνει τη ζωή δύσκολη, αλλά εύκολη. Αναλύεις το πρόβλημα σε άλλα μικρότερα και λύνεις το καθένα από αυτά μόνο του. Έτσι απλοποιείται η σκέψη.
Αν βάλεις τα πάντα μέσα σε ένα υποπρόγραμμα δεν έχεις απλοποιήσει τίποτα. Είναι σαν να λύνεις μια άσκηση με υποπρόγραμμα μόνο και μόνο για να πεις ότι το έκανες με υποπρόγραμμα. Δεν προσφέρει κάτι.
Αν προσέξεις, η ανάλυση που έχει γίνει χωρίζει το αρχικό πρόβλημα σε 2 υποπροβλήματα:
Το ένα είναι να ελέγχεις αν ένας πίνακας 10 θέσεων έχει ένα προς ένα ίσα τα στοιχεία του με 10 συνεχόμενες θέσεις ενός πίνακα 100 θέσεων που ξεκινούν από μια θέση. Την ώρα που φτιάχνεις τη συνάρτηση έχεις στο νου σου μόνο αυτό και τίποτε άλλο.
Την ώρα που φτιάχνεις το κυρίως πρόγραμμα θεωρείς ότι έχεις στα χέρια σου ένα εργαλείο (τη συνάρτηση) που ελέγχει την ισότητα του μικρού πίνακα με ένα υποπίνακα ίσου μεγέθους του μεγάλου. Έτσι απλά την καλείς για κάθε πιθανή θέση και τέλος.
Η συνάρτηση δεν ξέρει πως θα χρησιμοποιηθεί. Και το κύριο πρόγραμμα δεν ξέρει πως δουλεύει εσωτερικά η συνάρτηση. Ειναι μαύρο κουτί. Απλά ξέρει πως την καλείς και τι σου επιστρέφει. Με αυτό τον τρόπο όταν φτιάχνεις τη συνάρτηση (ή το πρόγραμμα) εστιάζεις τη σκέψη σου μόνο σε αυτό. Ποτέ δε βάζεις όλο το πρόβλημα στο κεφάλι σου. Έτσι η σκέψη σου απλοποιείται.
ΑΥτή είναι η φιλοσοφία του τμηματικού προγραμματισμού.
Αν θέλεις μια προσωπική άποψη: μπορεί κάποιος να λύνει προβλήματα επειδή είναι πολύ έξυπνος. Ή μπορεί να τα λύνει χωρίς να είναι και τόσο έξυπνος, αρκεί να έχει αναλυτική ικανότητα. Η αναλυτική ικανότητα είναι αυτή που σου επιτρέπει να χτυπήσεις ένα πρόβλημα πιο "ψηλό" από σένα. Πρώτα το "κονταίνεις" και μετά το χτυπάς. Η αναλυτική ικανότητα κατά τη γνώμη μου ειναι ο ακρογωνιαίος λίθος του problem solving και είναι και ο βασικός στόχος του κεφαλαίου 10.
Αυτό είναι και το πνεύμα της συγκεκριμένης άσκησης