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

Preciso criar uma tabuada em Ruby

Olá pessoal, preciso criar uma tabuada em ruby, e armazenar cada 10 multiplicações em um array, e no final preciso de 1 array que englobe todas elas.

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],  [2, 4, 6, 8, 10, 12, 14, 16, 18, 20],  [3, 6, 9, 12, 15, 18, 21, 24, 27, 30], [4, 8, 12, 16, 20, 24, 28, 32, 36, 40], [5, 10, 15, 20, 25, 30, 35, 40, 45, 50], [6, 12, 18, 24, 30, 36, 42, 48, 54, 60], [7, 14, 21, 28, 35, 42, 49, 56, 63, 70], [8, 16, 24, 32, 40, 48, 56, 64, 72, 80], [9, 18, 27, 36, 45, 54, 63, 72, 81, 90], [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]]

Exatamente o resultado acima.

Meu código é este :

    def self.tabuada(10) 
    arrayN1 = [] 
    arrayN2 = []

    for n1 in 1..10 
    for n2 in 1..10 
    arrayN2 [n2] = n2*10 
    end 
    arrayN1 [n1] = arrayN2[1..10] 
    end

    return arrayN1[n1..10]

    end

E não estou conseguindo pensar em uma solução. Podem me ajudar?

2 respostas
solução!

Você quase chegou na solução, André! Vamos pegar alguns pontos chave aqui:

  1. Você não deve passar constantes (10) como parâmetro ao declarar um método.
  2. Você não precisa criar um vetor secundário do lado de fora. Aliás, em diversas linguagens, você não poderia fazer isso de modo algum.
  3. Ao retornar, você não precisa indicar os valores no vetor que vai retornar.
# ponto 1. na verdade, esse método nem precisa de parâmetros
def self.taboada
    # só declare um array aqui. o outro precisa ser instanciado dez vezes
    taboada = []
    for m in 1..10
        # ponto 2. instancie um vetor secundário dentro do primeiro laço
        linha = []
        for n in 1..10
            # adiciona m*n no vetor linha
            # o operador << indica adição na última posição de um vetor
            linha << m*n
        end
        # adiciona a linha na taboada, na última posição
        taboada << linha
    end
    # retorna a taboada
    # ponto 3. não é necessário dizer quais posições da matriz você retorna!
    taboada
end

Ficou claro para mim, muito obrigado :)