Αποστολέας Θέμα: Ψιλοζόρικο Διαγώνισμα στα Υποπρογράμματα  (Αναγνώστηκε 1997 φορές)

tdiam

  • Οπαδός
  • **
  • Μηνύματα: 16
  • Why's the rum gone?
Χαιρετώ το Στέκι!

Χθες τελείωσα ένα διαγώνισμα στην ενότητα των Υποπρογραμμάτων και είπα να το ανεβάσω εδώ για να ακούσω γνώμες και να το προσφέρω σε όσους θέλουν να το λύσουν. Σε ορισμένα σημεία είναι σκόπιμα τραβηγμένο και η έκταση/πολυπλοκότητα του 4ου θέματος καλύπτει (και με το παραπάνω) το γεγονός ότι δεν υπάρχει 3ο θέμα ;)

Το δίνω σε δύο μορφές, pdf και docx.

Άδεια: CC BY 4.0
ΥΓ: Το Σ/Λ και η αντιστοίχιση είναι αντιγραφή μαζί με ελαφρά τροποποίηση από το 1ο θέμα του διαγωνίσματος των Τσιωτάκη, Ντζιου, Κοψίνη που υπάρχει εδώ στο Στέκι http://alkisg.mysch.gr/steki/index.php?topic=1844.0. Υπάρχει και σχετική αναφορά μέσα στο αρχείο.

Με εκτίμηση,
Διαμαντίδης Θεόδωρος


Έχουν αναρτηθεί παρακάτω οι λύσεις!

« Τελευταία τροποποίηση: 14 Μάι 2017, 08:01:25 μμ από tdiam »

DmitrijPyc

  • Νέος
  • *
  • Μηνύματα: 8
    • Barracuda
Απ: Ψιλοζόρικο Διαγώνισμα στα Υποπρογράμματα
« Απάντηση #1 στις: 12 Μάι 2017, 06:42:31 μμ »
Το μονο που εχω να πω ειναι,προσπαθησα.

ΠΡΟΓΡΑΜΜΑ ΖΩΡΙΚΟ_ΘΕΜΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:Ι,Ξ,Ω1,Ω2,Λ1,Λ2,Δ1,Δ2
  ΧΑΡΑΚΤΗΡΕΣ:ΠΚ[8,10],Π[8,10]
  ΠΡΑΓΜΑΤΙΚΕΣ:ΣΥΝΟΛΟ,ΠΟΣΟ,ΑΠ[12,12],Χ
ΑΡΧΗ
  ΣΥΝΟΛΟ <-- 4.5
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
    ΓΙΑ Ξ ΑΠΟ 1 ΜΕΧΡΙ 12

      ΓΡΑΨΕ 'ΔΩΣΕ ΤΗΝ ΑΠΟΔΟΣΗ ΑΝ Ο ΠΑΙΚΤΗΣ ΑΠΟ ΤΟΥΣ',Ξ,'ΑΡΙΘΜΟΣΥ ΠΕΤΥΧΕΙ ΤΟΥΣ',Ι
      ΔΙΑΒΑΣΕ ΑΠ[Ι,Ξ]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'ΔΩΣΕ ΤΗΝ ΩΡΑ ΠΟΥ ΥΠΟΒΛΗΘΗΚΕ ΤΟ ΔΕΛΤΙΟ'
    ΔΙΑΒΑΣΕ Ω1
    ΓΡΑΨΕ 'ΔΩΣΕ ΤΑ ΛΕΠΤΑ ΠΟΥ ΥΠΟΒΛΗΘΗΚΕ ΤΟ ΔΕΛΤΙΟ'
    ΔΙΑΒΑΣΕ Λ2
    ΓΡΑΨΕ 'ΔΩΣΕ ΤΑ ΔΕΥΤΕΡΟΛΕΠΤΑ ΠΟΥ ΥΠΟΒΛΗΘΗΚΕ ΤΟ ΔΕΛΤΙΟ'
    ΔΙΑΒΑΣΕ Δ1
    ΑΝ ΣΥΝΟΛΟ<>0 Ή Ω1<22 ΤΟΤΕ
      ΓΡΑΨΕ 'ΔΩΣΕ ΤΟ ΠΟΣΟ ΠΟΥ ΠΟΝΤΑΡΕ Ο ΜΙΛΤΟΣ'
      ΔΙΑΒΑΣΕ ΠΟΣΟ

  !12 ΑΡΙΘΜΟΙ ΠΟΥ ΕΒΑΛΕ Ο ΜΙΛΤΟΣ,ΜΕ ΤΗΝ ΠΡΟΥΠΟΘΕΣΗ ΟΤΙ ΒΑΖΕΙ ΜΟΝΟ 12 Χ
      ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 8
        ΓΙΑ Ξ ΑΠΟ 1 ΜΕΧΡΙ 10
          ΔΙΑΒΑΣΕ Π[Ι,Ξ]
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  !20 ΑΡΙΘΜΟΙ ΠΟΥ ΚΛΗΡΩΘΗΚΑΝ
      ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 8
        ΓΙΑ Ξ ΑΠΟ 1 ΜΕΧΡΙ 10
          ΔΙΑΒΑΣΕ ΠΚ[Ι,Ξ]
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  !ΥΠΟΛΟΓΙΖΩ ΤΗΝ ΩΡΑ ΜΕΧΡΙ ΤΗΝ ΕΠΟΜΕΝΗ ΚΛΗΡΩΣΗ
      Δ2 <-- 0
      Λ2 <-- Λ1+(5-Λ1 MOD 5)! ΣΥΜΠΛΗΡΩΝΩ ΤΑ ΛΕΠΤΑ ΜΕΧΡΙ 5,ΠΧ ΑΝ ΕΙΝΑΙ 3 ΘΑ ΓΙΝΟΥΝ 5?
      ΑΝ Λ2=60 ΤΟΤΕ
        Ω2 <-- Ω1+1
        Λ2 <-- 0
      ΑΛΛΙΩΣ
        Ω2 <-- Ω1
      ΤΕΛΟΣ_ΑΝ
      ΓΡΑΨΕ 'ΟΧΡΟΝΟΣ ΠΟΥ ΜΕΣΟΛΑΒΕΙ ΜΕΤΑΞΗ ΤΗΣ ΥΠΟΒΟΛΗΣ ΤΟΥ ΔΕΛΤΙΟΥ ΚΑΙ ΤΗΣ ΕΝΑΡΞΗΣ ΤΗΣ ΕΠΟΜΕΝΗΣ ΚΛΗΡΩΣΗΣ ΕΙΝΑΙ=',ΔΙΑΦΟΡΑ_ΧΡΟΝΟΥ(Ω1,Λ1,Δ1,Ω2,Λ2,Δ2),'ΔΕΥΤΕΡΟΛΕΠΤΑ'
      ΚΑΛΕΣΕ ΚΛΗΡΩΣΗ(ΑΠ,ΠΟΣΟ,Π,ΠΚ,Χ)
      ΓΡΑΨΕ 'ΤΟ ΠΟΣΟ ΠΟΥ ΚΕΡΔΙΣΕΣ ΕΙΝΑΙ=',Χ
      ΣΥΝΟΛΟ <-- ΣΥΝΟΛΟ-ΠΟΣΟ
      ΣΥΝΟΛΟ <-- ΣΥΝΟΛΟ+Χ
    ΤΕΛΟΣ_ΑΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ ΣΥΝΟΛΟ=0 Ή Ω1>=22
  ΓΡΑΨΕ 'ΤΟ ΚΙΝΟ ΤΕΛΕΙΩΣΕ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ ΔΙΑΦΟΡΑ_ΧΡΟΝΟΥ(Η1,Μ1,Σ1,Η2,Μ2,Σ2):ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:Η1,Η2,Μ1,Μ2,Σ1,Σ2,ΣΥΜ1,ΣΥΜ2
ΑΡΧΗ
  ΣΥΜ1 <-- Η1*3600+Μ1*60+Σ1
  ΣΥΜ2 <-- Η2*3600+Μ2*60+Σ2
  ΔΙΑΦΟΡΑ_ΧΡΟΝΟΥ <-- ΣΥΜ2-ΣΥΜ1
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ






ΔΙΑΔΙΚΑΣΙΑ ΚΛΗΡΩΣΗ(Α,ΠΟΣΟ1,ΠΠ,ΠΚΙ,Υ)
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΠΠ[8,10],ΠΚΙ[8,10]
  ΠΡΑΓΜΑΤΙΚΕΣ: ΠΟΣΟ1,Υ,Α[12,12] 
  ΑΚΕΡΑΙΕΣ: ΠΛ1,ΠΛ2,Ι,Ξ
ΑΡΧΗ                           
  ΠΛ1 <-- 0!ΤΟ ΠΛΗΘΟΣ ΤΩΝ ΑΡΙΘΜΩΝ ΠΟΥ ΠΟΝΤΑΡΕ Ο ΜΙΛΤΟΣ
  ΠΛ2 <-- 0! ΤΟ ΠΛΗΘΟΣ ΤΩΝ ΑΡΙΘΜΩ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ

  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 8
    ΓΙΑ Ξ ΑΠΟ 1 ΜΕΧΡΙ 10
      ΑΝ ΠΠ[Ι,Ξ]='Χ' ΤΟΤΕ
        ΠΛ1 <-- ΠΛ1+1 
        ΑΝ ΠΠ[Ι,Ξ]=ΠΚΙ[Ι,Ξ] ΤΟΤΕ
          ΠΛ2 <-- ΠΛ2+1
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Υ <-- Α[ΠΛ1,ΠΛ2]
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ   

tdiam

  • Οπαδός
  • **
  • Μηνύματα: 16
  • Why's the rum gone?
Απ: Ψιλοζόρικο Διαγώνισμα στα Υποπρογράμματα
« Απάντηση #2 στις: 12 Μάι 2017, 10:07:15 μμ »
Το μονο που εχω να πω ειναι,προσπαθησα.

ΠΡΟΓΡΑΜΜΑ ΖΩΡΙΚΟ_ΘΕΜΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:Ι,Ξ,Ω1,Ω2,Λ1,Λ2,Δ1,Δ2 ...
Καλησπέρα!

Πολλά μπράβο για την προσπάθεια, οφείλω να σου υποδείξω μερικά λαθάκια που έκανες.
Ωστόσο είμαι σίγουρος ότι είναι από απροσεξία - φαίνεται ότι έχεις πιάσει το νόημα και ότι χειρίζεσαι πολύ καλά τη Γλώσσα!
  • Στην εντολή ΓΡΑΨΕ 'ΔΩΣΕ ΤΗΝ ΑΠΟΔΟΣΗ ΑΝ Ο ΠΑΙΚΤΗΣ ΑΠΟ ΤΟΥΣ',Ξ,'ΑΡΙΘΜΟΥΣ ΠΕΤΥΧΕΙ ΤΟΥΣ',Ι θα πρέπει να εναλλαχθούν τα Ξ, Ι.
  • Όταν διαβάζεις το δελτίο του Μίλτου και τα αποτελέσματα της κλήρωσης, χρειάζεται ακόμη μία διεπαφή με τον χρήστη (ακόμα ένα "ΓΡΑΨΕ" δηλαδή :P )
  • Στη συνάρτηση ΔΙΑΦΟΡΑ_ΧΡΟΝΟΥ δεν γνωρίζουμε ποια στιγμή από τις δύο είναι η μεγαλύτερη. Επομένως θα πρέπει να τυπώσεις την απόλυτη τιμή της διαφοράς σε δευτερόλεπτα.
  • Στη διαδικασία ΚΛΗΡΩΣΗ έχεις παραλείψει το υποερώτημα όπου σου ζητείται να τυπώσεις τους αριθμούς που πέτυχε ο παίκτης.

Κάτι ακόμη, το οποίο δυστυχώς ξέχασα να το γράψω στην εκφώνηση, άρα είναι δικό μου λάθος: Ο παίκτης σε περίπτωση νίκης κερδίζει το ποσό που πόνταρε επί την απόδοση που λέει ο πίνακας ΑΠ.

Κατά τ' άλλα ήσουν άψογος! Ένας αυστηρός βαθμολογητής κατά τη γνώμη μου θα σου αφαιρούσε 0-1 μονάδα για το 1ο λάθος, 1 μονάδα για το 2ο, 1-2 μονάδες για το 3ο και 2 μονάδες για το 4ο λάθος. Συνολικά θα έπαιρνες τουλάχιστον 29/35 μονάδες.

Kαλή συνέχεια στο διάβασμά σου και καλή επιτυχία στις εξετάσεις!!! Σε ευχαριστώ πραγματικά για τον χρόνο που αφιέρωσες στο διαγώνισμα, ελπίζω να αποδώσει!


Αναρτώ παρακάτω τις λύσεις του διαγωνίσματος για πληρότητα.
ΔΟΚΙΜΑΣΤΕ ΝΑ ΛΥΣΕΤΕ ΜΟΝΟΙ ΣΑΣ ΤΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΙΝ ΤΙΣ ΔΕΙΤΕ!


DmitrijPyc

  • Νέος
  • *
  • Μηνύματα: 8
    • Barracuda
Απ: Ψιλοζόρικο Διαγώνισμα στα Υποπρογράμματα
« Απάντηση #3 στις: 13 Μάι 2017, 12:50:05 μμ »
Ευχαριστω πολυ!!!.Οσο αφορα τις παρατηρησεις σου ,δεν καταλαβα μονο την Α_Τ.Στο σημειο αυτο
  Δ2 <-- 0
      Λ2 <-- Λ1+(5-Λ1 MOD 5)! ΣΥΜΠΛΗΡΩΝΩ ΤΑ ΛΕΠΤΑ ΜΕΧΡΙ 5,ΠΧ ΑΝ ΕΙΝΑΙ 3 ΘΑ ΓΙΝΟΥΝ 5?
      ΑΝ Λ2=60 ΤΟΤΕ
        Ω2 <-- Ω1+1
        Λ2 <-- 0
      ΑΛΛΙΩΣ
        Ω2 <-- Ω1
      ΤΕΛΟΣ_ΑΝ
ουσιαστικα π.χ αν ο Μιλτος βαλει ωρα  12:42:05 το αυξανω ωστε να γινει 12:45:00, ξερω δηλαδη οτι η δευτερη ωρα ειναι μεγαλυτερη απο την πρωτη.

tdiam

  • Οπαδός
  • **
  • Μηνύματα: 16
  • Why's the rum gone?
Απ: Ψιλοζόρικο Διαγώνισμα στα Υποπρογράμματα
« Απάντηση #4 στις: 13 Μάι 2017, 01:03:07 μμ »
Παράθεση
4. Θα περιέχει τη συνάρτηση Διαφορά_Χρόνου η οποία θα δέχεται δύο στιγμές μίας ημέρας, σε ώρες, λεπτά και δευτερόλεπτα η καθεμία, και θα επιστρέφει τη διαφορά δευτερολέπτων ανάμεσα στη μεγαλύτερη και τη μικρότερη.

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

Ελπίζω να σε βοήθησα και να μη σε μπέρδεψα!