Αποστολέας Θέμα: ευρεση αριθμου σε πινακα  (Αναγνώστηκε 6493 φορές)

Juan

  • Θαμώνας
  • ***
  • Μηνύματα: 26
Απ: ευρεση αριθμου σε πινακα
« Απάντηση #15 στις: 28 Μάι 2008, 01:14:20 μμ »
Μα αν ο μέγιστος περιέχεται 2 φορές στον πίνακα, τότε είναι και δεύτερος μεγαλύτερος !!
Ωστόσο αν θέλουμε να βρούμε τον δεύτερο μεγαλύτερο που είναι διαφορετικός από τον πρώτο, θα πρότεινα ταξινόμηση. Διαφορετικά υπάρχουν πολλές παράμετροι που πρέπει να λάβεις υπόψιν και γίνεται δύσκολο

Ναι έχεις δίκιο. Ανακάλυψα και άλλο πρόβλημα όμως:
Αν ο μέγιστος είναι στο α[1] και στο α[2] πάλι λάθος !

Τελικά το σωστό είναι :
Κώδικας: Text
  1. max1 <- κάτι_πολύ_μικρό !π.χ. -(2^60)
  2. max2 <- κάτι_πολύ_μικρό
  3.  
  4. Για ι από 1 μέχρι Ν
  5.   Αν α[ι] > max1 τότε
  6.     max2 <- max1
  7.     max1 <- α[ι]
  8.   αλλιώς Αν α[ι] > max2 τότε
  9.     max2 <- α[ι]
  10.   Τέλος_αν
  11. Τέλος_επανάληψης
  12.  
  13. Αν max2 <> κάτι_πολύ_μικρό τότε
  14.   Εμφάνισε max2
  15. αλλιώς
  16.   Εμφάνισε "..."
  17. Τέλος_αν
  18.  

Ουφ! Ελπίζω να είναι εντάξει τώρα. Η αλλαγή ισχύει πάντα στην περίπτωση που θέλουμε το max1 με το max2 να είναι διαφορετικές ποσότητες.

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: ευρεση αριθμου σε πινακα
« Απάντηση #16 στις: 28 Μάι 2008, 01:38:24 μμ »
Μετά κόπων και βασάνων....
Ο δαίμων του κεφαλιού μου έκανε τη δουλειά μου και η πρώτη διόρθωση δεν μπήκε στο δεύτερο post.
Άλλαξα το τελευταίο post και τώρα είναι εντάξει. (ή μέχρι να ξαναβρεί κάποιος κάτι.)
Παράθεση
Ωστόσο αν θέλουμε να βρούμε τον δεύτερο μεγαλύτερο που είναι διαφορετικός από τον πρώτο, θα πρότεινα ταξινόμηση


Αυτό επισήμανα σε  προηγούμενο post και για αυτό το λόγο έκανα την αρχική αλλαγή από

Κώδικας: [Επιλογή]
αλλιώς_αν α[ι] > max2 τότε... σε

Κώδικας: [Επιλογή]
αλλιώς_αν α[ι] > max2 και α[ι] <> max1 τότε...
Έχω την εντύπωση ότι δεν χρειάζεται ταξινόμηση.
« Τελευταία τροποποίηση: 28 Μάι 2008, 02:01:44 μμ από sstergou »
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

potato

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 59
Απ: ευρεση αριθμου σε πινακα
« Απάντηση #17 στις: 29 Μάι 2008, 02:07:51 μμ »
ΠΡΕΠΕΙ ΝΑ ΓΡΑΨΩ ΕΝΑΝ ΑΛΓΟΡΙΘΜΟ: ΠΟΥ ΣΕ ΕΝΑΝ ΠΙΝΑΚΑ ΝΑ ΕΝΤΩΠΙΖΕΙ ΤΟΝ ΔΕΥΤΕΡΟ ΜΕΓΑΛΥΤΕΡΟ Ή ΤΟΝ ΔΕΥΤΕΡΟ ΜΙΚΡΟΤΕΡΟ ΑΡΙΘΜΟ!

Δεν προσδιορίζει αν θέλει να είναι διαφορετικός από τον πρώτο, άρα κάλλιστα μπορεί ο δεύτερος μεγαλύτερος ίσος με τον πρώτο. Παραθέτω και πάλι τη δικιά μου υλοποιήση.

Κώδικας: [Επιλογή]
Αλγόριθμος Οτιναναι
       Δεδομένα // Ν, Α//

      ! Ο αλγόριθμος αυτός κάνει χρήση 2 δεικτών, ο ένας δείχνει τον max ( pos1 )       
      ! και ο δεύτερος ( pos2 ) τον αμέσως επόμενο.
       Αν ( Α[1] > A[2]) τότε
             
                pos1<--1
                pos2<--2
      Aλλιώς
               
                pos1<--2
                pos2<--1
      Tέλος_αν
   
      Για i από 3 μέχρι Ν

             Αν ( Α[i] > Α[pos1] ) τότε     ! Σύγκριση με τον μαξ. Αν ισχύει η συνθήκη τότε το νέο στοιχείο είναι μαξ
                                                            ! και αυτό που ήταν μαξ μπαίνει στη 2η θέση( του αμέσως μεγαλύτερου)
                          pos2 <-- pos1
                          pos1 <-- i
            Αλλιώς_αν  ( A[i] > A[pos2] )  ! Αν δεν μπει στην πρώτη περίπτωση τότε υπάρχει περίπτωση να είναι
                                                             ! μικρότερο από αυτό που έχουμε ως 2ο και έτσι το αντικαθιστούμε.
                          pos2 <-- i
            Τέλος_αν
      Τέλος_επανάληψης

  ! Οι μεταβλητές pos1 και pos2 τώρα έχουν αποθηκευμένη τη θέση του μεγαλύτερου και του αμέσως 
  ! μεγαλύτερου στοιχείου του πίνακα αντίστοιχα.
Be open source. Knowledge belongs to the world.