Εκφώνηση

Οι συμμετέχοντες στο camp του 18ου ΠΔΠ, επισκέφθηκαν το νέο Κυκλικό Επιταχυντή Στοιχειωδών Σωματείων (ΚΕΣΣ) Θεσσαλονίκης. Ο επιταχυντής αυτός, περιλαμβάνει Ν θυρίδες εισόδου σωματείων. Στην είσοδο κάθε θυρίδας τα σωμάτια λαμβάνουν ενέργεια Εin(N) (όπου Ν ο αριθμός της θυρίδας). Κατά την τροχιά τους μέχρι την επόμενη θυρίδα, τα σωμάτια, δαπανούν ενέργεια που αντιστοιχεί σε φράγμα δυναμικού Εout(Ν) που πρέπει να «υπερπηδήσουν». Αν Εin(Ν) >= Εout(Ν) το σωμάτιο θα φθάσει στην επόμενη θυρίδα (Ν+1), στην οποία και θα λάβει ενέργεια Εin(N+1). Η συνολική λοιπόν ενέργεια του σωματίου στην Ν+1 θυρίδα (εφόσον μπήκε στην Ν) θα είναι: Εin(Ν) – Εout(Ν) + Εin(Ν+1).

Πρόβλημα

Να αναπτύξετε πρόγραμμα σε Γλώσσα, το οποίο αφού καταχωρίσει δεδομένα σε έναν πίνακα 50 Χ 2 θέσεων όπου στην [Ν-οστή, 1] θέση θα καταχωρείται η τιμή Εin(Ν) και στην [Ν-οστή, 2] θέση θα καταχωρείται η τιμή Εout(Ν). Το πρόγραμμα στη συνέχεια θα προσδιορίζει και θα εμφανίζει την πρώτη (με το μικρότερο αριθμό) θυρίδα από την οποία αν εισέλθει το σωμάτιο, θα ολοκληρώσει μια πλήρη κυκλική τροχιά εντός του επιταχυντή. ΕΠΥ, 18ος Π.Δ.Π. (2006) Τελική Φάση (1° θέμα)

Λύση

ΠΡΟΓΡΑΜΜΑ ΑΣΚ2_ΠΑΡ_Β_ΠΙΝ_ΕΠΙΤΑΧΥΝΤΗΣ
ΣΤΑΘΕΡΕΣ
  maxports = 10
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j, port   
  ΠΡΑΓΜΑΤΙΚΕΣ: E[maxports,2], Eold, Enew         
  ΛΟΓΙΚΕΣ: gotout, done
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ maxports
    ΔΙΑΒΑΣΕ E[i,1], E[i,2]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ             

  port <-- 0   ! κατάλληλη θύρα εισόδου                                 

  i <-- 1
  done <-- ΨΕΥΔΗΣ                     
  ΟΣΟ i<= maxports ΚΑΙ done = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ

    Eold <-- 0  ! Ενέργεια από την προηγούμενη θύρα
    j <-- i    
    gotout <-- ΑΛΗΘΗΣ     
    ΟΣΟ j<=maxports-1 ΚΑΙ gotout = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
      Enew <-- Eold + E[j,1] - E[j,2]

      ΑΝ Enew <= 0 ΤΟΤΕ
        gotout <-- ΨΕΥΔΗΣ
      ΑΛΛΙΩΣ     
        Eold <-- Enew 
        j <-- j+1
      ΤΕΛΟΣ_ΑΝ     

    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

    ΑΝ  gotout = ΑΛΗΘΗΣ ΤΟΤΕ
      port <-- i
    ΤΕΛΟΣ_ΑΝ

    ΑΝ  gotout = ΑΛΗΘΗΣ ΤΟΤΕ
      done <-- ΑΛΗΘΗΣ
    ΑΛΛΙΩΣ
      i <-- i+1
    ΤΕΛΟΣ_ΑΝ

  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΑΝ  gotout = ΑΛΗΘΗΣ ΤΟΤΕ
    ΓΡΑΨΕ port
  ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ 

Παράδειγμα εισόδου 
50 100
120 100
90 100
140 100       
90 90
90 90
90 90
90 90
90 90
90 90 
Έξοδος: 2