ευρεση αριθμου σε πινακα

Ξεκίνησε από GEORGIA_LIAMA, 26 Μαΐου 2008, 12:39:32 ΠΜ

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

Juan

Μα αν ο μέγιστος περιέχεται 2 φορές στον πίνακα, τότε είναι και δεύτερος μεγαλύτερος !!
Ωστόσο αν θέλουμε να βρούμε τον δεύτερο μεγαλύτερο που είναι διαφορετικός από τον πρώτο, θα πρότεινα ταξινόμηση. Διαφορετικά υπάρχουν πολλές παράμετροι που πρέπει να λάβεις υπόψιν και γίνεται δύσκολο

Παράθεση από: sstergou στις 28 Μαΐου 2008, 12:56:43 ΜΜ
Ναι έχεις δίκιο. Ανακάλυψα και άλλο πρόβλημα όμως:
Αν ο μέγιστος είναι στο α[1] και στο α[2] πάλι λάθος !

Τελικά το σωστό είναι :
Κώδικας: ψευδογλώσσα
max1 <- κάτι_πολύ_μικρό !π.χ. -(2^60)
max2 <- κάτι_πολύ_μικρό

Για ι από 1 μέχρι Ν
  Αν α[ι] > max1 τότε
    max2 <- max1
    max1 <- α[ι]
  αλλιώς Αν α[ι] > max2 τότε
    max2 <- α[ι]
  Τέλος_αν
Τέλος_επανάληψης

Αν max2 <> κάτι_πολύ_μικρό τότε
  Εμφάνισε max2
αλλιώς
  Εμφάνισε "..."
Τέλος_αν


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

sstergou

#16
Μετά κόπων και βασάνων....
Ο δαίμων του κεφαλιού μου έκανε τη δουλειά μου και η πρώτη διόρθωση δεν μπήκε στο δεύτερο post.
Άλλαξα το τελευταίο post και τώρα είναι εντάξει. (ή μέχρι να ξαναβρεί κάποιος κάτι.)
ΠαράθεσηΩστόσο αν θέλουμε να βρούμε τον δεύτερο μεγαλύτερο που είναι διαφορετικός από τον πρώτο, θα πρότεινα ταξινόμηση

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

αλλιώς_αν α[ι] > max2 τότε...
σε

αλλιώς_αν α[ι] > max2 και α[ι] <> max1 τότε...


Έχω την εντύπωση ότι δεν χρειάζεται ταξινόμηση.

potato

Παράθεση από: GEORGIA_LIAMA στις 26 Μαΐου 2008, 12:39:32 ΠΜ
ΠΡΕΠΕΙ ΝΑ ΓΡΑΨΩ ΕΝΑΝ ΑΛΓΟΡΙΘΜΟ: ΠΟΥ ΣΕ ΕΝΑΝ ΠΙΝΑΚΑ ΝΑ ΕΝΤΩΠΙΖΕΙ ΤΟΝ ΔΕΥΤΕΡΟ ΜΕΓΑΛΥΤΕΡΟ Ή ΤΟΝ ΔΕΥΤΕΡΟ ΜΙΚΡΟΤΕΡΟ ΑΡΙΘΜΟ!

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

Αλγόριθμος Οτιναναι
       Δεδομένα // Ν, Α//

      ! Ο αλγόριθμος αυτός κάνει χρήση 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.