TransWikia.com

Portugol - Função não executada se chamada de fora do programa

Stack Overflow em Português Asked by Thiago de Barros on March 12, 2021

Boa noite pessoal.

Sou novo em programação e estou fazendo os cursos do Guanabara.

Empaquei nesse exercício:

var

contador: inteiro
resposta: vetor[1..5] de caractere
aluno: vetor [1..3] de caractere
respostaAluno: vetor [1..5] de caractere
notaFinal: vetor[1..3] de inteiro
nome: inteiro
somaNotas: inteiro
media: real

procedimento cadastrarGabarito()
inicio

      para contador <- 1 ate 5 faca
           escreva("Resposta da Questão", contador, ": ")
                   leia(resposta[contador])
      fimPara
      
fimProcedimento

funcao mediaTurma(): real
inicio

      para contador <- 1 ate 3 faca
           escrevaL(aluno[contador], ":", notaFinal[contador])
      fimPara
      media <- somaNotas / 3
      escrevaL ("Média da Turma: ", media)

fimFuncao

inicio

      escrevaL("Passo 1 - Cadastro de Gabarito")
      escrevaL("------------------------------")
      cadastrarGabarito()
      
      limpaTela
      
      para nome <- 1 ate 3 faca
           escrevaL("Passo 2 - Gabarito dos Alunos(as)")
           escrevaL("---------------------------------")
           escreva("Nome do Aluno: ")
                  leia(aluno[nome])
           escrevaL("RESPOSTAS DO ALUNO")
           para contador <- 1 ate 5 faca
                escreva("Resposta da Questão", contador, ": ")
                       leia(respostaAluno[contador])
                se (respostaAluno[contador] = resposta[contador]) entao
                   notaFinal[nome] <- notaFinal[nome] + 2
                fimSe
            fimPara
            somaNotas <- somaNotas + notaFinal[nome]
            limpaTela
      fimPara
      
      limpaTela
      
      escrevaL("Passo 3 - Notas Finais")
      escrevaL("----------------------")
      mediaTurma()
      escrevaL("----------------------")

fimalgoritmo

Consigo resolver o programa se eu escrever a função diretamente dentro do programa, sem usar o mediaTurma() para chama-la, mas, a intenção era ter uma função funcionando.

Quando tento fazer desse jeito, o Visualg me diz que a variável mediaTurma() não existe.
Eu olho o programa e não consigo enxergar o problema…

Por favor, me ajudem.

One Answer

Esse é o código funcionando e levando em conta a acumulação das notas dentro da função, para depois usar o retorno no cálculo da média.

var

contadorGabarito: inteiro
gabarito: vetor[1..5] de caractere
aluno: vetor[1..3] de caractere
resposta: vetor[1..5] de caractere
notaAluno: vetor[1..3] de real
notaTurma: real
notaFinal: real
contadorNotas: inteiro
media: real

procedimento cadastrarGabarito
inicio

  para contadorGabarito <- 1 ate 5 faca
       escreva("Resposta da Questão", contadorGabarito, ": ")
              leia(gabarito[contadorGabarito])
  fimPara
  
  // Lembre-se: O vetor gabarito PRECISA ter a variável [contadorGabarito]
  // para cadastrar o número de respostas necessárias e saber em qual
  // posição vai cada resposta.
  
fimProcedimento

funcao notasAlunos(): real
var

contadorAlunos: inteiro
contadorRespostas: inteiro

inicio

  notaFinal <- 0
  para contadorAlunos <- 1 ate 3 faca
       escrevaL("------------------------------")
       escrevaL("Passo 2 - Respostas dos Alunos")
       escrevaL("------------------------------")
       escreva("Nome do Aluno: ")
              leia(aluno[contadorAlunos])
       para contadorRespostas <- 1 ate 5 faca
            escreva("Resposta da Questão", contadorRespostas, ": ")
                   leia(resposta[contadorRespostas])
            se (resposta[contadorRespostas] = gabarito[contadorRespostas]) entao
               notaTurma <- notaTurma + 2
               notaAluno[contadorAlunos] <- notaAluno[contadorAlunos] + 2
            fimSe // As duas últimas linhas antes do fimSe atribuem uma nota
            // para a turma, que será usada para calcular a média da turma e
            // uma nota para o aluno, usando o [contadorAlunos] para atribuir
            // a nota ao nome do aluno através de um vetor.
            retorne notaTurma
       fimPara
       limpaTela
  fimPara // Esse é o para do contador de alunos, ele repete toda a sessão
  // para que as respostas do alunos sejam inseridas nos vetores e as notas
  // calculadas.

fimFuncao

inicio

  escrevaL("------------------------------")
  escrevaL("Passo 1 - Cadastro do Gabarito")
  escrevaL("------------------------------")
  cadastrarGabarito()
  
  limpaTela
  
  notaFinal <- notasAlunos()
  
  escrevaL("------------------------------")
  escrevaL("Passo 3 - Atribuição das Notas")
  escrevaL("------------------------------")

  para contadorNotas <- 1 ate 3 faca
       escrevaL("Nota final de ", aluno[contadorNotas], ": ", notaAluno[contadorNotas])
       media <- notaFinal / 3
  fimPara
  escrevaL("------------------------------")
  escreva("Média da Turma: ", media:4:1)
  escrevaL("------------------------------")
  
fimalgoritmo

Answered by Thiago de Barros on March 12, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP