Ir ao conteúdo
  • Cadastre-se

VisualG Estruturas de Repetição quebradas no Visualg


Ir à solução Resolvido por devair1010,

Posts recomendados

Boa tarde gente! Estou com um problema em relação a estruturas de repetição no visualg, sempre que executo os código que contenham essa estrutura, o programa aponta um erro de sintaxe "esperava encontrar FACA".

Só que o problema é que já tentei corrigir de várias maneiras reescrevendo o código mas não tive sucesso, alguém poderia me dizer se estou fazendo algo errado ? 

Algoritmo "semnome"

Var
  valorInicial,valorFinal,contPersonalizada:Inteiro


Inicio
  Escreval("-----------------------------")
  Escreval("    CONTADOR INTELIGENTE     ")
  Escreval("-----------------------------")
  Escreval("Qual o valor inicial da contagem? ")
  Leia(valorInicial)
  EscrevaL("Até quando o contador deverá contar? ")
  Leia(valorFinal)
  Escreval("-----------------------------")
  Escreval("Pretende fazer uma contagem(normal ou regressiva) de quanto em quantos números?")
  Escreval("Por exemplo: 1 + 2 ao invés de 1 + 1.")
  Escreval("Resposta.: ")
  Leia(contPersonalizada)
  Se (valorInicial > 0) então
     Enquanto(valorInicial < valorFinal) faca
     Escreval(valorInicial)
     valorInicial <- valorInicial + contPersonalizada
     FimEnquanto
  FimSe
  Se (valorFinal > valorInicial) então
     Enquanto (valorFinal >= valorInicial) faca
     Escreval(valorFinal)
     valorFinal <- valorFinal - contPersonalizada
     FimEnquanto
  FimSe
Fimalgoritmo

 

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

@Samuel Fortes Brasil Boa Tarde!

 

Aplique a seguintes correções

   Apague os parenteses que isolam as sentenças.

   Identifique as declarações do bloco com recuou.

 

Deste jeito:

     Enquanto valorInicial < valorFinal faca
       Escreval(valorInicial)
       valorInicial <- valorInicial + contPersonalizada
     FimEnquanto
 ...
      Enquanto valorFinal >= valorInicial faca
        Escreval(valorFinal)
        valorFinal <- valorFinal - contPersonalizada
     FimEnquanto

 

Produz

Início da execução
-----------------------------
    CONTADOR INTELIGENTE     
-----------------------------
Qual o valor inicial da contagem? 
10
Até quando o contador deverá contar? 
15
-----------------------------
Pretende fazer uma contagem(normal ou regressiva) de quanto em quantos números?
Por exemplo: 1 + 2 ao invés de 1 + 1.
Resposta.: 
1
 10
 11
 12
 13
 14

Fim da execução.

 

visualg 3.0.7.0

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

@Samuel Fortes Brasil    não são os parênteses que causam problemas ,  mas não são necessários nesse caso específico ,  pois ali tem apenas uma comparação , e se tivessem duas comparações , aí sim precisaria de colocar os parênteses  ,  e o algoritmo está contando só até 14 por que foi isso que você indicou no código , ou seja para escrever o valor dessa variável  "valorInicial"  enquanto ela for MenorQue o valorFinal ,  e sendo que para escrever também o valorFinal  precisa inclui-lo  com o sinal de "=" junto ao  "<"  MenorQue , assim :

Enquanto valorInicial <= valorFinal faca // vai atee enquanto o valor seja monor ou igual ao valorFinaL
   Escreval( valorInicial )
   valorInicial <- valorInicial + contPersonalizada
FimEnquanto

 

Link para o comentário
Compartilhar em outros sites

@Samuel Fortes Brasil   o erro "esperava encontrar faca"  e por que o enquanto está grudado no texto seguinte a ele e sem espaço ,  assim o compilador reconhece como sendo uma coisa só ,  e a informação que ele lança não é exata , pois o que faltava mesmo é o "enquanto"  que está de fato escrito , mas mesmo para humanos essa escrita , "enquanto(valorInicial  "  , está errada,  pois está tudo escrito junto .

e uma forma de mostrar os números tanto seja de forma progressiva ou Regressiva , seria verificar os valores  inicial e final e decidir de onde começar a escrever os números no intervalo ,  pois se o final for menor que o inicial , então fazer uma troca deles um pelo outro ,  e assim só usaria mesmo um loop ao invés de dois ,  

Algoritmo "erro no enquanto_faca "
Var
   valorInicial,valorFinal, auxiliar : inteiro
   contPersonalizada, contador, flg  : Inteiro
Inicio
   Escreval("-----------------------------        ")
   Escreval("    CONTADOR INTELIGENTE             ")
   Escreval("-----------------------------        ")
   Escreva ("Qual o valor inicial da contagem? "   )
   Leia    ( valorInicial                          )
   Escreva ("Até quando o contador deverá contar? ")
   Leia    ( valorFinal                            )
   Escreval("-----------------------------        ")
   Escreva ("Pretende fazer uma contagem ( normal ")
   Escreva ("ou regressiva) de quanto em  quantos ")
   Escreval("números ?                            ")
   Escreval("Por exemplo: 1 + 2 ao invés de 1 + 1.")
   Escreva ("Resposta.: "                          )
   Leia    ( contPersonalizada                     )

   contador <- valorInicial
      
   se valorInicial      >  valorFinal então
      contador          <- valorInicial
      auxiliar          := valorFinal
      valorFinal        := valorinicial
      valorInicial      := auxiliar
      flg               <- 1
      contPersonalizada <- contPersonalizada * -1
   fimse
   Se valorInicial > 0 então
      Enquanto     valorInicial <= valorFinal faca
         se flg <> 0 então
            valorInicial <- valorInicial + contPersonalizada * -1
         senao
            valorInicial <- valorInicial + contPersonalizada
         fimse
         Escreval( contador )
         contador <- contador + contPersonalizada
      FimEnquanto
   FimSe
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

@devair1010 Desculpe mas ainda não entendi o motivo do problema, hoje eu fui continuar os meus estudos e criei um novo algoritmo no visualg,

Var
   turma:Inteiro
   N1,N2,N3,N4,N5:Inteiro
   Nota:Real

Inicio
Escreval("-----------------------------------")
Escreva("Quantos alunos a turma possui: ")
Leia(turma)
Escreval("-----------------------------------")
   Enquanto turma > 5 faca
      Escreval("Não é possível criar registro de uma turma")
      Escreval("com mais de 5 alunos.Por favor informe um número menor!")
      Escreva("Informe um novo valor: ")
      Leia(turma)
      Escreval("-----------------------------------")
   FimEnquanto
//Fim da primeira etapa do algoritmo
    Escolha turma
     caso 1
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N1)
              Escreva("Nota: ")
              Leia(Nota)
     caso 2
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N1)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N2)
              Escreva("Nota: ")
              Leia(Nota)
     caso 3
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N1)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N2)
              Escreva("Nota: ")
              Leia(Nota)
               Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N3)
              Escreva("Nota: ")
              Leia(Nota)
     caso 4
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N1)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N2)
              Escreva("Nota: ")
              Leia(Nota)
               Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N3)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N4)
              Escreva("Nota: ")
              Leia(Nota)
     caso 5
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N1)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N2)
              Escreva("Nota: ")
              Leia(Nota)
               Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N3)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N4)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N5)
              Escreva("Nota: ")
              Leia(Nota)
     FimEscolha
     Escreval("-----------------------------------")
     Se (Nota > MaiorNota) então
      MaiorNota <- nota
     FimSe

O mesmo problema agora fica aparecendo nesse último SE do código, o programa esperava encontrar a palavra "então", não consigo compreender o que está errado.

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

@Samuel Fortes Brasil

Boa Terde!

 

Aparentemente, esqueceu a declaração da variável `MaiorNota`, pois exatamente esse o problema.

 

Corrija: declare sua variável faltosa.

42 minutos atrás, Samuel Fortes Brasil disse:
Var
   turma:Inteiro
   N1,N2,N3,N4,N5:Inteiro
   Nota:Real

 

Correção:

Var
   turma:Inteiro
   N1,N2,N3,N4,N5:Inteiro
   Nota,MaiorNota:Real

 

Produz:

Início da execução
-----------------------------------
Quantos alunos a turma possui: 1
-----------------------------------
Qual é o nome do(a)Aluno(a): 0
Nota: 9.0000000000
-----------------------------------

Fim da execução.

 

Captura:

Capturar.PNG.884c1ebc5e690bf3ff534094b96f8fb3.PNG

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

46 minutos atrás, Samuel Fortes Brasil disse:

Mas porque porque o visualg aponta o erro no SE ?

 

Isso mesmo, igualmente, notei essa pouca precisão dos alertas.

Ficam no entorno do problema.

 

Capturar.PNG.0ab5664b717a53bda45c67822ba1f61c.PNG

 

Exige adaptação, exige análise do alerta e dos elementos entorno do alerta: por exemplo, tem-se a expressão lógica:

Os operadores: ( ) >

Os operandos: Nota MaiorNota

          Os comandos: MaiorNota <- nota

                     Os operadores dos comandos: <-

                     Os operandos dos comandos: nota MaiorNota

 

                       [ ! ]  Observe que o nome de um

                       dos operandos é **`nota`, porém em ***VAR

                       o N é maiúsculo.

 

***VAR

1 hora atrás, Samuel Fortes Brasil disse:
Var
   turma:Inteiro
   N1,N2,N3,N4,N5:Inteiro
   Nota:Real

 

**Comandos de Se ... Então

1 hora atrás, Samuel Fortes Brasil disse:
MaiorNota <- nota

 

— Atenção!

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

  • Solução

@Samuel Fortes Brasil   as mensagens de erro emitidas pelo visualG não são exatas ,  mas apenas informa que tem um erro , e é o programador que precisa descobrir qual erro é , e geralmente é erro de sintaxe , como comandos escrito errado , grudado na palavra seguinte , e variáveis não criadas ,  então quando aparece essas msg é preciso verificar o código para descobrir o que está errado .  o visualG é um bom compilador , pois usa os comandos em português , porém é bem simples e poucos recursos , é para iniciantes e não se pode exigir muito dele ,   e também ajuda quem está começando pois assim força o programador a descobrir como corrigir os erros ,   e o erro nesse seu código e como o   @Ansi C   lhe explicou ,  falta mesmo essa variável "MaiorNota"   , então coloca lá no início como sendo do tipo "Real" ,

turma           : Inteiro
N1,N2,N3,N4,N5  : Inteiro
Nota, MaiorNota : Real

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Samuel Fortes Brasil, o código está até bem arrumado, mas tem uns probleminhas que precisam se verificados. Poderia postar o enunciado completo da questão para sermos mais precisos?

 

 

 

 

Para adiantar, alguns pontos:

 

 

Procure deixar o código o mais semântico possível, ou seja, com nomenclaturas de variáveis e estruturas fazendo o maior sentido possível... Veja:

 

Em 29/04/2024 às 16:58, Samuel Fortes Brasil disse:
Inicio
Escreval("-----------------------------------")
Escreva("Quantos alunos a turma possui: ")
Leia(turma)

 

Você pergunta "quantos alunos", mas o nome da variável está chamando-se "turma". Que tal chamar de "quantidadeDeAlunos"? Percebe que só de ler o nome da variável você já tem uma noção de mais ou menos para que ela vai servir? Para simplificar, é também comum abreviar. Ex.: qtdAlunos. Se existissem outros de tipos de quantidade, poderia ser ainda mais explicativo. Ex: qtdAlunosTurma, qtdAlunosColegio etc. Mas nesse caso, não precisa.

 

 

Outro ponto:

Em 29/04/2024 às 16:58, Samuel Fortes Brasil disse:
     caso 2
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N1)
              Escreva("Nota: ")
              Leia(Nota)
              Escreva("Qual é o nome do(a)Aluno(a): ")
              Leia(N2)
              Escreva("Nota: ")
              Leia(Nota)

 

 

Observe que N1 ficou ambíguo.. não se sabe se seria para "Nota" ou "Nome".  Pior: se N1 (e afins) são para nomes, porque está estruturada para receber números lá na declaração de variáveis? 🤔

 

Em 29/04/2024 às 16:58, Samuel Fortes Brasil disse:
Var
   turma:Inteiro
   N1,N2,N3,N4,N5:Inteiro

 

Ou seja: seguir esse princípio de "manter uma boa semântica", já evitaria isso. Poderia ficar assim:

 

algoritmo "Cadastro de Notas de Alunos"
var
   qtdAlunos : inteiro
   nome1, nome2, nome3, nome4, nome5 : caractere

 

Tipo, na hora que estivesse escrevendo, já veria que "que seria estranho associar um nome ao tipo numérico", saca? A coisa não estaria semântica.

 

Observe também que está utilizando a mesma nota para cada um dos alunos, ou seja, a cada nova leitura, estará perdendo o dado anterior, pois simplesmente será substituído. Poderia ter uma nota para cada aluno... assim como tem um nome para cada um.

 

Até aqui poderia ser algo como:

algoritmo "Cadastro de Notas de Alunos"
var
   qtdAlunos : inteiro
   nome1, nome2, nome3, nome4, nome5 : caractere
   nota1, nota2, nota3, nota4, nota5 : real
   
inicio
   escrevaL("-----------------------------------")
   escreva ("Quantos alunos a turma possui: ")
   leia(qtdAlunos)
   escrevaL("-----------------------------------")

   enquanto (qtdAlunos > 5) faca
      escrevaL("Não é possível criar registro de uma turma")
      escrevaL("com mais de 5 alunos. Por favor informe um número menor!")
      escreva ("Informe um novo valor: ")
      leia(qtdAlunos)
      escrevaL("-----------------------------------")
   fimEnquanto



fimAlgoritmo

 

 

 

Entrando na leitura dos dados:

algoritmo "Cadastro de Notas de Alunos"
var
   qtdAlunos : inteiro
   nome1, nome2, nome3, nome4, nome5 : caractere
   nota1, nota2, nota3, nota4, nota5 : real
   cont : inteiro

inicio
   escrevaL("-----------------------------------")
   escreva ("Quantos alunos a turma possui: ")
   leia(qtdAlunos)
   escrevaL("-----------------------------------")

   enquanto (qtdAlunos > 5) faca
      escrevaL("Não é possível criar registro de uma turma")
      escrevaL("com mais de 5 alunos. Por favor informe um número menor!")
      escreva ("Informe um novo valor: ")
      leia(qtdAlunos)
      escrevaL("-----------------------------------")
   fimEnquanto
   
   escolha (qtdAlunos)
   caso 1
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome1)
      escreva ("Nota: ")
      leia(nota1)
   caso 2
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome1)
      escreva ("Nota: ")
      leia(nota1)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome2)
      escreva ("Nota: ")
      leia(nota2)
   caso 3
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome1)
      escreva ("Nota: ")
      leia(nota1)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome2)
      escreva ("Nota: ")
      leia(nota2)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome3)
      escreva ("Nota: ")
      leia(nota3)
   caso 4
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome1)
      escreva ("Nota: ")
      leia(nota1)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome2)
      escreva ("Nota: ")
      leia(nota2)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome3)
      escreva ("Nota: ")
      leia(nota3)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome4)
      escreva ("Nota: ")
      leia(nota4)
   caso 5
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome1)
      escreva ("Nota: ")
      leia(nota1)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome2)
      escreva ("Nota: ")
      leia(nota2)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome3)
      escreva ("Nota: ")
      leia(nota3)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome4)
      escreva ("Nota: ")
      leia(nota4)
      escreva ("Qual é o nome do(a)Aluno(a): ")
      leia(nome5)
      escreva ("Nota: ")
      leia(nota5)
   fimEscolha
     
   //aqui entraria o processamento dos dados e depois exibição dos resultados... mas aí vai depender do enunciado
     
     
fimAlgoritmo

 

 

Daí, a lógica utilizada para o processamento e exibição do resultado, vai depender do que está no enunciado do problema. Se for algo como "exibir a maior nota e o nome do respectivo aluno", já adianto que não daria muito certo, pois iria dar uma trabalheira absurda ir comparando as nota por nota... teria que pensar em outra lógica... e sempre se baseando no enunciado do problema.

 

Se você já estiver com uma solução, por favor, posta o enunciado completo e código aqui para analisarmos...  Caso não, posta o enunciado e o que já conseguiu fazer.

 

No aguardo.

image.png

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!