como ele nao tem ordem exata pois pode receber tanto credito como pedido de compra estou usando uma variavel que recolhe o valor digitado no caso y
e fiz este script mais nao importa o valor recebido o programa acaba, se alguem souber o erro agradeceria a ajuda =D
scanf("%d",&y);
while((i>0)){
if (y == 0)
botao = 0;
break;
if (y == -1){
botao = y;
for(j=0;saldo>=250&&choca>0;choca--){
printf("Venda de Choca-Cola");
}
}
y=20;
i++;
obs:a variavel saldo ja está começando com 250 (para testes) // o while estou tentando usar para fazer o programa dar loops para o usuario poder creditar valor ao saldo ou fazer os pedidos sem ter uma ordem exata, y recebe 20 no final para poder receber uma nova opçao.
flws.
Posso estar errado, mas você abriu 3 vezes as chaves (no while, em um dos ifs e no for) e fechou apenas 2..
...
if(y==0)
botao = 0;
break;
...
Veja que você não abriu '{' depois do if, então apenas a próxima linha está "dentro" do if. Assim sendo o comando break é executado sempre, independente da escolha do usuário, e por isso sai do loop.
O correto seria abrir e fechar chaves, assim:
if(y == 0)
{
obs: coloquei o scanf("%d",&y) dentro do while,e botao=20 no final para botao voltar a ter um valor nulo (nao sei se isso influencia o printf constante)
agradeço desde ja =D
...
for(j=0;saldo>=250&&choca>0;choca--){
printf("Venda de Choca-Cola");
}
...
Pelas condições de parada, o loop só vai parar quando o cliente tiver menos que 250 de saldo, ou quando acabarem as chocas do estoque certo? Pois bem, vc apenas atualiza o estoque com o choca-- , com isso o saldo do cliente é constante (ele sempre terá saldo), e você venderá chocas até acabar o estoque. Precisa atualizar o saldo também.
e tambem nao entendi o pq de ocorrer isso se no final botao recebe valor nulo, e antes de xegar no for de novo ele tem q passar no while onde vai pedir o valor, pq ele vai direto pro for?
flw.
Se vc quer algo que execute apenas uma vez, dependendo de uma condição, por que não usar um if ?
Você até pode fazer um for que rode apenas uma vez, mas eu não recomendaria, o código pode ficar mais difícil de entender, uma vez que quem for lê-lo, vai esperar que aquela parte do código rode várias vezes. Basta colocar alguma condição do tipo: for(i = 0 ; i < 1; i++), mas como disse, isso é meio estranho.
if (y == -5){ /* y variavel que guarda valor digitado pelo usuario*/
printf("troco: %d ",saldo);
if (saldo >= 1000 && a1000>0){
z = saldo/1000; /* z eu uso para saber exatamente quantas cedulas retirar */
saldo = saldo%1000;
a1000 -= z; /*a1000 variavel que guarda quantidade de cedulas de 10 reais*/
z = 0;
}
o problema é: exemplo se tem 1 nota de 10 reais 20 notas de 5 reais
e o troco é 25 reais ele tira 2 notas de 10 reais fazendo a a1000 virar -1, tentei algumas solucoes que nao foram validas ja que resolviam este problema parcialmente e criavam outros maiores. entao vim pedir ajuda no forum.
Como faço para o programa tirar soh 1 de 10 e pegar o resto de 5?
obrigado desde ja!!
flws.
z = saldo/1000;
/* Verifica se tem notas suficientes */
if(z > a1000)
{
/* Não tem... pega apenas o q tem */
z = a1000;
}
/* Retira do saldo apenas o valor das notas retiradas*/
saldo = saldo - z*1000;
E por aí vai...
Bom dia a todos,
Também estou com tendo problemas com a elaboração do troco, vi que há um algoritimo de exemplo mais não o compreendi, se alguém puder dar uma ajuda.
obrigado.
Em que parte da elaboração do troco, especificamente?
Estou com a mesma dúvida, não consigo montar o algoritmo pra mim algumas coisas não fazem sentido. Mesmo assim eis a resposta que o monitor me deu:
Pode usar o algoritmo "guloso", que pode não funcionar em todos os casos, como o rpfessor deve ter dito em aula, mas vai funcionar nos casos de teste que serão utilizados na correção.
Esse algoritmo funciona assim:
1) Comece com a nota de maior valor, e ache quantas dessas notas "cabem" no troco. Por exemplo, se o troco é R$25,00 e a nota de maior valor R$10,00, "cabem" duas dessas notas no troco. Tem que lembrar de ver quantas notas tem no caixa. Se couberem duas, mas só tiver uma no caixa, só pode usar uma.
2) Uma vez descoberto qtas notas desse valor vai usar, retire do troco o valor total que vc vai dar em troco nessa nota. No exemplo anterior, se vc tiver duas notas de R$10,00, você precisa retirar 2*R$10,00 do troco, sobrando R$5,00.
3) Repita o procedimento (1) e (2) para as notas (e moedas) seguintes, sempre atualizando o valor do troco.
No final vc deve ter o troco em notas mínimas.
Repetindo, esse algoritmo não funciona em 100% dos casos, mas será considerado correto nesse EP.