ΕΚΦΩΝΗΣΗ:

Το ποδόσφαιρο από την ανακάλυψή του στο Πανεπιστήμιο του 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
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ