Αποστολέας Θέμα: Μονοδιάστατος πίνακας - Καταχώρηση και έλεγχος μοναδικότητας  (Αναγνώστηκε 2753 φορές)

vkol32

  • Θαμώνας
  • ***
  • Μηνύματα: 20
Να γραφεί αλγόριθμος για έναν πίνακα 10 θέσεων στον οποίο θα καταχωρούνται αριθμητικές τιμές και θα γίνεται έλεγχος για την μοναδικότητα της κάθε τιμής.Θα πρέπει κάθε τιμή του πίνακα να ελέγχεται,αφού είναι μοναδική σε σχέση με όλες τις προηγούμενες να επιτρέπεται η καταχώρηση της  στην αντίστοιχη θέση του πίνακα.

Χρείαζομαι βοήθεια έχω κολλήσει.
Το email μου είναι :vageliskolaitis@hotmail.gr

P.Tsiotakis

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3305
  • agent romanoff you miss me?
    • P.Tsiotakis
Διάβασε Α[1] ! το πρώτο μπαίνει
Ν <- 1 ! πόσα έχουν μπει
Όσο Ν <= 20 επανάλαβε ! να γεμίσει ο πίνακας Α
      Διάβασε νέος ! υποψήφιος να μπει
      ....... ! Σειριακή αναζήτηση στον Α, στις Ν πρώτες θέσεις που έχουν τιμή
      Αν done = ψευδής τότε ! αν δε βρέθηκε
           Ν <- Ν + 1 ! άλλη μια θα γεμίσει
           Α[Ν] <- νέος ! σε αυτήν ο νέος αριθμός
      Τέλος_αν
      ! αν βρέθηκε καμία ενέργεια, πάλι από την αρχή
Τέλος_επανάληψης


ελπίζω να μην ξέχασα κάτι, καλή συνέχεια

Stefevan

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 274
Μια άλλη λύση αλλά πιο απλή..... :P
Κώδικας: [Επιλογή]

Για Ι από 1 μέχρι 10
  Β[Ι] ← 0  !ΑΡΧΙΚΟΠΟΙΗΣΗ ΠΙΝΑΚΑ ΓΙΑ ΝΑ ΕΧΟΥΜΕ ΤΙΜΕΣ ΝΑ ΣΥΓΚΡΙΝΟΥΜΕ ΠΑΡΑΚΑΤΩ
Τέλος_επανάληψης
Για Ι από 1 μέχρι 10
  Αρχή_επανάληψης
    ΒΡΕΘΗΚΕ ← Ψευδής    !ΥΠΟΘΕΤΟΥΜΕ ΟΤΙ ΔΕΝ ΕΧΕΙ ΒΡΕΘΕΙ Ο ΑΡΙΘΜΟΣ ΣΤΟΝ ΠΙΝΑΚΑ
    Διάβασε ΑΡΙΘ
    Για Κ από 1 μέχρι 10
      Αν (ΑΡΙΘ = Β[Κ]) τότε
        ΒΡΕΘΗΚΕ ← Αληθής !ΑΝ ΒΡΕΘΕΙ Η ΣΗΜΑΙΑ ΓΙΝΕΤΑΙ ΑΛΗΘΗΣ
        Εμφάνισε "ΥΠΑΡΧΕΙ.. ΞΑΝΑΔΩΣΕ ΤΙΜΗ"
      Τέλος_αν
    Τέλος_επανάληψης
  Μέχρις_ότου (ΒΡΕΘΗΚΕ = Ψευδής)  !ΟΣΟ Ο ΑΡΙΘ ΒΡΙΣΚΕΤΑΙ ΣΤΟΝ ΠΙΝΑΚΑ
                                  !ΘΑ ΣΥΝΕΧΙΣΕΙ ΝΑ ΖΗΤΑΕΙ ΝΕ ΤΙΜΗ
  Β[Ι] ← ΑΡΙΘ   !ΤΕΛΙΚΑ ΜΠΑΙΝΕΙ ΣΤΟΝ ΠΙΝΑΚΑ (ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΗΔΗ)
Τέλος_επανάληψης


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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2823
  • Πύργος Ηλείας
Stefevan δεν θα συμφωνήσω με τη λύση σου, γιατί προϋποθέτει ότι η τιμή 0 δεν πρόκειται να δοθεί σαν είσοδος, πράγμα όμως που δεν προκύπτει από πουθενά!
Ίσως έτσι είναι καλύτερα (με τις ελάχιστες αλλαγές):

Για Ι από 1 μέχρι 10
  Β[Ι] ← 0  !ΑΡΧΙΚΟΠΟΙΗΣΗ ΠΙΝΑΚΑ ΓΙΑ ΝΑ ΕΧΟΥΜΕ ΤΙΜΕΣ ΝΑ ΣΥΓΚΡΙΝΟΥΜΕ ΠΑΡΑΚΑΤΩ
Τέλος_επανάληψης

Για Ι από 1 μέχρι 10
  Αρχή_επανάληψης
    ΒΡΕΘΗΚΕ ← Ψευδής    !ΥΠΟΘΕΤΟΥΜΕ ΟΤΙ ΔΕΝ ΕΧΕΙ ΒΡΕΘΕΙ Ο ΑΡΙΘΜΟΣ ΣΤΟΝ ΠΙΝΑΚΑ
    Διάβασε ΑΡΙΘ
    Για Κ από 1 μέχρι 10 Ι-1
      Αν (ΑΡΙΘ = Β[Κ]) τότε
        ΒΡΕΘΗΚΕ ← Αληθής !ΑΝ ΒΡΕΘΕΙ Η ΣΗΜΑΙΑ ΓΙΝΕΤΑΙ ΑΛΗΘΗΣ
        Εμφάνισε "ΥΠΑΡΧΕΙ.. ΞΑΝΑΔΩΣΕ ΤΙΜΗ"
      Τέλος_αν
    Τέλος_επανάληψης
  Μέχρις_ότου (ΒΡΕΘΗΚΕ = Ψευδής)  !ΟΣΟ Ο ΑΡΙΘ ΒΡΙΣΚΕΤΑΙ ΣΤΟΝ ΠΙΝΑΚΑ
                                  !ΘΑ ΣΥΝΕΧΙΣΕΙ ΝΑ ΖΗΤΑΕΙ ΝΕ ΤΙΜΗ
  Β[Ι] ← ΑΡΙΘ   !ΤΕΛΙΚΑ ΜΠΑΙΝΕΙ ΣΤΟΝ ΠΙΝΑΚΑ (ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ ΗΔΗ)
Τέλος_επανάληψης


Από κει και πέρα επειδή οι μαθητές έχουν υπόψη τη σειριακή αναζήτηση, θα το προτιμούσα ως εξής:

Διάβασε Β[1]             ! αυτή η εντολή θα μπορούσε να μην υπάρχει και η επόμενη Για να ξεκινάει από 1
Για Ι από 2 μέχρι 10
  Αρχή_επανάληψης
    Διάβασε ΑΡΙΘ
    ΒΡΕΘΗΚΕ ← Ψευδής   
    Κ ← 1
    Όσο Κ<=Ι-1 και ΒΡΕΘΗΚΕ=Ψευδής επανάλαβε
       Αν ΑΡΙΘ = Β[Κ] τότε ΒΡΕΘΗΚΕ ← Αληθής               
       Κ← Κ+1
    Τέλος_επανάληψης
  Μέχρις_ότου ΒΡΕΘΗΚΕ = Ψευδής
  Β[Ι] ← ΑΡΙΘ   
Τέλος_επανάληψης


...ή ακόμα πιο extreme:

Διάβασε Β[1]       
Για Ι από 2 μέχρι 10
  Αρχή_επανάληψης
    Διάβασε Β[ I ]
    ΒΡΕΘΗΚΕ ← Ψευδής   
    Κ ← 1
    Όσο Κ<=Ι-1 και όχι ΒΡΕΘΗΚΕ επανάλαβε
       Αν B[ I ] = Β[Κ] τότε ΒΡΕΘΗΚΕ ← Αληθής               
       Κ← Κ+1
    Τέλος_επανάληψης
  Μέχρις_ότου όχι ΒΡΕΘΗΚΕ
Τέλος_επανάληψης



Επίσης, δεν θα συμφωνήσω με το:
Μια άλλη λύση αλλά πιο απλή.....
Δηλαδή δεν θεωρώ ότι η λύση αυτή είναι πιο απλή από αυτή του Παναγιώτη, γιατί η δικιά σου (και η τροποποιημένη δικιά μου) χρησιμοποιεί 3 επίπεδα εμφωλευμένων επαναλήψεων, ενώ του Παναγιώτη χρησιμοποιεί 2 επίπεδα. Θα το έθετα μάλλον αλλιώς:
Η λύση με τα 3 επίπεδα ίσως είναι πιο πιθανή να την σκεφτούν μόνοι τους οι μαθητές, αφού έχει:

Για Ι από 1 μέχρι 10    ! 1ο επίπεδο: 10 επαναλήψεις για να διαβαστεί όλος ο πίνακας
   ...
   Αρχή_επανάληψης       ! 2ο επίπεδο: έλεγχος εγκυρότητας για κάθε στοιχείο του πίνακα
       ...
       Όσο ή Για ....                ! 3ο επίπεδο: αναζήτηση στο "διαβασμένο" τμήμα του πίνακα για τη μοναδικότητα του αριθμού
           ...
       Τέλος_επανάληψης      ! 3ο επίπεδο: αναζήτηση στο "διαβασμένο" τμήμα του πίνακα για τη μοναδικότητα του αριθμού
       ...
   Μέχρις_ότου ....           ! 2ο επίπεδο: έλεγχος εγκυρότητας για κάθε στοιχείο του πίνακα
   ...
Τέλος_επανάληψης     ! 1ο επίπεδο: 10 επαναλήψεις για να διαβαστεί όλος ο πίνακας


Θέλω να πω ότι η παραπάνω προσέγγιση είναι ίσως πιο αναμενόμενη από τους μαθητές, αφού θα προσπαθούσαν να εφαρμόσουν/συγκολλήσουν/συνδυάσουν μεθόδους που ήδη γνωρίζουν, ενώ του Παναγιώτη είναι πιο "εγκεφαλική"... θα την πρότειναν λίγοι μαθητές!
« Τελευταία τροποποίηση: 25 Ιαν 2012, 07:29:59 μμ από Νίκος Αδαμόπουλος »

Stefevan

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 274
Όντως το έκαψα το 0 !!!  :o
Αν κατάλαβα καλά, δεν είναι πιο απλή η λύση επειδή οι μαθητές πρέπει να προσπαθήσουν να συνδυάσουν μεθοδολογίες?

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2823
  • Πύργος Ηλείας
Αν κατάλαβα καλά, δεν είναι πιο απλή η λύση επειδή οι μαθητές πρέπει να προσπαθήσουν να συνδυάσουν μεθοδολογίες?

Δεν είπα αυτό! Το ποια είναι απλή λύση είναι σχετικό! Απλή ως προς την κατανόηση; Απλή ως προς τη σύνταξη; Η λύση του Παναγιώτη με τα 2 επίπεδα εμφωλευμένων επαναλήψεων ίσως φαίνεται πιο απλή στα μάτια κάποιων, ενώ η λύση με τα 3 επίπεδα ίσως φαίνεται πιο απλή στα μάτια κάποιων άλλων! Ούτε είπα ότι οι μαθητές δεν πρέπει να προσπαθήσουν να συνδυάσουν μεθοδολογίες! Όμως πολλές φορές προσπαθούν μονάχα αυτό, χωρίς να μπαίνουν στη λογική της βαθύτερης κατανόησης... Από έναν πολύ καλό και σκεπτόμενο μαθητή πολλές φορές περιμένουμε και κάτι παραπάνω από συνδυασμό μεθοδολογιών...