ΑΣΚΗΣΗ ΜΕ ΑΓΩΝΕΣ ΑΥΤΟΚΙΝΗΤΩΝ

Ξεκίνησε από landreou, 24 Μαΐου 2013, 10:15:30 ΠΜ

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

landreou

Γεια σας φίλοι του ΣτΠ
Εχω μία άσκηση όποιος μπορεί να δώσει απόψεις-υποδείξεις-λύσεις

Σε έναν αγώνα αυτοκινήτων συμμετέχουν 11 ομάδες με 2 διαγωνιζόμενους η κάθε μία (δηλαδή συνολικά διαγωνίζονται 22 αθλητές). Κάθε διαγωνιζόμενος τρέχει με το αυτοκίνητό του σε μία διαφρομή και νικητής είναι αυτός που θα ολοκληρώσει την διαδρομή στον μικρότερο χρόνο. Να γίνει αλγόριθμος που με δεδομένα, τα ονόματα των 22 διαγωνιζόμενων, τις ομάδες στις οποίες αυτοί ανήκουν και τον χρόνο που ολοκλήρωσαν την διαδρομή (μετρημένο σε δευτερόλεπτα) να βρίσκει και να εμφανίζει:
α) Τους τρείς πρώτους αθλητές και την ομάδα στην οποία ανήκουν.
β) Την ομάδα που είχε την μεγαλύτερη διαφορά στην κατάταξη για τους 2 αθλητές της.
Σημείωση: Υποθέστε πως όλοι οι αθλητές κατάφεραμ να τερματίσουν τον αγώνα και πως ο κάθε αθλητής τερμάτισε σε διαφορετικό χρόνο.

Ερωτήσεις δικές μου
:

[1] Πιθανολογώ ότι ο πίνακας με τις ομάδες είναι 22 και έχει απο δύο φορές την κάθε ομάδα

[2] Το δεύτερο ερώτημα τι μας ζητάει και πως μπορούμε να το λύσουμε ( κάποια / ες ιδεες ;)

nikolasmer

Για το πρώτο ερώτημα θα χρειαστεί να κάνεις ταξινόμηση του πίνακα με τους χρόνους και ο οποίος θα παρασέρνει τον πίνακα με τα ονόματα και τον πίνακα με τις ομάδες.
Για το δεύτερο ερώτημα γράφω ενα παράδειγμα: Πες οτι η πρώτη ομάδα έχει τον πρώτο της αθλητή στην 3η θέση και τον δεύτερό της αθλητή στην 8η θέση. Οπότε η απόστασή τους είναι 8-3=5 . Ενώ η δεύτερη ομάδα έχει τον πρώτο της αθλητή στην 5η θέση και τον δεύτερό της αθλητή στην 9η θέση. Οπότε 9-5=4. Άρα ανάμεσα στην πρώτη και στη δεύτερη ομάδα η ομάδα που είχε τη μεγαλύτερη διαφορά στην κατάταξη των αθλητών της ήταν η πρώτη. Συνεχίζεις αυτό το σκεπτικό για όλες τις ομάδες. 
Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

Αφού προηγηθεί το πρώτο ερώτημα και οι πίνακες είναι ταξινομημένοι, μια σκέψη μου είναι η εξής:
Για ι από 1 μέχρι 22
  θ1 ← ι
  το_βρήκα ← Ψευδής
  j ← θ1 + 1
  Όσο j ≤ 22 και το_βρήκα= Ψευδής επανάλαβε
    Αν ΟΜ[j] = ΟΜ[θ1] τότε
      το_βρήκα ← Αληθής
      θ2 ← j
    Τέλος_αν
    j ← j + 1
  Τέλος_επανάληψης
  !φτιάχνω καινούριο πίνακα με τις ομάδες και τις διαφορές
  Αν το_βρήκα = Αληθής τότε
    κ ← κ + 1
    Διαφορά[κ] ← θ2 - θ1
    ΟΜΑΔΑ[κ] ← ΟΜ[θ1]
  Τέλος_αν
Τέλος_επανάληψης

!βρίσκω το όνομα της ομάδας με τη μεγαλύτερη διαφορά
max ← Διαφορά[1]
θ ← 1
Για ι από 2 μέχρι 11
 Αν max < Διαφορά[ι] τότε
   max ← Διαφορά[ι]
   θ ← ι
 Τέλος_αν
Τέλος_επανάληψης
Εμφάνισε ΟΜΑΔΑ[θ]


Ο κώδικας νομίζω μπορεί να γίνει πιο σφιχτός. Το ερώτημα είναι αρκετά όμορφο και θα ήθελα να δώ και εγώ και άλλους τρόπους λύσης. Σε ευχαριστώ landreou για την πολύ ωραία ανάρτηση.
Μερεντίτης Νικόλαος
Πληροφορικός

landreou

#3
Μέχρι στιγμής δεν κατάλαβα τον κώδικα που έδωσες .
Θέλω να βρω δικό μου τρόπο που θα παραθέσω.
Δυσκολεύομαι πάρα πολυ με το δεύτερο θέμα μπορεί να το λύσω μετα από ημέρες αλλα κατι θα κανω.

Το θέμα θεωρείται εύκολο / δύσκολο ;

ntzios kostas

Καλύτερα να φτιάξεις:
έναν πίνακα μοδ/το  Ον 11 θέσεων με τα ονόματα των ομάδων,
έναν δισ/το ΟνΔ 11Χ2 με τα ονομάτα των διαγωνιζόμενων,
και ένα δισ/το Χρ 11Χ2 με τους χρόνους των διαγωνιζόμενων.

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

landreou

Μετά από πολύ ώρα και σκεψη παραθέτω λύση

Αλγόριθμος CAR_RACING

! ΠΡΙΝ ΑΠΟ ΟΛΑ !!!!!
! Δημιουργώ πίνακα ΛΕΚΤΙΚΟ[11]
! από τον πίνακα ΟΜΑΔΑ[22] με τα λεκτικά
! των ομάδων αφού τον ταξινομήσουμε κατα αύξουσα σειρά
! Συνάμα δημιουργώ και πίνακα ΔΙΑΦΟΡΕΣ[11]με τις διαφορες θέσεων

Για ι από 1 μέχρι 11 

   ΛΕΚΤΙΚΟ[ι] <- ""   ! Αρχικοποίηση με κενά τον ΛΕΚΤΙΚΟ
   
   ΔΙΑΦΟΡΕΣ[ι] <- 0   ! Αρχικοποίηση με μηδενικά τον ΔΙΑΦΟΡΕΣ

Τέλος_επανάληψης


Για ι από 2 μέχρι 22
   
   Για κ από 22 μέχρι ι με_βήμα -1

      Αν ΟΜΑΔΑ[κ-1] > ΟΜΑΔΑ[κ-1] τοτε

         τ3 <- ΟΜΑΔΑ[κ-1]
      ΟΜΑΔΑ[κ-1] <- ΟΜΑΔΑ[κ]
        ΟΜΑΔΑ[κ] <- τ3

      Τέλος_αν

   Τέλος_επανάληψης

Τέλος_επανάληψης


κ <- 1
ι <- 1

Οσο  ι < 22 επανάλαβε

   ΛΕΚΤΙΚΟ[κ] <- ΟΜΑΔΑ[ι]

   κ <- κ + 1 ! αυξάνω κατα ένα τη θέση του ΛΕΚΤΙΚΟ για να βάλω το\
         ! επόμενο λεκτικό που θα βρώ στον πίνακα 
   
   ι <- ι + 2 ! ανα δύο θέσεις βρίσκουμε διαφορετικό λεκτικό ομαδας
                   ! στον ταξινομημένο πίνακα ομάδων (υπαρχει δυο φορες
         ! το κάθε λεκτικό στον αρχικό πίνακα ΟΜΑΔΑ[22])   
         
Τέλος_επανάληψης

! ΕΡΩΤΗΜΑ α αυξουσα ταξινόμηση των πινάκων ΟΝΟΜΑ,ΧΡΟΝΟΣ,ΟΜΑΔΑ 
! που έκαναν οι διαγωνιζόμενοι
! Μετά την ταξινόμηση εμφανιση των τριών πρώτων
Για ι από 2 μέχρι 22

   Για κ από 22 μέχρι ι με_βήμα -1

      Αν ΧΡΟΝΟΣ[κ-1] > ΧΡΟΝΟΣ[κ] τοτε

         τ <- ΧΡΟΝΟΣ[κ-1]
              ΧΡΟΝΟΣ[κ-1] <- ΧΡΟΝΟΣ[κ]
           ΧΡΟΝΟΣ[κ] <- τ

             τ1 <- ΟΝΟΜΑ[κ-1]
      ΟΝΟΜΑ[κ-1] <- ΟΝΟΜΑ[κ]
      ΟΝΟΜΑ[κ] <- τ1

             τ2 <- ΟΜΑΔΑ[κ-1]                
                ΟΜΑΔΑ[κ-1] <- ΟΜΑΔΑ[κ]
      ΟΜΑΔΑ[κ] <- τ2

   Τέλος_επανάληψης

Τέλος_επανάληψης

Για ι από 1 μέχρι 3

   Εμφάνισε ΟΝΟΜΑ[ι] , ΟΜΑΔΑ[ι]

Τέλος_επανάληψης

! ΕΡΩΤΗΜΑ β
! Πρώτα γεμίζω τον πίνακα ΔΙΑΦΟΡΕΣ

ι <- 1

Αρχή επανάληψης

   κ <- 1

   φορές <- 0

   θέση1 <- 0

   θέση2 <- 0

   Οσο  κ < = 22 επανάλαβε

      Αν ΛΕΚΤΙΚΟ[ι] = ΟΜΑΔΑ[κ] τότε     ! κοιτάω το λεκτικό της ομάδας απο τον πινακα ΛΕΚΤΙΚΟ
                                             ! σε ποιές θέσεις είναι ίδιος στον ΤΑΞΙΝΟΜΗΜΕΝΟ
                                             ! απο το πρωτο ερώτημα πίνακα ΟΜΑΔΑ
                      
         φορές <- φορές + 1    ! μετρώ πόσες φορές τον βρηκα στον ΟΜΑΔΑ    

         Αν φορές = 1 τοτε

            θέση1 <- κ    ! την πρώτη φορά κρατάω τη θέση που έχει τον ΟΜΑΔΑ   
      
         Τέλος_αν

         Αν φορες = 2 τότε   

            θέση2 <- κ    ! την δευτερη φορά κρατάω τη θέση που έχει τον ΟΜΑΔΑ    
         
            ΔΙΑΦΟΡΕΣ[ι] <- θεση1 - θεση2 ! βρίσκω διαφορά και την εκχωρώ στον ΔΙΑΦΟΡΕΣ

            κ <- 22  ! Σπάω το βρόχο για να πάω στην επόμενη ομάδα

         Τέλος_αν

      Τέλος_αν

   κ <- κ + 1

   Τέλος_επανάληψης

ι <- ι + 1

Μέχρις_ότου ι > 11   



! Βρίσκω τον τη θέση του μέγιστου του πίνακα ΔΙΑΦΟΡΕΣ
! με σειριακή αναζήτηση

ι <- 1

βρέθηκε_μεγαλύτερος_ ψευδής

μεγ <- ΔΙΑΦΟΡΕΣ[1]

θέση_στον_πίνακα <- 1

Οσο ι <= 11 και βρέθηκε μεγαλύτερος = ψευδής επανάλαβε

   Αν ΔΙΑΦΟΡΕΣ[ι] > μεγ τοτε

      μεγ < ΔΙΑΦΟΡΕΣ[ι]

      βρέθηκε_μαγαλύτερος <- αληθής

      θέση_στον_πίνακα <- ι

   αλλιώς

      ι <- ι + 1

   Τέλος_αν

Τέλος_επανάληψης

! εμφανίζω  το αντίστοιχο λεκτικό

Εμφάνισε ΛΕΚΤΙΚΟ[θέση_στον_πίνακα]

Τέλος CAR_RACING

petrosp13

Μετά το πρώτο ερώτημα, εγώ θα δημιουργούσα έναν πίνακα με τις θέσεις των οδηγών (1,2,3,4...), θα ταξινομούσα τις ομάδες και συγχρόνως να μπαίνουν οι οδηγοί και οι θέσεις τους, θα έπαιρνα 2-2 τα στοιχεία του πίνακα των θέσεων (1-2,3-4,5-6...) και θα έβρισκα την μεγαλύτερη διαφορά
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

Dinos

Παράθεση από: petrosp13 στις 24 Μαΐου 2013, 01:47:22 ΜΜ
Μετά το πρώτο ερώτημα, εγώ θα δημιουργούσα έναν πίνακα με τις θέσεις των οδηγών (1,2,3,4...), θα ταξινομούσα τις ομάδες και συγχρόνως να μπαίνουν οι οδηγοί και οι θέσεις τους, θα έπαιρνα 2-2 τα στοιχεία του πίνακα των θέσεων (1-2,3-4,5-6...) και θα έβρισκα την μεγαλύτερη διαφορά

ΑΚΡΙΒΩΣ!

landreou

Στη λύση μου - αυτό που δεν έκανα - θα έφτιαχνα ένα ακριβες αντίγραφο  του πίνακα ΟΜΑΔΕΣ θα το έλεγα ΟΜΑΔΕΣ_ΒΟΗΘΗΤΙΚΟ και αυτόν θα χρησιμοποιούσα για το γεμισμα του  ΛΕΚΤΙΚΟ για να μη χάλαγα τη σειρά ρου ΟΜΑΔΕΣ που είναι παράλληλος πίνακας με τους αλλους δύο .
Θα προσπαθήσω να κάνω και αυτή τη λύση με που λέτε και θα την παραθέσω.

Η άσκηση αυτή  όμως τι βαθμό δυσκολίας έχει ; ΕΥΚΟΛΟ/ ΜΕΤΡΙΟ/ ΔΥΣΚΟΛΟ ;

Ευχαριστώ πάντως και εννοείται οποιεσδήποτε άλλες νέες απόψεις / υποδείξεις / λύσεις είναι ευπρόσδεκετες .

Σπύρος Δουκάκης

Θα μπορούσες να τροποποιήσεις την άσκηση στο εξής σκέλος:

Σε έναν αγώνα αυτοκινήτων συμμετέχουν 50 διαγωνιζόμενοι που προέρχονται από διάφορες χώρες. Κάθε διαγωνιζόμενος τρέχει με το αυτοκίνητό του σε μία διαδρομή και νικητής είναι αυτός που θα ολοκληρώσει την διαδρομή στον μικρότερο χρόνο. Να αναπτύξετε αλγόριθμο ο οποίος με δεδομένα, τα ονόματα των 50 διαγωνιζόμενων, τις χώρες από τις οποίες προέρχονται και τον χρόνο που ολοκλήρωσαν την διαδρομή (μετρημένο σε δευτερόλεπτα) να εμφανίζει:
α) Τους τρείς πρώτους αθλητές και την χώρα στην οποία ανήκουν.
β) Την χώρα που είχε την μεγαλύτερη διαφορά στην κατάταξη για τους διαγωνιζόμενούς της.
Σημείωση: Υποθέστε πως όλοι οι αθλητές κατάφεραν να τερματίσουν τον αγώνα και πως ο κάθε αθλητής τερμάτισε σε διαφορετικό χρόνο.


landreou

Η εν λογω ασκηση ειναι έυκολη ; Τι βαθμό δυσκολιας εχει ; Δεν απάντησε κάποιος ....

mokasa

#11
Η άσκηση είναι μάλλον δύσκολη, κυρίως το δεύτερο ερώτημα, και θα έπρεπε να δοθεί στους μαθητές με υποερωτήματα που να ζητούν συγκεκριμένη δημιουργία πινάκων βήμα-βήμα.
Επίσης ένα λεπτό σημείο που πιστεύω οτι μπορεί να κάνουν λάθος αρκετοί είναι η αύξουσα ταξινόμηση, καθώς ο μικρότερος χρόνος κερδίζει, όχι ο μεγαλύτερος.


Για το δεύτερο ερώτημα, αν έχουμε τρεις πίνακες Ομάδα[22], Οδηγός[22] και Χρόνος[22] που έχουν ήδη ταξινομηθεί κατά χρόνο,
σκέφτηκα το εξής για να αποφύγω νέα ταξινόμηση κατα όνομα ομάδας.

max <- 0
count <- 0
i<- 1
Όσο count < 11 επανάλαβε
  Για j από i+1 μέχρι 22 επανάλαβε
    Αν Ομάδα = Ομάδα[j] τότε
       count <- count +1
       Αν j > max τότε
          max <- j
          Ονομα <- Ομάδα[j]
       Τέλος_αν
    Τέλος_αν
  Τέλος_επανάληψης
  i<-i+1
Τέλος_επανάληψης
Εμφάνισε Όνομα, max

Εκμεταλεύομαι το γεγονός οτι οι ομάδες είναι 11. Τί λέτε, νομίζω οτι είναι σωστό, αν και όχι βέλτιστο.