quarta-feira, 27 de outubro de 2010

Exercicio 17 capitulo 3

Quantas cartas você pode enviar.
algoritmo "3.17"
// Função : Calcular quantos cartas voce pode enviar
// Autor : Gustavo
// Data : 28/9/2010
// Seção de Declarações 
// Obs: Parece um algoritmo grande devido à quantidade de comentarios e o tamanho do nome das variaveis.
var
   dinheiro,precoEnvelope,precoSelo:real
   qtdeCartas,qtdeEnvelopes,qtdeSelos:real
   
   precoDuplaSeloEnvelope:real
   qtdeDuplaSeloEnvelope:real
inicio
   escreval("Informe a quantia em dinheiro:")
   leia(dinheiro)
   
   escreval("Informe o preco do selo:")
   leia(precoSelo)
   
   escreval("Informe o preco do envelope:")
   leia(precoEnvelope)
   
   escreval("Informe a quantidade de envelopes que voce tem:")
   leia(qtdeEnvelopes)
   
   escreval("Informe a quantidade de selos que voce tem:")
   leia(qtdeSelos)
   
   se (qtdeEnvelopes0) entao //sobrou envelopes...
      //Bom... vamos imaginar que sobrou 10 envelopes e nenhum selo, preciso nivelar esse déficit...
      //Tenho dinheiro para comprar selos para selar os envelopes que sobrou?
      //Parece confuso eu multiplicar o preco do selo pela qtde de envelopes, mas é que a quantidade de envelopes que sobrou é a quantidade de selos que terei que comprar
      se ((precoSelo*qtdeEnvelopes)<=dinheiro) entao //ufa... ou sobrou dinheiro ou foi a quantia exata, enfim, resoloveu o défit de selos
          qtdeDuplaSeloEnvelope<- qtdeDuplaSeloEnvelope + qtdeEnvolopes // mais cartas seladas...
          dinheiro<- dinheiro - (precoSelo*qtdeEnvelopes) //debitando a bufunfa...
          qtdeEnvelope<- 0
      senao
         //Bom... nao deu para comprar todos os selos..
         //imaginemos que cada selo custe 1 real, tenho 5 reais sobrando e preciso selar 10 envelopes. É óbvil que só vou conseguir selar metade, ou seja, 0.5 dos envelopes. Essa porcentagem de envelopes vezes o preco de cada selo dá a quantidade de selos que posso comprar.
         qtdeDuplaSeloEnvelope<- qtdeDuplaSeloEnvelope +  ((dinheiro)/(qtdeEnvelopes*precoSelo))*qtdeEnvelopes
         //Descontando dos envelopes que sobrou.
         qtdeEnvelopes<- qtdeEnvelopes - ((dinheiro)/(qtdeEnvelopes*precoSelo))*qtdeEnvelopes
         //debitando do dinheiro...
         dinheiro<- dinheiro - (((dinheiro)/(qtdeEnvelopes*precoSelo))*qtdeEnvelopes)*precoSelo
      fimse
   senao
      se (qtdeSelos>0) entao //sobrou selos...
         //Bom... vamos imaginar que sobrou 10 selos e nenhum envelope, preciso nivelar esse déficit...
         //Tenho dinheiro para comprar evelopes suficientes para usar os selos que sobrou?
         //Parece confuso eu multiplicar o preco do envelope pela qtde de selos que sobrou, é que precisarei comprar de envelopes a qtde de selos que sobrou.
         se ((precoEnvelope*qtdeSelos)<=dinheiro) entao //ufa... ou sobrou dinheiro ou foi a quantia exata, enfim, resoloveu o défit de envelopes
             qtdeDuplaSeloEnvelope<- qtdeDuplaSeloEnvelope + qtdeSelos // mais cartas seladas...
             dinheiro<- dinheiro - (precoEnvelope*qtdeSelos) //debitando a bufunfa...
             qtdeSelos<- 0
         senao
            //Bom... nao deu para comprar todos os envelopes..
            //imaginemos que cada envelope custe 1 real, tenho 5 reais sobrando e preciso usar meus 10 selos sobrando. É óbvil que só vou conseguir comprar metade dos envelopes necessarios, ou seja, 0.5 dos selos. Essa porcentagem de selo vezes o preco de cada envelope dá a quantidade de envelopes que posso comprar.
            qtdeDuplaSeloEnvelope<- qtdeDuplaSeloEnvelope +  ((dinheiro)/(qtdeSelos*precoEnvelope))*qtdeSelos
            //Descontando dos selos que sobrou.
            qtdeSelos<- qtdeSelos - (dinheiro)/(qtdeSelos*precoEnvelope))*qtdeSelos
            //debitando do dinheiro...
            dinheiro<- dinheiro - ((dinheiro)/(qtdeSelos*precoEnvelope))*qtdeSelos)*precoEnvelope
         fimse
      fimse
   fimse
   // No teste acima, veja que nao testei se sobrou os dois (selos e envelopes), pois é impossivel, pois se sobrou dos dois dari para fazer mais pares. (aula do joao, ou sobrou selo, ou e se somente selos, mas nao ambos)
   // Tambem nao testei se selos e envelopes foram zerados, pois se isso aconteceu, nao precisaria nivelar o deficit.
   // Bom, deficit's nivelado ou quase.
   
   //Agora vamos ver se sobrou dinheiro e ver quantos pares (1 envelope e 1 selo) posso comprar
   se (dinheiro>0) entao
      precoDuplaSeloEnvelope<- precoSelo+precoEnvelope
      escreval(dinheiro div precoDuplaSeloEnvelope)
      qtdeDuplaSeloEnvelope<- qtdeDuplaSeloEnvelope + (dinheiro div precoDuplaSeloEnvelope) // sem casas decimas, nao existe meia carta.
      //pronto, ja sabemos quantas cartas voce pode enviar usando somente o seu dinheiro.
      dinheiro<- dinheiro - (dinheiro div precoDuplaSeloEnvelope):5:2
   fimse
   
   //escreval(98.89871 div 1)
   escreval("Voce pode enviar ",qtdeDuplaSeloEnvelope," cartas")
   escreval("Sobrou ",qtdeEnvelopes," envelopes")
   escreval("Sobrou ",qtdeSelos," selos")
   escreva("Sobrou R$ ",dinheiro:5:2)
   
fimalgoritmo

Nenhum comentário:

Postar um comentário