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

Navegador travando com estrutura de repetição

Boa tarde!

Com base nesta primeira aula de estrutura de repetição eu tentei aplicar o que eu aprendi em aula e criar um programa que me mostrasse a renda per capita de uma família.

Este programa iria funcionar da seguinte forma: Iria capturar o número de pessoas que residem na casa e contribuem com a renda e depois dividir este valor.

A ideia que eu tive foi usar o prompt para capturar o número de pessoas que contribuem com a renda (exemplo: 5 pessoas). E depois usar um while para ficar repetindo (neste caso 5 vezes) o número de moradores para capturar o salário dos mesmos.

Mas logo após capturar o número de moradores da casa, meu navegador travou. O meu código está da seguinte forma:

<meta charset="UTF-8">

<script>

function pulaLinha(){
    document.write("<br>");
    document.write("<br>")
}

function mostra(mostra){
    document.write(mostra);
    pulaLinha();
}

var numeroMoradores = parseInt(prompt("Entre com o número de pessoas que contribuem com a renda na sua casa"));

while(numeroMoradores <= numeroMoradores){
    prompt("Digite o salário do morador " + numeroMoradores);
}

</script>

Caso prefiram visualizar no JS Bin: clique aqui.

Alguém mais experiente pode me dizer o que fiz de errado na minha lógica e me ensinar como corrigir?

13 respostas

O problema esta aqui

numeroMoradores <= numeroMoradores

Sempre será menor igual e seu loop nunca terminará. Tem que usar outra variável para ir incrementando e sair do loop. Pegou a ideia?

Oi Luiz? Precisa de ajuda? Se não ficou claro a pista que eu dei, grite! :)

Aguardo seu retorno!

Olá, professor!

Confesso que ainda estou um pouco confuso e não consegui entender muito bem. Acho que não estou conseguindo expressar muito bem o que eu quero para o computador em formato de código, diferente das suas aulas que está algo bem nítido e claro.

solução!

Veja um exemplo. Usei uma variável para saber se vc leu 1, 2, 3 vezes até. A quantidade de moradores lida:

<meta charset="UTF-8">

<script>

function pulaLinha(){
    document.write("<br>");
    document.write("<br>")
}

function mostra(mostra){
    document.write(mostra);
    pulaLinha();
}

var contador = 1;
var numeroMoradores = parseInt(prompt("Entre com o número de pessoas que contribuem com a renda na sua casa"));

while(contador  <= numeroMoradores){
    prompt("Digite o salário do morador " + contador );
   contador = contador + 1;
}

</script>

É um esqueleto de código. Ele vai evitar o loop infinito.

Agora tem que completar.

Se ainda não clareou me avise que detalho mais. Estou snarphone..ruim para digitar.

Oi Luiz! Cuidado com o JSBIN! Quando você tem exercício que faz loop, ele tende a bloquear porque é acha que é um código malicioso.

Quando for testar esse trecho de código que lhe passei, teste criando um arquivo localmente. Ele resolve o lance de perguntar tantas vezes, agora você precisa completar o código, capturar o valor digitado e calcular a média a tals. Estou aqui para te ajudar.

Ual! Agora ficou muito mais claro o que você fez Flávio, muito obrigado mesmo. O meu problema estava em minha lógica não é? Eu deveria ter feito um contador paralelo como você fez! O seu código rodou perfeito, como um profissional!

A respeito do JSBin, eu tentei desativar o Auto-Run para não dar crash igual deu aqui no meu PC.

É tão bom poder executar um Loop desses e saber que ele não vai travar sua máquina. rs

Eu possuo mais uma dúvida, não sei se posso tratar ainda neste tópico ou se eu necessito abrir outro. Mas ainda é a respeito deste mesmo programinha que eu estou tentando desenvolver.

Eu preciso armazenar o salário logo após eu perguntar a quantidade de moradores. Se o usuário digitar 3 moradores, são 3 salários para armazenar, 6 moradores, 6 salários.

Como eu armazeno isso? Como eu falo para um variável ir "incrementando" (somando) valores um após o outro?

Fiz da seguinte forma para armazenar apenas um valor:

while(contador <= numeroMoradores){
    var salario = parseInt(prompt("Digite o salário do morador " + contador));
    contador = contador + 1;
}

Funcionou, mas como disse para apenas um valor.

Para fazer o que eu preciso eu necessitarei criar um While para ir somando os salários dentro de um While já existente (isso ainda da um pouco de nó na minha cabeça rsrs)?

Muito obrigado mesmo por toda atenção! Suas aulas e explicações são muito boas!

Opa Luiz seu raciocínio a respeito dessa sua segunda dúvida está correto, você vai ter que armazenar os salários conforme a quantidade de pessoas, portanto você vai precisar de uma variável para guardar o valor total dos salários e uma outra para ir armazenando os valores digitados.Algo mais ou menos assim:

    var salarioTotal;
while(contador <= numeroMoradores){
        var salario = parseInt(prompt("Digite o salário do morador " + contador));
        contador = contador + 1;
     salarioTotal = salarioTotal + salario;
}

Ao final você pode trabalhar com a variável salarioTotal para obter a média ou realizar outros cálculos como a renda per capita. Caso persista alguma dúvida a respeito desse exercício pode perguntar aqui mesmo ou se você não tiver mais nenhuma dúvida a respeito você pode marcar uma resposta como solução, finalizando assim esse tópico.Espero ter ajudado. Bons estudos.

Olá Maison! Que bom que conseguiu entender minha dúvida. Havia pensado que não tinha conseguido ser muito claro.

O seu código representa exatamente o que eu queria fazer dentro da minha cabeça mas não conseguia explicar através de lógica para a máquina. rs

Infelizmente tive um pequeno problema para executar este código, na verdade...quando vou tentar ler a variável salarioTotal aparece como "undefined" no console e como "NaN" na página. Se me lembro bem disso nas aulas do Flávio é porque eu estou tentando somar número com texto (string), não é?

Como eu consigo solucionar isso visto que já usei o parseInt para armazenar o valor na variável salario?

Oi Luiz, pode colocar por completo o código que você escreveu aqui? Fica mais fácil para eu ver o estado atual do código e dar recomendações.

Olá professor!

Desculpe reviver este tópico e desculpe o meu desaparecimento. Infelizmente eu tenho um pouco de déficit de atenção e é uma verdadeira batalha conseguir levar projetos até o fim. Mas graças a sua metologia prática de ensino e com resultados rápidos eu voltei a este projeto de criar o programa que eu queria e estou quase conseguindo concluir este curso de Lógica de programação.

<meta charset="UTF-8">

<script>

    function pulaLinha(){

        document.write("<br>");
        document.write("<br>");
    }

    function mostra(frase){

        document.write(frase);
        pulaLinha();
    }

    var totalFamiliares = parseInt(prompt("Informe a quantidade de familiares que contribuem com renda na sua residência"));

    var contador = 1;

    var totalRenda = 0;

    while( contador <= totalFamiliares){
        var renda = parseInt(prompt("Informe a renda do morador " + contador));
        totalRenda = totalRenda + renda;
        contador++;
    }

    var mediaRendaFamiliar = totalRenda / totalFamiliares;
    mostra("A média da renda familiar da sua residência é: " + "R$" + mediaRendaFamiliar + " reais.");

    // R$937 é salário mínimo vigente
    var salarioMinimo = 937 + 937/2;

    //Lógica para verificar o direito ao passe Livre
    if(mediaRendaFamiliar <= salarioMinimo){

        mostra("Você tem direito ao passe Livre Estudantíl!<br>Solicite na secretaria da sua escola/faculdade.")
    } else {
        mostra("Você não tem diretio passe Livre Estudantíl.<br>Mas pode tentar solicitar o passe Meia Tarifa Estudantíl.");
    }

    mostra("FIM");

</script>

Apesar de ser algo simples é algo que eu venho tentando criar faz 1 ano e meio! Havia tentado criar algo do tipo na faculdade com Linguagem C mas era uma explicação muito difícil do professor e peguei um pouco de trauma da linguagem por acha-la muito complexa. rs

Agora fiquei muito entusiasmado com o que criei e vou tentar seguir neste ritmo, concluir meu curso de lógica e tentar aprender um pouco de HTML e CSS para deixar este programa mais bonito e procurar como aprender a usar o GitHub para mostrá-lo para os meus amigos.

Muito obrigado a todos que colaboraram neste fórum!

Oi Luiz! Você esta trilhando o caminho de um cangaceiro na programação. O mais importante é ter aguentado o tranco nesta parte inicial. Costumo dizer que você empurrou um carro parado, depois que ele esta em movimento as coisas ficam menos difíceis.

Sucesso e bom estudo meu aluno.