foxton 0 Denunciar post Postado Maio 26, 2010 Olá pessoal, preciso de uma ajuda com um trabalho para a faculdade. Pelo visto esse problema é bem conhecido pelo pessoal, mas ainda não encontrei a resposta para minha duvida. Preciso de uma maneira para calcular quantas notas de 100,50,10,5 e 1 para o valor sacado. segue oque eu já fiz: #include <stdio.h> #include <conio.h> main () { int n1, n5, n10, n50, n100, calc, saldo,op,depo,d1=0,d5=0,d10=0,d50=0,d100=0,saque,valor; printf("\nEntre com a quantidade inicial de notas de 100:\n-->"); scanf("%d",&n100); printf("\nEntre com a quantidade inicial de notas de 50:\n-->"); scanf("%d",&n50); printf("\n Entre com a quantidade inicial de notas de 10:\n-->"); scanf("%d",&n10); printf("\n Entre com a quantidade inicial de notas de 5:\n-->"); scanf("%d",&n5); printf("\n Entre com a quantidade inicial de notas de 1:\n-->"); scanf("%d",&n1); printf("\n\nSituacao atual: %d %d %d %d %d",n100, n50, n10, n5, n1); saldo= (n100 * 100) + (n50 * 50) + (n10 * 10) + (n5 * 5) + (n1 * 1); printf("\tSaldo atual %d", saldo); printf("\n\nDigite 1 para saque, 2 para deposito:\n-->"); scanf("%d",&op); if(op==2){ printf("\n\nVoce escolheu a opcao 2 - Deposito:"); printf("\n\nEntre com a quantidade de notas de 100:\n-->"); scanf("%d",&d100); printf("\nEntre com a quantidade de notas de 50:\n-->"); scanf("%d",&d50); printf("\n Entre com a quantidade de notas de 10:\n-->"); scanf("%d",&d10); printf("\n Entre com a quantidade de notas de 5:\n-->"); scanf("%d",&d5); printf("\n Entre com a quantidade de notas de 1:\n-->"); scanf("%d",&d1); saldo= ((d100 * 100) + (d50 * 50) + (d10 * 10) + (d5 * 5) + (d1 * 1) )+saldo; n1=n1+d1; n5=n5+d5; n10=n10+d10; n50=n50+d50; n100+=d100; printf("\nSituacao atual %d %d %d %d %d",n100,n50,n10,n5,n1); printf("\t Saldo Atual %d",saldo); } else if(op==1){ printf("\n\nVoce escolheu a opcao 1 - Saque:"); printf("\nDigite o Valor do Saque:\n-->"); getch(); } Obrigado pela ajuda =) Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Maio 27, 2010 Veja bem,se você tem que calcular quantas notas de 100,50,5 e 1 para um valor sacado você tem que: 100x + 50y + 5z + w = S Onde: S -> saldo x -> quantidade de notas de 100 y -> quantidade de notas de 50 z -> quantidade de notas de 5 w -> quantidade de notas de 1 Se trocarmos a soma de duas parcelas por uma variavel,teremos por exemplo: a = 100x + 50y b = 5z + w => a + b = S Como S é um número natural,temos em mãos uma equação diofantina. Uma equação diofantina da forma ax + by = w tem solução se w|mdc(a,B) onde suas soluções inteiras são dadas por: x = x0 + (b/d)k y = y0 - (a/d)k d = mdc(a,B) Onde k é um inteiro arbitrario. Chega-se nas soluções naturais fazendo-se x > 0 e y > 0 para descobrir o intervalo de k válido. Descobre-se então as soluções naturais para a e b,e para cada solução tenta-se achar a solução natural para o sub-sistema.Se não acharmos criamos mais sub-sistemas de a e b diversificando os mesmos (ao invés de a = 100x + 50y, fazemos por exemplo a = 100x + w). Por exemplo: 100x + 50y + 5z + w = 15 -> a = 100x + 50y b = 5z + w a + b = 15 a0 = 0 b0 = 15 Para b = 15 procuramos uma solução do sub-sistema 5z + w = 15. Temos uma solução válida que é z0 = 2,w0 = 5. Para a = 0 procuramos uma solução natural do sub-sistema 100x + 50y = 0. É um sistema linear homogeneo,logo de cara aceita a solução (0,0). Logo temos como uma das possiveis soluções (0,0,2,5). Se não achassemos,tentariamos para os outros valores de a e b.Se ainda não achassemos,diversificariamos a e b e repetiriamos o processo. --- É dificil de te explicar,não sou muito bom em me comunicar. O que eu falo é que é pura matemática aplicada.Estude teoria dos números e equações diofantinas lineares que conseguirá. Existem meios (até relativamente simples) de melhorar bastante o desempenho do descrito acima. Abraço! Ps: se quiser mais exemplos,até na programação,favor postar. Ps²: se quiser também te dou uma mãozinha extra no programa final,sei que para quem está iniciando e não tem tanto conhecimento matemático é um programa bem complicadinho. Ps³: tantos sub-sistemas e blah blah blah porque o método de diofante só funciona para sistemas de k+1 icógnitas e k equações. Compartilhar este post Link para o post Compartilhar em outros sites
foxton 0 Denunciar post Postado Maio 27, 2010 eibon, obrigado pela sua ajuda, mas achei o método matemático muito complicado para implementar. Até pq não entendi direito ^^ Consegui fazer do jeito abaixo: ETAPAS 1.a definir a quantidade de notas no caixa 1.b definir o saldo atual do caixa 1.c imprime a quantidade atual do caixa 2.a solicita a operacao 2.b verificar operacao 3. deposito 3.a solicita as notas que serao depositadas 3.b soma a quantidade informada a quantidade atual 3.c imprime o saldo atual 4. saque 4.a le a quantidade a ser sacada 4.b verifica se tem o valor requisitado em saldo 4.c entrega o minimo de notas possiveis 4.d recalcula o saldo atual 4.e imprime o saldo atual *********************************************/ #include <stdio.h> #include <conio.h> int main() { // quantidade de notas no caixa int n1, n5, n10, n50, n100; // notas informadas no deposito int d1, d5, d10, d50, d100; // notas sacadas int s1 = 0, s5 = 0, s10 = 0, s50 = 0, s100 = 0; // variaveis auxiliares int saque, saldo, op; // 1.a definir a quantidade de notas no caixa printf("\nEntre com a quantidade inicial de notas de 100:\n-->"); scanf("%d",&n100); printf("\nEntre com a quantidade inicial de notas de 50:\n-->"); scanf("%d",&n50); printf("\n Entre com a quantidade inicial de notas de 10:\n-->"); scanf("%d",&n10); printf("\n Entre com a quantidade inicial de notas de 5:\n-->"); scanf("%d",&n5); printf("\n Entre com a quantidade inicial de notas de 1:\n-->"); scanf("%d",&n1); printf("\n\nSituacao atual: %d %d %d %d %d",n100, n50, n10, n5, n1); // 1.b definir o saldo atual do caixa saldo = (n100 * 100) + (n50 * 50) + (n10 * 10) + (n5 * 5) + (n1 * 1); // 1.c imprime a quantidade atual do caixa printf("\tSaldo atual %d", saldo); // 2.a solicita a operacao printf("\n\nDigite 1 para saque, 2 para deposito:\n-->"); scanf("%d",&op); // 2.b verificar operacao // 3. deposito if(op==2){ printf("\n\nVoce escolheu a opcao 2 - Deposito:"); // 3.a solicita as notas que serao depositadas printf("\n\nEntre com a quantidade de notas de 100:\n-->"); scanf("%d",&d100); printf("\nEntre com a quantidade de notas de 50:\n-->"); scanf("%d",&d50); printf("\n Entre com a quantidade de notas de 10:\n-->"); scanf("%d",&d10); printf("\n Entre com a quantidade de notas de 5:\n-->"); scanf("%d",&d5); printf("\n Entre com a quantidade de notas de 1:\n-->"); scanf("%d",&d1); // 3.b soma a quantidade informada a quantidade atual saldo = ((d100 * 100) + (d50 * 50) + (d10 * 10) + (d5 * 5) + (d1 * 1) ) + saldo; n1 += d1; n5 += d5; n10 += d10; n50 += d50; n100 += d100; // 3.c imprime o saldo atual printf("\nSituacao atual %d %d %d %d %d", n100, n50, n10, n5, n1); printf("\t Saldo Atual %d", saldo); // 4. saque } else if(op == 1){ printf("\n\nVoce escolheu a opcao 1 - Saque:"); // 4.a le a quantidade a ser sacada printf("\nDigite o Valor do Saque:\n-->"); scanf("%d", &saque); // 4.b verifica se tem o valor requisitado em saldo if(saldo < saque){ printf("Saldo atual insuficiente"); return 0; } // 4.c entrega o minimo de notas possiveis if(saque >= 100){ s100 = saque / 100; if(n100 - s100 < 0) { printf("Numero de notas de 100 insuficiente, dirija-se ao caixa ao lado"); getch(); return 0; } n100 = n100 - s100; saque = saque % 100; } if(saque >= 50){ s50 = saque / 50; if(n50 - s50 < 0) { printf("Numero de notas de 50 insuficiente, dirija-se ao caixa ao lado"); getch(); return 0; } n50 = n50 - s50; saque = saque % 50; } if(saque >= 10){ s10 = saque / 10; if(n10 - s10 < 0) { printf("Numero de notas de 10 insuficiente, dirija-se ao caixa ao lado"); getch(); return 0; } n10 = n10 - s10; saque = saque % 10; } if(saque >= 5){ s5 = saque / 5; if(n5 - s5 < 0) { printf("Numero de notas 5 insuficiente, dirija-se ao caixa ao lado"); getch(); return 0; } n5 = n5 - s5; saque = saque % 5; } if(saque >= 1){ s1 = saque / 1; if(n1 - s1 < 0) { printf("Numero de notas 1 insuficiente, dirija-se ao caixa ao lado"); getch(); return 0; } n1 = n1 - s1; saque = saque % 1; } printf("\nForam usadas:\n%d notas de 100\n%d notas de 50\n%d notas de 10\n%d notas de 5\n%d notas de 1", s100, s50, s10, s5, s1); // 4.d recalcula o saldo atual saldo = (n100 * 100) + (n50 * 50) + (n10 * 10) + (n5 * 5) + (n1 * 1); // 4.e imprime o saldo atual printf("\n\nSituacao atual %d %d %d %d %d", n100, n50, n10, n5, n1); printf("\t Saldo Atual %d", saldo); } // fim getch(); } Se alguém tiver alguma sujestão, ela será bem vinda : ) Até mais e obrigado pela ajuda o/ Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Maio 27, 2010 Procure por problema da mochila. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 28, 2010 #include <stdio.h> int main() { unsigned int valor; scanf("%ud", &valor); puts("São necessárias "); do { if (valor >= 100) { printf("%d notas de 100\n", valor / 100); valor %= 100; } else if (valor >= 50) { printf("%d notas de 50\n", valor / 50); valor %= 50; } else if (valor >= 10) { printf("%d notas de 10\n", valor / 10); valor %= 10; } else if (valor >= 5) { printf("%d notas de 5\n", valor / 5); valor %= 5; } else if (valor > 0){ printf("%d notas de 1\n", valor); valor = 0; } } while (valor > 0); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites