No internet connection
  1. Home
  2. Exercícios do Beecrowd

Melhor forma de ler vários valores de entrada

Por alzira eva cavalcanti alves @eva
    2023-10-24 19:49:19.769Z

    Gostaria de ideias sobre como ler de forma simples sem tanta linha de código, vários valores de entrada como por exemplo:

    7
    -5
    6
    -3.4
    4.6
    12
    

    Teria como fazer essa leitura com apenas uma linha de código?

    • 9 respostas
    1. você pode ler criando um array, exemplo:

      let number = lines.map(item => parseInt(item))
      

      Desse jeito você vai criar um array já com os valores em tipo number.
      Pra acessar esses valores é só usar o Index: number[0], number[1]...

      1. Eu não recomendo fazer assim, porque dentro do lines (no exemplo ilustrado) existem valores int e float, se passar int, vai arredondar os quebrados, então a melhor forma é converter em Number, que é dinâmico e aceita os 2 tipos.

        1. Quando é float só colocar parseFloat, fiz todos exercícios assim

      2. Em resposta aeva:

        Se forem vários valores na mesma linha:

        var [A, B, C, D] = lines.shift().split(" ").map(Number))
        

        Se forem vários valores em linhas diferentes, como no exercício do Beecrowd 1007:

        var [A, B, C, D] = lines;
        

        Se forem 2 valores por linha, como no exercício do Beecrowd 1015:

        var [x1, y1] = lines[0].split(" ");
        var [x2, y2] = lines[1].split(" ");
        

        Testa e se tiver qualquer problema, estou à disposição :)

        1. C
          Em resposta aeva:
          Camila Vieira @CamilaVieira
            2023-10-24 20:25:20.068Z

            Dá pra fazer em uma linha sim. Faz assim:

            let [A, B, C] = lines.shift().split(" ").map(item => parseInt(item))
            

            O .split(" ") é pra transformar a string em um array, separando a cada espaço em branco. O método .map() pega cada item desse array e retorna o valor no tipo inteiro. Com o [A, B, C], o array será desestruturado e o valor de cada índice será armazenado nas variáveis A, B e C.

            1. Em resposta aeva:

              Existem algumas formas de lidar com isso.

              Se você quiser armazenar os valores em diferentes variáveis, você pode utilizar:

              let [A, B, C, D, E, F] = lines.map(Number)
              

              O map vai percorrer os itens do array, que são strings, converter pra números, e eles serão armazenados nas variáveis, na mesma ordem, tendo 6 variáveis (A...F) numéricas.

              Se você não precisa separá-los e quer apenas convertê-los e armazená-los em uma variável transformando o array de string em numérico, você utiliza:

              let numbers = lines.map(Number)
              

              Assim você terá uma nova variável escolhida por você, com os valores convertidos em número.

              1. T
                Em resposta aeva:
                Thiago Regueira @thiagoregueira
                  2023-10-24 20:18:18.047Z

                  teria como criar um laço de repetição para ler quantos dados forem necessários, abaixo deixo um exemplo com laço for, inclusive é de um dos exercícios do beecrowd.

                  let quantidadePositivos = 0;

                  for (let i = 1; i <= 6; i++) {
                  const valor = parseFloat(prompt("Digite um valor:"));

                  if (valor > 0) {
                  quantidadePositivos++;
                  }
                  }

                  console.log(quantidadePositivos + " valores positivos");

                  Nesse caso o código lerá 6 valores digitados pelo usuário.

                  1. Em resposta aeva:

                    Oi.
                    O beecrowd ja entrega o "lines" como um array por fazer o "split()" no "input".
                    Você pode fazer a leitura usando diretamente o array lines em um loop, ou atribuir cada valor do array a uma variável que você nomear.
                    Eu não sei se é a forma correta, mas achei mais facil trabalhar com o laço diretamente no lines.

                    1. Em resposta aeva:
                      alzira eva cavalcanti alves @eva
                        2023-10-25 18:38:49.923Z

                        Obrigada a todos, me ajudaram muito.