Enrere Mòdul 5
Fonaments de programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis
Pràctica d'ampliació

 
La devolució del canvi en EUROS

Com aplicació fàcil i directa dels vectors, veurem el clàssic problema del canvi en la seva versió més senzilla. 

 

Desenvolupament de la pràctica

Una màquina expenedora d'un producte determinat ha de tornar canvi quan la quantitat introduïda és superior al preu del producte. Aquesta màquina pot tornar monedes de:

1 cèntims d'EURO

2 cèntims d'EURO
5
cèntims d'EURO
10
cèntims d'EURO
20
cèntims d'EURO
50
cèntims d'EURO
1 EURO
2 EUROS

Les dades introduïdes per l'usuari seran: el preu del producte i la quantitat que s'ha introduït a la màquina. El programa haurà de calcular el canvi expressat en monedes de cada tipus. Aquest canvi s'haurà de calcular de forma que sempre ens doni el mínim de monedes possible. Això s'aconsegueix, en aquest cas, donant sempre la moneda de més valor que sigui més petit o igual al canvi. La implementació d'aquest algorisme es fa en el següent programa:

Definiu un projecte nou anomenat m5p09 i afegiu-li un arxiu de font C/C++ anomenat m5p09.cpp. Escriviu el següent codi:

//m5p09.cpp. El canvi

#include <stdio.h>
#include <stdlib.h>

void main(){

    int valor[8]={1,2,5,10,20,50,100,200};
    int n[8]={0};
    int canvi, preu, quant;
    int i;

    printf("\nIntroduïu el preu expressat en cèntims...");scanf("%d",&preu);
    printf("\nIntroduïu la quantitat expressada en cèntims ...");scanf("%d",&quant);
    canvi=quant-preu;
    if(canvi<0){
       printf("\nquantitat insuficient");
       exit(1);
    }

    i=8;
    while((canvi>0)&&(i>=0)){
        if(canvi>=valor[i]){
            n[i]++;
            canvi=canvi-valor[i];
        }else i--;
    }
    for(i=0;i<8;i++){
        printf("%d monedes de %d cèntims d'EURO\n",n[i],valor[i]);
    }
}

Explicació del programa

Els valors de les monedes es posen en un vector unidimensional (en aquest cas de dimensió 8) anomenat valor. El nombre de monedes de cada tipus que es tornarà com a canvi està representat en el vector n[].  

Una vegada demanats els valors de preu i quant, es calcula el canvi que serà emmagatzemat a la variable canvi

L'assignació del nombre de monedes de cada tipus que formarà part del canvi es fa en el següent tros de codi:

 
 while((canvi>0)&&(i>=0)){
        if(canvi>=valor[i]){
            n[i]++;
            canvi=canvi-valor[i];
        }else i--;
 }

Una vegada calculat el canvi, mostra aquest canvi per pantalla.

Totes les variables s'han declarat del tipus int per tal d'evitar errors de precissió. Per exemple, amb variables del tipus float o double és possible que una expressió com 0.4-0.2 no sigui igual a 0.2 sino 0.19999 i això faria fallar el programa.