Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pfcneves

Vetores com tamanhos definidos para armazenar pares e impares.

Recommended Posts

Viva pessoal,

Antes de mais gostaria de agradecer dicas anteriores de usuários do forum... acreditem que estou a aprender mais aqui que na faculdade :)

 

Agora estou a montar um programa onde existem 2 vetores (pares e impares) com tamanho fixo (5 cada) que solicita a inserção de 10 números, armazenando-os no vetor correspondente. Para além disso, caso um dos vetores já esteja completo será mostrado um alerta a indicar que por exemplo o vetor Pares está cheio e só serão aceites números impares a partir daí.

 

Inicialmente fiz este código:

var numeros = [],
	pares = [],
	impares = [],
    i = 0,
    j = 10;

for (i = 1; i <= 10; i++) {
  var x = parseFloat(prompt("Digite o "+ i +"º numero:"));
  numeros.push(x);
}


while(j--) {
  if (j % 2 == 0) {
    pares.push(numeros[j]);
	}
	
  if (j % 2 != 0) {
    impares.push(numeros[j]);
  }
}

e inseri os números inteiros de 1 a 10...

 

mas os resultado apresentado foi este:

 

Numeros [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Números pares [9, 7, 5, 3, 1]
Números impares [10, 8, 6, 4, 2]
Na verdade estava à espera exatamente do oposto...
Deixando esta situação para tentar resolver depois, porque mesmo valores errados o programa esta a armazenar, aí tentei fazer a limitação do número de números armazenados, ou seja, se digitasse 6 numeros pares ele não aceitaria o 6º e daria um alerta e modifiquei o código da seguinte forma:
  if (j % 2 == 0 && pares[] <= 5) {
    pares.push(numeros[j]);
	}else
	alert("O armazenamento de pares está completo, digite só impares.");

Mas o alerta só é mostrado no final 5 vezes...

 

Alguém me pode dar uma dica sobre o que está errado na minha lógica???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce esta comparando o valor de J. e nao deveria ser

vc tem que comparar o numero que foi inserido

 

eu sugiro:

 

no for

vc pega o numero;

é par?

se sim,

verifica se o tamanho do array é maior que 5

se for da um aviso e sai

se nao

adiciona no array de par e sai

 

se nao for par

faz o mesmo que acima mas no array de impares

 

obs. nao testei.

lembrando que existe várias maneira de fazer isso

e dei so uma idéia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Electronic

 

Já tentei de tudo e não estou a conseguir que funcione...

 

Ficou assim, mas dá erros atrás uns dos outros:

var numeros = [],
	pares = [],
	impares = [],
    i = 0,
    j = 10;

for (i = 1; i <= 10; i++) {
  var x = parseFloat(prompt("Digite o "+ i +"º numero:"));
 
while(j--) {
 if (x % 2 == 0) {
	if (pares.length <= 5) {
    pares.push(numeros[j]);
	} else
	alert("O armazenamento de pares está completo, digite só impares.");
	}
if (x % 2 != 0) {
	if (impares.length <= 5) {
    impares.push(numeros[j]);
	} else
	alert("O armazenamento de impares está completo, digite só pares.");
	}
}

  numeros.push(x);
}

Podes dizer-me onde estou a errar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. Vc não precisa do while dentro do for

2. Vc tem q rodar o loop até completar os 2 arrays, e continuar perguntando o mesmo número, caso o cara erre

 

<script>
var pares = [],
    impares = [],
    i = 1,
    x;


while ((pares.length + impares.length) < 10) {

  x = parseFloat(prompt("Digite o "+ i +"º numero:"));
  if (x % 2 == 0) {
    if (pares.length >= 5) {
      alert("O armazenamento de pares está completo, digite só impares.");
    } else {
      pares.push(x);
      i++;
    }
  }

  if (x % 2 != 0) {
    if (impares.length >= 5) {
      alert("O armazenamento de impares está completo, digite só pares.");
    } else {
      impares.push(x);
      i++;
    }
  }
}

console.log('pares', pares);
console.log('impares', impares);
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é melhor o while mesmo e não o for,

com o for limitado a 10, se ele tentasse inserir em um array cheio, nessa itaração não estaria adiconando em nenhum array e no fim loop teria array com menos de 5 items

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado William, funcionou direitinho...

A minha lógica estava bem errada... ao ponto que até me apareciam números impares no vetor dos pares e vice versa.

Valeu tb Electronic pelas dicas...

Alguém sabe de algum bom tutorial na net para javascript??? ou um livro que me recomendem?

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.