6
respostas

Realizar testes dentro de intervalo definido

Estou tentando desenvolver uma espécie de contador de uma condição num intervalo definido pelo usuário, tipo quantos números primos existem entre 1 e 200. Porém primeiro testei número par no intervalo só que não consigo contabilizar ou ao menos listá-los.

puts "Bem vindo ao contador de números pares"

puts "Vamos escolher nosso conjunto. Primeiramente defina o valor inicial."
valor_inicial = gets.to_i
puts "Agora definal o valor final."
valor_final = gets.to_i
puts "\n\n"

puts "O intervalo definido é de #{valor_inicial} a #{valor_final}"

pares = []
for contador in valor_inicial..valor_final
    if valor_inicial.even?
        true
    end
    puts "Conjunto #{pares}"
    puts pares.size
end

Sei que esta´muito errado, mas como sou muito novato não sei como corrigir. De antemão já agradeço pela atenção despendida comigo que sou muito iniciante. Abraço

6 respostas

Fiz a seguinte alteração e pelo menos rodou e listou todos os números pares, porém imprime a lista a cada número inserido na array.

puts "Bem vindo ao contador de números pares"

puts "Vamos escolher nosso conjunto. Primeiramente defina o valor inicial."
valor_inicial = gets.to_i
puts "Agora definal o valor final."
valor_final = gets.to_i
puts "\n\n"

puts "O intervalo definido é de #{valor_inicial} a #{valor_final}"

pares = []
for contador in valor_inicial..valor_final
    if contador.to_i.even?
        true
        numero_par = contador.to_i
        pares << numero_par
    end
    puts "Conjunto #{pares}"
    puts pares.size
end

Oi Frank, tudo bem? Não entendi bem, você falou sobre números primos, mas tá contando se o número é par ou algo assim?

Para contabilizar, você pode usar o size mesmo, fora do loop até, por que se não, vai mostrar várias vezes. E para listar quais números são, você pode usar o puts direto na variável pares ou fazer um outro loop mostrando cada número individualmente.

Oi Wanderson, tudo tranquilo. Depois que postei isso percebi que estava repetindo porque havia deixa o comando de puts dentro do laço. Mas não fiz o teste pra confirmar só que você já confirmou a minha suspeita aqui. Muito obrigado. Eu queria realmente rodar algum algoritmo para contabilizar números primos, mas ainda não cheguei a pensar numa forma daí comecei tentando contabilizar números pares. Imagino que para contabilizar os números primos primeiro devo separar os ímpares e depois rodar testes para determinar que ele só é divisível por 1 e por si mesmo. Eis o meu problema como pedir para o computador contabilizar aqueles itens que atendem a múltiplas condições?

Oi Frank, você pode testar primeiramente se o número é par. Em caso afirmativo, você o descarta imediatamente e segue adiante com o próximo número.

Quem passar desse filtro (ser ou não um número par) deve ser testado em busca de mais divisores (além de 1 e dele mesmo) cujo resto da divisão seja zero.

Uma maneira de fazer isso é iterar de 2 até o número anterior àquele que queremos testar verificando se o resto da divisão entre nosso número e o número do laço:

for d in 2..(numero - 1)
        if (numero % d) == 0
            # Não é primo!
            primo = false
        end
end

Oi Frank, a resposta do Italo acima parecer ser o caminho. Testa e confirma com a gente o resultado por favor?

Não consegui escrever conforme o Ítalo orientou. Continuam sendo listados os números pares. Segue o código para me indicarem onde estou errando.

primos = []
for teste1 in valor_inicial..valor_final
    if teste1.odd?
        next
    end
end
for teste2 in 2..(valor_final-1)
    if (valor_final % teste2) == 0
       false
    else
        primos << teste2
    end
end

puts "Conjunto #{primos}"
puts primos.size