Αποστολέας Θέμα: Θ4/ΕΠΑΝ 2007  (Αναγνώστηκε 1419 φορές)

clevercitizen

  • Βετεράνος
  • ****
  • Μηνύματα: 75
Θ4/ΕΠΑΝ 2007
« στις: 25 Απρ 2008, 05:02:45 μμ »
Καλησπέρα σε όλους κ χρόνια πολλά. Θα ήθελα τη βοήθειά σας στο συγκεκριμένο θέμα. Έχω γράψει έναν αλγόριθμο παρακάτω αλλά δεν είμαι 100% σίγουρος ότι είναι εντελώς σωστός. Όποιος έχει το χρόνο κ την υπομονή ας του ρίξει μια ματιά. Ευχαριστώ

Κώδικας: [Επιλογή]
ΠΡΟΓΡΑΜΜΑ Θ4
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ:ΜΟ[12],ΕΜΟ
  ΑΚΕΡΑΙΕΣ:ΕΤΟΣ,ΡΕΤ,Ι,Ξ,ΗΜΕΡ[12,31],Μ[12],Τ1,Τ
ΑΡΧΗ
  ΔΙΑΒΑΣΕ ΕΤΟΣ
  ΟΣΟ ΕΤΟΣ<2000 Η ΕΤΟΣ>2099 ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ 'ΛΑΘΟΣ ΕΤΟΣ, ΞΑΝΑΔΩΣΕ'
    ΔΙΑΒΑΣΕ ΕΤΟΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
    ΚΑΛΕΣΕ ΔΙΑΔ(ΕΤΟΣ,Ι,ΡΕΤ)
    Μ[Ι] <-- ΡΕΤ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
    ΓΙΑ Ξ ΑΠΟ 1 ΜΕΧΡΙ Μ[Ι]
      ΓΡΑΨΕ 'ΔΩΣΕ ΗΜΕΡΗΣΙΑ ΠΑΡΑΓΩΓΗ'
      ΔΙΑΒΑΣΕ ΗΜΕΡ[Ι,Ξ]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
    ΜΟ[Ι] <-- 0
    ΓΙΑ Ξ ΑΠΟ 1 ΜΕΧΡΙ Μ[Ι]
      ΜΟ[Ι] <-- ΜΟ[Ι] + ΗΜΕΡ[Ι,Ξ]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΜΟ[Ι] <-- ΜΟ[Ι]/Μ[Ι]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΕΜΟ <-- 0
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
    ΕΜΟ <-- ΕΜΟ + ΜΟ[Ι]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΕΜΟ <-- ΕΜΟ/12
  Τ1 <-- 0
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
    ΑΝ ΜΟ[Ι]>0.9*ΕΜΟ ΚΑΙ ΜΟ[Ι]<1.1*ΕΜΟ ΤΟΤΕ
      Τ1 <-- 1+ Τ1
      ΑΝ Τ1=3 ΤΟΤΕ
        Τ <-- Ι
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΝ Τ1<3 ΤΟΤΕ
    ΓΡΑΨΕ 'ΔΕΝ ΥΠΑΡΧΕΙ ΤΡΙΤΟΣ ΜΗΝΑΣ'
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ Τ
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Θ4





ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ(ΕΤΟΣ,Ι,ΡΕΤ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:ΡΕΤ , ΕΤΟΣ,Ι,Ξ
ΑΡΧΗ
  ΑΝ Ι=2 ΤΟΤΕ
    ΑΝ ΕΤΟΣ MOD 4=0 ΚΑΙ ΕΤΟΣ MOD 100<>0 ΤΟΤΕ
      ΡΕΤ <-- 29
    ΑΛΛΙΩΣ_ΑΝ  ΕΤΟΣ MOD 400=0 ΚΑΙ ΕΤΟΣ MOD 100<>0 ΤΟΤΕ
      ΡΕΤ <-- 29
    ΑΛΛΙΩΣ
      ΡΕΤ <-- 28
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΑΝ
  Ξ <-- 1
  ΟΣΟ Ξ<=12 ΕΠΑΝΑΛΑΒΕ
    ΑΝ Ξ=Ι ΤΟΤΕ
      ΡΕΤ <-- 31
    ΤΕΛΟΣ_ΑΝ
    ΑΝ Ξ<>7 ΤΟΤΕ
      Ξ <-- Ξ+2
    ΑΛΛΙΩΣ
      Ξ <-- Ξ+1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Ξ <-- 4
  ΟΣΟ  (Ξ<12) ΕΠΑΝΑΛΑΒΕ
    ΑΝ Ξ=Ι ΤΟΤΕ
      ΡΕΤ <-- 30
    ΤΕΛΟΣ_ΑΝ
    ΑΝ Ξ<>6 ΤΟΤΕ
      Ξ <-- Ξ+2
    ΑΛΛΙΩΣ
      Ξ <-- Ξ+3
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΔΙΑΔ

« Τελευταία τροποποίηση: 25 Απρ 2008, 06:40:03 μμ από clevercitizen »
ΘΕΛΩ
                ΑΛΛΑΓΗ
                ΕΚΠΑΙΔΕΥΤΙΚΟΥ
                ΣΥΣΤΗΜΑΤΟΣ

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3513
  • to Iterate is human to Recurse divine
Απ: Θ4/ΕΠΑΝ 2007
« Απάντηση #1 στις: 26 Απρ 2008, 06:55:51 μμ »
  Το πρόγραμμα σωστό μου φαίνεται, απλά κάποιες παρατηρήσεις

1. καλύτερα να χρησιμοποιήσεις ΌΣΟ Τ1<3 αντί να έχεις ΓΙΑ Ι ΑΠΟ, και μόλις βρει 3 στοιχεία με αυτή την ιδιότητα να σταματάει
2. επίσης αντί για διαδικασία καλύτερα να χρησιμοποιήσεις συνάρτηση
3. ο υπολογισμός των ημερών του μήνα δε χρειάζεται επανάληψη, αρκεί μια δομή Αν εμφωλευμένη όπου θα ελέγχεις αρχικά αν ο μήνας είναι <= 7 και στη συνέχεια για κάθε περίπτωση να παίζεις με το mod 2, για να διαχωρίσεις τους μονούς από τους ζυγούς μήνες

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

Peandbal

  • Θαμώνας
  • ***
  • Μηνύματα: 48
  • Αρθρο 16
Απ: Θ4/ΕΠΑΝ 2007
« Απάντηση #2 στις: 05 Μάι 2008, 11:49:09 μμ »
Ο υπολογισμός του ετήσιου μέσου όρου είναι λάθος Θα πρέπει να διαιρέσεις με 365 ή 366.
Άρα κατά την γνώμη μου ο κώδικας πρέπει να γίνει ως εξής:
1) Εκεί που γεμίζεις τον πίνακα Μ, ναχρησιμοποιήσεις μια λογική μεταβλητή (πχ. την ΔΙΣΕΚΤΟ)
    ΔΙΣΕΚΤΟ <-- ΨΕΥΔΗΣ
    ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
       ΚΑΛΕΣΕ ΔΙΑΔ(ΕΤΟΣ,Ι,ΡΕΤ)
       Μ[Ι] <-- ΡΕΤ
       ΑΝ Ι=2 ΚΑΙ ΡΕΤ=29 ΤΟΤΕ
          ΔΙΣΕΚΤΟ <-- ΑΛΗΘΗΣ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
2) Εκεί που υπολογίζεις την μέση ετήσια παραγωγή
    ΑΝ ΔΙΣΕΚΤΟ=ΑΛΗΘΗΣ ΤΟΤΕ
       ΕΜΟ <-- ΕΜΟ/366
    ΑΛΛΙΩΣ
       ΕΜΟ <-- ΕΜΟ/365
    ΤΕΛΟΣ_ΑΝ