Jump to content
Flames

Vending machine

Recommended Posts

Flames

Boas... Eu queria uma ideia de como fazer o meu programa de vending machine...

Objectivo:

O utilizador insere o numero de moedas de cada tipo que a vending machine contêm tipo: 2 1 1 1 0 0 0 0 ----> significa 2 moedas de 2 euros 1 de um euro e assim até chegar ao 1 centimo...

De seguida o utilizador insere o preço que vai pagar como também a quantidade de moedas a inserir de cada tipo 4.5 2 0 1 0 0 0 0 0 ----> significa que vai pagar 4.5 euros com duas moedas de dois euros e uma de 50 centimos...

Depois de algumas afinações ja fiz o programa para em caso da soma que o utilizador inseriu para pagar a despesa seja inferior o programa devolve a quantidade e diz que o preço é inferior...

Agora estou na dúvida como faço em caso de haver troco (calamidade :S):

exemplo: 4.5 2 1 0 0 0 0 0 0 existe troco de 0.50 centimos como hei-de devolver partindo do tipo de moedas que a máquina dispõe...

Desculpem o incómodo...

Share this post


Link to post
Share on other sites
brunoais

Agora estou na dúvida como faço em caso de haver troco (calamidade :S):

exemplo: 4.5 2 1 0 0 0 0 0 0 existe troco de 0.50 centimos como hei-de devolver partindo do tipo de moedas que a máquina dispõe...

Paga 4.5 com 2 moedas de 2€ e 1 de 1€? Isso é 3€ e não 4.5€. (failed maths forever(n me vão fazer dizer isto em português pois n?))

O q podes fazer é a tal lógica de 1º pagar o máximo de moedas de 2€ (neste caso 0), o máximo de moedas de 1 (neste caso, 0), o máximo de moedas de 0.5 (neste caso, 1), o máximo de moedas de 0.20 (neste caso, 0)... (acho q isso está explicado em baixo)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
daj

brunoais, andas a reinventar a matemática. ;-)

Flames, uma solução poderá ser

- procuras a moeda mais alta que existe na máquina que seja menor ou igual que o troco.

- troco = troco - moeda

- decrementas o contador respectivo

- repetir enquanto troco não 0

Supondo que tens 3.25 eur de troco para dar e tens na máquina 0 moedas de 2eur, 2 moedas de 1 eur, 5 moedas de 50cent, 1 de 10cent e 4 de 5cent.

- a moeda mais alta que é menor que o troco é 1eur. troco = 2.25

- a moeda mais alta que é menor que o troco é 1eur. troco = 1.25

- a moeda mais alta que é menor que o troco é 50cent. troco = 0.75

- a moeda mais alta que é menor que o troco é 50cent. troco = 0.25

- a moeda mais alta que é menor que o troco é 10cent. troco = 0.15

- a moeda mais alta que é menor que o troco é 5cent. troco = 0.10

- a moeda mais alta que é menor que o troco é 5cent. troco = 0.05

- a moeda mais alta que é igual ao troco é 5cent. troco = 0.00

Convém registares as moedas que usas para repores caso não seja possível dar troco.

Share this post


Link to post
Share on other sites
Localhost

@brunoais: lol & fail.  ;)

@Flames: se quiseres aprender alguma coisa com isto resolve o problema com programação dinâmica. Para além de teres o troco, vais tê-lo no menor número de moedas possível. Só em tom de curiosidade.


here since 2009

Share this post


Link to post
Share on other sites
brunoais

@brunoais: lol & fail.  ;)

No q é q eu falhei? Percebi mal o q o autor escreveu?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Localhost
Isso é 3€ e não 4.5€.

(2 * 2) + (1 * 1) = 5.

E os 4.5€ é o valor da compra e não o dinheiro dado pelo utilizador, daí ter-se que dar 0,50€ de troco.


here since 2009

Share this post


Link to post
Share on other sites
Flames

eu ia tentar aplicar essa teoria mas deparei-me com um problema que não sei mesmo como ultrapassar (sim sou novato em c ;) )

por exemplo para gravar o preço e as respectivas moedas para pagar dá-se um problema:

4.5 2 1 0 0 0 0 0 0

quero pagar 4.5 e uso duas moedas de dois euros e 1 de um euro depois uso a soma para verificar se o valor inserido é igual ao valor de 4.5 mas esse float ocupa duas casas (sim neste momento é confuso vou dar o código a exemplificar):

#include <stdio.h>
#include <stdlib.h>
#define L1 7
#define L2 8
#define L3 8
float num1[L1];
float num2[L2];
float num31[L3];
float num3[]={2,1,0.5,0.2,0.1,0.05,0.02,0.01} <---- array para o valor das moedas que sera multiplicado pelo array num2
void moedasmaquina(){
   int i;
    for (i=0;i<=L1;i++){
            scanf("%d",&num1[i]);}
}
void bolsomoedas(){
  int x;
    for (x=0;x<=L2;x++){
            scanf("%2f ",&num2[x]);}
}
void somamoedas(){

    int x;
    int z=0;                                                     tem variaveis aqui que sao usadas posteriormente...
    float soma=0;
    for (x=1;x<=L2;x++){
    soma+=num2[x]*num3[x-1]; <---- aqui esta a soma do array que o utilizador insere vezes o array "peso" de cada posicao
    printf("%f",soma);
    }
    if (num2[0]>soma){
            printf("troco: ");
            mostrarbolsomoedas();
            printf(" valor insuficiente!");

int main(){
moedasmaquina();
bolsomoedas();
somamoedas();


return 0;
}

Share this post


Link to post
Share on other sites
PanKBoy

Boas,

também estou a fazer este exercício, e na altura de calcular o troco, quando preciso de dar um troco de 5 centimos, não é o que me devolve.

Estou a dividir o troco, pelas moedas, e depois subtraio ao troco as moedas que tirei.

Quando faço 0.05/0.05, não me dá nada e passa à moeda seguinte: faz 0.05/0.02 e aí já me dá duas moedas de 2 centimos. alguem me pode ajudar? já tentei de varias maneiras e não resulta. :S

obrigado! :P

Share this post


Link to post
Share on other sites
i307

Também  estou a fazer este exercício  :P

Estava a tentar criar a fórmula que nos dá as moedas para fazer o troco mas não está a funcionar. Provavelmente porque estou a inventar demais.

i=0;
    while(i<8){
    val=0;
    while(val>=0){
    val = troco - (1*valores[i]);
    vtroco[i]+=1;
    }
    i++;
    }

Share this post


Link to post
Share on other sites
SharkAD

Também estou a tentar fazer o mesmo problema e realmente isto para novatos em c é um bocado complicado...  :P

Gostava de ajudar mas infelizmente também preciso de ajuda  :P

Share this post


Link to post
Share on other sites
i307

Boas,

também estou a fazer este exercício, e na altura de calcular o troco, quando preciso de dar um troco de 5 centimos, não é o que me devolve.

Estou a dividir o troco, pelas moedas, e depois subtraio ao troco as moedas que tirei.

Quando faço 0.05/0.05, não me dá nada e passa à moeda seguinte: faz 0.05/0.02 e aí já me dá duas moedas de 2 centimos. alguem me pode ajudar? já tentei de varias maneiras e não resulta. :S

obrigado! :P

Tou com um problema semelhante . Mas comigo é em moedas de 50 centimos.

Se tiver de dar troco 5.70 ,dá 2 de 2€ ,1 de 1€ , 1 de 0.5cent e 1 de 20cent.

Se for para dar troco de 4.70 então dá-me 3 de 20 cent e uma de 10cent.

Não consigo perceber pois (0.7/0.5) > 1 portanto ele devia fazer a operação. Não sei como é que passa para a moeda seguinte.

EDIT: problema resolvido. faltava-me chaveta no else.

Share this post


Link to post
Share on other sites
PanKBoy

Tou com um problema semelhante . Mas comigo é em moedas de 50 centimos.

Se tiver de dar troco 5.70 ,dá 2 de 2€ ,1 de 1€ , 1 de 0.5cent e 1 de 20cent.

Se for para dar troco de 4.70 então dá-me 3 de 20 cent e uma de 10cent.

Não consigo perceber pois (0.7/0.5) > 1 portanto ele devia fazer a operação. Não sei como é que passa para a moeda seguinte.

EDIT: problema resolvido. faltava-me chaveta no else.

já te funciona bem?

Share this post


Link to post
Share on other sites

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.