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

Ξεκίνησε από 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

Wizard

Παράθεση από: Τσιωτάκης Παναγιώτης στις 09 Μαΐου 2009, 07:50:03 ΠΜ
Μάλλον η λύση με την ταξινόμηση είναι πιο κομψή
(ή η εκφώνηση το παρακάνει ζητώντας τα max για όλες τις κατηγορίες παικτών  :D

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

jgalano

και για πολλούς στην ίδια θέση,που θέλει ο φίλος Νίκος,
Αλγόριθμος ΟΜΑΔΑ
Δεδομένα //Ο,Θ,Λ //
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 στις 09 Μαΐου 2009, 10:54:10 ΠΜ
και για πολλούς στην ίδια θέση,που θέλει ο φίλος Νίκος,
Αλγόριθμος ΟΜΑΔΑ
Δεδομένα //Ο,Θ,Λ //
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


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

Παράθεση από: jgalano στις 11 Μαΐου 2009, 05:12:32 ΜΜ
Κεκτημένη ταχύτητα Νίκο, διορθώθηκε !

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