Ir ao conteúdo
  • Cadastre-se

VisualG calcule e exiba o valor do desconto e o valor a ser pago


Posts recomendados

Bom dia galera belezaa!
 

Fiz um exercício do visualG ele está funcionando 70% os outros 30% não consigo saber o que é. Segue o problema para melhor entendimento:

 

// Função : A concessionária de veículos CARANGO VELHO está vendendo os 
// seus veículos com desconto. Faça um
// algoritmo que calcule e exiba o valor do desconto e o valor a ser pago 
// pelo cliente de vários carros. O desconto
// deverá ser calculado de acordo com o ano do veículo. Até 2000 - 12% e 
// acima de 2000 - 7%. O sistema deverá
// perguntar se deseja continuar calculando desconto até que a resposta
// seja: \u201c(N) Não\u201d . Informar total de carros com 
// ano até 2000 e total geral.

 

O 1- problema é o meu código só calcula veículos abaixo do ano 2000, acima do ano 2000 ele não tá calculando.

 

O 2- problema é que eu não consigo exibir o valor do desconto atribuído, só consigo mostrar o valor a ser pago, o quanto foi o desconto não consegui fazer segue o código para ver se alguém consegue me ajudar

 

Obrigado a todos!
 

var
valor,descont, valorfinal: real
ano: inteiro
resp: caracter

inicio
Escreval("<><><><><><><><><><> CONCESSIONARIA DE VEÍCULOS CARANGO VELHO <><><><><><><><><><>")
Escreval("")

   Repita
   Escreva("Qual o valor do veiculo? R$:")
   Leia(Valor)
   Escreva("Qual o ano do veicúlo desejado?:")
   Leia(ano)
   Se ano <= 2000 então
      valorfinal <- valor - (valor*12/100) senao
      Se ano > 2000 então
         valorfinal <- valor - (valor*7/100)
         descont <- valorfinal - descont
      Fimse
   Fimse
         Escreval(" O valor de desconto é:", descont)
         Escreval(" O valor a ser pago pelo cliente é:", valorfinal)
         Escreval("")
         Escreval("")
         Escreva("Deseja continuar calculando o desconto? S/N")
         Leia(resp)
   Ate (resp = "n")
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

Penso eu que o erro ta aqui

 

   Se ano <= 2000 então
      valorfinal <- valor - (valor*12/100) // senao
      fimse
   Se (ano > 2000) então //coloca sempre o argumento entre parenteses, a sintaxe fica melhor de entender / ele só entra em 1 dessas, pode ser ou se não ou 2 se, tanto faz, mas não os 2
      valorfinal <- valor - (valor*7/100)
      descont <- valorfinal - descont
      Fimse

 

Lembrando: pode estar errado, faz mt tempo q vi visual g

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

var
valor,desconto, valorfinal: real
ano,cont,total: inteiro
resp: caracter
inicio
Escreval("<><><><><><><><><><> CONCESSIONARIA DE VEÍCULOS CARANGO VELHO <><><><><><><><><><>")
Escreval("")
   Repita
   desconto <- 0
   Escreva("Qual o valor do veiculo? R$:")
   Leia(Valor)
   Escreva("Qual o ano do veicúlo desejado?:")
   Leia(ano)
   Se ano <= 2000 então
      desconto   <- valor*0.12 // DESCONTO
      valorfinal <- valor - desconto
      cont <- cont+1 // CONTADOR DE CARROS ATÉ ANO 2000!
      total <- total+1 // TOTAL DE CARROS
       senao 
   Se ano > 2000 então
      desconto <- valor*0.07 // DESCONTO
      valorfinal  <- valor - desconto
      total <- total+1    // TOTAL DE CARROS
      fimse
         Escreval("")
         Escreval(" O valor de desconto é:R$", desconto)
         Escreval(" O valor a ser pago pelo cliente é:R$", valorfinal)
         Escreval("")
         Escreval("")
         Escreval("Deseja continuar calculando o desconto? S/N")
         Leia(resp)
         Escreval("")
         Escreval("")
   Ate (resp = "n")
   Escreval(" Total de carros até ano 2000:", cont) // ESCREVER TOTAL DE CARROS ATÉ ANO 2000
   Escreval(" Total de carros:", total)  // ESCREVER TOTAL DE CARROS
fimalgoritmo

obs: então não recebe acento.

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

  • Membro VIP

Olá a todos.

 

1) INDENTAÇÃO DE CÓDIGO

Dica fundamental: sempre deixe seu código bem indentado.

 

Abaixo apenas indentei o código da primeira postagem de @leandromichetti:

algoritmo "FCdH"
var
   valor, descont, valorfinal :real
   ano  :inteiro
   resp :caracter
inicio
Escreval("<><><><><><><><><><> CONCESSIONARIA DE VEÍCULOS CARANGO VELHO <><><><><><><><><><>")
Escreval("")
Repita
   Escreva("Qual o valor do veiculo? R$:")
   Leia(valor)
   Escreva("Qual o ano do veicúlo desejado?:")
   Leia(ano)
   Se ano <= 2000 ENTÃO
      valorfinal <- valor-(valor*(12/100))
   senao //senao deve ficar numa linha separada [Simon.Viegas]
      Se ano > 2000 ENTÃO
         valorfinal <- valor - (valor*(7/100))
         descont <- valorfinal - descont //essa linha está somente para maior que 2000
      Fimse
   Fimse
   Escreval(" O valor de desconto é:", descont)
   Escreval(" O valor a ser pago pelo cliente é:", valorfinal)
   Escreval("")
   Escreval("")
   Escreva("Deseja continuar calculando o desconto? S/N")
   Leia(resp)
Ate (resp = "n")
fimalgoritmo

 

Veja que só ao indentar, já fica visível duas possíveis falhas: o senao estava na mesma linha da instrução anterior; e o cálculo do desconto está apenas para uma das condições.

 

 

 

2) CÁLCULO DE DESCONTO

No algoritmo tem o seguinte trecho:

         descont <- valorfinal - descont

Mas no momento que esta linha é executada, qual o valor de descont?

Como em nenhum momento ela foi atualizada, possivelmente vai está com o valor "0" (zero! pois o Visualg zera todas ao variáveis ao iniciar o programa), essa conta não está servindo, pois "x - 0" sempre será igual a "x" (elemento neutro da adição/subtração). Logo, usaria logo:

descont <- valorfinal

 

Ao analisar, é observável que você precisar "reformular a fórmula para calcular o desconto";

 

Resumidamente seria algo assim:

valorfinal <- valor - desconto

Ou seja, primeiro calcula o desconto, após, calcula o valor final (usando o desconto).

 

Por enquanto é isso, mas lembrando que o enunciado tem outras exigências...

 

Tente entender o problema e reformular o código.

 

 

 

3) SOBRE OS COMENTÁRIOS

@VictorFreitasKing,

3 horas atrás, VictorFreitasKing disse:

//coloca sempre o argumento entre parenteses, a sintaxe fica melhor de entender / ele só entra em 1 dessas, pode ser ou se não ou 2 se, tanto faz, mas não os 2

Perfeito. Quando puder, pode deixar com parênteses... A dica é válida! Mas quando tem apenas uma expressão simples, não obrigatório. Já se tiver uma condição composta, o uso de parênteses se faz necessário. Ex.:

se (ano > 2000) E (ano < 2017) ENTÃO

Nesse caso, se não usar parênteses, vai dar erro!

 

 

 

3 horas atrás, VictorFreitasKing disse:

// senao

O uso do "senão" se faz necessário... justamente por ser condições mutuamente excludentes, ou seja, "se for uma, não poderá ser outra" (o senão vai servi para "amarrar uma condição na outra"). O que poderia está dando problema no Visualg é que esse senão deve ficar na linha de baixo (como citei mais acima)... o Visualg tem certas limitações e pequenos bugs.

 

 

@gabriel sabadini,

3 horas atrás, gabriel sabadini disse:

obs: então não recebe acento, números decimais são escritos com pontos e não virgulas (ex: 0.7 e não 0,7)

Justamente, mas o Visualg também aceita em alguns casos... por exemplo, não aceita "então", mas aceita ENTÃO. Vá entender!?

Fica dica: quando o código não está na tag CODE, as vezes o "corretor ortográfico" do fórum insere o "~" no então. Por isso é importe usá-la. Basta clicar no botão <> e colar o código. Caso encontre um código com "então", use o "CTRL+U" no Visualg para substituir "então" por "ENTÃO".

 

 

***

 

No aguardo.

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

Bom dia Simon!

 

Segue código funcionando corretamente para usuários que possam haver dúvidas futuras. Obrigado a todos!

algoritmo "Exercicio20"


var
valor,descont, valorfinal: real
ano, cont, total: inteiro
resp: caracter

inicio
Escreval("<><><><><><><><><><> CONCESSIONARIA DE VEÍCULOS CARANGO VELHO <><><><><><><><><><>")
Escreval("")

   Repita
   descont <- 0
   Escreva("Qual o valor do veiculo? R$:")
   Leia(Valor)
   Escreva("Qual o ano do veicúlo desejado?:")
   Leia(ano)
   Se ano <= 2000 então
      descont <- valor*0.12
      valorfinal <- valor - descont
      cont <- cont+1
      total <- total+1
      senao
      Se ano > 2000 então
         descont <- valor*0.07
         valorfinal <- valor - descont
         total <- total+1
      Fimse
   Fimse
         Escreval("")
         Escreval(" O valor de desconto é: R$", descont)
         Escreval(" O valor a ser pago pelo cliente é: R$", valorfinal)
         Escreval("")
         Escreval("")
         Escreval(" Total de carros até ano 2000:", cont)
         Escreval(" Total de carros:", total)
         Escreva("Deseja continuar calculando o desconto? S/N")
         Leia(resp)
         Escreval("")
         Escreval("")
   Ate (resp = "n")
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @leandromichetti.

 

Abaixo algumas críticas/sugestões.

 

1) INDENTAÇÃO DE CÓDIGO

É extremamente importante que o código esteja sempre indentado. Veja por exemplo seu código acima reindentado:

 

algoritmo "Exercicio20"
var
   valor,descont, valorfinal: real
   ano, cont, total: inteiro
   resp: caracter
inicio
Escreval("<><><><><><><><><><> CONCESSIONARIA DE VEÍCULOS CARANGO VELHO <><><><><><><><><><>")
Escreval("")
Repita
   descont <- 0
   Escreva("Qual o valor do veiculo? R$:")
   Leia(Valor)
   Escreva("Qual o ano do veicúlo desejado?:")
   Leia(ano)
   Se ano <= 2000 então
      descont <- valor*0.12
      valorfinal <- valor - descont
      cont <- cont+1
      total <- total+1
   senao
      Se ano > 2000 então
         descont <- valor*0.07
         valorfinal <- valor - descont
         total <- total+1
      Fimse
   Fimse
   Escreval("")
   Escreval(" O valor de desconto é: R$", descont)
   Escreval(" O valor a ser pago pelo cliente é: R$", valorfinal)
   Escreval("")
   Escreval("")
   Escreval(" Total de carros até ano 2000:", cont)
   Escreval(" Total de carros:", total)
   Escreva("Deseja continuar calculando o desconto? S/N")
   Leia(resp)
   Escreval("")
   Escreval("")
Ate (resp = "n")
fimalgoritmo

 

Percebe a diferença?

 

ADENDO: não existe um padrão único ou correto de indentação, mas a base é sempre a mesma, algo como: "um dente pra frente naquilo que está dentro de outra estrutura". O resto é adaptação, mas que precisa ter "coerência, ou seja, todo código teve ter a mesma base.

 

Veja por exemplo no "meu padrão"... nele tem algumas características especiais, no exemplo acima perceba que deixo o código entre INICIO e FIMALGORITMO na mesma coluna (não dou um "dente"), pois assim economiza mais espaço.

 

 

 

2) "CONDIÇÕES MUTUAMENTE EXCLUDENTES

Se observamos, as condições que verificam os anos são excludentes entre si, e ao mesmo tempo complementares, ou seja, se não for um, necessariamente será o outro. Logo, não precisa do segundo se. Basta o senão. (todo ano que não é menor ou igual a 2000, é necessariamente maior que 2000. Seria um erro de lógica deixa esse segundo se)

 

 

 

2) REPETIÇÃO DE INSTRUÇÃO

   Se ano <= 2000 ENTÃO
      descont    <- valor*0.12
      valorfinal <- valor - descont
      cont       <- cont+1
      total      <- total+1
   senao
      Se ano > 2000 ENTÃO
         descont    <- valor*0.07
         valorfinal <- valor - descont
         total      <- total+1
      Fimse
   Fimse

obs.: para efeito demonstrativo, acima outro exemplo de indentação/alinhamento que acho bacana. Dá um visual mais limpo. Perceba que deixei as atribuições alinhadas.

 

Os cálculos do valorfinal e total estão se repetindo, ou seja, é a mesma instrução para a mesma finalidade em partes diferentes. Eles podem ficar apenas após o se/senão.

 

O cálculo do desconto também pode ficar fora do se/senão. Perceba que também é o mesmo cálculo, só mudando o valor da taxa, ou seja, dentro do se poderia por exemplo só "descobrir" taxa e atualiza o cont. Após calcularia o desconto utilizando a taxa. Por que isso é interessante? se por exemplo você precisar alterar a forma de como calcular o desconto... você teria que fazer as alterações em cada parte do código onde ela é feita. A ideia é que os se meio que sirvam apenas para as partes que são individuais. O que é "genérico" fica centralizado .

 

Resumindo:

- descont, valorfinal e total ficariam após o se/senão. Dentro do se e senão ficariam só a atualização do valor da taxa e a atualização de cont no se.

 

 

***

 

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