Ir ao conteúdo
  • Cadastre-se

VisualG Melhora a minha função maiorValor escrita no pseudocódigo Portugol (IDE VisualG)


Posts recomendados

Sou iniciante na área de programação e estou iniciando o meu estudo em programação estudando lógica de programação pelo VisualG. Estou com uma dúvida na minha subrotina (função) que eu nomeie como "maiorValor", ela tem a função de retorna ao meu programa principal o maior valor entre 4 número digitados pelo usuário. Tiver um pouquinho de dificuldade, mas consegui fazer a função sem precisa consultar nenhum material. Mas sinto que eu fiz uma gambiarra de tanto "e". Tá tudo funcionado certinho, mas acho que tem como ter feito melhor.

Tem como fazer de uma forma diferente e melhor?

 

Aqui embaixo esta o meu código completo:

Capturar.PNG.9c96655e8d8118787da45e3b652087d5.PNG

Algoritmo "Subrotina"

// Disciplina   : [Linguagem e Lógica de Programação]

// Professor   : Antonio Carlos Nicolodi 

// Descrição   : Aqui você descreve o que o programa faz! (função)

// Autor(a)    : Fernando Santos Pereira

// Data atual  : 03/05/2021

Var

// Seção de Declarações das variáveis 

   Nome, opcao: caractere

   n1, n2, n3, n4: inteiro

   S, Mult, Dim, Maior: inteiro

   Divi, Med: real



//Messagem inicial da execução do programa

//Passagem de parâmetro por referência

Procedimento Message(var Name: caractere)

inicio

   LimpaTela

   EscrevaL("===============================================")

   EscrevaL(Name,", obrigado por iniciar na ")

   Escreval("minha aplicação desenvolvido na IDE VisualG")

   EscrevaL("===============================================")

FimProcedimento



//Messafem Final da execução do programa

//Passagem de parâmetro por valor

Procedimento messageFinal(Name: caractere)

inicio

   LimpaTela

   EscrevaL("===============================================")

   EscrevaL(Name,", obrigado por rodar esse programa")

   Escreval("desenvolvido por mim na IDE VisualG")

   EscrevaL("===============================================")

FimProcedimento



//Subrotina Função: Essa função faz soma quatro número

//Passagem de parâmetro por valor

Funcao Soma(So1,So2,So3,So4: inteiro):inteiro

var

   Somador: inteiro

inicio

   Somador<- So1 + So2 + So3 + So4

   Retorne Somador

FimFuncao



//Subrotina Função: Essa função faz a multiplicação de quatro número

//Passagem de parâmetro por valor

Funcao Multiplicacao(Mu1, Mu2, Mu3, Mu4: inteiro):inteiro

Var

   Multiplicador: inteiro

inicio

   Multiplicador<-Mu1 * Mu2 * Mu3 * Mu4

   Retorne Multiplicador

FimFuncao



//Subrotina Função: Essa função faz a subtração de quatro número

//Passagem de parâmetro por valor

Funcao Diminuicao(D1, D2, D3, D4: inteiro):inteiro

Var

   inteiro

inicio

   D<- D1 + D2 + D3 + D4

   Retorne D

FimFuncao



//Subrotina Função: Essa função faz a divisao de quatro número

//Passagem de parâmetro por valor

Funcao Divisao(Dv1, Dv2, Dv3, Dv4: inteiro):real

Var

   dvs: real

inicio

   dvs<- (Dv1 + Dv2)/(Dv3 + Dv4)

   Retorne dvs

FimFuncao



//Subrotina Função: Essa função faz a média de quatro número

//Passagem de parâmetro por valor

Funcao Media(X: inteiro):real

Var

   Resultado: real

inicio

   Resultado<- X/4

   Retorne Resultado

FimFuncao



//Subrotina Função: Essa função retorna o maior valor entre os 4 números digitados

//Passagem de parâmetro por valor

Funcao maiorValor(x1, x2, x3, x4 : inteiro):inteiro

inicio

   Se ((x1>x2) e (x1>x3) e (x1>x4)) entao

      Retorne x1

   Senao

      Se ((x2>x1) e (x2>x3) e (x3>x4)) entao

         Retorne x2

      Senao

         Se ((x3>x1) e (x3>x2) e (x3>x4)) entao

            Retorne x3

         Senao

            Retorne x4

         FimSe

      FimSe

   FimSe

FimFuncao



Inicio

// Seção de Comandos, procedimento, funções, operadores, etc... 

   Repita

      LimpaTela

      Escreva("Digite seu nome: ")

      Leia(Nome)

      //Chamado uma subrotina(Procedimento)

      Message(Nome)

      Escreva("Digite o 1° número: ")

      Leia(n1)

      //Chamado uma subrotina(Procedimento)

      Message(Nome)

      Escreva("Digite o 2° número: ")

      Leia(n2)

      //Chamado uma subrotina(Procedimento)

      Message(Nome)

      Escreva("Digite o 3° número: ")

      Leia(n3)

      //Chamado uma subrotina(Procedimento)

      Message(Nome)

      Escreva("Digite o 4° número: ")

      Leia(n4)



      //Chamado uma subrotina(Função e Procedimento)

      messageFinal(Nome)

      S<- Soma(n1, n2, n3, n4)

      Mult<- Multiplicacao(n1, n2, n3, n4)

      Dim<- Diminuicao(n1, n2, n3, n4)

      Divi<- Divisao(n1, n2, n3, n4)

      Med<- media(S)

      Maior<- maiorValor(n1, n2, n3, n4)



      EscrevaL("RESULTADO:")

      EscrevaL("A soma é: ",S)

      EscrevaL("A multiplicação é: ",Mult)

      EscrevaL("A subtração é: ",Dim)

      EscrevaL("A divisão é: ",Divi:4:1)

      EscrevaL("A média é: ",Med:4:1)

      EscrevaL("A maior valor entre os 4 digitados é: ",Maior,".")

      EscrevaL("")

      Escreva("Você que continua? (S/N)")

      Leia(opcao)

   Ate (opcao <> "s")

Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
9 minutos atrás, Fernando// disse:

 

Capturar.PNG.9c96655e8d8118787da45e3b652087d5.PNG

 

 

 

Eu não analisei o código todo. Mas só um detalhe nessa imagem. No segundo if, se você já sabe que o x1 não é maior do que o x2, não precisa testar novamente. Só precisa testar x2 com x3 e x4.

No terceiro if, você só precisa testar x3 com o x4.

Do jeito que você fez, sem nenhuma igualdade, vai dar erro nas comparações quando tiverem 2 números iguais.

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