SetoKaioX 0 Denunciar post Postado Janeiro 29, 2011 Olá pessoal do Fórum iMaster. Primeira vez que posto alguma coisa no fórum pois já a alguns 3 meses comecei a estudar lógica e agora estou vendo C, pois quero muito realizar um sonho antigo que é trabalhar com dev de games mesmo começando agora com quase 25 (vai ser f*** mas quero tentar). Mas chega de apresentações. Estou fazendo uns dos exercícios de lógica que vi numa apostila de visualg (bem conhecida por aqui); " Escreva um algoritmo que calcule o número de notas e de moedas que deve ser dado de troco para um pagamento efetuado. O algoritmo deve ler o valor a ser pago e o valor efetivamente pago. Supor que o troco seja dado em notas de 50, 20, 10, 5, 2 e 1 real." Fiz funções para verificar a quantidades de notas e moedas, não coloquei td pois ia ficar enorme. O problema esta na parte dos centavos (de 4 centavos a 1) que não esta calculando direito, não terminando programa (estou compilando no code:blocks mas tentei no devc++ e mesma coisa) caso use "if" ou dando troco errado (exemplo Compra: 1.99 Dinheiro: 2.00, Troco: 0.01, Quantidade de moedas de 1: "0". #include <stdio.h> float troco; int NOTA50(void) //Função que calcula quantidade de notas de R$50. Existes funções pra notas de 20, 10,5,1, e moedas de 50, 25, 10, 5 e 1 (que estou com problemas) { int count=0; while(troco>=50) { troco=troco-50; count++; } return(count); } ... "Parte das restantes das notas e moedas" ... int MOEDA5(void) { int count=0; while(troco>=0.05) { troco=troco-0.05; count++; } return(count); } int MOEDA1(void) //Estou com problemas nesta função, com "if(troco!=0.00)", programa trava na parte do cálculo dos centavos, mas com while, se troco // e por exemplo 2 centavos, ele informa que só dara 1 centavo de troco. { int count=0; while(troco>=0.01) { troco=troco-0.01; count++; } return(count); } float DINHEIRO(void) { float x, y; printf("\tCAIXA LIVRE\nValor total da compra:\nR$:"); scanf("%f",&x); printf("\nValor em dinheiro recebido:\nR$:"); scanf("%f",&y); while(x>y) { printf("\nValor em dinheiro não e suficiente.\nVeriquei/Informe cliente" " e entre com novo valor.\nR$:"); scanf("%f",&y); } return(y-x); } int main(void) { system("chcp 1252 > nul"); printf("\n\n\tValor do troco: R$%0.2f\n\t-----------------------\n",troco=DINHEIRO()); printf("\n\tTroco em notas de R$50: %d",NOTA50()); ... "Parte das restantes das notas e moedas" ... printf("\n\tTroco em moedas de R$0,05: %d",MOEDA5()); printf("\n\tTroco em moedas de R$0,01: %d",MOEDA1()); getchar(); getchar(); return(0); } Não sei se foi bem claro mas minha duvida é essa. Não quero código pronto, apenas uma sugestão de como resolver esse problema do 1 centavo. Também espero não ter quebrado regras do fórum. Obrigado a tds. OK, acabei resolvendo e de certa forma estou envergonhado de não ter prestação atenção, na parte da moeda de um centavo mudei de while(troco>=0.01) para while(troco>=0.00) e funfo de boa. Agora vou dar uma olhada ou tentar reduzir o código ou partir pra outro exercício. Valeu pessoal. int MOEDA1(void) { int count=0; while(troco>=0.00) { troco=troco-0.01; count++; } return(count); Compartilhar este post Link para o post Compartilhar em outros sites