Perdomo 0 Denunciar post Postado Junho 11, 2008 Pessoal, estou fazendo um contador de cédulas, meu código está com muitos WHILEs, e queria fazer uma funcao pra isso e nao consigo visualizá-la. Podem me ajudar com essa função? #include <stdio.h> #include <stdlib.h> //int nlog = 0; //char logs[100][100]; //void loga(char x[1][10]){ // logs[nlog] = x; // nlog++; //} // loga ("Suprimento de 10 notas de 10 pila"); // loga ("Saque......."); int teste(int contanotas1, int contanotas2) { int total1; total1 = contanotas1 - contanotas2; return total1; } int main() { int maior,menor,saldo,saldoemcaixa,valor,valorsaque,notas100,notas50,notas20,notas10 ,notas5,notas2,notas1; int retira100,retira50,retira20,retira10,retira5,retira2,retira1,i; saldoemcaixa = 10000; notas100 = 100; notas50 = 100; notas20 = 100; notas10 = 100; notas5 = 100; notas2 = 100; notas1 = 0; retira100 = 0; retira50 = 0; retira20 = 0; retira10 = 0; retira5 = 0; retira2 = 0; retira1 = 0; printf("%d Digite quanto quer sacar: "); scanf("%d", &valorsaque); valor = valorsaque; saldo = saldoemcaixa; while((valor >= 100) && (notas100 > 0)){ valor = valor - 100; notas100--; retira100++; saldo = saldo - 100; } while(valor >= 50 && notas50 >0){ valor = valor - 50; notas50--; retira50++; saldo = saldo - 50; } while(valor >= 20 && notas20 >0){ valor = valor - 20; notas20--; retira20++; saldo = saldo - 20; } while(valor >= 10 && notas10 > 0){ valor = valor - 10; notas10--; retira10++; saldo = saldo - 10; } while(valor >= 5 && notas5 > 0){ valor = valor - 5; notas5--; retira5++; saldo = saldo - 5; } while(valor >= 2 && notas2 > 0){ valor = valor - 2; notas2--; retira2++; saldo = saldo - 2; } while(valor >= 1 && notas1 >0){ valor = valor - 1; notas1--; retira1++; saldo = saldo - 1; } if (valor == 0){ printf("Sacado %d \n", valorsaque); if (retira100 > 0){ printf("%d notas de 100 \n", retira100); } if (retira50 > 0){ printf("%d notas de 50 \n", retira50); } if (retira20 > 0){ printf("%d notas de 20 \n", retira20); } if (retira10 >0){ printf("%d notas de 10 \n", retira10); } if (retira5 >0){ printf("%d notas de 5 \n", retira5); } if (retira2 >0){ printf("%d notas de 2 \n", retira2); } if (retira1 >0){ printf("%d notas de 1 \n", retira1); } printf("Saldo atual: %d \n", saldo); saldoemcaixa = saldo; }else{ //printf("Saldo atual: %d \n", saldoemcaixa); //printf("Resto que não foi sacado: %d \n", valor); maior = menor = 0; valor=valorsaque; for (i = valor + 1; i <= saldoemcaixa; i++){ maior = i; while((valor >= 100) && (notas100 > 0)){ valor = valor - 100; notas100--; retira100++; saldo = saldo - 100; } while(valor >= 50 && notas50 >0){ valor = valor - 50; notas50--; retira50++; saldo = saldo - 50; } while(valor >= 20 && notas20 >0){ valor = valor - 20; notas20--; retira20++; saldo = saldo - 20; } while(valor >= 10 && notas10 > 0){ valor = valor - 10; notas10--; retira10++; saldo = saldo - 10; } while(valor >= 5 && notas5 > 0){ valor = valor - 5; notas5--; retira5++; saldo = saldo - 5; } while(valor >= 2 && notas2 > 0){ valor = valor - 2; notas2--; retira2++; saldo = saldo - 2; } while(valor >= 1 && notas1 >0){ valor = valor - 1; notas1--; retira1++; saldo = saldo - 1; } break; } valor=valorsaque; for (i = valor - 1; i >=0; i++){ menor = i; while((valor >= 100) && (notas100 > 0)){ valor = valor - 100; notas100--; retira100++; saldo = saldo - 100; } while(valor >= 50 && notas50 >0){ valor = valor - 50; notas50--; retira50++; saldo = saldo - 50; } while(valor >= 20 && notas20 >0){ valor = valor - 20; notas20--; retira20++; saldo = saldo - 20; } while(valor >= 10 && notas10 > 0){ valor = valor - 10; notas10--; retira10++; saldo = saldo - 10; } while(valor >= 5 && notas5 > 0){ valor = valor - 5; notas5--; retira5++; saldo = saldo - 5; } while(valor >= 2 && notas2 > 0){ valor = valor - 2; notas2--; retira2++; saldo = saldo - 2; } while(valor >= 1 && notas1 >0){ valor = valor - 1; notas1--; retira1++; saldo = saldo - 1; } break; } printf("Imediatamente MAIOR possível: %d \n", maior); printf("Imediatamente Menor possível: %d \n", menor); } system("pause"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
brunocampos_ 3 Denunciar post Postado Junho 11, 2008 Cara faz tempo que não faço nada em C/C++ mas.. Primeiramente, seu código é para algum trabalho que tem alguma restrição? Por exemplo, sempre tirar nota por nota? Porque em primeiro lugar você pode substituir todos os whiles por contas matemáticas. Mas por exemplo para os primeiros while while((valor >= 100) && (notas100 > 0)){ valor = valor - 100; notas100--; retira100++; saldo = saldo - 100; }Você pode substituí-los por uma função passando as variáveis por referência(eu não me lembro como passa como referência por C++, então as declarações devem estar erradas): void tira(int valorNota, int &valor, int ¬as, int &retira, int &saldo) { while((valor >= valorNota) && (retira > 0)){ valor = valor - valorNota; notas--; retira++; saldo = saldo - valorNota; } } Parametrizando os whiles iria melhorar seu código bastante já, pois são todos iguais. Se você puder também, seria melhor utilizar vetor para guardar as notas, do que uma variável para cada, assim uma operação n^2 resolve seu problema. Compartilhar este post Link para o post Compartilhar em outros sites