Jump to content

[C] Dúvida: Erro em software (Resolvido)


Recommended Posts

Posted

Estou a fazer um software que pergunte ao utilizador uma quantia de dinheiro e depois lhe devolva o dinheiro por moedas da maior para a mais pequena, exemplo:

quantia: 4.85 euros

moedas de 2 euros: 2

moedas de 50 centimos: 1

moedas de 20 centimos: 1

moedas de 10 centimos: 1

moedas de 5 centimos: 1

O codigo esta aqui, mas quando o executo ele nao mostra nenhum printf como se nao tivesse "getch". Pedia a alguem que o compilasse e me dissese onde estou a errar.

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main (void) {
int n200, n100, n50, n20, n10, n5, n2, n1;
double n;
printf("Quantia de dinheiro a dividir por moedas em euros\n");
scanf("%lf",&n);

do{
n=n-2;
n200=n200+1;
}while (n>2);

do{
n=n-1;
n100=n100+1;
}while (n>1);

do{
n=n-0.5;
n50=n50+1;
}while (n>0.5);

do{
n=n-0.20;
n20=n20+1;
}while (n>0.20);

do{
n=n-0.10;
n10=n10+1;
}while (n>0.10);

do{
n=n-0.05;
n5=n5+1;
}while (n>0.05);

do{
n=n-0.02;
n2=n2+1;
}while (n>0.02);

do{
n=n-0.01;
n1=n1+1;
}while (n>0.01);

printf("Moedas de 2 euros: %d",n200);
printf("Moedas de 1 euros: %d",n100);
printf("Moedas de 50 centimos: %d",n50);
printf("Moedas de 20 centimos: %d",n20);
printf("Moedas de 10 centimos: %d",n10);
printf("Moedas de 5 centimos: %d",n5);
printf("Moedas de 2 centimos: %d",n2);
printf("Moedas de 1 centimo: %d",n1);
getch();
}

EDIT: Quando postares código, usa a ferramenta GeSHi. Ass. bk@ero

Posted

Antes de mais nada tenta usar o GeSHi...

Depois, no fim do teu código antes de fechares a chaveta do main() acrescenta as seguintes duas linha de código:


printf("\n\nPrima tecla para continuar...");
getch();

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

Não percebi a tua dúvida... o getch não é suposto fazer nenhum print...

Mas tens aí 3 problemas:

1 - Não inicializas as variáveis, pelo que elas vão começar em valores mais ou menos aleatórios e não em 0.

2 - Ao utilizares o ciclo do...while() vais sempre contabilizar pelo menos uma moeda de cada. Deverias usar antes um ciclo while().

3 - Nos printfs devias usar um \n para ficar um em cada linha, assim como está vai ficar tudo engalfinhado e não se percebe muito bem.

Posted

O problema é que quando eu testo este codigo no DEVC ao fim de inserir o numero, ele faz o scanf e fecha logo a tecla como se eu nao tivesse usado o "getch".

Eu ja testei este software no turbo e ele nao me funciona.

Alguem me pode corrigir o codigo? Ja passei bastante tempo á volta disto e nao consigo...

Ele pela logica esta bem, começa por ver se o numero total é maior que 2 e se for, tira 2 ao total e conta 1 moeda de 2 euros, depois volta a repetir, ate que passa para 1 euro e por ai adiante...

Posted
Ele pela logica esta bem, começa por ver se o numero total é maior que 2 e se for, tira 2 ao total e conta 1 moeda de 2 euros, depois volta a repetir, ate que passa para 1 euro e por ai adiante...

ERRADO! O que o teu código faz é tirar 2 ao total e contar mais uma moeda de 2 euros e só depois é que verifica se é realmente necessária a moeda... foi o erro numero 2 que eu coloquei no post anterior.

Já testei o teu código no devc e ele fica mesmo parado à espera que se carregue numa tecla. No entanto continua a padecer dos erros todos que já referi.

EDIT: Obviamente não te vou fazer a papinha toda pois assim não aprendes. Mas o que escrevi no post anterior e corrige tu os erros.

Posted

Obrigado pela vossa ajuda, ja consegui solucionar isto.

O meu problema era que desconhecia que o ciclo "while" podia ser usado separado do "do", mas agora que aprendi isto, vai-me dar bastante jeito!

Vou então deixar o codigo corrigido:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main (void) {
int n200=0, n100=0, n50=0, n20=0, n10=0, n5=0, n2=0, n1=0;
double n;
printf("Quantia de dinheiro a dividir por moedas em euros\n");
scanf("%lf",&n);

while (n>2) {
n=n-2;
n200=n200+1;
}

while (n1>1) {
n=n-1;
n100=n100+1;
}

while (n>0.5) {
n=n-0.5;
n50=n50+1;
}

while (n>0.20) {
n=n-0.20;
n20=n20+1;
}

while (n>0.10) {
n=n-0.10;
n10=n10+1;
}

while (n>0.05) {
n=n-0.05;
n5=n5+1;
}

while (n>0.01) {
n=n-0.02;
n2=n2+1;
}

while (n>0.01) {
n=n-0.01;
n1=n1+1;
}

printf("Moedas de 2 euros: %d \n",n200);
printf("Moedas de 1 euros: %d \n",n100);
printf("Moedas de 50 centimos: %d \n",n50);
printf("Moedas de 20 centimos: %d \n",n20);
printf("Moedas de 10 centimos: %d \n",n10);
printf("Moedas de 5 centimos: %d \n",n5);
printf("Moedas de 2 centimos: %d \n",n2);
printf("Moedas de 1 centimo: %d \n \n \n",n1);
printf("Prima qualquer tecla para continuar...");
getch();
}

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.