Ir ao conteúdo

Posts recomendados

Postado

Oi, sou novo no fórum e não sei exatamente se posso criar isso aqui, mas preciso de ajuda num código que estou tentando fazer

comecei a me interessar em algoritmos esses dias vendo vídeos no youtube, é o primeiro código que tento fazer sozinho, um tipo de "par ou ímpar"

quero fazer um tipo de "proteção" que quando o usuário digitar uma letra ao invés de um número o comando repita até ele digitar um número válido

algoritmo "PAR OU ÍMPAR?"
var
   numUsuario,numComputer,total: real
   escolhaUsuario: inteiro
   usuario,computer: caractere
inicio
      escreval ("Para escolher par digite [1]")
      escreval ("Para escolher ímpar digite [2]")
      leia (escolhaUsuario)
      limpaTela
      escolha (escolhaUsuario)
              caso 1
                   usuario <- "PAR"
                   computer <- "IMPAR"
              caso 2
                   usuario <- "IMPAR"
                   computer <- "PAR"
      fimEscolha
      
      escreval ("Digite um número de 0 a 10")
      leia (numUsuario)
      limpaTela
      enquanto numUsuario > 10 faca
               escreval ("Número inválido. Digite um número de 0 a 10")
               leia (numUsuario)
               limpaTela
         fimEnquanto

      numComputer <- randi(10)
      total <- numUsuario + numComputer
      escreval ("SUA ESCOLHA FOI: ",numUsuario)
      escreval ("A ESCOLHA DO COMPUTADOR FOI: ",numComputer)
      escreva (total)
fimalgoritmo

quero fazer algo como isso: "enquanto numUsuario > 10 faca ...."

só que ao invés de "> 10" quero fazer com qualquer letra

"se o computador ler uma letra ele vai repetir a mensagem 'Número inválido. Digite um número de 0 a 10' e quando ele digitar algo válido o código segue"

ele não está completo, pode ter algumas variáveis soltas ou rascunhos

  • Curtir 1
  • Membro VIP
Postado

Olá @Quinckas, seja bem vindo ao Fórum do Clube do Hardware.

 

 

Vamos lá:

 

1) SOBRE A "PROTEÇÃO"

9 horas atrás, Quinckas disse:

quero fazer um tipo de "proteção" que quando o usuário digitar uma letra ao invés de um número o comando repita até ele digitar um número válido

 

No Visualg, ao digitar uma letra no lugar no onde deveriam-se digitar um número, o valor é lido como 0. (obs.: isso é incomum, na maioria das linguagens populares o programa trava! O famoso "dá pau")

 

Daí temos pelo menos duas opções:

1.1) Uma forma seria você tirar o zero da conta (só aceitar de 1 a 10) e verificar se o resultado também é diferente de zero (se for 0, ou ele digitou 0 ou digitou uma letra).

 

1.2) Utilizar funções que manipulam caracteres.

 

Então, o Visualg possui alguns comandos que conseguem manipular caracteres. Ex.:
 

Citação

Asc(s : caractere) – Retorna um inteiro com o código ASCII do primeiro caractere da expressão.

Carac(c:inteiro) – Retorna o caractere cujo o código ASCII corresponde a expressão.

Caracpnum(c : caractere) – Retorna o inteiro ou real representado pela expressão. ( Corresponde ao StrToInt() ou StrToFloat do Delphi, val() do basic, flipper, etc…

Compr(c : caractere) – Retorna um inteiro contendo o comprimento (Quantidade de caracteres) da expressão.

Copia(c : caractere; p,n : inteiro) – Retorna um valor do tipo caractere contendo uma cópia parcial da expressão, a partir do caracter p, contendo n caracteres. Os caracteres são numerados da esquerda para a direita, começando de 1. Corresponde a Copy() do Delphi.

Maiusc(c : caractere) – Retorna um valor em caractere contendo uma expressão em caixa alta.

Minusc(c : caractere) – Retorna um valor em caractere contendo uma expressão em caixa baixa.

Numpcarac(n : inteiro ou real) – Retornar um valor caractere, contendo a representação de n como uma cadeia de caracteres. Corresponde a IntToStr() ou FloatToStr() do Delphi.

 

Para não atrapalhar o seu autodesenvolvimento, vou deixar que você mesmo crie as suas ideias...

 

 

 

2) FAIXA DE VALORES

No seu código, você está tratando apenas os maiores que 10, mas precisaria também o menores que 0 (se for usar de 1 a 10, seria "menor que 1")

 

"enquanto (numero menor que 1) ou (numero maior que 10)  então"

 

 

 

3) FAIXA DE SORTEIO

10 horas atrás, Quinckas disse:

numComputer <- randi(10)

 

O comando Randi() sorteia de "0 a X-1", ou seja, estaria sorteando apenas de 0 a 9. Se quer de 0 a 10, utilize Randi(11).

 

Se for de 1 a 10, utilize "

Randi(10)+1

Pois sorteará de 0 a 9, com mais 1, fica de 1 a 10.

 

Observação: O jogo de par ou ímpar é binário, ou seja, só existem duas possibilidades. Daí, ao utilizar de 0 a 10, você estará sorteando 11 possibilidades, o que "desequilibraria" o jogo, pois seriam 6 possibilidades para par, e 5 para ímpar. (apostar no par seria vantagem), logo sugiro que deixe de 1 a 10 para o computador. (ou 0 a 10... deixa a quantidade par!)

 

 

 

***

 

MINHA SUGESTÃO

 

Primeiro tente fazer um algoritmo que aceite apenas de 1 a 10, para assim já "proteger" contras letras (já que 0 já é válido). E poste o código aqui...o "final" ou onde está com dúvidas;

 

Depois, tente vê se consegue desenvolver alguma ideia utilizando os manipuladores de caracteres ou alguma outra forma... E poste o código aqui... o "final" ou onde está com dúvidas.

 

 

No aguardo.

  • Curtir 1
Postado

oi

segui sua dica do randi(10) +1

resolvi deixar os 2 com 1 ~ 10 

13 horas atrás, Simon Viegas disse:

No Visualg, ao digitar uma letra no lugar no onde deveriam-se digitar um número, o valor é lido como 0. (obs.: isso é incomum, na maioria das linguagens populares o programa trava! O famoso "dá pau")

percebi isso um tempo depois e fiz uma gambiarra

mas acho que usei muita coisa, tenho quase certeza que dá pra fazer o mesmo sem tanta letra

 

não sei muito bem se está  bom

algoritmo "PAR OU ÍMPAR?"
var
   numUsuario,numComputer,escolhaUsuario: inteiro
   JOGADOR,JOGADOR2,par,impar,p,i,p1: caractere
   total: real
inicio
      //ALTERE AO SEU GOSTO
      JOGADOR <- "VOCÊ"
      JOGADOR2 <- "CONSOLE"
      //ESCOLHA DE PAR OU ÍMPAR---------------------------
      escreval ("Para escolher PAR digite [1]")
      escreval ("Para escolher ÍMPAR digite [2]")
      leia (escolhaUsuario)
      limpaTela
      escolha (escolhaUsuario)
              caso 1
                   par <- JOGADOR
                   impar <- JOGADOR2
              caso 2
                   par <- JOGADOR2
                   impar <- JOGADOR
              //CASO O JOGADOR ESCOLHER UM CARACTERE INVÁLIDO
              outroCaso
                       repita
                             escreval ("Opção inválida.")
                             escreval ("")
                             escreval ("Para escolher PAR digite [1]")
                             escreval ("Para escolher ÍMPAR digite [2]")
                             leia (escolhaUsuario)
                             limpaTela
                       ate (escolhaUsuario = 1) ou (escolhaUsuario = 2)
                       se (escolhaUsuario = 1) então
                              par <- JOGADOR
                              impar <- JOGADOR2
                          senao
                               se (escolhaUsuario = 2) então
                               par <- JOGADOR2
                               impar <- JOGADOR
                               fimSe
                       fimSe
      fimEscolha
      //COMPLEMENTAÇÕES
      se (escolhaUsuario = 1) então
         p <- "PAR"
         i <- "ÍMPAR"
         senao
              se (escolhaUsuario = 2) então
                 p <- "ÍMPAR"
                 i <- "PAR"
              fimse
      fimse
      //ESCOLHA DO NÚMERO DO JOGADOR2
      numComputer <- randi(10) + 1

      //ESCOLHA DO NÚMERO DO JOGADOR
      escreval ("Digite um número de 1 a 10")
      leia (numUsuario)
      limpaTela
      //SE O JOGADOR ESCOLHER NÚMERO MAIOR QUE 10
      escolha (numUsuario)
              caso 1
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 2
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 3
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 4
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 5
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 6
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 7
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 8
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 9
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              caso 10
                   escreval (JOGADOR," escolheu ",p)
                   escreval (JOGADOR2," ficou com ",i)
                   escreval ("---------------------------------")
                   escreval (JOGADOR,": ",numUsuario)
                   escreval (JOGADOR2,": ",numComputer)
                   escreval ("---------------------------------")
              outroCaso
                       repita
                             escreval ("Opção inválida.")
                             escreval ("")
                             escreval ("Digite um número de 1 a 10")
                             leia (numUsuario)
                             limpaTela
                       ate (numUsuario > 0) e (numUsuario < 11)
                       escreval (JOGADOR," escolheu ",p)
                       escreval (JOGADOR2," ficou com ",i)
                       escreval ("---------------------------------")
                       escreval (JOGADOR,": ",numUsuario)
                       escreval (JOGADOR2,": ",numComputer)
                       escreval ("---------------------------------")
      fimEscolha
      //DECLARAÇÃO DO VENCEDOR
      total <- numUsuario + numComputer
      se (total % 2 = 0) então
         p1 <- "PAR"
         escreval ("TOTAL: ",total," [ ",p1," ]")
         escreval (par," venceu!")
         senao
         p1 <- "ÍMPAR"
         escreval ("TOTAL: ",total," [ ",p1," ]")
         escreval (impar," venceu!")
      fimse

fimalgoritmo

poderia responder uma pergunta??

tem algum lugar para tirar dúvidas aqui?

se eu tenho uma coisa pequena me incomodando tenho que criar um tópico toda vez? 

obrigado pelas boas-vindas e obrigado pela atenção

 

  • Curtir 2
  • Membro VIP
Postado

Olá @Quinckas,

 

Observação inicial: para melhorar o fluxo das minhas orientações, parte das sugestões propostas já poderão ser dadas para seus respectivos exemplos. Daí, você analisa e tenta implementar como desejado.

 

 

1) SOBRE O CÓDIGO

Vou dividir em subtópicos.

 

1.1) NOMENCLATURA DE VARIÁVEL

É um pequeno detalhe, mas:

Em vez de JOGADOR e JOGADOR2 sugiro JOGADOR1 e JOGADOR2.

Entendo assim, pois ao utilizar o "1", já subentede que existe pelo menos um "2".

 

1.2) VALIDAÇÃO DE RESPOSTA

Verifiquei que você optou por usar o escolha/caso para validar as reposta.. tanto para escolha do par ou ímpar, tanto para faixa de resposta entre 1 e 10 (inclusos).

 

E ideia é válida, mas apenas sugiro que transporte o contexto do outrocaso para logo após a leitura dos suas respectivas respostas, ou seja, após ler a resposta, verifica se é válido ou não, e faz a releitura quando necessário. Algo assim.:

//ESCOLHA DE PAR OU ÍMPAR---------------------------
escreval("Para escolher PAR   digite [1]")
escreval("Para escolher ÍMPAR digite [2]")
leia(escolhaUsuario)
enquanto (escolhaUsuario <> 1) E (escolhaUsuario <> 2)
   escreval("Opção inválida.")
   escreval("")
   escreval("Para escolher PAR   digite [1]")
   escreval("Para escolher ÍMPAR digite [2]")
   leia(escolhaUsuario)
   limpaTela
fimEnquanto

ADENDO: Percebeu que mudei de repita para enquanto? fiz isso por que é necessário que seja verificado primeiro se o número é inválido ou não antes de informar que foi uma opção inválida, ou seja, lá no ESCOLHA, o "outrocaso" já significa que foi uma opção inválida, daí você pode ir direto para o repita. Esse enquanto acima é equivalente a:

se (escolhaUsuario <> 1) E (escolhaUsuario <> 2)
   repita
      escreval ("Opção inválida.")
      escreval ("")
      escreval ("Para escolher PAR digite [1]")
      escreval ("Para escolher ÍMPAR digite [2]")
      leia (escolhaUsuario)
      limpaTela
   ate (escolhaUsuario = 1) ou (escolhaUsuario = 2)
fimSe

Entende? o enquanto seria a junção de um se com um repita.. se tiver dúvidas, dê uma pesquisa sobre as diferenças entre repita e enquanto. E qualquer coisa é só perguntar aqui no tópico.
 

Daí, o mesmo processo pode ser feito na parte que verifica se o número digitado está entre 1 e 10 (inclusos). Tira lá do outrocaso e deixa logo após ler o dado.

 

Observe que após fazer essa verificação logo após a leitura dos dados, o outrocaso do lá do escolha(escolhaUsuario) não será mais necessário, pois a opção será 1 ou 2. E todo o escolha(numUsuario) será desnecessário, pois o número já estará entre 1 e 10 (inclusos), logo não fazendo necessário "escolher" algo...

 

 

 

2) SOBRE AS SUAS DÚVIDAS À PARTE

Vamos lá:

Em 17/09/2017 às 01:40, Quinckas disse:

poderia responder uma pergunta??

Sim.

Já respondi! Acabou a cota, rs. Brincadeira à parte.. vamos lá:

 

Em 17/09/2017 às 01:40, Quinckas disse:

tem algum lugar para tirar dúvidas aqui?

se eu tenho uma coisa pequena me incomodando tenho que criar um tópico toda vez?

A resposta é: depende!

 

Resumidamente é necessário que mantenhamos para cada tópico um mesmo assunto/tema, mas não é necessariamente proibido tirar alguma dúvida que fuja um pouco...  em fim,  vai depender da pergunta e contexto...

 

Fazemos assim, primeiramente responda o item 1 desta postagem... após, poste também a sua dúvida que você se refere... daí analisaremos e tomaremos uma posição sobre o contexto... (se for pertinente ao mesmo tópico, deixaremos - o que inclui responder quando possível, já que também somos colaboradores. Caso fuja muito do tema, e entendermos que seja necessário um novo tópico, avisaremos.)

 

Uma forma que eu sugiro é separar por tópicos, assim como fiz nesta postagem.

 

 


***

 

Por enquanto é isso.

 

No aguardo.

  • Curtir 1
Postado

reescrevi o código inteiro e aqui está a versão final:

algoritmo "PAR OU ÍMPAR"
var
    numP,numC,esc,total: inteiro
    jog1,jog2,par,impar,p,p1: caractere
inicio
      jog1 <- "JOGADOR"
      jog2 <- "CONSOLE"
      repita
            escreval ("PAR [1]")
            escreval ("ÍMPAR [2]")
            leia (esc)
            limpaTela
      ate (esc = 1) ou (esc = 2)
      escolha (esc)
              caso 1
                   par <- jog1
                   impar <- jog2
              caso 2
                   impar <- jog1
                   par <- jog2
      fimEscolha
      numC <- randi (10)+ 1
      repita
            escreval ("DIGITE UM NÚMERO DE 1 A 10")
            leia (numP)
            limpaTela
      ate (numP >= 1) e (numP <= 10)
      se (esc = 1) então
         p <- "PAR"
         escreval (jog1," escolheu ",p)
         escreval (jog2," escolheu ÍMPAR")
         senao
              p <- "ÍMPAR"
              escreval (jog1," escolheu ",p)
              escreval (jog2," escolheu PAR")
      fimse
      total <- numP + numC
      escreval ("----------------------------------")
      escreval (jog1,": ",numP)
      escreval (jog2,": ",numC)
      escreval ("----------------------------------")
      se (total % 2 = 0) então
         p1 <- "PAR"
         escreval ("TOTAL: ",total," [",p1,"]")
         escreval ("")
         escreval (par," VENCEU!")
         senao
              p1 <- "ÍMPAR"
              escreval ("TOTAL: ",total," [",p1,"]")
              escreval ("")
              escreval (impar," VENCEU!")
      fimse
fimalgoritmo

 

Em 18/09/2017 às 13:12, Simon Viegas disse:

Fazemos assim, primeiramente responda o item 1 desta postagem... após, poste também a sua dúvida que você se refere

 

sobre a dúvida era só isso mesmo kkk

é que em um fórum que frequento tem um tópico só para dúvidas simples, queria saber se tinha algo parecido aqui

 

obrigado por ajudar com o código e me orientar sobre o fórum, ajudou bastante

  • Curtir 1
  • Membro VIP
Postado

Olá @Quinckas.

 

20 horas atrás, Quinckas disse:

reescrevi o código inteiro e aqui está a versão final:

Bacana... Ficou muito bom!

 

Só um adendo: as variáveis p e p1 são desnecessárias. Você está definindo textos, logo após usa... e só. De jeito que o código está, simplesmente use os textos diretamente!

  • Curtir 1

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...