Portugol - Function not executed if called from outside the program

Asked

Viewed 67 times

0

Good evening, everyone.

I’m new in programming and I’m doing the Guanabara courses.

I got stuck in this exercise:

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

I can solve the program if I write the function directly inside the program, without using mediaTurma() to call it, but the intention was to have a function working.

When I try to do it this way, Visualg tells me that the mediaTurma() variable does not exist. I look at the program and I can’t see the problem...

Please help me out.

  • 1

    You have defined your function mediaTurma should return a real but returns nothing. Note that as a function the way you invoked is wrong. If the purpose of the function is to calculate the mean then the accumulation should also be in the function.

  • Thanks for the answer! It worked. .

1 answer

0

This is the code working and taking into account the accumulation of notes within the function, to then use the return in the calculation of the average.

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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.