Ir ao conteúdo

VisualG Estruturas de Repetição quebradas no Visualg


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

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
Postado

@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
Postado

@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

 

Postado

@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

 

Postado

@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
Postado

@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
Postado
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
  • Solução
Postado

@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

 

  • Membro VIP
Postado

@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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!