Ir ao conteúdo

Posts recomendados

Postado

Boa Tarde!

Olha eu aqui outra vez 😄

 

Eu fiz o exercício 96 e no 100 pediu para atribuir uma nova FUNÇÃO a ele o jeito que eu fiz está certo ?

 

96) Crie um programa que tenha uma função Media(), que vai receber as 2 notas de um aluno e retornar a sua média para o programa principal.

 

100) Melhore o exercício 96, criando além da função Media() uma outra função chamada Situacao(), que vai retornar para o programa principal se o aluno está APROVADO, em RECUPERAÇÃO ou REPROVADO. Essa nova função, vai receber como parâmetro o resultado retornado pela função Media()

 

 

(EX:96)


algoritmo "MediaAlunoEx:96-Funcao"
var
N1 , N2 , R: Real

Funcao Media(A,B: Real): Real
inicio
      R <- A + B
      R <- R / 2
      Retorne R
FimFuncao
inicio
      Escreva("Digite a primeira nota: ")
      Leia(N1)
      Escreva("Digite a segunda nota: ")
      Leia(N2)
      R <- Media(N1,N2)
        Escreval("A media do Aluno e " , R)
fimalgoritmo  
           

 

 

(EX: 100)
           
algoritmo "MediaAlunoEx:100-Funcao"
var
N1 , N2 , R, C: Real
Funcao Media(A,B: Real): Real
inicio
      R <- A + B
      R <- R / 2
      C <- Situacao(R)
FimFuncao
Funcao Situacao(C:Real):Real
inicio
      Se (R >= 6) entao
         C <- R
         EscrevaL("ALUNO APROVADO")
      FimSe
           Se (R <= 5) entao
              C <- R
              EscrevaL("ALUNO REPROVADO")
           FimSe
           Retorne C
FimFuncao
inicio
      Escreva("Digite a primeira nota: ")
      Leia(N1)
      Escreva("Digite a segunda nota: ")
      Leia(N2)
      R <- Media(N1,N2)
       Escreval("A media do Aluno e " ,C)
fimalgoritmo         

 

Postado
1 hora atrás, OtteN disse:

Eu fiz o exercício 96 e no 100 pediu para atribuir uma nova FUNÇÃO a ele o jeito que eu fiz está certo ?

pelo o que eu entendi seria mais ao menos algo assim

funcao verifica_situacao_aluno(media:real):inteiro
inicio
   se media < 3 entao
      retorne ALUNO_REPROVADO
   fimSe
   se ((media >= 3)e(media <= 5)) entao
      retorne ALUNO_RECUPERACAO
   fimSe
   se media > 5 entao
      retorne ALUNO_APROVADO
   fimSe
fimFuncao

você teria que retornar para o programa principal a situação do aluno.

1 hora atrás, OtteN disse:

100) Melhore o exercício 96, criando além da função Media() uma outra função chamada Situacao(), que vai retornar para o programa principal se o aluno está APROVADO, em RECUPERAÇÃO ou REPROVADO. Essa nova função, vai receber como parâmetro o resultado retornado pela função Media()

E o programa principal que mostraria a mensagem de aprovado, em recuperação ou reprovado.

 

Exemplo completo

Algoritmo "teste"

var
   ALUNO_APROVADO, ALUNO_REPROVADO, ALUNO_RECUPERACAO:inteiro
   nota1, nota2:real

funcao media_aluno(nota1, nota2:real):real
inicio
   se (nota1 > 0) e (nota2 > 0) entao
      retorne (nota1+nota2)/2
   seNao
      retorne -1
   fimSe
fimFuncao

funcao verifica_situacao_aluno(media:real):inteiro
inicio
   se media < 3 entao
      retorne ALUNO_REPROVADO
   fimSe
   se ((media >= 3)e(media <= 5)) entao
      retorne ALUNO_RECUPERACAO
   fimSe
   se media > 5 entao
      retorne ALUNO_APROVADO
   fimSe
fimFuncao

inicio
   // Situação do aluno
   ALUNO_APROVADO <- 3
   ALUNO_REPROVADO <- 2
   ALUNO_RECUPERACAO <- 1

   escreva("Digite a primeira nota:")
   leia(nota1)
   escreva("Digite a segunda nota:")
   leia(nota2)
   se media_aluno(nota1, nota2) > 0 entao
      escreval("         Notas")
      escreval("1-", nota1)
      escreval("2-", nota2)
      escreval("     Media")
      escreval(media_aluno(nota1, nota2))
      se verifica_situacao_aluno(media_aluno(nota1, nota2)) = ALUNO_APROVADO entao
         escreval("O aluno esta aprovado!")
      fimSe
      se verifica_situacao_aluno(media_aluno(nota1, nota2)) = ALUNO_REPROVADO entao
         escreval("O aluno esta reprovado!")
      fimSe
      se verifica_situacao_aluno(media_aluno(nota1, nota2)) = ALUNO_RECUPERACAO entao
         escreval("O aluno esta de recuperacao!")
      fimSe
   seNao
      escreval("A situção do aluno esta irregular")
   fimSe


fimAlgoritmo

 

Uma coisa que eu reparei e que o visualg e péssimo em relação a constantes.

Em C ficaria bem mais simples exemplo em C  

  • Curtir 1
  • Obrigado 1
  • Membro VIP
Postado

Vou direto a alguns pontos:

 

0. sempre... sempre mantenha o código indentado. Existem diversos padrões, mas algum deve ser seguido. No VisualG pressione Ctrl+G para ter uma ajuda;

1. as nomenclaturas das funções devem ser Media() e Situacao(). Está explícito no enunciado;

2. acho não é necessário implementar "regras de negócios" por enquanto (se achar interessante, faz outro código sepadado). Fica implícito que só vai ser utilizado notas válidas (entre 0 e 10, inclusos);

3. eu acho que a função deveria retornar um "texto", apesar que achar que seria mais interessante retornar um "código de situação" também.

 

 

Sobre o [3]:

Em vez de:

Em 05/04/2022 às 14:14, OtteN disse:
Funcao Situacao(C:Real):Real
inicio
      Se (R >= 6) entao
         C <- R
         EscrevaL("ALUNO APROVADO")
      FimSe
           Se (R <= 5) entao
              C <- R
              EscrevaL("ALUNO REPROVADO")
           FimSe
           Retorne C
FimFuncao

 

Sugeriria algo como:

funcao Situacao(m: real): caractere
inicio
   se (m >= 6) entao
      retorne ("APROVADO")
   fimSe

   se ((m >= 3) E (m < 6)) entao
      retorne ("RECUPERAÇÃO")
   fimSe

   se (m < 3) entao
      retorne ("REPROVADO")
   fimSe
fimFuncao


Exemplo de código completo:

algoritmo "Ex:106 - Situação do aluno"
//[96) Crie um programa que tenha uma função Media(), que vai receber as 2
//notas de um aluno e retornar a sua média para o programa principal.]

//100) Melhore o exercício 96, criando além da função Media() uma outra função
//chamada Situacao(), que vai retornar para o programa principal se o aluno
//está APROVADO, em RECUPERAÇÃO ou REPROVADO. Essa nova função, vai receber
//como parâmetro o resultado retornado pela função Media()

funcao Media(n1, n2:real): real
inicio
   retorne (n1+n2)/2
fimFuncao

funcao Situacao(m: real): caractere
inicio
   se (m >= 6) entao
      retorne ("APROVADO")
   fimSe

   se ((m >= 3) E (m < 6)) entao
      retorne ("RECUPERAÇÃO")
   fimSe

   se (m < 3) entao
      retorne ("REPROVADO")
   fimSe
fimFuncao

var
   nota1, nota2: real

inicio
   escreva ("Digite a primeira nota:")
   leia(nota1)
   escreva ("Digite a segunda nota:")
   leia(nota2)

   escrevaL("")
   escrevaL("         Notas")
   escrevaL("1-", nota1:1:2)
   escrevaL("2-", nota2:1:2)
   escrevaL("     Media")
   escrevaL(Media(nota1, nota2))

   escrevaL("")
   escrevaL("Situação do aluno: ", Situacao(Media(nota1, nota2)))
fimAlgoritmo


Observe que está invocando a função Media() duas vezes... estaria redundante. Poderia ser algo assim:

var
   nota1, nota2: real
   m: real

inicio
   escreva ("Digite a primeira nota:")
   leia(nota1)
   escreva ("Digite a segunda nota:")
   leia(nota2)

   m <- Media(nota1, nota2)

   escrevaL("")
   escrevaL("         Notas")
   escrevaL("1-", nota1:1:2)
   escrevaL("2-", nota2:1:2)
   escrevaL("     Media")
   escrevaL(m)

   escrevaL("")
   escrevaL("Situação do aluno: ", Situacao(m))
fimAlgoritmo


Observe que essa variável m global não é a mesma variável declarada lá na em Situacao(), poderia ser diferente se quisesse... lá dentro da função vai ser utilizada a variável local (da própria função)... que para o contexto do código, eventualmente, vai ter o mesmo valor!!! Mas tecnicamente uma variável (a global) não tem nada a ver com a outra (a local).

ADENDO 1
Seguindo a lógica do @kgin, mas utilizando constantes para deixar mais bonitinho... segue um exemplo:

algoritmo "Ex:106 - Situação do aluno"
//[96) Crie um programa que tenha uma função Media(), que vai receber as 2
//notas de um aluno e retornar a sua média para o programa principal.]

//100) Melhore o exercício 96, criando além da função Media() uma outra função
//chamada Situacao(), que vai retornar para o programa principal se o aluno
//está APROVADO, em RECUPERAÇÃO ou REPROVADO. Essa nova função, vai receber
//como parâmetro o resultado retornado pela função Media()

const
   ALUNO_APROVADO = 1
   ALUNO_RECUPERACAO = 2
   ALUNO_REPROVADO = 3

funcao Media(n1, n2:real): real
inicio
   retorne (n1+n2)/2
fimFuncao

funcao Situacao(m: real): inteiro
inicio
   se (m >= 6) entao
      retorne ALUNO_APROVADO
   fimSe

   se ((m >= 3) E (m < 6)) entao
      retorne ALUNO_APROVADO
   fimSe

   se (m < 3) entao
      retorne ALUNO_RECUPERACAO
   fimSe
fimFuncao

funcao LegendaSituacao(idSituacao: inteiro): caractere
inicio
   //TODO: para traduzir o código da situacao para o texto correspondente
fimFuncao

var
   nota1, nota2: real
   m: real
   s: inteiro

inicio
   escreva ("Digite a primeira nota:")
   leia(nota1)
   escreva ("Digite a segunda nota:")
   leia(nota2)

   m <- Media(nota1, nota2)

   escrevaL("")
   escrevaL("         Notas")
   escrevaL("1-", nota1:1:2)
   escrevaL("2-", nota2:1:2)
   escrevaL("     Media")
   escrevaL(m)

   escrevaL("")
   escreva ("Situação do aluno: ")

   s <- Situacao(m)

   se (s = ALUNO_APROVADO) entao
      escreval("APROVADO")
   fimSe

   se (s = ALUNO_RECUPERACAO) entao
      escreval("RECUPERACAO")
   fimSe

   se (s = ALUNO_REPROVADO) entao
      escreval("REPROVADO")
   fimSe
fimAlgoritmo

Obs.: nesse caso acima, não tem uma forma prática de enviar os valores das constantes pelos parâmetro para dentro da função, e meio que não teria problema em utilizar diretamente na função... (Isso tomando como princípio que uma função deve OU receber os valores por parâmetro, OU deve declarar as variáveis localmente, ou seja, evitar utilizar variáveis globais diretamente nas funções)

ADENDO 2

Implementando a legenda...

algoritmo "Ex:106 - Situação do aluno"
//[96) Crie um programa que tenha uma função Media(), que vai receber as 2
//notas de um aluno e retornar a sua média para o programa principal.]

//100) Melhore o exercício 96, criando além da função Media() uma outra função
//chamada Situacao(), que vai retornar para o programa principal se o aluno
//está APROVADO, em RECUPERAÇÃO ou REPROVADO. Essa nova função, vai receber
//como parâmetro o resultado retornado pela função Media()

const
   ALUNO_APROVADO = 1
   ALUNO_RECUPERACAO = 2
   ALUNO_REPROVADO = 3

funcao Media(n1, n2:real): real
inicio
   retorne (n1+n2)/2
fimFuncao

funcao Situacao(m: real): inteiro
inicio
   se (m >= 6) entao
      retorne ALUNO_APROVADO
   fimSe

   se ((m >= 3) E (m < 6)) entao
      retorne ALUNO_RECUPERACAO
   fimSe

   se (m < 3) entao
      retorne ALUNO_REPROVADO
   fimSe
fimFuncao

funcao LegendaSituacao(idSituacao: inteiro): caractere
inicio
   escolha idSituacao
   caso ALUNO_APROVADO
      retorne ("APROVADO")
   caso ALUNO_RECUPERACAO
      retorne ("RECUPERACAO")
   caso ALUNO_REPROVADO
      retorne ("REPROVADO")
   fimEscolha
fimFuncao

var
   nota1, nota2: real
   m: real
   s: inteiro

inicio
   escreva ("Digite a primeira nota:")
   leia(nota1)
   escreva ("Digite a segunda nota:")
   leia(nota2)

   m <- Media(nota1, nota2)

   escrevaL("")
   escrevaL("         Notas")
   escrevaL("1-", nota1:1:2)
   escrevaL("2-", nota2:1:2)
   escrevaL("     Media")
   escrevaL(m)

   escrevaL("")
   escreva ("Situação do aluno: ", LegendaSituacao(Situacao(m)))
fimAlgoritmo


Obs.: claro que nessa versão final também poderia invocar a Media() diretamente (o que já citei que acharia redundante), mas daí seria algo assim:

inicio
   escreva ("Digite a primeira nota:")
   leia(nota1)
   escreva ("Digite a segunda nota:")
   leia(nota2)

   escrevaL("")
   escrevaL("         Notas")
   escrevaL("1-", nota1:1:2)
   escrevaL("2-", nota2:1:2)
   escrevaL("     Media")
   escrevaL(Media(nota1, nota2))

   escrevaL("")
   escreva ("Situação do aluno: ", LegendaSituacao(Situacao(Media(nota1, nota2))))
fimAlgoritmo


Veja como é interessante... o VisualG vai executando de dentro para fora... Meio que o que importa é o valor que cada função traz... ou seja: a Media() retornar um inteiro, que é jogado na Situacao(), que por sua vez retorna outra inteiro, que é jogado em LegendaSituacao(), que por sua vez retorna um caractere, que por sua vez é jogado no escreva(), que é um procedimento. (procedimento = funcao que não tem retorno...  OU pode-se dizer que função é um procedimento que tem um retorno nele mesmo... 😄)... 

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!