Breno Rangel Posted June 15, 2022 at 12:16 AM Share Posted June 15, 2022 at 12:16 AM 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 possivel 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: #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 possivel 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; } Não copiar essa parte: <CODE> Quote Link to comment Share on other sites More sharing options...
fredericopissarra Posted June 15, 2022 at 10:45 AM Share Posted June 15, 2022 at 10:45 AM (edited) Para sua avaliação: #include <stdio.h> #include <stdlib.h> #include <string.h> int saque ( unsigned int *restrict notas, const unsigned int *restrict valores, unsigned int nvalores, unsigned int valor ) { // Zera os contadores. memset ( notas, 0, nvalores * sizeof ( int ) ); for ( int i = 0; i < nvalores; i++ ) { // casos especiais // Problemas com R$ 6,00 e R$ 8,00 restantes... if ( valores[i] == 5 ) { // Assume que o último elemento equivale às // notas de R$ 2,00... revise isso se não for o caso. if ( valor == 6 ) { notas[nvalores - 1] = 3; valor = 0; break; } else if ( valor == 8 ) { notas[nvalores - 1] = 4; valor = 0; break; } } while ( valor >= valores[i] ) { notas[i]++; valor -= valores[i]; } } return valor == 0; } int main ( void ) { static const unsigned int valores[7] = { 200, 100, 50, 20, 10, 5, 2 }; unsigned int notas[7]; unsigned int valor; fputs ( "Quantidade desejada: ", stdout ); fflush ( stdout ); if ( scanf ( "%u", &valor ) == 1 ) { if ( ! saque ( notas, valores, 7, valor ) ) { error: fputs ( "Valor inválido.\n", stdout ); return EXIT_FAILURE; } // Mostrar notas. for ( int i = 0; i < 7; i++ ) printf ( "R$ %3u,00 -> %u notas.\n", valores[i], notas[i] ); } else goto error; return EXIT_SUCCESS; } []s Fred Edited June 15, 2022 at 12:26 PM by fredericopissarra Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.