Ir ao conteúdo
  • Cadastre-se
Denilson Oliveira

Ajuda com decomposição

Recommended Posts

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;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que o programa esta convertendo antes da multiplicação.

convertendo o cast:

(int)(troco - entrada) * 100;

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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);    }

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não existe nenhuma restrição para resolver esse problema o

membro @olliver.soul nos mostra como fazer usando

vetor de números. Ou vetor não pode?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×