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

petroszoul

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

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3514
  • 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

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2806
  • Πύργος Ηλείας
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

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

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3302
  • 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]
    Τέλος_αν
  Τέλος_επανάληψης
  ! .... όμοια για τους άλλους

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


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

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

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

P.Tsiotakis

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

Wizard

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

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

P.Tsiotakis

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

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

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3514
  • 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
Ευχαριστώ πολύ παιδιά...
Με βοηθήσατε αρκετά
Εγώ προσπαθούσα να το κάνω με πολύ διαφορετικό τρόπο πιο πολύπλοκο και πιο δύσκολο και δεν μου έβγαινε

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

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

Αυτό εννοούσα από την αρχή! Ότι δηλαδή ο 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 »

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

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

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

P.Tsiotakis

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

Wizard

  • Επισκέπτης
Μάλλον η λύση με την ταξινόμηση είναι πιο κομψή
(ή η εκφώνηση το παρακάνει ζητώντας τα max για όλες τις κατηγορίες παικτών  :D

Μου φαίνεται δύσκολη η λύση με ταξινόμηση. Θα πρέπει να ταξινομηθούν τα δεδομένα ως προς τις θέσεις και δευτερευόντως ως προς τα λεπτά, μετά να σαρωθεί ο πίνακας των θέσεων, όσο βρίσκουμε ίδια λεπτά να τυπώνουμε, μετά να προσπεράσουμε τους υπόλοιπους της ίδιας θέσης για να πάμε στους άλλους (όλα αυτά βέβαια με την προϋπόθεση ότι μπορούν να υπάρχουν παίκτες με τα ίδια λεπτά...)

jgalano

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


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

« Τελευταία τροποποίηση: 11 Μάι 2009, 05:09:35 μμ από jgalano »

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

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


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


Βέβαια τώρα στην πρώτη λύση οι παίχτες εμφανίζονται λίγο ανακατωτά σε σχέση με τη θέση, όχι ότι είναι λάθος όμως αφού εμφανίζεται κάθε φορά και η θέση στην οποία παίζουν...

Στη δεύτερη λύση (όπως και στη δεύτερη λύση της αρχικής εκδοχής) παρατήρησα ότι δεν βάζεις Τέλος_επανάληψης στις εντολές Για... που έχουν μόνο μία Αν...Τελος_αν. Το έχεις ξεχάσει; Ή δεν το βάζεις επειδή θεωρείς ότι δεν χρειάζεται αφού η Για... περιέχει μόνο μία εντολή (και για αυτό βάζεις το Τέλος_αν αριστερότερα); Αν ισχύει το δεύτερο τότε δεν νομίζω ότι είναι σωστό, ασχέτως αν γίνεται σε κάποιες γλώσσες...

jgalano

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 46
Κεκτημένη ταχύτητα Νίκο, διορθώθηκε !

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2806
  • Πύργος Ηλείας
Κεκτημένη ταχύτητα Νίκο, διορθώθηκε !

Αυτό το θέμα αποδείχθηκε στοιχειωμένο! Ελπίζω να μη μου βγάλετε τη φήμη του γκαντέμη  :)