Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Πολυδιάστατοι πίνακες => Μήνυμα ξεκίνησε από: petroszoul στις 07 Μάι 2009, 02:13:54 μμ

Τίτλος: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: petroszoul στις 07 Μάι 2009, 02:13:54 μμ
Μια ποδοσφαιρική ομάδα διαθέτει 22 ποδοσφαιριστές για κάθε έναν από τους οποίους αποθηκεύουμε το ονοματεπώνυμό τους, τα λεπτά συμμετοχής τους και τη θέση στην οποία παίζουν ('Ε' για επίθεση, 'Α' για άμυνα, 'Κ' για κέντρο και 'Τ' όταν ο παίκτης είναι τερματοφύλακας). Να γίνει πρόγραμμα που θα εντοπίζει τους παίκτες που έχουν τα περισσότερα λεπτά συμμετοχής για κάθε θέση.
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: evry στις 07 Μάι 2009, 02:48:05 μμ
Απλά σαρώνεις τον πίνακα και ελέγχεις τη θέση που παίζει και τα λεπτά συμμετοχής

Κώδικας: [Επιλογή]
ΑΡΧΗ
ΓΙΑ 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:29:29 μμ
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 στις 07 Μάι 2009, 03:43:41 μμ
Σωστά, έχεις δίκιο, το διόρθωσα, όποιος βιάζεται σκοντάφτει. Με το όνομα δεν κατάλαβα τι εννοείς. Εκτυπώνει 4 ονόματα, δηλαδή ένα όνομα για κάθε θέση.
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: P.Tsiotakis στις 07 Μάι 2009, 03:45:46 μμ
Κάτι ίσως λίγο πιο απλό:

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

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

Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: Νίκος Αδαμόπουλος στις 07 Μάι 2009, 03:49:42 μμ
Σωστά, έχεις δίκιο, το διόρθωσα, όποιος βιάζεται σκοντάφτει. Με το όνομα δεν κατάλαβα τι εννοείς. Εκτυπώνει 4 ονόματα, δηλαδή ένα όνομα για κάθε θέση.

Θεωρούμε δηλαδή ότι δεν υπάρχουν παίχτες από την ίδια θέση που να έχουν παίξει ακριβώς τον ίδιο χρόνο, ακόμα και σε second!
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: P.Tsiotakis στις 07 Μάι 2009, 03:50:45 μμ
σωστός, δε διάβασα καλά την εκφώνηση
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: Wizard στις 07 Μάι 2009, 04:19:09 μμ
Θεωρούμε δηλαδή ότι δεν υπάρχουν παίχτες από την ίδια θέση που να έχουν παίξει ακριβώς τον ίδιο χρόνο, ακόμα και σε second!

Από πού φαίνεται αυτό στην εκφώνηση;
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: P.Tsiotakis στις 07 Μάι 2009, 04:22:31 μμ
... θα εντοπίζει τους παίκτες που έχουν τα περισσότερα λεπτά συμμετοχής για κάθε θέση.

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

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

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

Από πού φαίνεται αυτό στην εκφώνηση;
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: petroszoul στις 07 Μάι 2009, 04:42:10 μμ
Ευχαριστώ πολύ παιδιά...
Με βοηθήσατε αρκετά
Εγώ προσπαθούσα να το κάνω με πολύ διαφορετικό τρόπο πιο πολύπλοκο και πιο δύσκολο και δεν μου έβγαινε
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: Νίκος Αδαμόπουλος στις 07 Μάι 2009, 06:44:58 μμ
Έλα ντε δε φαίνεται πουθενά. Απλά έκανα τη σιωπηρή υπόθεση ότι αυτός με τα περισσότερα λεπτά συμμετοχής είναι ένας για κάθε θέση.

Αυτό εννοούσα από την αρχή! Ότι δηλαδή ο Evry εκτός από το αρχικό λάθος με το max, είχε κάνει και αυτή την υπόθεση η οποία δεν ήταν προφανής. Εγώ στη συνέχεια έκανα τη διόρθωση για το max και επισήμανα ότι κατά τα άλλα η λύση θα ήταν σωστή μόνο με τη συγκεκριμένη υπόθεση...
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: jgalano στις 08 Μάι 2009, 10:15:29 μμ
Δύο λύσεις που μου έρχονται, είναι:
Κώδικας: [Επιλογή]
Αλγόριθμος ΟΜΑΔΑ
Δεδομένα //Ο,Θ,Λ //
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
Τέλος_Επανάληψης
Τέλος ΟΜΑΔΑ
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: Νίκος Αδαμόπουλος στις 08 Μάι 2009, 11:50:59 μμ
Δύο λύσεις που μου έρχονται, είναι:

....θεωρώντας ότι ΔΕΝ υπάρχουν παίχτες από την ίδια θέση που να συμμετείχαν ακριβώς το ίδιο χρονικό διάστημα.
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: P.Tsiotakis στις 09 Μάι 2009, 07:50:03 πμ
Μάλλον η λύση με την ταξινόμηση είναι πιο κομψή
(ή η εκφώνηση το παρακάνει ζητώντας τα max για όλες τις κατηγορίες παικτών  :D
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: Wizard στις 09 Μάι 2009, 10:27:39 πμ
Μάλλον η λύση με την ταξινόμηση είναι πιο κομψή
(ή η εκφώνηση το παρακάνει ζητώντας τα max για όλες τις κατηγορίες παικτών  :D

Μου φαίνεται δύσκολη η λύση με ταξινόμηση. Θα πρέπει να ταξινομηθούν τα δεδομένα ως προς τις θέσεις και δευτερευόντως ως προς τα λεπτά, μετά να σαρωθεί ο πίνακας των θέσεων, όσο βρίσκουμε ίδια λεπτά να τυπώνουμε, μετά να προσπεράσουμε τους υπόλοιπους της ίδιας θέσης για να πάμε στους άλλους (όλα αυτά βέβαια με την προϋπόθεση ότι μπορούν να υπάρχουν παίκτες με τα ίδια λεπτά...)
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: 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]
Τέλος_Αν
    Τέλος_Επανάληψης
Τέλος_Επανάληψης
Τέλος ΟΜΑΔΑ

Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: Νίκος Αδαμόπουλος στις 11 Μάι 2009, 10:39:22 πμ
και για πολλούς στην ίδια θέση,που θέλει ο φίλος Νίκος,
Κώδικας: [Επιλογή]
Αλγόριθμος ΟΜΑΔΑ
Δεδομένα //Ο,Θ,Λ //
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 στις 11 Μάι 2009, 05:12:32 μμ
Κεκτημένη ταχύτητα Νίκο, διορθώθηκε !
Τίτλος: Απ: Θα ήθελα αν μπορεί κανείς να με βοηθήσει σε μια άσκηση...ευχαριστώ πολύ
Αποστολή από: Νίκος Αδαμόπουλος στις 11 Μάι 2009, 07:23:49 μμ
Κεκτημένη ταχύτητα Νίκο, διορθώθηκε !

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