Ir ao conteúdo
  • Cadastre-se

VisualG Programa para calcular o custo de combustível


Posts recomendados

Tive esse teste ontem, consegui fazer, mas não sei se esta certo. Até porque n sei usar função muito bem ainda. Alguém me diz se ta certo?

 

(A FT DO Q É PRA FAZER TA EM BAIXO)

Var
   // Seção de Declarações das variáveis
   alcool,alcool1,alcooldes,gasolina,gasolina1,x,media,gasolinades,total,total2: real
funcao CalGaso(n1,n2:real):real


inicio
   media<-n1,n2
   se (alcool<=20) entao
      alcooldes<-(alcool*3)/100
      total<-alcool1-alcooldes
   fimse
   se (alcool>20) entao
      alcooldes<-(alcool*5)/100)
      total<-alcool1-alcooldes
   fimse
   se (gasolina>20) entao
   gasolinades<-(gasolina*6)/100
   total2<-gasolina1-gasolinades
   fimse
   se (gasolina<=20) entao
   gasolinades<-(gasolina*4)/100
   total2<-gasolina1-gasolinades
   fimse
   retorne media
fimfuncao

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

   escreval("PROGRAMA PARA CALCULAR A MÉDIA DE COMBUSTIVEL")
   ESCREVAL("DIGITE 1- ALCOOL")
   ESCREVAL("DIGITE 2- GASOLINA")
   ESCREVAL("DIGITE 0 -SAIR")
   leia(x)
   se (x=1) entao
      ESCREVAL("QUANTOS LITROS DE ALCOOL VOCÊ DESEJA?")
      LEIA (alcool)
      alcool1<-alcool*2.90
      escreval("o preço do alcool é de:", alcool1,"reais")

      media<-CalGaso(alcool1,gasolina)

      escreval("o preço do alcool com desconto é de:",total )
      escreval("desconto de:",alcooldes)
   fimse

   se (x=2) entao
      escreval("quantos litros de gasolina você deseja?")
      leia(gasolina)
      gasolina1<-gasolina*3.30
      escreval("o preço da gasolina é de:",gasolina1,"reais")
      media2<-CalGaso(alcool1,gasolina1)
      escreval("o preço da gasolina com desconto é:", total2)
      escreval("com desconto de:",gasolinades)
   se (x<0) entao
      escreval("você finalizou o programa!")
    fimse
    fimse


 

teste logica oq.PNG

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Vou tentar explicar com exemplos. Tente entender o passo-a-passo, mas também dê uma pesquisa mais a fundo sobre o que é uma função/procedimento em VisualG. Veja exemplos na internet. Entenda os seus funcionamentos...

 

 

Vamos lá:

 

2 horas atrás, Alice Braga disse:

teste logica oq.PNG

 

Geralmente os enunciados já são meios que algoritmos, ou seja: já dão as etapas, no texto, para resolvê-los.

 

Veja:

 

 

2 horas atrás, Alice Braga disse:

     image.png

 

Só implementar. O segredo é sempre tentar deixar o código mais "semântico" possível... em outras palavras deixando as coisas auto-explicativas... Exemplo:

 

algoritmo "Desconto no combustível"
var
   litrosVendidos: real
   tipoCombustivel: real
   
   precoAlcool: real
   precoGasolina: real

inicio
   precoAlcool <- 2.90
   precoGasolina <- 3.30
     
   escreval("Litros vendidos: ")
   leia(litrosVendidos)
   escreval("Tipo de combustível (1-Álcool 2-Gasolina): ")
   leia(tipoCombustivel)




fimAlgoritmo

Tente ler o enunciado e ir comparando com o código... quanto mais próximo eles tiverem, melhor!

 

 

 

2 horas atrás, Alice Braga disse:

   image.png

 

Veja que os valores a serem utilizados para função DEVEM ser repassadas pelos parâmetros da própria função, ou seja: não pode utilizar as variáveis globais.

 

Outro detalhe importante, e que está claro, é que está se referindo aos DADOS DE ENTRADA. Ele quer que use "o número de litros vendidos e o tipo de combustível" como parâmetro. Exemplo:

funcao valorASerPago(lv: inteiro; tc: real): real
inicio

   retorne 123.45
fimFuncao

 

Essas variáveis lv e tc serão variáveis locais da função, ou seja: só existem lá!!! Ao invocar essa função no programa principal, vão ser passados os valores das variáveis globais e estas serão copiadas, respectivamente, para as variáveis da função... daí, na função vai utilizar as tais variáveis próprias (lv e tc, em vez de litrosVendidostipoCombustivel).

 

 

Perceba também no código acima que ainda não implementei o miolo da função... coloquei para retornar um valor aleatório apenas para deixar o esqueleto pronto. A ideia é que se botar para rodar, deve rodar. Veja:

image.png

 

O objetivo aí é fazer o bagulho rodar... por exemplo: eu tive uma certa dificuldade para descobrir que precisava do ";" ali depois do inteiro!!! Sem isso nada ia funcionar... Mas fui testando, testando, dando uma olhada no Google... não achei, daí tive a ideia de colocar uma ";" e funcionou. Se não funcionasse, poderia vir no Fórum e pesquisar mais um pouco e, até mesmo, abrir um tópico para perguntar como se resolver... entende?

 

Teria que resolver isso primeiro... talvez usasse, por enquanto, ambos como real... ou usasse as variáveis globais... em fim., teria que resolver de alguma forma... Esse ponto já foi resolvido.

 

 

Continuando:

funcao valorASerPago(lv: inteiro; tc: real): real
var
   valorItem: real
inicio
   se (tc = 1) entao // se álcool
      valorItem <- lv*precoAlcool
   fimSe
   se (tc = 2) entao // se gasolina
      valorItem <- lv*precoGasolina
   fimSe

   retorne valorItem
fimFuncao

Para testar, apenas deixei com o preço sem o desconto. Vide:

 

image.png

 

Ficou sem as casas decimais... Uma forma de resolver é utilizando um padrão de formatação :x:y. Exemplo:

   escreval("")
   escreval("Valor a ser pago: R$", valorTotal:1:2)

 

image.png

 

Por aí vai...

 

Daí tente dar continuidade ao código...

 

Exemplos de passos:

  1. Mude de 2 se/entao para um se/senao/entao;
  2. Insira uma lógica para dar um desconto geral de 3% para álcool e 4% para gasolina;
  3. Após (não tente fazer esse, antes do anterior), insira uma lógica para dar um desconto de 3% ou 5% para álcool, ou 4% ou 6% para gasolina, de acordo com a regra do enunciado.
  4. Insira uma validação para não aceitar valores negativos para os litros de combustíveis
  5. etc

Se tiver dúvidas ou dificuldades em algum ponto qualquer, é só falar...

 

Caso termine estes pontos de boa, posta o código aqui e já parte para implementar mais outros "pequeno" pontos do enunciado... Veja: NÃO TENTE FAZER TUDO DE UMA VEZ. Faça uma coisinha e teste... se não funcionar, pare para corrigir até terminar... após, insira uma nova coisa... por aí vai... Por exemplo: por enquanto, nada de se preocupar com laços de repetições, outras validação de valores, inserir menus.. etc. Vá fazendo coisas pequenas e aos poucos... 

 

Lembrando: NÃO TENTE FAZER TUDO DE UMA VEZ.

 

 

Para adiantar, que as vezes é um pouco chato de arrumar, segue um exemplo de como ficaria só implementando o 1.

algoritmo "Desconto no combustível"
var
   litrosVendidos: real
   tipoCombustivel: inteiro
   precoAlcool: real
   precoGasolina: real

   valorTotal: real

funcao valorASerPago(lv: inteiro; tc: real): real
var
   valorItem: real
inicio
   valorItem <- 0
   se (tc = 1) entao // se álcool
      valorItem <- lv*precoAlcool
   senao
      se (tc = 2) entao // se gasolina
         valorItem <- lv*precoGasolina
      fimSe
   fimSe

   retorne valorItem
fimFuncao

inicio
   precoAlcool <- 2.90
   precoGasolina <- 3.30

   escreval("Litros vendidos: ")
   leia(litrosVendidos)
   escreval("Tipo de combustível (1-Álcool 2-Gasolina): ")
   leia(tipoCombustivel)

   valorTotal <- valorASerPago(litrosVendidos, tipoCombustivel)

   escreval("")
   escreval("Valor a ser pago: R$", valorTotal:1:2)




fimAlgoritmo

 

 

 

No aguardo.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@Simon Viegas é, acho q consegui :-;

Var
   // Seção de Declarações das variáveis
   alcool, gasolina,precoalcool,precogasolina,media,alcooldes,gasolinades,total,contaalcool:real
   combustivel,x,tipoc:inteiro

funcao CalGaso(partipo,parlitros:real):real

Var
   valorAlcool: real
   valorGasolina:real
inicio // inicio da funcao
   valorAlcool<-2.90
   valorGasolina<-3.30
   se (partipo=1) e (parlitros<20) entao
      parlitros<-combustivel*valorAlcool
      alcooldes<-(combustivel*3)/100
      total<-parlitros-alcooldes
   fimse

   se (partipo=1)e (parlitros>20) entao
      parlitros<-combustivel*valorAlcool
      alcooldes<-(combustivel*5)/100
      total<-parlitros-alcooldes
   fimse

   //gasolina

   se (partipo=2) e (parlitros<20) entao
      parlitros<-combustivel*valorGasolina
      gasolinades<-(combustivel*4)/100
      total<-parlitros-gasolinades
   fimse

   se (partipo=2) e (parlitros>=20) entao
      parlitros<-combustivel*valorGasolina
      gasolinades<-(combustivel*6)/100
      total<-parlitros-gasolinades
   fimse
   retorne parlitros
fimfuncao

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

   enquanto combustivel<9999999999 faca   //loop
      ESCREVAL("=====================================================")
      escreval("")
      escrevaL("quantos litros de combustível você deseja?")

      leia(combustivel)
      se (combustivel<=0) entao
         escreval("saindo...")
         interrompa
      fimse
      escreval("qual combustível você deseja?")
      escreval("1-alcool")
      escreval("2-gasolina")
      escreval("OBS: PARA SAIR DIGITE 0, OU UM NÚMERO MENOR")

      leia(tipoc) //validacao
      ESCREVAL("=========================================================")
      se (tipoc>2)ou (tipoc<=0) entao
         escreval("saindo...")
         interrompa
      fimse
      se tipoc=1 entao

         media<-CalGaso(tipoc,combustivel)
         escreval("o preço do alcool é de:",media,"reais")
         escreval("o preço do alcool com desconto é de:",total )
         escreval("desconto de:",alcooldes)
      fimse

      se tipoc=2 entao

         media<-CalGaso(tipoc,combustivel)
         escreval("o preço da gasolina é de:",media,"reais")
         escreval("o preço da gasolina com desconto é de:",total )
         escreval("desconto de:",gasolinades)
      fimse
   fimenquanto

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
3 horas atrás, Alice Braga disse:

@Simon Viegas é, acho q consegui :-;

 

 

Antes, um dúvida:
 

3 horas atrás, Alice Braga disse:

parlitros <- combustivel*valorAlcool

 

O que seria parlitro e porquê ele passa a ser igual a combustivel*valorAlcool? Tá meio suspeito isso aí...

 

 

1 - obrigatório uso de funções;

OK, mas o que significa CalGaso()? E qual a relação de media com o contexto do programa?

 

2 - o programa deverá funcionar até que o cliente digite o valor 0 no número de litros vendidos;

Não acho interessante uso do interrompa para finalizar o programa. Um mais correto seria deixar o programa percorrer o código e sair do laço de repetição.


De qualquer forma, sugeriria alterar de:

 

3 horas atrás, Alice Braga disse:

   enquanto combustivel<9999999999 faca   //loop

 

Para algo como:

   enquanto VERDADEIRO faca

 

Caso deseje, depois podemos nos aprofundar em o porquê não usar esse tipo de estrutura.

 

3 - o programa não pode aceitar valores negativos para o litro de combustível;

OK, mas entra na mesma questão do "mal" uso do interrompa.

 

4 - o programa não pode aceitar tipos de combustíveis diferente de Álcool e Gasolina;

OK, mas entra na mesma questão do "mal" uso do interrompa.

 

5 - imprima junto com o valor a ser pago o número de litros vendidos e o NOME do combustível escolhido para melhor visualização e conferência do cliente;

Está no mínimo faltando o número de litros.

 

No aguardo.

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