Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
leandromichetti

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

Recommended Posts

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

 

Editado por Simon Viegas
Ao postar um código, antes pressione o botão "<>" na barra de ferramentas

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Editado por gabriel sabadini
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Bom dia Pessoal tudo bem!
     

    Gostaria de agradecer a todos, com ajuda de todos consegui concluir o exercicio com sucesso!

     

    Valeu!

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá @leandromichetti.

     

    Por favor, poste o código aqui para analisarmos e também poder servi de base para outros usuários.

     

    Lembrando que existem outros pontos que não foram abordados ainda.

     

     

    No aguardo.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

     

    Editado por Simon Viegas
    Ao postar um código, antes pressione o botão "<>" na barra de ferramentas

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×