Jump to content


Photo

Ajuda Com A Lógica Desse Script


  • Faça o login para participar
6 replies to this topic

#1 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 24/09/2008, 11:25

obs: o tópico é grande mas a dúvida é simples, só a explicação foi grande, me ajudem por favor :)

Bom, galera, to estudando muito mas algumas vezes ainda me falha a lógica do negócio e tenho de recorrer a vocês.
Vamos lá:

Declarei as variáveis:
<script>
sugestao = new Array();
numeros = new Array();
intInicio = 1;
intFim = 60;
j =0;
res = "";
ordenal = new Array("primeiro", "segundo", "terceiro", "quarto", "quinto", "sexto");
aposta = "";

Aqui o problema:
for(i=0; i<6; i++){
numeros[i] = prompt("Digite o " + ordenal[i] + " número");

for(j=0; j<6; j++){
if(numeros[i] == numeros[j] && i!=j){alert("Você já digitou esse número"); j=6; i--;}
}

if(numeros[i] > 60 || numeros[i] == ""){
alert("Digite um número entre 1 e 60"); i--;
}
else {aposta += " " + numeros[i];}
}


alert(aposta);
O primeiro for, vai percorrer o array, e guardar os valores digitados na posição [i]. Beleza.
Vamos esquecer o segundo for, por enquanto.
no if(numeros[i] > 60 || numeros[i] == "" eu verifico se o número é maior que 60 ou está vazio, coisa que não pode já que é um sorteio da megasena. Se for maior ou vazio, eu boto a mensagem e diminuo um no contador para ele voltar para a mesma posição.
No else, eu guardo o número na variável aposta, se ele for maior ou vazio, eu não vou guardar ele já que está no else.
Por ex:
"Digite o primeiro número" -> 10
"Digite o segundo número -> 20
"Digite o 3 número" -> 30
"Digite o 4número -> 40
"Digite o 5 número" ->50
"Digite o 6 número -> 60
Resultará em um alert: 10, 20, 30, 40, 50 e 60.

Se for maior que 60, por exemplo, 70, esse número não será guardado na variável "aposta", já que só é guardado, quem não é vazio ou maior que 60.

Acontece que eu fui verificar também, se o número digitado não foi igual a nenhum digitado antes, pois na megasena não pode por 2 números iguais. daí vem a parte:
for(j=0; j<6; j++){
if(numeros[i] == numeros[j] && i!=j){alert("Você já digitou esse número"); j=6; i--;}
}
ele percorre o array usando j, verifica se alguma posição de i é igual a posição de j, avisa que ja foi digitado, sai do FOR (j=6) e volta uma posição no i, pro usuário digita-la novamente.
Acontece que ele está sendo guardado na variável "aposta" já que ele não está entrando no if debaixo, ele entra direto no ELSE.

Tentem vocês mesmo, digitem primeiro números sem repetir, depois números maiores que 60 e na 3 tentativa números iguais, e vejam a diferença:
Script inteiro:

<html>

<script>
sugestao = new Array();
numeros = new Array();
intInicio = 1;
intFim = 60;
j =0;
res = "";
ordenal = new Array("primeiro", "segundo", "terceiro", "quarto", "quinto", "sexto");
aposta = "";

for(i=0; i<6; i++){
numeros[i] = prompt("Digite o " + ordenal[i] + " número");

for(j=0; j<6; j++){
if(numeros[i] == numeros[j] && i!=j){alert("Você já digitou esse número"); j=6; i--;}
}

if(numeros[i] > 60 || numeros[i] == ""){
alert("Digite um número entre 1 e 60"); i--;
}
else {aposta += " " + numeros[i];}
}


alert(aposta);


for(i=0; i<6; i++){
sugestao[i] = intFim - Math.floor((intFim - intInicio+1) * Math.random());
for (j=0; j < sugestao.length; j++){
if(sugestao[i] == sugestao[j] && i!=j){
sugestao[i] = intFim - Math.floor((intFim - intInicio+1) * Math.random());
i=0;
}
}
}



for(i=0; i < 6; i++){
			for(j=i+1; j<6; j++)
			{
				if (sugestao[i] > sugestao[j])
				{
					aux = sugestao[j];
					sugestao[j] = sugestao[i];
					sugestao[i] = aux;
				}
			}
res= res + " " + sugestao[i];
		}


alert("Números sorteados: " +'\n' +res);
contador = 0;
for(i=0; i<6; i++){
for(j=0;j<6;j++){
if(numeros[i] == sugestao[j]){
contador = contador + 1;
}
}
}
alert("Você acertou "+contador);
if(contador == 6){alert("PARABÉNS MILIONÁRIO")}

for(i=0; i<6;i++){
document.write(numeros[i]+"<br>");
}

document.write("<br>")

for(i=0; i<6;i++){
document.write(sugestao[i]+"<br>");
}

</script>

</html>

Valeu gente, ajuda aí por favor, ficou grande mas é simples.

#2 priscillinha29

priscillinha29

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 25/09/2008, 09:54

Pelo que eu percebi caso você digite os números iguais ele acaba guardando no array....e apresentando no final como alert.

#3 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 25/09/2008, 10:12

O certo é verificar primeiro e adicionar o valor depois.

- digite o número
- verifica se já existe
- adiciona no array

Você já grava o número direto, sem nenhuma validação.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#4 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 25/09/2008, 13:18

for(i=0; i<6; i++){
numeros[i] = prompt("Digite o " + ordenal[i] + " número");
for(j=0; j<6; j++){
if(numeros[i] == numeros[j] && i!=j){alert("Você já digitou esse número"); 

j=6; i--;}
}
Acontece que aqui ele não grava, eu acho que está certo.
Ele pega adiciona o número, e depois compara... e só mostra o alerta.
Ele tá gravando aqui:

if(numeros[i] > 60 || numeros[i] == ""){
alert("Digite um número entre 1 e 60"); i--;
}
else {aposta += " " + numeros[i];}
}
Se o número for maior que 60 ou vazio ele não faz nada e volta, se não ele grava... acontece que não sei porque, lá emcima, quando no 1 for, quando ele entra no IF, ele já grava o número. To sendo meio lento pra perceber mas to desde ontem pensando e não vai.

EDITADO²:
Tinha editado achando que tinha quase dado certo, mas não deu.

Edição feita por: fekz, 25/09/2008, 13:20.


#5 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 25/09/2008, 18:52

numeros[i] = prompt("Digite o " + ordenal[i] + " número");
Aqui ele já grava o número no array. Aí é que está o problema, você deveria verificar esse número antes de gravar no array.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#6 fekz

fekz

    12 Horas

  • Usuários
  • 243 posts
  • Sexo:Não informado

Posted 26/09/2008, 00:23

for(i=0; i<6; i++){
numeros[i] = prompt("Digite o " + ordenal[i] + " número");
for(j=0;j<6;j++){
if(numeros[i] == numeros[j] && i!=j){alert("numero igual"); j=7; i--;}}
if(numeros[i] < 10){numeros[i] = 0+numeros[i]}
if(numeros[i] > 60 || numeros[i] == 0 || numeros[i] < 0){
alert("Digite um número entre 1 e 60"); i--;
}
}

agora foi, vou por inteiro, se você puder testar, eu agradeço.

<html>

<script>
sugestao = new Array();
numeros = new Array();
intInicio = 1;
intFim = 60;
j =0;
res = "";
aposta = "";
ordenal = new Array("primeiro", "segundo", "terceiro", "quarto", "quinto", "sexto");
aposta = "";

for(i=0; i<6; i++){
numeros[i] = prompt("Digite o " + ordenal[i] + " número");
for(j=0;j<6;j++){
if(numeros[i] == numeros[j] && i!=j){alert("numero igual"); j=7; i--;}}
if(numeros[i] < 10){numeros[i] = 0+numeros[i]}
if(numeros[i] > 60 || numeros[i] == 0 || numeros[i] < 0){
alert("Digite um número entre 1 e 60"); i--;
}
}


for(i=0; i<6; i++){ /* ORDENA O ARRAY CRIADO PELO USUÁRIO */
			for(j=i+1; j<6; j++)
			{
				if (numeros[i] > numeros[j]) /*COMPARA O VETOR NA POSICAO I COM O VETOR NA POSICAO I+1 e vai jogando no auxiliar*/
				{
					aux = numeros[j];
					numeros[j] = numeros[i];
					numeros[i] = aux;
				}
			}
aposta= aposta + " " + numeros[i]; /*Guarda em uma string o primeiro numero seguido do segundo, terceiro, e etc.*/
		}


alert(aposta); /* Mostra a aposta*/


for(i=0; i<6; i++){ /*Cria o Array da sugestão*/
sugestao[i] = intFim - Math.floor((intFim - intInicio+1) * Math.random()); /*Sorteia um número*/
if(sugestao[i] < 10){sugestao[i] = "0"+sugestao[i]}
for (j=0; j < sugestao.length; j++){
if(sugestao[i] == sugestao[j] && i!=j){
sugestao[i] = intFim - Math.floor((intFim - intInicio+1) * Math.random());/*Sorteia outro número se já tiver um no array;*/
if(sugestao[i] < 10){sugestao[i] = "0"+sugestao[i]}
i=0;
}
}
}



for(i=0; i < 6; i++){ /*Ordena o vetor da aposta*/
			for(j=i+1; j<6; j++)
			{
				if (sugestao[i] > sugestao[j])
				{
					aux = sugestao[j];
					sugestao[j] = sugestao[i];
					sugestao[i] = aux;
				}
			}
res= res + " " + sugestao[i];
		}


alert("Números sorteados: " +'\n' +res); /* Mostra os números sorteados.*/
contador = 0;
for(i=0; i<6; i++){ /* Percorre os 2 arrays e compara, se for igual guarda no contador. */
for(j=0;j<6;j++){
if(numeros[i] == sugestao[j]){
contador = contador + 1;
}
}
}
alert("Você acertou "+contador); /* Mostra os acertos */
if(contador == 6){alert("PARABÉNS MILIONÁRIO")} /* Se alguém acertar 6 recebe a mensagem. */

for(i=0; i<6;i++){
document.write(numeros[i]+"<br>");
}

document.write("<br>")

for(i=0; i<6;i++){
document.write(sugestao[i]+"<br>");
}

</script>

</html>

Tem alguma coisa pra deixar ele mais certo?
esses 3 if's aí, eu puis um ELSE if, e não funcionou.

Valeu ;D

Edição feita por: fekz, 26/09/2008, 00:23.


#7 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 26/09/2008, 05:36

Você viu o script que eu postei no seu outro tópico? A lógica é praticamente a mesma, é só adaptar algumas coisas. Acho que daquele jeito o código fica mais limpo e mais lógico.

Quanto aos ifs, é bom deixar assim mesmo. O script só vai entrar no bloco do else if se o if for falso, por isso não dá.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq