Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ruka284

Moedas

Mensagens Recomendadas

Ruka284

#include<stdio.h>
#include <cstdlib>
main ()
{
int quantia;
int moedas,moedas100,moedas50,moedas20,moedas10,moedas5,moedas1;
printf(" \n   Inico do programna   \n");  

printf(" \n   Introduza a quantia   \n");
scanf("%d",&quantia);
if (quantia >= 100)
{
   while (quantia >=100)
 quantia=quantia-100;
	   moedas100=moedas+1;
printf("Sao precisas moedas de 100   \n",moedas100);		   
}
if (quantia>=50)
{
quantia=quantia-50;
moedas50=1;
printf("Sao precisas moedas de 50   \n",moedas50); 
}		
if (quantia >= 20)
{
   while (quantia >= 20)
	   quantia=quantia-20;
	   moedas20=moedas20+1;
printf("Sao precisas moedas de 20   \n",moedas20);			
}
if (quantia>=10)
{
quantia=quantia-10;
moedas10=1;
printf("Sao precisas moedas de 10   \n",moedas10); 
}
if (quantia>=5)
{
quantia=quantia-5;
moedas5=1;
printf("Sao precisas moedas de 5   \n",moedas5); 
}
if (quantia>=1)
{
while (quantia>0)
quantia=quantia-1;
moedas1=moedas1+1;
printf("Sao precisas moedas de 1   \n",moedas1);
}
system("PAUSE");
}

Também aproveito para pedir uma ajuda, como faço para apareçer as moedas exatas para a quantia.

vou dar exemplo como queria que aparecesse

printf(são precisas 14 moedas de 20, e 7 de 10) é so um exemplo.

tambem qual instrução que faço quando chego ao fim do programa e repito novamente o programa em vez de estar abrir o programa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Falta-te inicializar, pelo menos, moedas100 e moedas.

Não mistures as duas variaveis desnecessariamente.

Para aparecer as moedas exactas fazes com diversos ifs.

A instrução para repetir o que quer que seja é um loop (for, while, od do ... while). A maneira mais rápida é dares outro nome à função main e fazeres uma main nova que chama a main antiga num loop.

int main(void) {
   int val;
   do val = mainantiga(); while (val == 0);
   return val;
}


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Também aproveito para pedir uma ajuda, como faço para apareçer as moedas exatas para a quantia.

vou dar exemplo como queria que aparecesse

printf(são precisas 14 moedas de 20, e 7 de 10) é so um exemplo.

printf("Sao precisas %d moedas de 20 centimos", moedas20);

Construir uma frase "bonita" implica uma série de ifs sem "\n" no fim, de maneira a que a frase vá sendo construída.


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

#include <cstdlib>

Oops ... isto não é C; parece-me C++ (mas eu não sei essa linguagem).

Certifica-te que estás a usar um compilador de C ou então mete a tua dúvida no quadro de C++.

Sugiro-te que configures o teu compilador (seja de C ou de C++) para o máximo de warnings; e faz compilações sem warnings!


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

Falta-te inicializar, pelo menos, moedas100 e moedas.

Não mistures as duas variaveis desnecessariamente.

Para aparecer as moedas exactas fazes com diversos ifs.

A instrução para repetir o que quer que seja é um loop (for, while, od do ... while). A maneira mais rápida é dares outro nome à função main e fazeres uma main nova que chama a main antiga num loop.

int main(void) {
int val;
do val = mainantiga(); while (val == 0);
return val;
}

podes explicar melhor o funcionamento desta sintaxe, ainda não dei esta matéria

printf("Sao precisas %d moedas de 20 centimos", moedas20);

Construir uma frase "bonita" implica uma série de ifs sem "\n" no fim, de maneira a que a frase vá sendo construída.

esta sintaxe esta bem estruturada, vou implementar no programa.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

podes explicar melhor o funcionamento desta sintaxe, ainda não dei esta matéria

Um ciclo do ... while é composto por tres partes: a palavra chave do; a instrução ou bloco de instruções a executar repetidamente e a condição de paragem incluindo a palavra chave while.

faz coisas enquanto isto for verdade;

Usa-se normalmente para ciclos que têm que correr pelo menos uma vez, já que o teste é efectuado no fim das operações.

O código que eu apresentei

do val = mainantiga(); while (val == 0);

tem a palavra chave do, a instrução a repetir é a atribuição do valor devolvido pela função mainantiga à variável val, e o ciclo deixa de repetir quando val for diferente de 0 (repete enquanto val for zero).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

indenta o teu código

já agora ficas com uma solução com validação de dados de entrada e algoritmo simplista

pode ser que não percebas à primeira vista, mas sempre podes ver que o que estás a fazer, pode ser muito melhorado

#include <stdio.h>

int main()
{
   int valores[6] = {100, 50, 20, 10, 5, 1};
   int ok = 0, valor = 0, i = 0, count = 0;

   do
   {
       printf("Intruduza a quantia : ");
       fflush(stdout);
       ok = (scanf("%d", &valor) ? valor > 0 : 0);
       while (getchar() != '\n');
   } while (!ok);

   for (i = 0; i < sizeof (valores) / sizeof (int); i++)
   {
       count = 0;
       while (valor >= valores[i])
       {
           valor -= valores[i];
           count++;
       }

       printf("Sao precisas %d moedas de %d\n", count, valores[i]);
   }

   return 0;
}

ps : inicializa todas as tuas variáveis a zero

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284
#include <stdio.h>
int main()
{
    int valores[6] = {100, 50, 20, 10, 5, 1}; - aqui declaraste os seis valores
    int ok = 0, valor = 0, i = 0, count = 0; - aqui não percebi
    do
    {
		    printf("Intruduza a quantia : ");-introdução de dados
		    fflush(stdout);-não percebi
		    ok = (scanf("%d", &valor) ? valor > 0 : 0);
		    while (getchar() != '\n');
    } while (!ok);
    for (i = 0; i < sizeof (valores) / sizeof (int); i++)- aqui estas fazer ciclo, mas não percebo o conteudo
    {
		    count = 0;- aqui tb não percebo
		    while (valor >= valores[i])
		    {
				    valor -= valores[i];
				    count++;
		    }
		    printf("Sao precisas %d moedas de %d\n", count, valores[i]); - aqui mandas sair
    }
    return 0;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

int valores[6] = {100, 50, 20, 10, 5, 1}; - aqui declaraste os seis valores

vou deixar a hipótese de que poderia ser da seguinte forma para perceberes um ponto mais à frente

 int valores[] = {100, 50, 20, 10, 5, 1}; // 

int ok = 0, valor = 0, i = 0, count = 0; - aqui não percebi

é só declaração de variáveis com a sua inicialização a zero !!!

fflush(stdout);-não percebi

como a mensagem que usei no printf não tem um '\n' no final, existe a possibilidade de que a mensagem não seja enviada para a consola antes do scanf.

esta função força esse passo (algo que o '\n' também faz).

no entanto, desta maneira é possível inserires os valores na mesma linha da mensagem pedida e não na linha seguinte

for (i = 0; i < sizeof (valores) / sizeof (int); i++)- aqui estas fazer ciclo, mas não percebo o conteudo

é um ciclo que serve para iterar os elementos do array

isto porque o sizeof(valores) da-te o tamanho em bytes do array e o sizeof(int) da-te o tamanho em bytes de cada elemento do array.

conclusão, tens o número de elementos do array.

é certo que sabes que são 6. mas isso é para este caso específico, além de que se necessitares de alterar o número de elementos do array, basta alterar na declaração.

é por isso que te fiz a demonstração na declaração do array

count = 0;- aqui tb não percebo

é só uma atribuição ...

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

bela explicação, hei-de chegar a essa matéria

Estás a aprender na escola ou universidade, não é?

Não esperes pela matéria, vai ter com ela. Muitas vezes, estas coisas nem são dadas nas aulas (o que é estúpido).


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Dexter's Lab

HHHippo, explica-me uma coisa do fflush(stdout), se não te importares: Como é possível o scanf ser direccionado para a consola antes do printf?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

o tratamento de dados de entrada e saída é feito através de buffers ao nível do sistema operativo (não digo todos porque não sei).

ao fazer a chamada da função printf não implica que os dados sejam enviados imediatamente para a o dispositivo de saída (normalmente a consola). o que acontece é que é enviado para o buffer e o resto é tratado pelo sistema operativo.

é normal as pessoas ignorarem esta questão por duas razões:

- o sistema operativo é suficientemente inteligente para perceber que não interessa ter os dados em buffer por muito tempo.

- a existência do caracter de mudança de linha ('\n') força a saída dos dados no buffer para o dispositivo.

o problema acontece quando se efectua uma chamada que faz lockdown do sistema antes dos dados no buffer sejam processados, como no caso do scanf, função que bloqueia até ler dados do buffer de entrada (sim, também é por buffer, mas desta um diferente do de saída).

para resolver o problema de um scanf ser chamado logo após um printf que não possua o caracter '\n' no seu conteúdo, podendo a mensagem deste printf não ser apresentada, é usada a função fflush para forçar essa operação.

logo, quando se pretende que na consola se tenha uma mensagem qualquer onde o utilizador deverá inserir dados de entrada na mesma linha da questão, é aconselhável efectuar este processo.

exemplos demonstrativos:

printf("Insira um numero : "); // <- sem o caracter '\n'
scanf("%d", &num);             // ler os dados inseridos pelo utilizador
printf("O numero e : %d", num);

output (possível, depende da sorte)

4
Insira um numero :
O numero e : 4

printf("Insira um numero : "); // <- sem o caracter '\n'
fflush(stdout);                // forçar o processamento dos dados no buffer de saída (stdout)
scanf("%d", &num);             // ler os dados inseridos pelo utilizador
printf("O numero e : %d", num);

output

Insira um numero : 4
O numero e : 4


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.