Ir ao conteúdo
  • Cadastre-se
ArthurMelo777

VisualG Problemas na construção de um algoritmo copa

Recommended Posts

Meu professor de programação me mandou fazer um algoritmo no VisualG, porém estou com dificuldade quando os valores empatam, se alguem puder me ajudar, eu agradeço.

Segue o Algoritmo com comentários para facilitar

 

Código:

Spoiler

algoritmo "COPA"

var
   sel1,sel2,sel3,sel4,c1,c2:literal //seleções
   k,r1,r2:inteiro //resultados e variavel de controle
   p1,p2,p3,p4:inteiro //pontuação
   sg1,sg2,sg3,sg4:inteiro //saldo de gols
   gl1,gl2,gl3,gl4:inteiro //gols levados
   tg1,tg2,tg3,tg4:inteiro //total de gols
   pe1,pe2,pe3,pe4,pe1s,pe2s,pe3s,pe4s,pe1t,pe2t,pe3t,pe4t:inteiro //gols no empate
   sge1,sge2,sge3,sge4,sge1s,sge2s,sge3s,sge4s,sge1t,sge2t,sge3t,sge4t:inteiro //saldo de gols no empate
   tge1,tge2,tge3,tge4,tge1s,tge2s,tge3s,tge4s,tge1t,tge2t,tge3t,tge4t:inteiro //total de gols no empate
inicio
escreval("===================================  COPA  =======================================")
escreval("=================================  Grupo 1  =======================================")

escreval("Digite os nomes das seleções: ")
leia(sel1,sel2,sel3,sel4)

//recolher placares
escreval(sel1,"  X  ",sel2)
                 escreval("Digite o placar do jogo")
                 leia(r1)
                 escreval("  X  ")
                 leia(r2)
escreval()
se r1=r2 então
   p1:=p1+1
   p2:=p2+1
fimse

se r1>r2 então
   p1:=p1+3
   p2:=p2+0
fimse

se r2>r1 então
   p1:=p1+0
   p2:=p2+3
fimse

pe1:=p1
pe2:=p2
sge1:=r1-r2
sge2:=r2-r1
tge1:=r1
tge2:=r2
tg1:=tg1+r1
tg2:=tg2+r2
gl1:=gl1+r2
gl2:=gl2+r1

escreval(sel3,"  X  ",sel4)
                 escreval("Digite o placar do jogo")
                 leia(r1)
                 escreval("  X  ")
                 leia(r2)
escreval()
se r1=r2 então
   p3:=p3+1
   p4:=p4+1
fimse

se r1>r2 então
   p3:=p3+3
   p4:=p4+0
fimse

se r2>r1 então
   p3:=p3+0
   p4:=p4+3
fimse

pe3:=p3
pe4:=p4
sge3:=r1-r2
sge4:=r2-r1
tge3:=r1
tge4:=r2
tg3:=tg3+r1
tg4:=tg4+r2
gl3:=gl3+r2
gl4:=gl4+r1

escreval(sel1,"  X  ",sel3)
                 escreval("Digite o placar do jogo")
                 leia(r1)
                 escreval("  X  ")
                 leia(r2)
escreval()
se r1=r2 então
   p1:=p1+1
   p3:=p3+1
   pe1s:=pe1s+1
   pe3s:=pe3s+1
fimse

se r1>r2 então
   p1:=p1+3
   p3:=p3+0
   pe1s:=pe1s+3
   pe3s:=pe3s+0
fimse

se r2>r1 então
   p1:=p1+0
   p3:=p3+3
   pe1s:=pe1s+0
   pe3s:=pe3s+3
fimse

sge1s:=r1-r2
sge3s:=r2-r1
tge1s:=r1
tge3s:=r2
tg1:=tg1+r1
tg3:=tg3+r2
gl1:=gl1+r2
gl3:=gl3+r1

escreval(sel2,"  X  ",sel4)
                 escreval("Digite o placar do jogo")
                 leia(r1)
                 escreval("  X  ")
                 leia(r2)
escreval()
se r1=r2 então
   p2:=p2+1
   p4:=p4+1
   pe2s:=pe2s+1
   pe4s:=pe4s+1
fimse

se r1>r2 então
   p2:=p2+3
   p4:=p4+0
   pe2s:=pe2s+3
   pe4s:=pe4s+0
fimse

se r2>r1 então
   p2:=p2+0
   p4:=p4+3
   pe2s:=pe2s+0
   pe4s:=pe4s+3
fimse

sge2s:=r1-r2
sge4s:=r2-r1
tge2s:=r1
tge4s:=r2
tg2:=tg2+r1
tg4:=tg4+r2
gl2:=gl2+r2
gl4:=gl4+r1

escreval(sel1,"  X  ",sel4)
                 escreval("Digite o placar do jogo")
                 leia(r1)
                 escreval("  X  ")
                 leia(r2)
escreval()
se r1=r2 então
   p1:=p1+1
   p4:=p4+1
   pe1t:=pe1t+1
   pe4t:=pe4t+1
fimse

se r1>r2 então
   p1:=p1+3
   p4:=p4+0
   pe1t:=pe1t+3
   pe4t:=pe4t+0
fimse

se r2>r1 então
   p1:=p1+0
   p4:=p4+3
   pe1t:=pe1t+0
   pe4t:=pe4t+3
fimse

sge1t:=r1-r2
sge4t:=r2-r1
tge1t:=r1
tge4t:=r2
tg1:=tg1+r1
tg4:=tg4+r2
gl1:=gl1+r2
gl4:=gl4+r1

escreval(sel2,"  X  ",sel3)
                 escreval("Digite o placar do jogo")
                 leia(r1)
                 escreval("  X  ")
                 leia(r2)
escreval()
se r1=r2 então
   p2:=p2+1
   p3:=p3+1
   pe2t:=pe2t+1
   pe3t:=pe3t+1
fimse

se r1>r2 então
   p2:=p2+3
   p3:=p3+0
   pe2t:=pe2t+3
   pe3t:=pe3t+0
fimse

se r2>r1 então
   p2:=p2+0
   p3:=p3+3
   pe2t:=pe2t+0
   pe3t:=pe3t+3
fimse

sge2t:=r1-r2
sge3t:=r2-r1
tge2t:=r1
tge3t:=r2
tg2:=tg2+r1
tg3:=tg3+r2
gl2:=gl2+r2
gl3:=gl3+r1

sg1:=tg1-gl1
sg2:=tg2-gl2
sg3:=tg3-gl3
sg4:=tg4-gl4


//teste de pontos, saldo de gols e total de gols para ver quais seleções foram classificadas para proxima fase
//OBS: SÃO CLASSIFICADAS DUAS SELEÇÕES
se ((p1>p2) e (p1>p3) e (p1>p4)) e ((p2>p1) ou (p2>p3) e (p2>p4)) então
   c1:=sel1
   c2:=sel2
           se ((sg1>sg2) e (sg1>sg3) e (sg1>sg4)) e ((sg2>sg1) ou (sg2>sg3) e (sg2>sg4)) então
                   c1:=sel1
                   c2:=sel2
           fimse
                     se ((tg1>tg2) e (tg1>tg3) e (tg1>tg4)) e ((tg2>tg1) ou (tg2>tg3) e (tg2>tg4)) então
                             c1:=sel1
                             c2:=sel2
                     fimse
fimse

se ((p1>p2) e (p1>p3) e (p1>p4)) e ((p3>p1) ou (p3>p2) e (p3>p4)) então
   c1:=sel1
   c2:=sel3
fimse
     se ((sg1>sg2) e (sg1>sg3) e (sg1>sg4)) e ((sg3>sg1) ou (sg3>sg2) e (sg3>sg4)) então
        c1:=sel1
        c2:=sel3
     fimse
          se ((tg1>tg2) e (tg1>tg3) e (tg1>tg4)) e ((tg3>tg1) ou (tg3>tg2) e (tg3>tg4)) então
                 c1:=sel1
                 c2:=sel3
          fimse

se ((p1>p2) e (p1>p3) e (p1>p4)) e ((p4>p1) ou (p4>p3) e (p4>p2)) então
  c1:=sel1
  c2:=sel4
fimse
     se ((sg1>sg2) e (sg1>sg3) e (sg1>sg4)) e ((sg4>sg1) ou (sg4>sg2) e (sg4>sg3)) então
        c1:=sel1
        c2:=sel4
     fimse
          se ((tg1>tg2) e (tg1>tg3) e (tg1>tg4)) e ((tg4>tg1) ou (tg4>tg2) e (tg4>tg3)) então
                 c1:=sel1
                 c2:=sel4
          fimse

se ((p2>p1) e (p2>p3) e (p2>p4)) e ((p3>p2) ou (p3>p1) e (p3>p4)) então
  c1:=sel2
  c2:=sel3
fimse
     se ((sg2>sg1) e (sg2>sg3) e (sg2>sg4)) e ((sg3>sg2) ou (sg3>sg1) e (sg3>sg4)) então
        c1:=sel2
        c2:=sel3
     fimse
          se ((tg2>tg1) e (tg2>tg3) e (tg2>tg4)) e ((tg3>tg2) ou (tg3>tg1) e (tg3>tg4)) então
                 c1:=sel2
                 c2:=sel3
          fimse

se ((p2>p1) e (p2>p3) e (p2>p4)) e ((p4>p2) ou (p4>p1) e (p4>p3)) então
  c1:=sel2
  c2:=sel4
fimse
     se ((sg2>sg1) e (sg2>sg3) e (sg2>sg4)) e ((sg4>sg2) ou (sg4>sg1) e (sg4>sg3)) então
        c1:=sel2
        c2:=sel4
     fimse
          se ((tg2>tg1) e (tg2>tg3) e (tg2>tg4)) e ((tg4>tg2) ou (tg4>tg1) e (tg4>tg3)) então
                 c1:=sel2
                 c2:=sel4
          fimse

se ((p3>p1) e (p3>p2) e (p3>p4)) e ((p4>p3) ou (p4>p1) e (p4>p2)) então
  c1:=sel3
  c2:=sel4
fimse
     se ((sg3>sg1) e (sg3>sg2) e (sg3>sg4)) e ((sg4>sg3) ou (sg4>sg1) e (sg4>sg2)) então
        c1:=sel3
        c2:=sel4
     fimse
          se ((tg3>tg1) e (tg3>tg2) e (tg3>tg4)) e ((tg4>tg3) ou (tg4>tg1) e (tg4>tg2)) então
                 c1:=sel3
                 c2:=sel4
          fimse
          
//caso de empate
se (p1=p2) e (sg1=sg2) e (tg1=tg2) então
   se ((pe1>pe2) ou (sge1>sge2) ou (tge1>tge2)) ou ((pe1<pe2) ou (sge1<sge2) ou (tge1<tge2)) então
      c1:=sel1
      c2:=sel2
   fimse
fimse

se (p3=p4) e (sg3=sg4) e (tg3=tg4) então
   se ((pe3>pe4) ou (sge3>sge4) ou (tge3>tge4)) ou ((pe3<pe4) ou (sge3<sge4) ou (tge3<tge4)) então
      c1:=sel3
      c2:=sel4
   fimse
fimse

se (p1=p3) e (sg1=sg3) e (tg1=tg3) então
   se ((pe1s>pe3s) ou (sge1s>sge3s) ou (tge1s>tge3s)) ou ((pe1s<pe3s) ou (sge1s<sge3s) ou (tge1s<tge3s)) então
      c1:=sel1
      c2:=sel3
   fimse
fimse


se (p2=p4) e (sg2=sg4) e (tg2=tg4) então
   se ((pe2s>pe4s) ou (sge2s>sge4s) ou (tge2s>tge4s)) ou ((pe2s<pe4s) ou (sge2s<sge4s) ou (tge2s<tge4s)) então
      c1:=sel2
      c2:=sel4
   fimse
fimse

se (p1=p4) e (sg1=sg4) e (tg1=tg4) então
   se ((pe1t>pe4t) ou (sge1t>sge4t) ou (tge1t>tge4t)) ou ((pe1t<pe4t) ou (sge1t<sge4t) ou (tge1t<tge4t)) então
      c1:=sel1
      c2:=sel4
   fimse
fimse

se (p2=p3) e (sg2=sg3) e (tg2=tg3) então
   se ((pe2t>pe3t) ou (sge2t>sge3t) ou (tge2t>tge3t)) ou ((pe2t<pe3t) ou (sge2t<sge3t) ou (tge2t<tge3t)) então
      c1:=sel2
      c2:=sel3
   fimse
fimse

escreval(c1," e ",c2," passaram para proxima fase")
fimalgoritmo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 17/06/2018 às 10:08, Simon Viegas disse:

@ArthurMelo777, já estudou laços de repetições, como para, enquanto e repita?

Já estudou vetores e matrizes?

 

Dá para simplificar, e muito, esse algoritmo.

 

 

Laços de repetições sim, vetores e matrizes não. Você poderia me explicar como faz com as repeticoes, por favor?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que está dando errado no algoritmo é que, ao processar, por exemplo, que p1 é maior que p2, ele vai armazenar p1 em c1 e p2 em c2. Até aí tudo bem. Porém, se o algoritmo localizar um empate, as variaveis do empate também ficarão armazenadas em c1 e c2, substituindo as primeiras.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, poste o enunciado completo do problema.

 

No aguardo.

adicionado 39 minutos depois
2 horas atrás, ArthurMelo777 disse:

Laços de repetições sim, vetores e matrizes não. Você poderia me explicar como faz com as repeticoes, por favor?

 

De um modo geral, uma coisa está relacionada a outra (vetores e laços repetições)... veja, uma das utilidades das repetições seria uma maneira de "economizar linhas de código", ou seja, evitar reescrever códigos repetidos. Perceba que no seu código, para cada jogo, você fica solicitando o placar e faz as verificações. Esses trechos são praticamente iguais, só muda os times! Daí, utilizando laços, poderia evitar essas repetições... colocando os devidos trechos num laço... fazer repetir essas partes na execução... o problema é que as variáveis são diferentes (pois são times diferentes), ai entraria os vetores... pois é possível agrupar as variáveis em uma estrutura só.

 

No seu código tem uma variável para cada seleção, ex.:

Em 16/06/2018 às 18:46, ArthurMelo777 disse:

var
   sel1,sel2,sel3,sel4 :literal //seleções

 

 

Para acessar uma dessas variáveis, é necessário informar a variável em si, ex.:

Em 16/06/2018 às 18:46, ArthurMelo777 disse:

escreval("Digite os nomes das seleções: ")
leia(sel1,sel2,sel3,sel4)

 

 

 

Já com vetores, poderia ficar algo como:

var
   selecoes:vetor [1..4] de caractere //seleções (caractere = literal)

Ai, é possível escolher qual "variável" quer passando a posição, ex.:

leia(selecoes[1],selecoes[2],selecoes[3],selecoes[4])

Até igual, correto? está precisando passar cada umas das posições...  Mas acontece que é possível utilizar uma variável para determinar a posição do vetor, ficaria algo como:

algoritmo "TESTE VETOR"
var
   selecoes :vetor [1..4] de caractere //nomes das selecoes    obs.: caractere = literal
   i        :inteiro //usado para acessar as posições no vetor
   
inicio
para i de 1 ate 4 faca
   escreva ("Digite o nome da",i,"ª seleção: ")
   leia(selecoes[i]) //<-- a posição está na variável i. Que é controlado pelo laço de repetição
fimPara
fimAlgoritmo

Ou seja, o laço de repetição para foi configurado para fazer a variável i ir de 1 até 4. Ai, quando chega no leia(), vai ler primeiro a posição 1, depois a 2, 3 e 4. Por ai vai... Sem vetores, se fossem 80 Seleções, você precisaria copiar e ajustar 80 vezes a leitura. Com vetores, basta mudar o tamanho para ir de 1 a 80, e ajustar o para para ir de 1 até 80 também. Entende?

 

Cada seleção ficaria relacionada a uma posição... na hora do jogo, informaria a posição correspondente nos vetores. Ficaria tudo mais simples.

 

 

***

 

Em fim. Dependemos inicialmente de duas coisas:

1- O que o enunciado pede (tem que ser feito o que foi pedido. Poste o enunciado completo para analisarmos);

2- Verifica o que pode ser utilizado vetores ou não, ou seja, se ainda não deu vetores, talvez não seja permitido usar. Você só pode usar o que foi "oficialmente" estudado. Naturalmente existe uma cronologia de estudos. A não ser que o professor autorize!!!  (por exemplo: o professor propositalmente quer que seja feito sem vetores, para depois melhor explicar os benefícios quando for a hora de aprender).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, o professor falou que, como ele ainda não passou vetores, não podemos usar na atividade. O meu problema está sendo na classificação. Ele disse que colocar os valores em ordem (decrescente) ajudaria, mas não consigo entender como fazer isso nem como isso ajudaria. Posto o enunciado já já

adicionado 2 minutos depois

A classificação na primeira fase se dará nessa ordem de critérios:

1) Número de pontos ganhos em todos os jogos;

2) Saldo de gols em todos os jogos;

3) Número de gols marcados em todos os jogos;

       

        Se duas ou mais seleções empatarem em todos os quesitos acima, o desempate se baseará no confronto direto, seguindo os critérios abaixo:

4) Número de pontos ganhos nos confrontos diretos entre as seleções empatadas;

5) Saldo de gols dos confrontos diretos das seleções empatadas;

6) Número de gols marcados nos confrontos diretos das seleções empatadas;

7) Sorteio a ser realizado pelo Comitê Organizador da FIFA. (usar o comando aleatório)

 

Aqui está o enunciado da classificação.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, sem vetores, será uma tarefa bem complicada para implementar esse algoritmo.

 

Agora entendi a sua dúvida central:

Em 16/06/2018 às 18:46, ArthurMelo777 disse:

porém estou com dificuldade quando os valores empatam, se alguem puder me ajudar, eu agradeço.

 

Particularmente não vejo como isso seja possível sem uso de vetores.

 

 

Vejamos os critérios:

7 horas atrás, ArthurMelo777 disse:

A classificação na primeira fase se dará nessa ordem de critérios:

1) Número de pontos ganhos em todos os jogos;

2) Saldo de gols em todos os jogos;

3) Número de gols marcados em todos os jogos;

        Se duas ou mais seleções empatarem em todos os quesitos acima, o desempate se baseará no confronto direto, seguindo os critérios abaixo:

4) Número de pontos ganhos nos confrontos diretos entre as seleções empatadas;

5) Saldo de gols dos confrontos diretos das seleções empatadas;

6) Número de gols marcados nos confrontos diretos das seleções empatadas;

7) Sorteio a ser realizado pelo Comitê Organizador da FIFA. (usar o comando aleatório)

 

Para verificar os critérios do 4 em diante, creio que seria necessário armazenar dados em variáveis específicas... isso para cada um dos jogos. Sendo que precisará gerenciar 6 grupos.

 

 

Comece rearrumando as variáveis.

Algo como:

algoritmo "COPA"
var
   //DADOS DAS SELEÇÕES
   selecao1, selecaol2, selecao3, selecao4 :caractere //nomes das Seleções
   p1 , p2 , p3 , p4  :inteiro //pontuação
   gp1, gp2, sg3, sg4 :inteiro //gols pro
   gc1, gc2, gc3, gc4 :inteiro //gols contra

inicio

fimAlgoritmo

 

Ai, acho que vai ser necessário armazenar os dados de cada partida, algo como:

algoritmo "COPA"
var
   //DADOS DAS SELEÇÕES
   selecao1, selecaol2, selecao3, selecao4 :caractere //nomes das Seleções
   p1 , p2 , p3 , p4  :inteiro //pontuação
   gp1, gp2, sg3, sg4 :inteiro //gols pro
   gc1, gc2, gc3, gc4 :inteiro //gols contra


   //Critério 1: NÚMEROS DE PONTOS CONFRONTOS DIRETOS
   //vitoria time esquerda = 3
   //empate                = 1
   //vitoria time direita  = -3
   partida1x2, partida1x3, partida1x4 :inteiro
   partida2x3, partida2x4             :inteiro
   partida3x4                         :inteiro
   
   //Critério 2: SALDO DE GOLS CONFRONTOS DIRETOS
   //será a diferença do time da esquerda pelo time da direita
   saldoGCD1x2, saldoConf1x3, saldoConf1x4 :inteiro
   saldoGCD2x3, saldoConf2x4               :inteiro
   saldoGCD3x4                             :inteiro
   
   //Critério 3: número gols confrontos diretos
   //vitoria time esquerda = gol do time da esquerda
   //empate                = 0
   //vitoria time direita  = gol do time da direita
   numGCD1x2, numGCD1x3, numGCD1x4 :inteiro
   numGCD2x3, numGCD2x4             :inteiro
   numGCD3x4                       :inteiro
   
inicio

fimAlgoritmo

 

Tente entender a estrutura e ai vai implementando...

 

Qualquer dúvida é só pergunta.

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas Cara, o que eu ainda não entendi é a logica dos empates. Acho que já citei em cima, que o professor disse que seria necessário organizar os valores, acho que para passar de fase os que tivessem maior pontuação. Porém não vejo como organizar os valores. Você poderia me ajudar com isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 horas atrás, ArthurMelo777 disse:

@Simon Viegas Cara, o que eu ainda não entendi é a logica dos empates. Acho que já citei em cima, que o professor disse que seria necessário organizar os valores, acho que para passar de fase os que tivessem maior pontuação. Porém não vejo como organizar os valores. Você poderia me ajudar com isso?

 

A ideia do código a cima seria isso. Como não tem vetores, cada dado do critério de desempate poderia ficar em uma variável. Após ter os resultados das partidas, compararia quem foi classificado...ai vai em ordem. Vai o critério 1, se empatar, vai por 2, se empatar vai pro 3, se empatar vai pro 4.... até o 7.

adicionado 2 minutos depois

ai, os item 4, 5 e 6 estarão nessas variáveis extras.

 

Tente o seguinte. Apenas inicialmente considere que apenas um time é classificado. Vá comparando item a item.

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Simon Viegas disse:

 

A ideia do código a cima seria isso. Como não tem vetores, cada dado do critério de desempate poderia ficar em uma variável. Após ter os resultados das partidas, compararia quem foi classificado...ai vai em ordem. Vai o critério 1, se empatar, vai por 2, se empatar vai pro 3, se empatar vai pro 4.... até o 7.

adicionado 2 minutos depois

ai, os item 4, 5 e 6 estarão nessas variáveis extras.

 

Tente o seguinte. Apenas inicialmente considere que apenas um time é classificado. Vá comparando item a item.

Ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×