Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida de array, como comparar elementos do próprio array e devolver alguma ação?

Olá, tenho uma grande dúvida com array e manipulação de strings, queria entender bem como trabalhar com strings e arrays. Bom, eu quero fazer o seguinte: Ao receber um array de valores, eu quero pegar cada valor dentro desse array e comparar com os valores dele mesmo e depois de feito isso, colocar em ordem decrescente, exemplo:

[3, 2, 5, 1, 4]

A partir disso tenho que se o valor posterior for maior que o anterior, ele irá informar que os valores estão incorretos e não estão em ordem decrescente e pedirá se deseja que faça a organização em ordem decrescente, se o usuário informar que sim, ele irá reorganizar para:

[5, 4, 3, 2, 1]

Caso ele informe já essa ordem correta, o programa irá informar que a organização já está certa em ordem decrescente.

Como posso fazer isso?

Eu iniciei um programa para tentar analisar mas não deu certo e travei:

def verifica_ordem(lista)
    for i in 0..lista.size
        if (lista.last.to_i) > (lista[i - 1].to_i) || (lista.last) == nil
            puts "A lista não está em ordem decrescente"
            p lista.last
            p lista[i]
            p lista[i - 1]
            exit
        end
    end
end

puts "Informe a ordem dos valores:"

#posicao = gets.strip
lista = [3, 2, 5, 1, 4]
verifica_ordem(lista)

Agradeço já a quem responder.

5 respostas

Oi Fagner tudo bem?

Dá uma olhada nesse código que achei, é aquele mesmo que tinha mostrado pra vc só inverti o sinal de maior para menor

array=['code', 'doce', 'ecod', 'report', 'frame', 'amor', 'repo', 'roma']
def bubble_sort(array)
  n = array.length
  loop do
    swapped = false

    (n-1).times do |i|
      if array[i] < array[i+1]
        array[i], array[i+1] = array[i+1], array[i]
        swapped = true
      end
    end

    break if not swapped
  end

  array
end

bubble_sort(array)

Espero ter ajudado!!!

solução!

Oi André, blz,

Bacana, esse algorítimo dá pra aplicar aqui tbm, mas ele irá antes, ter que verificar se estão corretos ou não, ou seja, se estão ordenados ou não, pois se estiver correto, ele nem faz a organização ou ordenamento e informa que já está correto, dae o grande problema aqui é comparar os valores do array pra ver se estão organizados ou não, se o valor posterior é menor que o anterior, ou ainda comparar o próprio array passado e ver se ele está organizado, ou pode ser que ele compare o array passado com o array já ordenado e verifique se o array passado já está ordenado ou não.

Eu estava pesquisando mais sobre o bubble sort e descobri que o ruby já tem um método sort que já faz o ordenamento igual ao seu método, é o método .sort que organiza os valores em ordem crescente.

Todo caso eu consegui comparar de forma direta o próprio array antes e depois de organizados. Fiz da seguinte forma:

array=[5, 4, 1, 2, 3]
#array=[5, 4, 3, 2, 1]

if array != array.sort.reverse
    p array
    puts "A lista não está organizada, deseja organizar?"
    sim = gets.strip
    if sim
        array = array.sort.reverse
        p array
    end
else
    puts "A lista já está organizada"
end

Nesse caso ele conseguiu comparar diretamente o array verificando a igualdade, deu certo, agradeço a ajuda André, se todo caso você tiver uma maneira de comparar os valores dentro do array um a um me passe tbm, exemplo array e array.sort.reverse 5 = 5? 4 = 4? 3 = 1? 2 =2? 1=3? ou seja, percorrer todo os dois arrays comparando um elemento com o elemento do outro. vlw

Para comparar dois arrays faça um loop dentro de outro. Olha um exemplo:


ary = [1,2,3,4,5]
ary2 = [1,7,3,9,10]
ary.each do |i|

    ary2.each do |i2|
      if i==i2

        puts i2
      end
    end
end


Vlw andré, é isso mesmo, ajudou bastante.

Disponha e bons estudos!!!