ΕΚΦΩΝΗΣΗ:
Το ποδόσφαιρο από την ανακάλυψή του στο Πανεπιστήμιο του Cambridge, έγινε το πιο δημοφιλές αλλά και το πιο εύκολα παιζόμενο άθλημα. Ένας σχετικά επίπεδος τόπος και μια μπάλα αρκούν. Σύμφωνα με τους κανόνες του, ο διαιτητής κινείται μέσα στο γήπεδο και οι επόπτες γραμμών κατά μήκος των πλευρικών γραμμών, στο μισό γηπέδου έκαστος. Αν το γήπεδο ποδοσφαίρου έχει μήκος Α, οι δύο επόπτες γραμμών ξεκινούν από το κέντρο του γηπέδου (A/2). Μέσα στο γήπεδο η μπάλα κινείται σε διάφορα σημεία. Οι επόπτες πρέπει να παρακολουθούν τις φάσεις, κινούμενοι μόνο κατά μήκος των πλευρικών γραμμών από το 0 έως Α/2 και από Α/2 έως Α αντίστοιχα.
Πρόβλημα:
Να αναπτύξετε ένα πρόγραμμα σε Γλώσσα το οποίο ασφού διαβάσει το μήκος του γηπέδου (0-250), και στη συνέχεια τις θέσεις στις οποίες πρέπει να μετακινηθεί ο κάθε επόπτης (ενώ στην αρχική άσκηση: και τη θέση (μήκος) που συντελείται κάθε φάση). Η εισαγωγή φάσεων τερματίζεται όταν εισαχθεί μήκος -1. Στη συνέχεια, θα υπολογίζει και θα εμφανίζει τα μέτρα που διάνυσαν οι επόπτες των γραμμών κατά τη διάρκεια ενός αγώνα. [Παρατήρηση: Οι επόπτες ξεκινούν από το κέντρο αλλά δεν επιστρέφουν υποχρεωτικά σε αυτό στο τέλος του παιχνιδιού.]
Παράδειγμα:

Για εισαγωγή δεδομένων:
100
49 ! λείπει, ενώ αναφέρεται στη εξήγηση του παραδείγματος – παρόραμα
30
25
0
50
55
40
30
20
0
-1
Το πρόγραμμα επιστρέφει τις τιμές: 150 10
! Αφορούν το αρχικό πρόβλημα του διαγωνισμού (2η λύση)
! Το πρόγραμμα (όπως τροποποιήθηκε) επιστρέφει τις τιμές 80 160 (1η λύση)
Εξήγηση παραδείγματος:
! Το παράδειγμα εξηγεί τη είσοδο με βάση την αρχική άσκηση.
Δε ισχύει για τη τροποποίηση που προτείνουν οι σημειώσεις
Το μήκος του γηπέδου είναι 100, άρα ο πρώτος επόπτης κινείται μεταξύ 0 και 50 και ο δεύτερος μεταξύ 50 και 100 (βλ.σχήμα). Γίνονται συνολικά 10 φάσεις. Και οι δύο επόπτες ξεκινούν από τη θέση 50. Στις πρώτες τέσσερις φάσεις (49, 30, 25, και 0) ο πρώτος επόπτης τρέχει μέχρι τη θέση 0 διανύοντας συνολικά 50 μέτρα, ενώ ο δεύτερος επόπτης ο δεύτερος παραμένει ακίνητος στη θέση 50.
Στη πέμπτη φάση (50), ο πρώτος επόπτης επιστρέφει στη θέση 50 διανύοντας 50 μέτρα και ο δεύτερος παραμένει ακίνητος στη θέση 50.
Στην έκτη φάση (55), ο δεύτερος επόπτης τρέχει μέχρι τη θέση 55 διανύοντας 5 μέτρα, ενώ ο πρώτος παραμένει ακίνητος στη θέση 50.
Στην έβδομη φάση (40), ο δεύτερος επόπτης επιστρέφει στη θέση 50 διανύοντας άλλα 5 μέτρα και ο πρώτος επόπτης τρέχει μέχρι τη θέση 40 διανύοντας 10 μέτρα.
Στις τελευταίες τρεις φάσεις (30, 20 και 0), ο πρώτος επόπτης τρέχει μέχρι τη θέση 0 διανύοντας συνολικά 40 μέτρα ενώ ο δεύτερος επόπτης παραμένει ακίνητος στη θέση 50.
Οι συνολικές αποστάσεις που διανύθηκαν από τους δύο επόπτες είναι: L1= 50 + 50 + 1 + 40 και L2 = 5 + 5 = 10.
ΛΥΣΗ
! 1η Λύση της άσκησης όπως προτείνεται στις σημειώσεις ΠΡΟΓΡΑΜΜΑ ΑΣΚ4_ΠΑΡ_Β_ΙΕΠ_lines_man ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: input_pos, Α ΠΡΑΓΜΑΤΙΚΕΣ: linesman1, linesman2, linesman1_pos, linesman2_pos, distance, position ΑΡΧΗ ΓΡΑΨΕ 'Δώστε μήκος γηπέδου (0-250):' ΔΙΑΒΑΣΕ Α linesman1 <-- 0 ! συνολική απόσταση που διένυσε ο 1ος επόπτης linesman1_pos <-- Α/2 ! θέση 1ου επόπτη linesman2 <-- 0 ! συνολική απόσταση που διένυσε ο 2ος επόπτης linesman2_pos <-- Α/2 ! θέση 2ου επόπτη input_pos <-- 0 ! αύξων αριθμός εισόδου θέσης ΓΡΑΨΕ 'Δώστε θέση επόπτη:' ΔΙΑΒΑΣΕ position ΟΣΟ position <> -1 ΕΠΑΝΑΛΑΒΕ input_pos <-- input_pos + 1 ΑΝ input_pos mod 2 = 1 ΤΟΤΕ ! είναι θέση του 1η επόπτη distance <-- Α_Τ(linesman1_pos - position) linesman1 <-- linesman1 + distance linesman1_pos <-- position ΑΛΛΙΩΣ ! είναι θέση του 2η επόπτη distance <-- Α_Τ(linesman2_pos - position) linesman2 <-- linesman2 + distance linesman2_pos <-- position ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ 'Δώστε θέση επόπτη:' ΔΙΑΒΑΣΕ position ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ linesman1, linesman2 ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
! Λύση του αρχικού προβλήματος που εξηγεί σωστά και το παράδειγμα. ΠΡΟΓΡΑΜΜΑ ΑΣΚ4_ΠΑΡ_Β_ΙΕΠ_linesman_orig ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: input_pos, Α ΠΡΑΓΜΑΤΙΚΕΣ: linesman1, linesman2, linesman1_pos, linesman2_pos, distance, position ΑΡΧΗ ΓΡΑΨΕ 'Δώστε μήκος γηπέδου (0-250):' ΔΙΑΒΑΣΕ Α linesman1 <-- 0 linesman1_pos <-- Α/2 linesman2 <-- 0 linesman2_pos <-- Α/2 ΓΡΑΨΕ 'Δώστε θέση φάσης:' ΔΙΑΒΑΣΕ position ΟΣΟ position <> -1 ΕΠΑΝΑΛΑΒΕ ΑΝ position <= Α/2 ΤΟΤΕ ! Η περίπτωση της ισότητας είναι ισοδύναμη και για τους 2 distance <-- Α_Τ(linesman1_pos - position) linesman1 <-- linesman1 + distance linesman1_pos <-- position distance <-- Α_Τ(linesman2_pos - Α/2) ! Ο 2ος επιστρέφει στο κέντρο του γηπέδου linesman2 <-- linesman2 + distance linesman2_pos <-- Α/2 ΑΛΛΙΩΣ distance <-- Α_Τ(linesman2_pos - position) linesman2 <-- linesman2 + distance linesman2_pos <-- position distance <-- Α_Τ(linesman1_pos - Α/2) ! Ο 1ος επιστρέφει στο κέντρο του γηπέδου linesman1 <-- linesman1 + distance linesman1_pos <-- Α/2 ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ 'Δώστε θέση φάσης:' ΔΙΑΒΑΣΕ position ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ linesman1, linesman2 ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Πρόσφατα σχόλια