Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Perdomo

Contador de notas

Recommended Posts

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

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 &notas, 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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.