Ir ao conteúdo

C Código de caixa eletrônico - C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Olá! Estou iniciando na programação no curso de Sistemas de Informação e possuo uma dúvida em um código de caixa eletrônico.

Minha dúvida: O meu código possui um problema que não consigo resolver. Em certos valores como 123, 196, 111 e 121 o programa imprime a quantidade errada de notas. Para 123, por exemplo, ele imprime uma nota de 100, uma de 20 e uma de 2, sendo que deveria imprimir uma nota de 100, uma de 10, uma de 5 e 4 notas de 2 reais.

Requisitos do código:
O código deve receber um valor do tipo inteiro a ser sacado e, caso ele seja possível, retornar a quantidade de cédulas que a pessoa irá pegar. Deve-se usar a menor quantidade de cédulas possíveis. As cédulas disponíveis no caixa eletrônico são de 200, 100, 50, 20, 10, 5 e 2.
O programa deve possuir uma assinatura" void realizarSaque(int valor, int* cedulas) " onde: 
- valor: corresponde ao valor lido na função main para ser sacado
- cedulas: vetor de tamanho 7 contendo o valor das cédulas disponíveis.


Nenhuma variável global poderá ser utilizada dentro da função realizarSaque.

Para casos impossíveis o programa deve retornar a mensagem:
" não e possível sacar o valor solicitado "

Para valores inseridos menores que 0 o programa deve retornar a mensagem:
" Informe um valor maior que 0 "

Meu código:

<CODE>

#include<stdio.h>

int realizarSaque(int valor, int *cedulas){
    int n200,n100,n50,n20,n10,n5,n2;

    n200=valor/200;
    n100=(valor%200)/100;
    n50=((valor%200)%100)/50;
    n20=(((valor%200)%100)%50)/20;
    n10=((((valor%200)%100)%50)%20)/10;
    n5=(((((valor%200)%100)%50)%20)%10)/5;
    n2=((((((valor%200)%100)%50)%20)%10)%5)/2;
    
    printf("%d cedula(s) de 200.00",n200);
    printf("\n%d cedula(s) de 100.00",n100);       
    printf("\n%d cedula(s) de 50.00",n50);
    printf("\n%d cedula(s) de 20.00",n20);
    printf("\n%d cedula(s) de 10.00",n10);
    printf("\n%d cedula(s) de 5.00",n5);
    printf("\n%d cedula(s) de 2.00",n2);
    return 0;
    }

int main()
{
    int valor, cedulas[7] = {200, 100, 50, 20, 10, 5, 2};
    
    printf("Digite o valor a ser sacado: ");
    scanf("%d", &valor);
    
    if(valor == 1 || valor == 3){
        printf("não e possível sacar o valor solicitado");
        return 0;
    }
    if(valor > 0){
    realizarSaque(valor, cedulas);
    return 0;
    }
    if(valor <= 0){
        printf("Informe um valor maior que 0");
        return 0;
    }
    else{
        main();
    }
    return 0;
}

  • Curtir 1
  • Solução
Postado

@Breno Rangel    use o botão code "<> "  que está desenhado lá na barra de ferramentas da janela de postar ,   e você está fazendo uma chama recursiva da função main ,  isso não é boa ideia ,  melhor usar um lalo de repetição qq , como while ou do / while , e seu código ficaria assim  :

#define _WIN32_WINNT 0x600
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int prototipo(int , int , int* );
int realizarSaque(int valor, int *cedulas);
int main()
{
  HANDLE _h = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute( _h , 15 + (12 << 4 ) );
  int valor, cedulas[7] = {200, 100, 50, 20, 10, 5, 2};
  do
  {
    printf("Digite o valor a ser sacado: ");
    scanf("%d", &valor);

    if(valor == 1 || valor == 3)
    {
      printf("não e possível sacar o valor solicitado");
      return 0;
    }
    if(valor > 0)
    {
      realizarSaque(valor, cedulas);
      /// return 0;
    }
    if(valor <= 0)
    {
      printf("Informe um valor maior que 0");
      break;
    }
  }while( 1 );
  SetConsoleTextAttribute( _h , 7 + ( 0 << 4 ) );
  printf("\n\n\n");
  return 0;
}
int prototipo(int a , int b , int* c )
{
  return 0;
}
int realizarSaque(int valor, int *cedulas)
{
  int n200,n100,n50,n20,n10,n5,n2;
  n200 =        valor      / 200                            ;
  n100 = (      valor%200) / 100                            ;
  n50  = ((     valor%200) % 100)                       / 50;
  n20  = (((    valor%200) % 100) % 50)                 / 20;
  n10  = ((((   valor%200) % 100) % 50) % 20)           / 10;
  n5   = (((((  valor%200) % 100) % 50) % 20) % 10)     /  5;
  n2   = (((((( valor%200) % 100) % 50) % 20) % 10) % 5)/  2;
  printf("\a                        \n\
        \r%3d cedula(s) de R$ 200.00\n\
        \r%3d cedula(s) de R$ 100.00\n\
        \r%3d cedula(s) de R$  50.00\n\
        \r%3d cedula(s) de R$  20.00\n\
        \r%3d cedula(s) de R$  10.00\n\
        \r%3d cedula(s) de R$   5.00\n\
        \r%3d cedula(s) de R$   2.00\n",
        n200,n100,n50,n20,n10,n5,n2   ); /// apenas um printf eh mais rápido
  return 0;
}

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!