Ir ao conteúdo
  • Cadastre-se

VisualG Bilhete de loterias algoritmo - VisualG


Posts recomendados

Bom dia, boa tarde e boa noite, quero que me ajudem, estou iniciando agora no VisualG, e peço que me ajudem, um professor pediu para eu fazer um sistema de bilhete mega-sena e também um sistema de venda (apenas dinheiro)


 

Algoritmo "exercicio 7"

//gera a repetiçao de 5x de dois vetores com números aleatórios (função)
//usados para gerar bolões em loterias

Var
   cartela: vetor[0..4,0..4] de inteiro
   i,j,m,n,numero,controlador:inteiro
   login, senha,esc:inteiro

Inicio
   escreval("Seja bem vindo a loteria do João")
   //inicio de login e senha
   escreval()
   escreval("Digite o usuário:")
   leia(login)
   escreval("Digite a senha:")
   leia(senha)
   se (login="LCC") entao
      escreval("Nome de usuário aceito.")
   senao
      escreval("Nome de usuário incorreto.")
   fimse
   se senha = "2535" entao
      escreval("Senha correta.")
   senao
      escreval("Senha incorreta.")
   fimse
   se (login="LCC") e (senha="2535") entao
      escreval("Usuário autenticado com sucesso.")
   senao
      escreval("Usuário não autenticado com sucesso.")
   fimse
   //fim de login e senha
   escreval()
   escreval("Você deseja comprar?")
   escreval("[1] - Sim")
   escreval("[2] - Não")
   escreval()
   leia(esc)
   escreval()
   para i de 0 ate 4 passo 1 FACA
      para j de 0 ate 4 passo 1 FACA
         numero <- randi(99) //gera número aleatória
         controlador <- 0 //controlador para verificar se  o número já foi inserido
         enquanto controlador = 0 faca
            controlador <- 1
            //bloco para verificar toda a matriz
            para m de 0 ate 4 passo 1 FACA
               para n de 0 ate 4 passo 1 FACA
                  se cartela[m,n] = numero entao //caso o número já exista
                     numero <- randi(99) //gera o novo número aleatório
                     controlador <- 0 //reinicia o controlador para verificar se o novo número existe
                  fimse
               fimpara
            fimpara
         fimenquanto
         cartela[i,j] <- numero //ao sair do enquanto, é garantido que o número não existe na matriz então adiciona esse número a matriz
      fimpara
   fimpara
   para i de 0 ate 4 faca 1 FACA
      para j de 0 ate 4 faca 1 FACA
         escreva(cartela[i,j])
      fimpara
      escreval()
   fimpara


Fimalgoritmo

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@dolkew    a geração Aleatória está boa , mas o bilhete de Mega Sena , não tem 25 números não , tem apenas 6 números .e o laço de repetição  "para"  nesse caso não precisa especificar o "passo" , pois se é de um em um , então isso é automático ,

Algoritmo "exercicio 7"
// gera a repetiçao de 5x de dois vetores
// com números aleatórios (função)
// usados para gerar bolões em loterias
Var
  cartela: vetor[0..4,0..4] de inteiro
  i,j,m,n,numero,controlador:inteiro
  login, senha,esc:inteiro
Inicio
  escreval("Seja bem vindo a loteria do João")
  //inicio de login e senha
  escreval()
  escreval("Digite o usuário:")
  // leia(login)
  escreval("Digite a senha:")
  // leia(senha)
  se (login="LCC") entao
    escreval("Nome de usuário aceito.")
  senao
    escreval("Nome de usuário incorreto.")
  fimse
  se senha = "2535" entao
    escreval("Senha correta.")
  senao
    escreval("Senha incorreta.")
  fimse
  se (login="LCC") e (senha="2535") entao
    escreval("Usuário autenticado com sucesso.")
  senao
    escreval("Usuário não autenticado com sucesso.")
  fimse
  //fim de login e senha
  limpatela
  escreval
  escreval("Você deseja comprar?")
  escreval("[1] - Sim")
  escreval("[2] - Não")
  escreval()
  leia(esc)
  escreval()
  para i de 0 ate 4 faca
    para j de 0 ate 4  faca
       numero <- randi(99)             // gera número aleatória
       controlador <- 0                // controlador para verificar se  o
                                       // número já foi inserido
       enquanto controlador = 0 faca
          controlador <- 1
                                       // bloco para verificar toda a matriz
          para m de 0 ate 4 faca
            para n de 0 ate 4 faca
              se cartela[m,n] = numero entao // caso o número já exista
                numero <- randi(99)          // gera o novo número aleatório
                controlador <- 0             // reinicia o controlador para
                                             // verificar se o novo número
                                             // existe
              fimse
            fimpara
          fimpara
        fimenquanto
        cartela[i,j] <- numero // ao sair do enquanto, é garantido que o
                               // número não existe na matriz então
                               // adiciona esse número a matriz
    fimpara
  fimpara
  para i de 0 ate 4 faca
    para j de 0 ate 4 faca
      escreva(cartela[i,j]:4)  // qtd de digitos a escrever
                               // organiza em colunas
    fimpara
    escreval
  fimpara
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@dolkew, poste o enunciado completo da questão. O algoritmo vai depender daquilo que foi pedido.

Mas segue alguns pontos:

  1. utilize nomenclaturas de variáveis sugestivas;
  2. vá fazendo do básico para o mais complexo ou chato, por exemplo, nada de ficar perguntando usuário e senha já que o foco são as cartelas. Exercite a abstração e foque no que é para focar; (Depois insere esses detalhes.)
  3. os números da Mega-Sena vão de 1 a 60, e não de 0 a 98; (A não ser que tenha algo no enunciado.)
  4. quando um número está repetido, é preciso refazer toda a verificação.;
  5. a repetição número é por a cartela.


Segue um exemplo de base de código:
 

algoritmo "Exercício 7"
const
   QTD_CARTELAS = 10
var
   cartelas: vetor[1..QTD_CARTELAS, 1..6] de inteiro
   i, j, c : inteiro
   numeroSorteado : inteiro
   unico : logico
inicio
   escreval("Seja bem vindo a loteria do João")
   escreval("")

   para i de 1 ate QTD_CARTELAS faca
      para j de 1 ate 6 faca
         unico <- FALSO

         enquanto não unico faca
            numeroSorteado <- RandI(60)+1
            unico <- VERDADEIRO

            para c de 1 ate 6 faca
               se cartelas[i,c] = numeroSorteado entao
                  unico <- FALSO
               fimSe
            fimPara
         fimEnquanto

         cartelas[i,j] <- numeroSorteado
      fimPara
   fimPara

   para i de 1 ate QTD_CARTELAS faca
      para j de 1 ate 6 faca
         escreva (cartelas[i,j]:3)
      fimPara
      escreval("")
   fimPara
fimAlgoritmo



Observe que um código deve NÃO precisar de comentários. Os comentários ali do @devair1010 seria apenas para reforçar mesmo... mas não precisa ficar lá.

Quando entender os código dados, não copie!!! Entenda o que foi feito e redigite no seu código. Aí vai readaptando também.

 

Sobre o uso de usuário e senha, o restante do código precisa ficar "protegido", ou seja, por exemplo ficando dentro lá do "senha correta"... Perceba que não faz muito sentido pergunta o usuário e senha e depois o programa seguir normalmente.. não fazendo qqr diferença se acertou ou não.. (Vide item 2 supracitado.)


Adendo: ficou estranho usar c ali na verificação dos repetidos... talvez ficasse melhor com d (de "dezenas"), ou seja, o primeiro parâmetro é da cartela e o segundo da dezena dessa cartela. 

Adendo 2: ah! outro item: Mega-Sena tem por padrão 6 dezenas, mais pode ter mais. (E não 5 como você fez.)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

olá boa noite, boa tarde e bom dia, o sistema está praticamente pronto sendo que só encontrei um problema, quando digito 2 que é o número da opção para sair do programa, ele não sai, mesmo eu tendo colocado o comando "interrompa" (acabei tirando), ele mostra os números sorteados e encerra o programa.

 

algoritmo "Exercício 7"
const
   QTD_CARTELAS = 10
var
   cartelas: vetor[1..QTD_CARTELAS, 1..6] de inteiro
   i, j, c : inteiro
   numeroSorteado : inteiro
   unico : logico
inicio
   escreval("Você deseja comprar?")
         escreval("[1] - Sim")
         escreval("[2] - Não")
         escreval()
         leia(opcao)
         escreval()

      para i de 1 ate QTD_CARTELAS faca
         para j de 1 ate 6 faca
            unico <- FALSO

            enquanto não unico faca
               numeroSorteado <- RandI(96)+1
               unico <- VERDADEIRO

               para c de 1 ate 6 faca
                  se cartelas[i,c] = numeroSorteado entao
                     unico <- FALSO
                  fimSe
               fimPara
            fimEnquanto

            cartelas[i,j] <- numeroSorteado
         fimPara
      fimPara

      para i de 1 ate QTD_CARTELAS faca
         para j de 1 ate 6 faca
            escreva (cartelas[i,j]:3)
         fimPara
         escreval("")
      fimPara
fimAlgoritmo

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@dolkew   seu programa não compila e não funciona ,  e você deixou uma variável "opcao"  , inexistente  nele ,  e tem várias formas de terminar o programa no visualG 3.0  , mas o comando interrompa , não serve para isso não , esse interrompa serve apenas para terminar um loop , repita , enquanto , para ,  e então um modo é colocar a palavra "fimalgoritmo"  caso digite 2 na opcao , e outro seria usando o comando "se" e faz o que precisa caso opcao igual a 1 , ou senao ele já termina a execução do programa , ou ainda com o "se " e o "repita "  que caso escolha 1 o programa faz o esperado e repete novamente ou opcao igual a 2 a condição do repita fará o programa terminar também :   e isso poderia ser assim  :

algoritmo "Exercício 7"
const
   QTD_CARTELAS = 10
var
   cartelas       : vetor[1..QTD_CARTELAS, 1..6] de inteiro
   i, j, c, opcao : inteiro
   numeroSorteado : inteiro
   unico          : logico
inicio
  repita
    escreval("Você deseja comprar?")
    escreval("[1] - Sim")
    escreval("[2] - Não")
    escreval
    leia(opcao)
    se opcao = 2 entao
      fimalgoritmo
    fimse
    escreval()

    para i de 1 ate QTD_CARTELAS faca
      para j de 1 ate 6 faca
        unico <- FALSO
        enquanto unico = falso faca
          numeroSorteado <- RandI(96)+1
          unico <- VERDADEIRO
          para c de 1 ate 6 faca
            se cartelas[i,c] = numeroSorteado entao
              unico <- FALSO
            fimSe
          fimPara
        fimEnquanto

        cartelas[i,j] <- numeroSorteado
      fimPara
    fimPara

    para i de 1 ate QTD_CARTELAS faca
      para j de 1 ate 6 faca
        escreva (cartelas[i,j]:3)
      fimPara
      escreval("")
    fimPara
    escreval
  ate opcao = 2
fimAlgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sobre:

16 horas atrás, devair1010 disse:
    se opcao = 2 entao
      fimalgoritmo
    fimse

 

Até onde sei, essa estrutura não pode ser implementada para VisualG. Basicamente um algoritmo só pode ter um fimAlgoritmo, que é aquele que fica no final do programa. (Assim como não existe "end." no meio de um código em Pascal).

 

Uma forma de fazer seria com uma estrutura de seleção. Algo assim:

var
   cartelas: vetor[1..QTD_CARTELAS, 1..6] de inteiro
   i, j, c : inteiro
   numeroSorteado : inteiro
   unico : logico
   opcao : caractere
inicio
   escreval("Seja bem vindo a loteria do João")
   escreval("")

   escreval("Você deseja comprar?")
   escreval("[1] - Sim")
   escreval("[2] - Não")
   leia(opcao)

   se (opcao = "1") entao
      para i de 1 ate QTD_CARTELAS faca
         para j de 1 ate 6 faca
            unico <- FALSO
      //etc
    
  fimSe

 

Ou seja, aquilo que vai ser executando quando sim dentro da estrutura da estrutura de seleção.



Tá, mas veja:

Em 31/05/2022 às 20:53, Simon Viegas disse:

@dolkew, poste o enunciado completo da questão. O algoritmo vai depender daquilo que foi pedido.

 

É preciso antes definir o que precisa ser feito.

 

Por exemplo, se no enunciado tivesse algo como "perguntar quantos jogos o cliente deseja fazer e gerar no máximo até 20 jogos". Poderia ser algo como:

 

algoritmo "Exercício 7"
const
   QTD_CARTELAS_MAX = 20
var
   cartelas: vetor[1..QTD_CARTELAS_MAX, 1..6] de inteiro
   i, j, c : inteiro
   numeroSorteado : inteiro
   unico : logico

   qtdJogos : inteiro
inicio
   escreval("Seja bem vindo a loteria do João")
   escreval("")

   repita
      escrevaL("'Informe um valor entre 1 e ", QTD_CARTELAS_MAX:1, "'")
      escreval("Quantas jogos deseja fazer?")
      leia(qtdJogos)
      escrevaL("")
   ate ((qtdJogos >= 1) E (qtdJogos <= QTD_CARTELAS_MAX))

   para i de 1 ate qtdJogos faca
      para j de 1 ate 6 faca
         unico <- FALSO

         enquanto (não unico) faca
            numeroSorteado <- RandI(60)+1
            unico <- VERDADEIRO

            para c de 1 ate 6 faca
               se cartelas[i,c] = numeroSorteado entao
                  unico <- FALSO
               fimSe
            fimPara
         fimEnquanto

         cartelas[i,j] <- numeroSorteado
      fimPara
   fimPara

   para i de 1 ate qtdJogos faca
      para j de 1 ate 6 faca
         escreva (cartelas[i,j]:3)
      fimPara
      escreval("")
   fimPara

fimAlgoritmo

 

image.png


Em fim, tudo vai depender daquilo que foi pedido...

 


Por favor, poste o enunciado completo da questão.
Qualquer dúvida é só perguntar também.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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!