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