Breno Rangel Postado Junho 15, 2022 Postado Junho 15, 2022 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> Citar
fredericopissarra Postado Junho 15, 2022 Postado Junho 15, 2022 (editado) 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 Editado Junho 15, 2022 por fredericopissarra Citar
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.