Ir ao conteúdo
  • Cadastre-se

Ajuda com decomposição


Posts recomendados

Bom ; sou novo no fórum e também novato em C ...

Estou tendo dificuldade com este exercicio ..

 

Leia um valor de ponto flutuante com duas casas decimais. Este valor representa um valor monetário. A seguir, calcule o menor número de notas e moedas possíveis no qual o valor pode ser decomposto. As notas consideradas são de 100, 50, 20, 10, 5, 2. As moedas possíveis são de 1, 0.50, 0.25, 0.10, 0.05 e 0.01. A seguir mostre a relação de notas necessárias.

 

a decomposição minima de notas ex: R$ 50,00 = 1 nota de 50 , eu consigo fazer tranquilo ;

mas quando vou fazer a decomposição de moedas ex: R$ 50,20 , onde eu deveria dizer quantas moedas de 10 centavos seriam necessárias eu não consigo ... segue o código

 

###

 

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
int main () {
 
    int troco, moedas;
    int cem, cinq, vin, dez, cinco, dois, um;
    int centavos_1, centavos_050, centavos_025, centavos_010, centavos_005, centavos_001=0;
    float entrada;
 
    scanf("%f", &entrada);
 
    troco = (int) entrada;
    moedas = (int)(troco - entrada)*100;
 
    cem = troco / 100;
    troco = troco - (cem * 100 );
 
    cinq = troco / 50;
    troco = troco - (cinq * 50);
 
    vin = troco / 20;
    troco = troco - (vin * 20);
 
    dez = troco / 10;
    troco = troco - (dez * 10);
 
    cinco = troco / 5;
    troco = troco - (cinco * 5);
 
    dois = troco / 2;
    troco = troco - (dois * 2 );
 
    //FRACAO = MOEDAS
 
    centavos_1 = moedas/1;
    moedas = moedas % 1;
 
    centavos_050 = moedas/50;
    moedas = moedas  % 50;
 
    centavos_025 = moedas/25;
    moedas = moedas % 25;
 
    centavos_010 = moedas/10;
    moedas = moedas % 10;
 
    centavos_005 = moedas/5;
    moedas = moedas % 5;
 
    centavos_001 = moedas/1;
 
    printf("NOTAS:\n");
    printf("%d nota(s) de R$ 100,00\n", cem);
    printf("%d nota(s) de R$ 50,00\n", cinq);
    printf("%d nota(s) de R$ 20,00\n", vin);
    printf("%d nota(s) de R$ 10,00\n", dez);
    printf("%d nota(s) de R$ 5,00\n", cinco);
    printf("%d nota(s) de R$ 2,00\n", dois);
    printf("MOEDAS:\n");
    printf("%d moeda(s) de R$ 1,00\n",centavos_1);
    printf("%d moeda(s) de R$ 0,50\n",centavos_050);
    printf("%d moeda(s) de R$ 0,25\n",centavos_025);
    printf("%d moeda(s) de R$ 0,10\n",centavos_010);
    printf("%d moeda(s) de R$ 0,05\n",centavos_005);
    printf("%d moeda(s) de R$ 0,01\n",centavos_001);
 
    return 0;
}
 
Link para o comentário
Compartilhar em outros sites

Quando resolvi esse exercício usei vetores para facilitar.

valor é o input.

double dinheiro[12] = {100,50,20,10,5,2,1,0.5,0.25,0.10,0.05,0.01};int quantidade[12], i;...     for(i = 0; i < 12; i++){    quantidade[i] = (int)(valor / dinheiro[i]);           valor -= (double)(quantidade[i] * dinheiro[i]);}...
Depois é só imprimir os valores dos vetores
Link para o comentário
Compartilhar em outros sites

Obg ... Pois é rapaziada ... tô com dificuldades só em mostrar quantas moedas de 10, 5 centavos, por exemplo,  são necessárias ...

tentei maneiras de fazer mas não funcionam.

Se puderem me explicar mais a fundo agradeço ...

 

lembrando que tenho que pegar as casas depois da virgula e decompor.

Link para o comentário
Compartilhar em outros sites

Entendi a sua resolução @Denilson Oliveira

Veja da seguinte maneira modulado com funções, fique a vontade pra perguntar:

#include <stdio.h>#include <stdlib.h>int get_frac (float valReal);int get_int (float valReal);int main (void) {    auto float f = 10.50f;    printf ("*** Decompose Float fraction *** !\n");    printf ("Fraction: %.2f\n", f);    printf ("Cents $: %d\n", get_frac (f));    printf ("Real  $: %d\n", get_int (f));    printf ("Done\n\n");    return 0;    }int get_frac (float valReal) {    auto int i_inteiro = (int) valReal;    return ((valReal - i_inteiro) * 100);    }int get_int (float valReal) {    return (valReal);    }
Link para o comentário
Compartilhar em outros sites

@dyR3X obg pela ajuda, muito bom mesmo esse raciocinio (vou usar)...

Só que estou com dificuldade não em mostrar os centavos mas sim em como dividir.. na saída deveria sair assim:

 

por exemplo 73 centavos.

 

centavos:

1 moeda(s) de R$ 0.50

0 moeda(s) de R$ 0.25

2 moeda(s) de R$ 0.10

0 moeda(s) de R$ 0.05

3 moeda(s) de R$ 0.01

Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...

Eu sei que esse tópico não é discutido, mas eu fiz dessa maneira. Eu também tinha problema envolvendo os centavos. Essa maneira é bem simples, eu resolvi transformar o valor em reais para centavos, no caso multiplicando por 100, assim não teria problema com arredondamentos no meio dos cálculos.

Existe maneiras melhores de fazer, mas essa é fácil de compreender.

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>

int main()
{
    	setlocale(LC_ALL, "Portuguese"); //Configurando para o suporte da Língua Portuguesa.

    	float DinheiroI,DinheiroF;
    	int N100,N50,N20,N10,N5,N2;
    	int M1,M_50,M_25,M_10,M_05,M_01;

    	printf("Informe um valor em reais: R$");
	scanf("%f",&DinheiroI);

	DinheiroF=DinheiroI*100;

   	N100=DinheiroF/10000;
	DinheiroF=DinheiroF-N100*10000;

	N50=DinheiroF/5000;
	DinheiroF=DinheiroF-N50*5000;

	N20= DinheiroF/2000;
	DinheiroF=DinheiroF-N20*2000;

	N10=DinheiroF/1000;
	DinheiroF=DinheiroF-N10*1000;

	N5=DinheiroF/500;
	DinheiroF=DinheiroF-N5*500;

	N2=DinheiroF/200;
	DinheiroF=DinheiroF-N2*200;

	M1=DinheiroF/100;
	DinheiroF=DinheiroF-M1*100;

    	M_50=DinheiroF/50;
	DinheiroF=DinheiroF-M_50*50;

    	M_25=DinheiroF/25;
	DinheiroF=DinheiroF-M_25*25;

    	M_10=DinheiroF/10;
	DinheiroF=DinheiroF-M_10*10;

	M_05=DinheiroF/5;
	DinheiroF=DinheiroF-M_05*5;

	M_01=DinheiroF;

	printf("\nO valor informado: R$%.2f.",DinheiroI);
	printf("\n\nO número de notas de R$100 é: %d", (N100));
	printf("\nO número de notas de R$50 é: %d", (N50));
	printf("\nO número de notas de R$20 é: %d", (N20));
	printf("\nO número de notas de R$10 é: %d", (N10));
	printf("\nO número de notas de R$5 é: %d", (N5));
	printf("\nO número de notas de R$2 é: %d", (N2));
	printf("\nO número de moedas de R$1 é: %d", (M1));
	printf("\nO número de moedas de R$0,50 é: %d", (M_50));
	printf("\nO número de moedas de R$0,25 é: %d", (M_25));
	printf("\nO número de moedas de R$0,10 é: %d", (M_10));
	printf("\nO número de moedas de R$0,05 é: %d", (M_05));
	printf("\nO número de moedas de R$0,01 é: %d\n\n", (M_01));

	system("pause");
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!