Τώρα είναι Πέμ 28 Μαρ 2024 03:08 pm

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 1 Δημοσίευση ] 
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Ρωμαίοι Στασιαστές **
ΔημοσίευσηΔημοσιεύτηκε: Τρί 18 Μάιος 2004 08:08 pm 
Χωρίς σύνδεση

Εγγραφή: Πέμ 22 Απρ 2004 11:16 am
Δημοσιεύσεις: 60
Τοποθεσία: Θεσσαλονίκη
Syntax: [ Download ] [ Hide ]
!=======================================================================================================

! Μια μέθοδος παραδειγματισμού που χρησιμοποιούσαν πολλές φορές οι Ρωμαίοι
! για να αποθαρρύνουν τυχόν  στασιαστές στο στράτευμα τους ήταν η εξής:
! Από τους στασιαστές διάλεγαν 1000 άνδρες  που τους τοποθετούσαν σε μία γραμμή.
! Κατόπιν άρχιζαν να τους εκτελούν ανά δύο. Δηλαδή την πρώτη φορά εκτελούσαν το δεύτερο, τον τέταρτο κλπ.
! Εάν ο τελευταίος της σειράς επιζούσε, τοποθετούνταν πρώτος στην ευθεία για την επόμενη εκτέλεση.
! Με τον τρόπο αυτό, τελικά επιζούσε μόνο ένας, ο οποίος αφήνονταν ελεύθερος
! ώστε να κάνει γνωστή την ιστορία στο υπόλοιπο στράτευμα.
! Να υλοποιήσετε πρόγραμμα που θα υπολογίζει τη θέση στην αρχική ευθεία των 1000 ατόμων,
! που θα εξασφαλίζει τη σωτηρία!

!=======================================================================================================


ΠΡΟΓΡΑΜΜΑ Ρωμαίοι_Στασιαστές_με_παρακολούθηση_τιμών
ΣΤΑΘΕΡΕΣ
  Μ=10    !Μ: πλήθος ρωμαίων στασιαστών  (ενδιαφέρον παρούσιαζει η δοκιμή διαφορετικών αριθμών εδώ)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:i,Σ[Μ][Μ]
ΑΡΧΗ
  Ν <-- Μ       ! καθώς το πλήθος θα μεταβάλεται, καταχωρούμε τη σταθερά Μ σε μια μεταβλητή Ν

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
    θ[i] <-- i  ! Καταχωρούμε τη θεση τους σε ένα πίνακα Ν θέσεων
    Σ[i] <-- 1  ! Θεωρούμε πως είναι όλοι ζωντανοί (1: Ζωντανός & 0:Νεκρός)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


  ΟΣΟ Ν>1 ΕΠΑΝΑΛΑΒΕ       ! επαναλαβάνουμε μέχρι να μεινει μονο ενας !

    ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
      ΓΡΑΨΕ_ θ[i],' '     ! εμφανίζουμε κάθε φορα αυτους που μένουν
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

    ΓΡΑΨΕ
    ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν ΜΕ ΒΗΜΑ 2
      Σ[i] <-- 0          ! εκτελούμε ανα 2 ξεκινώντας κάθε φορά από τον 2ο
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

    ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
      ΓΡΑΨΕ_ Σ[i],' '     ! εμφανίζουμε στη συνέχεια ποιοι εκτελέστηκαν και ποιοι παρέμειναν ζωντανοί
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ

    ΑΝ Σ[Ν]=0 ΤΟΤΕ        ! ελέγχουμε αν ο τελευταίος έχει εκτελεστεί
      Ν <-- Ν DIV 2       ! αν ΝΑΙ τότε το πλήθος τους είναι άρτιο και άρα έχουν μεινει οι μισοι
      ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν  ! μεταφέρουμε τους εναπομείναντες στη θέση που πρέπει
        θ[i] <-- θ[2*i-1]  ! 2ος θα γίνει ο 3ος,  3ος ο 5ος,  4ος ο 7ος , 5ος ο 9ος κλπ  δηλ. [i]oς ο [2i-1]ος
        Σ[i] <-- Σ[1]      ! Θεωρούμε πως είναι πάλι όλοι ζωντανοί
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΛΛΙΩΣ
                         ! αν ΟΧΙ
      θ[2] <-- θ[1]      ! ο πρώτος πρέπει να μετακινηθεί στην δεύτερη θέση, αφου
      θ[1] <-- θ[Ν]      ! ο τελευταίος (Νιοστος) θα πρέπει να γίνει τώρα πρώτος
      Σ[2] <-- 1
      Ν <-- Ν DIV 2 + 1  ! αν ΟΧΙ τότε το πλήθος τους είναι περιττό και άρα έχουν μεινει οι μισοι + 1
      ΓΙΑ i ΑΠΟ 3 ΜΕΧΡΙ Ν   ! μεταφέρουμε τους εναπομείναντες στη θέση που πρέπει
        θ[i] <-- θ[2*i-3]   ! 3ος θα γίνει ο 3ος,  4ος ο 5ος,  5ος ο 7ος , 6ος ο 9ος κλπ  δηλ. [i]oς ο [2i-3]ος
        Σ[i] <-- Σ[1]       ! Θεωρούμε πως είναι πάλι όλοι ζωντανοί
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΤΕΛΟΣ_ΑΝ

    ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
      ΓΡΑΨΕ_ θ[i],' '   !εμφανίζουμε κάθε φορα αυτους που απέμειναν μετά την εκτέλεση στις νέες τους θέσεις
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

    ΓΡΑΨΕ
    ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
      ΓΡΑΨΕ_ Σ[i],' '
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ
    ΓΡΑΨΕ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ 'Η θέση που εξασφαλίζει τη σωτηρία όταν οι στασιαστες είναι ', Μ,' είναι η '[1],'η'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 

Ο προηγούμενος αλγόριθμος είναι αρκετα παραστατικός για να παρακολουθήσει κανεις πως εκτελούνται και πώς επαναδιατάσσονται οι στασιαστές. Εύκολα συμπτίσεται στην παρακάτω μορφή !
Syntax: [ Download ] [ Hide ]
!------------------- 2oς τρόπος ----------------------------------------------------------------------

ΠΡΟΓΡΑΜΜΑ Ρωμαίοι_Στασιαστές
ΣΤΑΘΕΡΕΣ
  Μ=10
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ:i,θ[Μ],Ν,first,back
ΑΡΧΗ
  Ν <-- Μ

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
    θ[i] <-- i
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΟΣΟ Ν>1 ΕΠΑΝΑΛΑΒΕ

    ΑΝ Ν MOD 2=0 ΤΟΤΕ
      first <-- 2
      back <-- 1
      Ν <-- Ν DIV 2
    ΑΛΛΙΩΣ
      θ[2] <-- θ[1]
      θ[1] <-- θ[Ν]
      first <-- 3
      back <-- 3
      Ν <-- Ν DIV 2 + 1
    ΤΕΛΟΣ_ΑΝ

    ΓΙΑ i ΑΠΟ first ΜΕΧΡΙ Ν
      θ[i] <-- θ[2*i-back]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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

  ΓΡΑΨΕ 'Η θέση που εξασφαλίζει τη σωτηρία όταν οι στασιαστες είναι ', Μ,' είναι η '[1],'η'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

!---------------------------------------------------------------------------------------------------- :D

 


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
Τελευταίες δημοσιεύσεις:  Ταξινόμηση ανά  
Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 1 Δημοσίευση ] 

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 3 επισκέπτες


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επισυνάπτετε αρχεία σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
Προβολές: