Jump to content
Sign in to follow this  
Flames

ultima tentativa vending

Recommended Posts

Flames

#include <stdio.h>
#include <stdlib.h>
#define L1 8
#define L2 9
float listamoedasmaquina[L1];
float listamoedasbolso[L2];
float listavalormoedas[]={200,100,50,20,10,5,2,1};
int listatroco[]={0,0,0,0,0,0,0,0};
float restotroco;
void moedasmaquina(void){
   int i;
    for (i=0;i<L1;i++){
            scanf("%f",&listamoedasmaquina[i]);}
}
void bolsomoedas(void){
  int x;
    for (x=0;x<L2;x++){
            scanf("%f",&listamoedasbolso[x]);}
}
void mostrarbolsomoedas(void){
int i;
for(i = 0; i <L2; i++){
    printf("%.0f ",listamoedasbolso[i]);
}

}
void somamoedas(void){

    int x;
    int z=0;
    float soma=0;
    for (x=1;x<L2;x++){
soma+=listamoedasbolso[x]*listavalormoedas[x-1];
    }
    if (soma<listamoedasbolso[0]*100){
            printf("troco: ");
            mostrarbolsomoedas();
            printf("valor insuficiente!");
            exit(0);
     }
     else{
     for (x=1;x<L2;x++){ /*actualiza o dinheiro na máquina para soma= ou superior ao troco!*/
        listamoedasmaquina[z]+=listamoedasbolso[x];
        z++;
}
/*int i;
    for(i = 0; i<=L1; i++){
        printf("%d ",num1[i]);testar a leitura do valor ACTUALIZADO a ver se está certa...*/
    }
     if (soma==listamoedasbolso[0]*100){
     printf("Esta pago!!!!");
     exit(0);

     }
     if (soma>listamoedasbolso[0]*100){
     restotroco=soma-listamoedasbolso[0]*100;
     printf("%.2f\n",restotroco);
     troco();
     }
     }
void troco(){
    int i,x;
    float soma=0,somatroco=0;
    float restotrocofixo=restotroco;
    for(i=0;i<L1;i++){
        while((restotroco>=listavalormoedas[i]) && (listamoedasmaquina[i]>0)){
            listamoedasmaquina[i]-=1;
            restotroco-=listavalormoedas[i];
            listatroco[i]+=1;
        }
    }
   for (x=0;x<L1;x++){
    printf("%d ",listatroco[x]);}
/*
for (x=0;x<L1;x++){
somatroco+=listatroco[x]*listavalormoedas[x+1];
    }
if (somatroco==restotrocofixo)
{
printf("Troco: ");
printf("%.2f ",restotrocofixo/100);
for (x=0;x<L1;x++){
printf("%d ",listatroco[x]);
    }
}
else{
    for (x=1;x<L2;x++){
soma+=listamoedasbolso[x]*listavalormoedas[x]/100;
    }
    printf("Troco: ");
    printf("%.2f ",soma);
    for (x=1;x<L1+1;x++){
    printf("%.0f ",listamoedasbolso[x]);
}
    printf("Troco indisponivel!");
    }*/
}
int main()
{
printf("Insira a quantidade de moedas existentes na máquina\n");
moedasmaquina();
printf ("bolso\n");
bolsomoedas();
somamoedas();
return 0;
}

Alguem me pode tentar explicar o porquê da minha funcao TROCO nao funcionar bem? Podem testar a serio isso é de loucos!!!! /bater com a cabeça na parede... Ja tentei de tudo nao faz sentido a partir de 10 centimos fazer asneira... E milagrosamente as vezes trabalhar outras nao opaaaa ultimo post sobre este assunto se alguem se importar de me explicar essa "conspiracao" de programa  😡

Share this post


Link to post
Share on other sites
bubulindo

Eh pá, desculpa lá... mas não achas que ter 4 tópicos sobre o mesmo assunto é abusar? Não é por teres mil e um tópicos abertos que vais obter mil e uma respostas válidas. Um tópico chega, assim queres que responda em qual?

Experimentaste o que tinha dito acerca de multiplicar por 100 e truncar o valor? Ou seja, esqueceres os floats e doubles e usares int para resolveres isto? No enunciado diz que tens mesmo de usar floats?


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
Localhost

Visto que este problema já está a causar muita confusão decidi fazer um exemplo de como resolver isto.

#include <stdio.h>

#define SIZE 8

float coins[size] = {2.0, 1.0, 0.50, 0.20, 0.10, 0.05, 0.02, 0.01}, money_available;
int quant_coins[size];

void give_change (float change)
{
    int k = 0;

    money_available -= change;
    while (change > 0)
    {
          for (k = 0; k < SIZE; k++)
             if (quant_coins[k] > 0 && coins[k] <= change)
             {
        quant_coins[k]--;
        change -= coins[k];
                break;
     }
    }
}

int process_data (int *coins_used, float value, float sum)
{
    int k = 0;

    if (value > sum)
    {
         printf ("Inseriu %.2f€. Faltam %.2f€.\n", sum, value - sum);
 return -1;
    }

    for (k = 0; k < SIZE; k++) quant_coins[k] += coins_used[k];
    if (value == sum)
    {
         printf ("Não tem troco. Volte sempre \n");
 return 0;
    }

    if (value < sum)
    {
        printf ("Tem um troco de %.1f€\n", sum - value);
if (sum - value > money_available)
{
    printf ("Lol. Fail!\n");
    return 1;
}

give_change (sum - value);

return 1;
     }
}

void input ()
{
     int k = 0, coins_used[size];
     float value = 0, sum = 0;

     for (k = 0; k < SIZE; k++)
     {
scanf ("%d", &quant_coins[k]);
money_available += quant_coins[k] * coins[k];
     }

     scanf ("%f", &value);

     for (k = 0; k < SIZE; k++)
     {
scanf ("%d", &coins_used[k]);
sum += coins[k] * coins_used[k];
     }
     money_available += sum;

     if (process_data (coins_used, value, sum) == 1)
        for (k = 0; k < SIZE; k++) printf ("%d%c", quant_coins[k], k == SIZE - 1 ? '\n': ' ');
}

int main (void)
{
    input ();

    return 0;
}

Chamei-lhe de VendBot.  :P


here since 2009

Share this post


Link to post
Share on other sites
Localhost

@Flames: agrada-te a minha solução? Conseguiste perceber e retirar algo novo dela?


here since 2009

Share this post


Link to post
Share on other sites
Flames

@Flames: agrada-te a minha solução? Conseguiste perceber e retirar algo novo dela?

Estive a ver a tua solução e a comparar com alguns aspectos da minha e não difere muito acho eu... Mas também sou noob a C ou mesmo a programar por isso a minha subjectividade cai por terra :P . Em relação ao fim do programa fica para o ano não me chateio mais com isto ainda dediquei uma semaninha mas useless enfim ultimo comentario a tudo isto Muito obrigado a quem ajudou e desculpem todo o meu incómodo e LOLING! para este programa!

Share this post


Link to post
Share on other sites
Localhost

Meh, e desistes assim? Apaga tudo o que já tens feito e recomeça; às vezes essa é a solução para todo o problema.


here since 2009

Share this post


Link to post
Share on other sites
Flames

Meh, e desistes assim? Apaga tudo o que já tens feito e recomeça; às vezes essa é a solução para todo o problema.

Opá é desesperante na tua cabeça funcionar na perfeição e falhar e não saberes porque "santo" aquilo cai por terra é triste... Como ja disse sou ganda noob a programar e visto que o deadline está a chegar não sei se vou optar pela tua ideia e recomeçar... Enfim thanks por tudo :P

Share this post


Link to post
Share on other sites
PanKBoy

o meu já está a funcionar.

Flames, vê o algoritmo que te enviei, e agora é só adaptares. Eu consegui por a funcionar, trabalhando em centimos. Assim é tudo int.

Por exemplo 2€ são 200 centimos.

Se precisares de ajuda, estás a vontade! :P

Share this post


Link to post
Share on other sites
bubulindo

Opá é desesperante na tua cabeça funcionar na perfeição e falhar e não saberes porque "santo" aquilo cai por terra é triste...

Isto é o começo da frase de alguém que adquiriu experiência com o problema...

Como ja disse sou ganda noob a programar e visto que o deadline está a chegar não sei se vou optar pela tua ideia e recomeçar... Enfim thanks por tudo :P

Isto é o fim duma frase de alguém que desistiu dum problema e assim não recolheu experiência válida para o seu futuro.

Já agora, posso assegurar-te que problemas destes vão sempre acontecer... mas é a determinação de perceber o porquê dos mesmos acontecerem que te vai ensinar e dar experiência.

Não é a resolver os exercícios ou problemas que te colocam sem dificuldade que aprendes... é a resolver problemas destes.


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
Flames

o meu já está a funcionar.

Flames, vê o algoritmo que te enviei, e agora é só adaptares. Eu consegui por a funcionar, trabalhando em centimos. Assim é tudo int.

Por exemplo 2€ são 200 centimos.

Se precisares de ajuda, estás a vontade! ;)

Se reparares tem o teu algoritmo ali e mesmo assim nao funciona e tem os 200 centimos e blabla enfim LOLADA é o que se pode dizer same shi* diferent smell :)

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
Sign in to follow this  

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