Αποστολέας Θέμα: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ  (Αναγνώστηκε 5673 φορές)

petroszoul

  • Οπαδός
  • **
  • Μηνύματα: 12
Μια ποδοσφαιρική ομάδα διαθέτει 22 ποδοσφαιριστές για κάθε έναν από τους οποίους αποθηκεύουμε το ονοματεπώνυμό τους, τα λεπτά συμμετοχής τους και τη θέση στην οποία παίζουν ('Ε' για επίθεση, 'Α' για άμυνα, 'Κ' για κέντρο και 'Τ' όταν ο παίκτης είναι τερματοφύλακας). Να γίνει πρόγραμμα που θα εντοπίζει τους παίκτες που έχουν τα περισσότερα λεπτά συμμετοχής για κάθε θέση.

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3517
  • to Iterate is human to Recurse divine
Απλά σαρώνεις τον πίνακα και ελέγχεις τη θέση που παίζει και τα λεπτά συμμετοχής

Κώδικας: [Επιλογή]
ΑΡΧΗ
ΓΙΑ i από 1 ΜΕΧΡΙ 4
     max[i] <- 0
     pos[i] <- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΙΑ παίκτης ΑΠΟ 1 ΜΕΧΡΙ 22
      i <- ΚωδΘέσης(Θέση[παίκτης])
      ΑΝ max[i] < Λεπτά[παίκτης] ΤΟΤΕ
              max[i] <- Λεπτά[παίκτης]
              pos[i] <-- παίκτης
      ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
   ΓΡΑΨΕ Όνομα[pos[i]]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ  ΚωδΘέσης( Θ ) : ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
     ΧΑΡΑΚΤΗΡΕΣ: Θ
ΑΡΧΗ
    Επίλεξε Θ
        Περίπτωση 'Ε':
            Θέση <- 1
        Περίπτωση 'Α':
            Θέση <- 2
        Περίπτωση 'Κ':
            Θέση <- 3
        Περίπτωση αλλιώς:
            Θέση <- 4
    Τέλος_Επιλογών
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Φυσικά μπορείς και με ταξινόμηση αλλά η παραπάνω λύση νομίζω ότι είναι πιο γρήγορη
« Τελευταία τροποποίηση: 07 Μάι 2009, 03:42:38 μμ από evry »
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2812
  • Πύργος Ηλείας
Evry πρέπει να σου ξέφυγε λίγο το min-max... Και θεωρούμε ότι θέλουμε ένα μόνο όνομα από την κάθε θέση...

Κώδικας: [Επιλογή]
ΑΡΧΗ
ΓΙΑ i από 1 ΜΕΧΡΙ 4
     max[i] <- 0
     pos[i] <- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΙΑ παίκτης ΑΠΟ 1 ΜΕΧΡΙ 22
      i <- ΚωδΘέσης(Θέση[παίκτης])
      ΑΝ max[i] < Λεπτά[παίκτης] ΤΟΤΕ
              max[i] <- Λεπτά[παίκτης]
              pos[i] <-- παίκτης
      ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
   ΓΡΑΨΕ Όνομα[pos[i]]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3517
  • to Iterate is human to Recurse divine
Σωστά, έχεις δίκιο, το διόρθωσα, όποιος βιάζεται σκοντάφτει. Με το όνομα δεν κατάλαβα τι εννοείς. Εκτυπώνει 4 ονόματα, δηλαδή ένα όνομα για κάθε θέση.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3304
  • agent romanoff you miss me?
    • P.Tsiotakis
Κάτι ίσως λίγο πιο απλό:

 
Κώδικας: [Επιλογή]
  !.... είσοδος πινάκων Ο, Λ, Θ
  max ←  -1
  Για i από 1 μέχρι 22
    Αν Λ[i] > max και Θ[i] = 'E' τότε
      max ← Λ[i]
    Τέλος_αν
  Τέλος_επανάληψης
  Γράψε 'επιθετικοί'
  Για i από 1 μέχρι 22
    Αν Λ[i] = max και Θ[i] = 'E' τότε
        Γράψε Ο[i]
    Τέλος_αν
  Τέλος_επανάληψης
  ! .... όμοια για τους άλλους

Η λύση με την ταξινόμηση είναι λίγο πιο σύνθετη...


Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2812
  • Πύργος Ηλείας
Σωστά, έχεις δίκιο, το διόρθωσα, όποιος βιάζεται σκοντάφτει. Με το όνομα δεν κατάλαβα τι εννοείς. Εκτυπώνει 4 ονόματα, δηλαδή ένα όνομα για κάθε θέση.

Θεωρούμε δηλαδή ότι δεν υπάρχουν παίχτες από την ίδια θέση που να έχουν παίξει ακριβώς τον ίδιο χρόνο, ακόμα και σε second!

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3304
  • agent romanoff you miss me?
    • P.Tsiotakis
σωστός, δε διάβασα καλά την εκφώνηση

Wizard

  • Επισκέπτης
Θεωρούμε δηλαδή ότι δεν υπάρχουν παίχτες από την ίδια θέση που να έχουν παίξει ακριβώς τον ίδιο χρόνο, ακόμα και σε second!

Από πού φαίνεται αυτό στην εκφώνηση;

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3304
  • agent romanoff you miss me?
    • P.Tsiotakis
... θα εντοπίζει τους παίκτες που έχουν τα περισσότερα λεπτά συμμετοχής για κάθε θέση.

ο Νίκος απαντούσε σε λάθος που έκανα στη λύση μου

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3517
  • to Iterate is human to Recurse divine
Έλα ντε δε φαίνεται πουθενά. Απλά έκανα τη σιωπηρή υπόθεση ότι αυτός με τα περισσότερα λεπτά συμμετοχής είναι ένας για κάθε θέση.
   Στη γενική περίπτωση που είναι και το σωστό η λύση του Παναγιώτη είναι η ενδεδειγμένη. Στη δική μου λύση θα πρέπει να προσθέσεις και μια επανάληψη του στυλ

Κώδικας: [Επιλογή]
ΓΙΑ παίκτης ΑΠΟ 1 ΜΕΧΡΙ 22
      i <- ΚωδΘέσης(Θέση[παίκτης])
      ΑΝ max[i] = Λεπτά[παίκτης] ΤΟΤΕ
              ΓΡΑΨΕ Όνομα[παίκτης]
      ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Νομίζω αυτό είναι εντάξει

Θεωρούμε δηλαδή ότι δεν υπάρχουν παίχτες από την ίδια θέση που να έχουν παίξει ακριβώς τον ίδιο χρόνο, ακόμα και σε second!

Από πού φαίνεται αυτό στην εκφώνηση;
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

petroszoul

  • Οπαδός
  • **
  • Μηνύματα: 12
Ευχαριστώ πολύ παιδιά...
Με βοηθήσατε αρκετά
Εγώ προσπαθούσα να το κάνω με πολύ διαφορετικό τρόπο πιο πολύπλοκο και πιο δύσκολο και δεν μου έβγαινε

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2812
  • Πύργος Ηλείας
Έλα ντε δε φαίνεται πουθενά. Απλά έκανα τη σιωπηρή υπόθεση ότι αυτός με τα περισσότερα λεπτά συμμετοχής είναι ένας για κάθε θέση.

Αυτό εννοούσα από την αρχή! Ότι δηλαδή ο Evry εκτός από το αρχικό λάθος με το max, είχε κάνει και αυτή την υπόθεση η οποία δεν ήταν προφανής. Εγώ στη συνέχεια έκανα τη διόρθωση για το max και επισήμανα ότι κατά τα άλλα η λύση θα ήταν σωστή μόνο με τη συγκεκριμένη υπόθεση...

jgalano

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 46
Δύο λύσεις που μου έρχονται, είναι:
Κώδικας: [Επιλογή]
Αλγόριθμος ΟΜΑΔΑ
Δεδομένα //Ο,Θ,Λ //
max1<-0
max2<-0
max3<-0
max4<-0
Για i από 1 μέχρι 22
Aν Λ[i]>max1 KAI Θ[i]=’Ε’ τότε
max1<- Λ[i]
oε<-O[i]
Αλλιώς_Aν Λ[i]>max2 KAI Θ[i]=’Α’ τότε
max2<- Λ[i]
oα<-O[i]
Αλλιώς_Aν Λ[i]>max3 KAI Θ[i]=’Κ’ τότε
max3<- Λ[i]
oκ<-O[i]
Αλλιώς_Aν Λ[i]>max4 KAI Θ[i]=’Τ’ τότε
max4<- Λ[i]
oτ<-O[i]
Τέλος_Αν
Τέλος_Επανάληψης
Εκτύπωσε οε,οα,οκ,οτ
Τέλος ΟΜΑΔΑ


Αλγόριθμος ΟΜΑΔΑ
Δεδομένα //Ο,Θ,Λ //
ΘΕΣΗ[1]<-‘Ε’
ΘΕΣΗ[2]<-’Α’
ΘΕΣΗ[3]<-’Κ’
ΘΕΣΗ[4]<-’Τ’
Για i από 1 μέχρι 4
max<-0
Για j από 1 μέχρι 22
      Aν Λ[j]>max ΚΑΙ Θ[j]=ΘΕΣΗ[i]τότε
       max<- Λ[j]
     onoma <-O[j]
             Τέλος_Αν
       Τέλος_Επανάληψης 
       Εκτύπωσε ΘΕΣΗ[i],onoma
Τέλος_Επανάληψης
Τέλος ΟΜΑΔΑ
« Τελευταία τροποποίηση: 11 Μάι 2009, 05:16:10 μμ από jgalano »

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2812
  • Πύργος Ηλείας
Δύο λύσεις που μου έρχονται, είναι:

....θεωρώντας ότι ΔΕΝ υπάρχουν παίχτες από την ίδια θέση που να συμμετείχαν ακριβώς το ίδιο χρονικό διάστημα.

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3304
  • agent romanoff you miss me?
    • P.Tsiotakis
Μάλλον η λύση με την ταξινόμηση είναι πιο κομψή
(ή η εκφώνηση το παρακάνει ζητώντας τα max για όλες τις κατηγορίες παικτών  :D