Thanks to visit codestin.com
Credit goes to github.com

Skip to content

brunosrtr/simulador_brasileirao_portugol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

🏆 Simulador de Tabela do Brasileirão – Portugol

Este projeto implementa um simulador completo do Campeonato Brasileiro utilizando Portugol WebStudio. O programa simula todas as partidas em turno e returno entre 20 equipes, contabilizando:

Pontos

Gols marcados

Gols sofridos

Saldo de gols

Ao final, uma tabela oficial formatada é exibida no console.

📌 Funcionalidades

Simulação de um campeonato com 20 times

Partidas de ida e volta (38 rodadas simuladas)

Distribuição aleatória de resultados usando u.sorteia

Cálculo automático de:

Pontos (3 vitória, 1 empate)

Gols marcados

Gols sofridos

Saldo de gols

Impressão de uma tabela ordenada do 1º ao 20º colocado

Formatação visual da tabela, alinhando nomes e colunas

📚 Tecnologias e Recursos Utilizados

Portugol WebStudio

Biblioteca interna Util (para sorteios)

Vetores para armazenar estatísticas dos times

Funções:

alinhaTexto() → alinha o nome do time para manter a tabela organizada

⚙️ Como funciona a simulação

O programa define uma lista com 20 times brasileiros.

Inicializa os vetores de pontos, gols marcados e gols sofridos.

Para cada par de times, simula:

Vitória do time A

Vitória do time B

Empate

Para cada resultado, gols são sorteados entre 1 e 3.

Ao final, o programa identifica repetidamente o time com mais pontos, exibe sua linha na tabela e zera seus pontos para encontrar o próximo colocado.

A tabela final é impressa com:

| CLUBE | PTS | GM | GS | SG |

🧮 Regras de pontuação

Vitória → +3 pontos

Empate → +1 ponto

Saldo de gols = golsMarcados - golsSofridos

Gols também são sorteados aleatoriamente usando:

u.sorteia(1,3)

🖥️ Saída esperada (exemplo simplificado)

_________________________________________________________
| CLUBE                 |  PTS  |  GM  |  GS   |   SG   |
|-----------------------|-------|------|-------|--------|
| 1  | Flamengo         |   78  |  55  |  22   |   33   |
| 2  | Palmeiras        |   74  |  48  |  19   |   29   |
...
| 20 | Sport            |   18  |  21  |  60   |  -39   |
---------------------------------------------------------

(Os valores mudam a cada execução, pois são sorteados.)

🧩 Explicação do Código

📌 Função alinhaTexto()

Responsável por padronizar o tamanho da coluna “CLUBE” usando espaços extras. Isso garante que a tabela fique alinhada visualmente.

📌 Simulação das partidas

Trecho responsável por simular ida e volta:

para (k = 0; k < 2; k++) {
    para (i = 0; i < 19; i++) {
        para (j = i + 1; j < 20; j++) {
            vencedor = u.sorteia(1,3)

Isso garante que cada time jogue duas vezes com todos os outros.

📌 Impressão da tabela final

O código encontra sempre o time com maior pontuação restante:

para (j = 0; j < 20; j++) {
    auxPontos = -1
    para (i = 0; i < 20; i++) {
        se (pontos[i] > auxPontos) então ...

E imprime do 1º ao 20º colocado.

▶️ Como executar

Abra o Portugol WebStudio

Cole todo o código do projeto

Clique em Executar

Observe a tabela completa sendo gerada no console

📄 Código Completo

programa {

  inclua biblioteca Util --> u

  cadeia times[20]

  funcao cadeia alinhaTexto(cadeia texto) {
    se (texto == "Vitória") retorne "| Vitória         "
    se (texto == "Atlético-MG") retorne "| Atlético-MG     "
    se (texto == "Bahia") retorne "| Bahia           "
    se (texto == "Botafogo") retorne "| Botafogo        "
    se (texto == "Ceará") retorne "| Ceará           "
    se (texto == "Corinthians") retorne "| Corinthians     "
    se (texto == "Cruzeiro") retorne "| Cruzeiro        "
    se (texto == "Flamengo") retorne "| Flamengo        "
    se (texto == "Fluminense") retorne "| Fluminense      "
    se (texto == "Fortaleza") retorne "| Fortaleza       "
    se (texto == "Grêmio") retorne "| Grêmio          "
    se (texto == "Internacional") retorne "| Internacional   "
    se (texto == "Juventude") retorne "| Juventude       "
    se (texto == "Mirassol") retorne "| Mirassol        "
    se (texto == "Palmeiras") retorne "| Palmeiras       "
    se (texto == "RB Bragantino") retorne "| RB Bragantino   "
    se (texto == "Santos") retorne "| Santos          "
    se (texto == "São Paulo") retorne "| São Paulo       "
    se (texto == "Sport") retorne "| Sport           "
    se (texto == "Vasco") retorne "| Vasco           "

    retorne texto
  }

  funcao inicio() {
    
      cadeia times[20], auxTime
      inteiro pontos[20], partidas[38], vencedor = 0, auxPontos = 0, posicaoMaior,  colocacao = 1, golsMarcados[20], golsSofridos[20], gols = 0, auxgm, auxgs, saldoDegols

      times[0]  = "Vitória"
      times[1]  = "Atlético-MG"
      times[2]  = "Bahia"
      times[3]  = "Botafogo"
      times[4]  = "Ceará"
      times[5]  = "Corinthians"
      times[6]  = "Cruzeiro"
      times[7]  = "Flamengo"
      times[8]  = "Fluminense"
      times[9]  = "Fortaleza"
      times[10] = "Grêmio"
      times[11] = "Internacional"
      times[12] = "Juventude"
      times[13] = "Mirassol"
      times[14] = "Palmeiras"
      times[15] = "RB Bragantino"
      times[16] = "Santos"
      times[17] = "São Paulo"
      times[18] = "Sport"
      times[19] = "Vasco"

      para (inteiro i = 0; i<20; i++) {
        pontos[i] = 0
        golsMarcados[i] = 0
        golsSofridos[i] = 0
      }
      
      para (inteiro k = 0; k<2; k++) {
        para (inteiro i = 0; i<19; i++) {
          para (inteiro j = i + 1; j<20; j++) {

              vencedor = u.sorteia(1,3)

              se (vencedor==1) {
                pontos[i] = pontos[i] + 3
                gols = u.sorteia(1,3)
                golsMarcados[i] += gols
                golsSofridos[j] += gols
              } 
              se (vencedor==2) {
                pontos[j] = pontos[j] + 3
                gols = u.sorteia(1,3)
                golsMarcados[j] += gols
                golsSofridos[i] += gols
              }
              se (vencedor==3) {
                pontos[i] = pontos[i] + 1
                pontos[j] = pontos[j] + 1
                gols = u.sorteia(1,3)
                golsMarcados[i] += gols
                golsMarcados[j] += gols
                golsSofridos[j] += gols
                golsSofridos[i] += gols

            }
          }
        }
      }
      
       escreva("_________________________________________________________\n| CLUBE                 |  PTS  |  GM  |  GS   |   SG   |\n|-----------------------|-------|------|-------|--------|\n")

      para (inteiro j = 0; j < 20; j++) {
        auxPontos = -1
        posicaoMaior = -1

        para (inteiro i = 0; i < 20; i++) {
          se (pontos[i] > auxPontos) {
            auxPontos = pontos[i]
            auxTime = times[i]
            auxgs = golsSofridos[i]
            auxgm = golsMarcados[i]
            posicaoMaior = i
          }
        }

          pontos[posicaoMaior] = 0
          saldoDegols = auxgm - auxgs
          auxTime = alinhaTexto(auxTime)
          se (colocacao<10) {
            se (saldoDegols>=0 e saldoDegols<10) {
              escreva("| ",colocacao , "  ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |    ", saldoDegols, "   |\n")
            }
            se (saldoDegols>9) {
              escreva("| ",colocacao , "  ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |   ", saldoDegols, "   |\n")
            }
            se (saldoDegols<0 e saldoDegols>-10) {
              escreva("| ",colocacao , "  ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |   ", saldoDegols, "   |\n")
            }
            se (saldoDegols<=-10) {
              escreva("| ",colocacao , "  ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |  ", saldoDegols, "   |\n")
            }
          } senao {
            se (saldoDegols>=0 e saldoDegols<10) {
              escreva("| ",colocacao , " ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |    ", saldoDegols, "   |\n")
            }
            se (saldoDegols>9) {
              escreva("| ",colocacao , " ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |   ", saldoDegols, "   |\n")
            }
            se (saldoDegols<0 e saldoDegols>-10) {
              escreva("| ",colocacao , " ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |   ", saldoDegols, "   |\n")
            }
            se (saldoDegols<=-10) {
              escreva("| ",colocacao , " ", auxTime, " |   ", auxPontos, "  |  ",auxgm, "  |  ",auxgs,"   |  ", saldoDegols, "   |\n")
            }
            }
          colocacao++
      }
    
      escreva("|    |                  |       |      |       |        |\n‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾")

  }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published