• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kwnds

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

6 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora