Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ

Ξεκίνησε από petroszoul, 07 Μαΐου 2009, 02:13:54 ΜΜ

« προηγούμενο - επόμενο »

petroszoul

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

evry

Απλά σαρώνεις τον πίνακα και ελέγχεις τη θέση που παίζει και τα λεπτά συμμετοχής

ΑΡΧΗ
ΓΙΑ 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
    Τέλος_Επιλογών
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


Φυσικά μπορείς και με ταξινόμηση αλλά η παραπάνω λύση νομίζω ότι είναι πιο γρήγορη
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

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

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

P.Tsiotakis

Κάτι ίσως λίγο πιο απλό:

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


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


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

Παράθεση από: evry στις 07 Μαΐου 2009, 03:43:41 ΜΜ
Σωστά, έχεις δίκιο, το διόρθωσα, όποιος βιάζεται σκοντάφτει. Με το όνομα δεν κατάλαβα τι εννοείς. Εκτυπώνει 4 ονόματα, δηλαδή ένα όνομα για κάθε θέση.

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

P.Tsiotakis


Wizard

Παράθεση από: Νίκος Αδαμόπουλος στις 07 Μαΐου 2009, 03:49:42 ΜΜ
Θεωρούμε δηλαδή ότι δεν υπάρχουν παίχτες από την ίδια θέση που να έχουν παίξει ακριβώς τον ίδιο χρόνο, ακόμα και σε second!

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

P.Tsiotakis

Παράθεση από: mavros_pit στις 07 Μαΐου 2009, 02:13:54 ΜΜ
... θα εντοπίζει τους παίκτες που έχουν τα περισσότερα λεπτά συμμετοχής για κάθε θέση.

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

evry

Έλα ντε δε φαίνεται πουθενά. Απλά έκανα τη σιωπηρή υπόθεση ότι αυτός με τα περισσότερα λεπτά συμμετοχής είναι ένας για κάθε θέση.
   Στη γενική περίπτωση που είναι και το σωστό η λύση του Παναγιώτη είναι η ενδεδειγμένη. Στη δική μου λύση θα πρέπει να προσθέσεις και μια επανάληψη του στυλ

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

Νομίζω αυτό είναι εντάξει

Παράθεση από: Wizard στις 07 Μαΐου 2009, 04:19:09 ΜΜ
Παράθεση από: Νίκος Αδαμόπουλος στις 07 Μαΐου 2009, 03:49:42 ΜΜ
Θεωρούμε δηλαδή ότι δεν υπάρχουν παίχτες από την ίδια θέση που να έχουν παίξει ακριβώς τον ίδιο χρόνο, ακόμα και σε second!

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

petroszoul

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

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

Παράθεση από: evry στις 07 Μαΐου 2009, 04:26:26 ΜΜ
Έλα ντε δε φαίνεται πουθενά. Απλά έκανα τη σιωπηρή υπόθεση ότι αυτός με τα περισσότερα λεπτά συμμετοχής είναι ένας για κάθε θέση.

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

jgalano

Δύο λύσεις που μου έρχονται, είναι:
Αλγόριθμος ΟΜΑΔΑ
Δεδομένα //Ο,Θ,Λ //
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 
Τέλος_Επανάληψης
Τέλος ΟΜΑΔΑ

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

Παράθεση από: jgalano στις 08 Μαΐου 2009, 10:15:29 ΜΜ
Δύο λύσεις που μου έρχονται, είναι:

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

P.Tsiotakis

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