Ir ao conteúdo

Posts recomendados

Postado

Boa tarde!

 

Criei o seguinte algoritmo para o problema abaixo, porém ao realziar os testes a quantidade de acertos não bate com a numeração de resultado proposta. Poderiam me ajudar?

 

Problema:

 

''Escrever um algoritmo que lê um vetor com 6 elementos, que é o resultado de um sorteio da Sena, e o mostra. Em seguida ler outro vetor, também com 6 elementos, que é a aposta de um apostador. Em seguida comparar os vetores e mostrar o número de acertos do apostador.''

 

algoritmo "Mega sena"
// Função :
// Autor :
// Data : 14/05/2017
// Seção de Declarações
var
RE : VETOR[1..6] DE inteiro
AP : VETOR[1..6] DE inteiro
i, j, cont : inteiro

inicio
// Seção de Comandos

cont <- 0
para i de 1 ate 6 faca
Escreval ("Digite o ", i, "º número do resultado do concurso da Mega Sena")
Leia (RE[i])
fimpara
para j de 1 ate 6 faca
Escreval ("Digite o ", j, "° número de sua aposta do concurso da Mega Sena")
Leia (AP[j])
fimpara
para i de 1 ate 5 faca
para j de i+1 ate 6 faca
se(RE[i] = AP[j])então
cont <- cont + 1
fimse
fimpara
fimpara
Escreva ("O resultado do concurso é: ", RE )
Escreva ("O total de acertos foi de: ", cont )
fimalgoritmo

 

  • Curtir 2
Postado

@Vinícius Theófilo   Na hora de testar você colocou para ir de i+1 ate 6, com isso ele não testa a primeira posição do vetor .

veja como seu código ficaria :

algoritmo "Mega sena"
// Função :
// Autor :
// Data : 14/05/2017
// Seção de Declarações
var
  RE : VETOR[1..6] DE inteiro
  AP : VETOR[1..6] DE inteiro
  i, j, cont : inteiro

inicio
// Seção de Comandos
  cont <- 0
  para i de 1 ate 6 faca
    Escreva("Digite o ",i,"º número do resultado do concurso da Mega Sena")
    Leia (RE[i])
  fimpara
  escreval
  para j de 1 ate 6 faca
    Escreva("Digite o ",j,"° número de sua aposta do concurso da Mega Sena")
    Leia (AP[j])
  fimpara
  para i de 1 ate 6 faca
    para j de 1 ate 6 faca
      se RE[i] = AP[j] então
        cont := cont + 1
      fimse
    fimpara
  fimpara
  Escreval("O resultado do concurso é: ", RE[1],re[2],re[3],re[4],re[5],re[6] )
  Escreva ("O total de acertos foi de: ", cont )
fimalgoritmo

 

  • Curtir 2
  • Membro VIP
Postado

Só complementando...

 

16 horas atrás, Vinícius Theófilo disse:

para i de 1 ate 5 faca
   para j de i+1 ate 6 faca
      se (RE[i] = AP[j]) ENTÃO
         cont <- cont + 1
      fimse
   fimpara
fimpara

 

Nesse código você estará comparando apenas com a com a posição i+1 pra frente para cada i em j, ou seja, para a primeira posição em RE, será comparado em AP[2], AP[3] etc... Em i=2, irá de AP[3] em diante!! Logo, deixando de verificar os valores anteriores, por exemplo, RE[3] com AP[1], AP[2] e AP[3]... por ai vai.

 

Essa sua lógica funcionaria se fosse uma comparação com o próprio vetor, ou seja, RE com RE ou AP com AP, pois evitaria que se comparasse posições iguais (ex.: AP[2] com AP[2],  já que SEMPRE seria igual) e nem compararia posições repetidas (ex.: AP[2] com AP[4] e AP[4] com AP[2], como seria o mesmo vetor, acaba sendo a mesma coisa. Obs.: sem o "+1", também compararia duas vezes a mesma posição, ex.: AP[i ] com AP[j] e AP[j] com A[i ]), já que no irá de "posição atual" com "próxima posição" em diante...

 

Já no código de @devair1010, ele vai comparar "todas as posições de RE, com cada posição de AP, já que são vetores diferentes. (e o contexto exige se seja comparados todas as posições)

 

 

  • Curtir 2
  • Membro VIP
Postado

@Vinícius Theófilo , show de bola...!!!

 

Caso queira aprimorar o código, estaremos a disposição.

 

Abaixo fiz umas modificações para demonstrar que é possível fazer o sorteio automático. Veja:

algoritmo "Mega sena"
// Função: Programa que ganhadores da mega-sena (ou algo do tipo)
// Autor : Vinícius Theófilo
// Agradecimentos: "devair1010" e "Simon Viegas" (Clube do Hardware)
// Data  : 14/05/2017   Versão atual: 17/05/2017
// Seção de Declarações

var
  RE, AP :vetor[1..6] DE inteiro
  cont   :inteiro
  i, j   :inteiro

inicio
// Seção de Comandos
cont <- 0
escreval(" ACERTOS MEGA-SENA 1.0")
escreval

ALEATORIO 1,60 //insere números aleatorios no "leia"
escreval("Numeros soteados (ENTER para cada número):")
para i de 1 ate 6 faca
  leia(RE[i])
fimpara
escreval
ALEATORIO OFF //fim do trecho aleatório

escreval("Numeros da aposta (ENTER para cada número):")
para j de 1 ate 6 faca
  leia(AP[j])
fimpara
escreval

para i de 1 ate 6 faca
  para j de 1 ate 6 faca
    se RE[i] = AP[j] ENTÃO
      cont := cont + 1
    fimse
  fimpara
fimpara

escreva ("O resultado do concurso é: ")
para i de 1 ate 6 faca
  escreva(RE[i])
fimpara
escreval
escreva ("O total de acertos foi de: ",cont)
fimalgoritmo

 

Se for o caso, minhas sugestões iniciais:

- além de exibir o resultado, também exibir o número jogado embaixo, para facilitar a comparação e ver os números de acertos;

- fazer o controle, via laço de repetição, para só aceitar números entre 1 e 60, ou seja, se digitar números fora dessa faixa, solicitar novamente

- etc


EXTRA (incluir em programa novo, pois extrapola o enunciado... seria como "treinamento/experiência")
- fazer o programa aceitar mais de uma aposta; (usar matrizes, ou seja, vetor com duas posições, um para o número da aposta, outro para os números dessa aposta [1..100,1..6]);

- com o recurso de aleatório, da para preencher as após que o usuário solicitar e/ou as que sobrarem, ou seja, se o cara pedir para "jogar pela maquininha", você gera os 6 números para ele...   para ajudar nos testes, o programa poderia gerar após os que sobrarem, tipo, só fizerem 3 apostas (ex.: digitou 0 para finalizar), ai o programa geraria as 97 que sobraram e vê quantos números cada aposta fez... poderia por exemplo só exibir o número das apostas que acertam 4, 5 ou 6 (o número da aposta está na primeira coordenada do vetor).

- para teste de acerto, poderia usar uma faixa menor de números, por exemplo, de 30 a 50, ou seja, limitando a 20 o número de possibilidades para cada número  (já que a chance de acertar as 6, com 1 a 60, é de mais de 1 em 56 milhões, logo, quase sempre não vai acertar nenhum!!!)

- etc

 

 

No aguardo.

  • Curtir 2
  • Membro VIP
Postado

Tente logo fazer essa primeira parte, pois pode ser útil para o seu problema em si...

 

31 minutos atrás, Simon Viegas disse:

Se for o caso, minhas sugestões iniciais:

- além de exibir o resultado, também exibir o número jogado embaixo, para facilitar a comparação e ver os números de acertos;

- fazer o controle, via laço de repetição, para só aceitar números entre 1 e 60, ou seja, se digitar números fora dessa faixa, solicitar novamente

- etc

 

Ai posta aqui para analisarmos...

 

No aguardo.

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!