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

J4cKaSs

Ajuda a acabar o programa

14 mensagens neste tópico

Caros amigos já me deram provas que ajudam rapidamente 1 pessoa aqui e que deixam tudo com os pontos nos i's por isso recorro novamente a esta grande comunidade.

Não sei como acabar este programa, é simples mas não é em "int" devia ser "float" mas não dá também, por isso deve ser uma mistura dos dois, mas como nunca vi tal coisa podem me dizer como por isto a correr ?

#include <stdio.h>
#include <iostream>

int main(void)
{
  float valor,moeda1,moeda2,moeda50,moeda20,moeda10,moeda05,moeda01;

      printf("Introduza o valor em Euros:\n");
      scanf("%f",&valor);
  
      moeda2=valor/2;
      moeda1=(valor%2)/1;
      moeda50=((valor%2)%1)/0.5;
      moeda20=(((valor%2)%1)%0.5)/0.2;
      moeda10=((((valor%2)%1)%0.5)%0.2)%0.1;
      moeda05=(((((valor%2)%1)%0.5)%0.2)%0.1)%0.05;
      moeda01=((((((valor%2)%1)%0.5)%0.2)%0.1)%0.05)%0.01;

      printf("Moedas de 2euros:%f\n",moeda2);
      printf("Moedas de 1euro:%f\n",moeda1);
      printf("Moedas de 50centimos:%f\n",moeda50);
      printf("Moedas de 50centimos:%f\n",moeda20);
      printf("Moedas de 50centimos:%f\n",moeda10);
      printf("Moedas de 50centimos:%f\n",moeda05);
      printf("Moedas de 50centimos:%f\n",moeda01);
      
      system("pause");
      return 0;
}

como viram já uso o "return 0" e o "int main(void)"   ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmmm ... acho que o % (módulo) só funciona para inteiros.

Este fim de semana estou fora do meu ambiente -- e não tenho acesso fácil a um compilador ou à documentação de C.

Usa a função fmodf() declarada em <math.h>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O melhor seria pedires o valor em cêntimos, e declará-lo como int.

Ou na impossibilidade de tal, multiplicar o valor lido por 100 e atribuí-lo a um inteiro.

float valorEuros;
int valorCentimos,moeda1,moeda2,moeda...;

printf("Introduza o valor em Euros:\n");
scanf("%f",&valorEuros);

valorCentimos = (int)(valorEuros*100);

/* Fazer as contas com valorCentimos/200, (valorCentimos%200)/100, etc... */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes tentar explicar de uma maneira mais simples, tenho 1 mês de C, ainda sou muito novo nisto  :-[

Desculpem.

Cheguei até aqui com a nova informação que deste.

#include <stdio.h>
#include <iostream>

int main()
{
    float valorEuros;
    int valorCentimos,moeda1,moeda2,moeda50,moeda20,moeda10,moeda05,moeda01;

      printf("Introduza o valor em Euros:\n");
      scanf("%f",&valorEuros);
  
      valorCentimos = (int)(valorEuros*100);
      
        
      moeda2=valorCentimos/200;
      moeda1=(valorCentimos%200)/100;
      moeda50=((valorCentimos%200)%100)/0.500;
      moeda20=(((valorCentimos%200)%100)%0.500)/0.200;
      moeda10=((((valorCentimos%200)%100)%0.500)%0.200)%0.100;
      moeda05=(((((valorCentimos%200)%100)%0.500)%0.200)%0.100)%0.0500;
      moeda01=((((((valorCentimos%200)%100)%0.500)%0.200)%0.100)%0.0500)%0.0100;

      printf("Moedas de 2euros:%d\n",moeda2);
      printf("Moedas de 1euro:%d\n",moeda1);
      printf("Moedas de 50centimos:%d\n",moeda50);
      printf("Moedas de 50centimos:%d\n",moeda20);
      printf("Moedas de 50centimos:%d\n",moeda10);
      printf("Moedas de 50centimos:%d\n",moeda05);
      printf("Moedas de 50centimos:%d\n",moeda01);
      
      system("pause");
      return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás quase quase lá! Mas agora tens que dividir pelo valor das moedas em cêntimos:

- as moedas de 2 euros, ou 200 cêntimos, dividiste por 200;

- as moedas de 1 euros, ou 100 cêntimos, dividiste por 100.

Para o resto das moedas, o raciocínio é o mesmo:

- as moedas de 50 cêntimos, vais dividir por 50 em vez de 0.50;

- as moedas de 20 cêntimos, vais dividir por 20 em vez de 0.20;

- as moedas de 10 cêntimos, vais dividir por 10 em vez de 0.10;

- etc...

O mesmo se aplica aos restos.

Uma observaçãozinha: não te faltam as moedas de 2 cêntimos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa noite bem hoje já ando farto deste programa já lá vão umas 6 ou mais horas desde que comecei este programa, mas por fim já funciona

Só tem 1 erro, não devolve as moedas de 1 cêntimo podes ajudar  :hmm:

#include <stdio.h>
#include <iostream>

int main()
{
    float valorEuros;
    int valorCentimos,moeda1,moeda2,moeda50,moeda20,moeda10,moeda05,moeda01,moeda02; 
     
      printf("Introduza o valor em centimos:\n");
      scanf("%f",&valorEuros);
  
      valorCentimos = (int)(valorEuros*100);
      
      moeda2=valorCentimos/200;
      moeda1=(valorCentimos%200)/100;
      moeda50=((valorCentimos%200)%100)/50;
      moeda20=(((valorCentimos%200)%100)%50)/20;
      moeda10=((((valorCentimos%200)%100)%50)%20)/10;
      moeda05=(((((valorCentimos%200)%100)%50)%20)%10)/5;
      moeda02=((((((valorCentimos%200)%100)%50)%20)%10)%5)/2;
      moeda01=(((((((valorCentimos%200)%100)%50)%20)%10)%5)%2)/1;

      printf("Moedas de 2 euros:%d\n",moeda2);
      printf("Moedas de 1 euro:%d\n",moeda1);
      printf("Moedas de 50 centimos:%d\n",moeda50);
      printf("Moedas de 20 centimos:%d\n",moeda20);
      printf("Moedas de 10 centimos:%d\n",moeda10);
      printf("Moedas de 5 centimos:%d\n",moeda05);
      printf("Moedas de 2 centimos:%d\n",moeda02);
      printf("Moedas de 1 centimos:%d\n",moeda01);
      
      system("pause");
      return 0;
}

realmente faltavam as moedas de 2 cêntimos  :wallbash:

Já agora o que achas do comando "System"(pause)" e biblioteca "#include <iostream>"

Pergunto isto visto que no outro dia estavam a criticar a maneira como eu acabava o programa, e realmente era pouco correcta, sem o "return 0;" e com 2 "getchar();"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu pedes o valor em cêntimos? Eu introduzo o valor 300 e o programa considera que são 300€ em vez de 300 cêntimos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a enganar os teus clientes! Pedes o valor em cêntimos e tratas o valor como sendo em euros.

Se podes pedir o valor em cêntimos, guarda esse valor directamente na variável ValorCentimos e escusas de andar a converter tipos:

      printf("Introduza o valor em centimos:\n");
     scanf("%d",&valorCentimos);

     /*valorCentimos = (int)(valorEuros*100); Esta linha desaparece */

Senão, tens que arredondar o valor que recebeste antes de multiplicar por 100, por causa da maneira como funcionam os valores não inteiros. Por exemplo, 0.51 é guardado como 0.509999999, o que multiplicado por 100 dá 50.9999999, truncando fica 50 e por isso é que não te dá o valor correcto das moedas de 1 cêntimo. Mas aconselho-te a seguir pelo parágrafo de cima, se puderes.

O #include <iostream> é proibido em C. É uma biblioteca exclusivamente C++. Já agora, renomeia o ficheiro onde estás a escrever para terminar em .c em vez de .cpp para o Visual Studio compilar como C, que provavelmente não o fizeste. Isto deduzindo que estás a utilizar o Visual Studio.

O system("pause"); é pouco elegante e desaconselhado em muitos tópicos cá no fórum. Pessoalmente também não gosto. Executa o programa sem ser em modo debug (Ctrl+F5 em vez de F5, normalmente, e presumindo ainda que estás a usar o Visual Studio) que ele não fecha a janela quando terminares.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O #include <stdio> é proibido em C. É uma biblioteca exclusivamente C++.

#include <iostream> queres tu dizer ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem eu uso Dev-C++

Bem então aqui fica o programa agora que já está finalmente acabado

#include <stdio.h>

int main()
{
    float valorEuros;
    int valorCentimos,moeda1,moeda2,moeda50,moeda20,moeda10,moeda05,moeda01,moeda02; 
     
      printf("Introduza o valor em centimos:\n");
      scanf("%d",&valorCentimos);
  
      
      moeda2=valorCentimos/200;
      moeda1=(valorCentimos%200)/100;
      moeda50=((valorCentimos%200)%100)/50;
      moeda20=(((valorCentimos%200)%100)%50)/20;
      moeda10=((((valorCentimos%200)%100)%50)%20)/10;
      moeda05=(((((valorCentimos%200)%100)%50)%20)%10)/5;
      moeda02=((((((valorCentimos%200)%100)%50)%20)%10)%5)/2;
      moeda01=(((((((valorCentimos%200)%100)%50)%20)%10)%5)%2)/1;

      printf("Moedas de 2 euros:%d\n",moeda2);
      printf("Moedas de 1 euro:%d\n",moeda1);
      printf("Moedas de 50 centimos:%d\n",moeda50);
      printf("Moedas de 20 centimos:%d\n",moeda20);
      printf("Moedas de 10 centimos:%d\n",moeda10);
      printf("Moedas de 5 centimos:%d\n",moeda05);
      printf("Moedas de 2 centimos:%d\n",moeda02);
      printf("Moedas de 1 centimos:%d\n",moeda01);
      
      getchar();
     getchar();
      return 0;
}

Por fim já não sei como devo acabar os meus programas, apenas com "return 0;"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, return 0 é bom. Só deves retornar outro valor quando quiseres passar um resultado a outro programa que chame o teu.

#include <iostream> queres tu dizer :)

ups :-[ corrigido!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguem me explica o que este programa faz?

Não estou nada a ver..:S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este programa pede ao utilizador um valor em cêntimos e dá o valor em moedas de 2,1,50,20,10,5,2,1 cêntimo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estas a declarar a variavel valorEuros mas nunca a usas.

E estas a guardar as moedas desnecessariamente, ocupando espaço em memoria.

#include <stdio.h>

int main(void){
      int valorCentimos; 
      printf("Introduza o valor em centimos:\n");
      scanf("%d",&valorCentimos);

      printf("Moedas de 2 euros:%d\n",valorCentimos/200);
      printf("Moedas de 1 euro:%d\n",(valorCentimos%200)/100);
      printf("Moedas de 50 centimos:%d\n",((valorCentimos%200)%100)/50);
      printf("Moedas de 20 centimos:%d\n",(((valorCentimos%200)%100)%50)/20);
      printf("Moedas de 10 centimos:%d\n",((((valorCentimos%200)%100)%50)%20)/10);
      printf("Moedas de 5 centimos:%d\n",(((((valorCentimos%200)%100)%50)%20)%10)/5);
      printf("Moedas de 2 centimos:%d\n",((((((valorCentimos%200)%100)%50)%20)%10)%5)/2);
      printf("Moedas de 1 centimos:%d\n",(((((((valorCentimos%200)%100)%50)%20)%10)%5)%2)/1);
      return 0;
}

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