άσκηση για δομές επανάληψης

Ξεκίνησε από vkol32, 29 Νοε 2010, 12:57:59 ΜΜ

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

fof

Παράθεση από: evry στις 04 Απρ 2011, 11:19:22 ΜΜ
Για i από 1 μέχρι Ν
    Για j από 1 μέχρι i
          Για k από 1 μέχρι j
                  Γράψε '*'
          Τέλος_Επανάληψης
    Τέλος_Επανάληψης
Τέλος_Επανάληψης   

Πολύ καλή!!!

έκανα ολόκληρο το δέντρο σε γλώσσα αλλά δυσκολεύομαι στον υπολογισμό των κενών
ΑΡΧΗ
  M <- 1
  ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ 5
    ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ I
      ΓΙΑ K ΑΠΟ 1 ΜΕΧΡΙ J*M
        ΓΡΑΨΕ "* "
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΓΡΑΨΕ ""
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    M <- 2
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Α


evry

Κάτσε γιατί τώρα με μπέρδεψες. Τι εννοείς "υπολογισμό των κενών"?
Αν εννοείς το δέντρο φαντάσου ότι το απλό δέντρο γίνεται με διπλή επανάληψη.
Η τριπλη επανάληψη όμως εμφανίζει πυραμίδα και όχι δέντρο (3 δείκτες - 3 διαστάσεις)
Φαντάσου ότι αν κόψεις την πυραμίδα σε οριζόντιες φέτες θα πάρεις ένα δέντρο στο επίπεδο.

Δεν κατάλαβα τι θέλεις να κάνεις, να εμφανίσεις  το αποτέλεσμα ή να υπολογίσεις το πλήθος των '*'?
Μια καλή στρατηγική είναι να βάλεις ένα       Γράψε i, j, k     εκεί μέσα για να δεις σε πρώτη φάση τι συμβαίνει
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

fof

εννοούσα την πυραμίδα... οκ το βρήκα αυτό που ήθελα  :)

Thank U!


Βασίλης Παπαχρήστος

Παράθεση από: evry στις 05 Απρ 2011, 02:10:18 ΜΜ
λογικά το έχεις :D

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

Αρχικά σκεφτόμαστε ότι η επανάληψη:
Για ι από 1 μέχρι Ν
  Για j από 1 μέχρι ι
    ...
  Τέλος_επανάληψης
Τέλος_επανάληψης

θα γίνει 1 + 2 + 3 + ... + Ν φορές, δηλαδή Ν*(Ν+1)/2 αφού οι όροι του αθροίσματος αποτελούν αριθμητική πρόοδο με πρώτο όρο το 1, τελευταίο τον Ν και βήμα 1.
Τώρα αν προσθέσουμε και την τρίτη επανάληψη παρατηρούμε ότι ο κάθε όρος του προηγούμενου αθροίσματος θα αποτελεί ένα νέο άθροισμα, θα έχουμε δηλαδή τη μορφή:
{1} + {1+2} + {1+2+3} + {1+2+3+4} + ... + {1+2+3+4+...+Ν}.
Ο κ-οστός όρος αυτής της ακολουθίας έχει τη μορφή 1+2+3+...+κ, δηλαδή κ*(κ+1)/2 λόγω του παραπάνω.
Επομένως θέλουμε το άθροισμα όλων των όρων για κ από 1 μέχρι Ν.
Κάνοντας πράξεις και γνωρίζοντας ότι 1^2 + 2^2 + 3^2 + ... + Ν^2 = Ν*(Ν+1)*(2Ν+1)/6 προκύπτει το αποτέλεσμα
Ν*(Ν+1)*(Ν+2)/6 αυτό δηλαδή που λέει και ο Οδυσσέας

evry

ακριβώς. Η γενική ιδέα είναι αυτή. Το τελευταίο σημείο είναι το δύσκολο για έναν μαθητή. Αυτό που περιγράφεις λεκτικά είναι ουσιαστικά πράξεις με τον τελεστή Σ για το άθροισμα όρων.
Πάντως η προσέγγιση είναι αυτή.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr