Descompsición en monedas de una cantidad en euros

De Ejercicios

Contenido

Enunciado

Dada una cantidad de dinero en euros se desea conocer el número mínimo de monedas en las que se descompone dicha cantidad. Las monedas que se han de tener en cuenta para su descomposición son las de 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02 y 0.01 euros.

Soluciones

Diseño 1 en Pseudocódigo por lperez

ALGORITMO Cambio_dinero
ENTRADAS:
   dinero: REAL  (cantidad de dinero que se tiene, dinero>=0.)
SALIDAS: (cantidad mínima de monedas en las que se descompone, de 2,1, 0.5, 0.2, 0.1,  0.05, 0.02 y 0.01.)
   m2, m1, m05, m02, m01, m005, m002, m001: REAL
VARIABLES:
   resto:REAL
INICIO
  ESCRIBIR "Introduzca una cantidad de dinero: "
  LEER dinero
  m2<--0; m1<--0; m05<--0; m02<--0; m005<--0; m002<--0; m001<--0
  resto<--dinero
  MIENTRAS resto>=2) HACER
     resto<--resto-2
     m2<--m2+1
  FIN_MIENTRAS 
  MIENTRAS resto>=1) HACER
     resto<--resto-1
     m1<--m1+1
  FIN_MIENTRAS
  MIENTRAS (resto>=0.5) HACER
     resto<--resto-0.5
     m05<--m05+1
  FIN_MIENTRAS
  MIENTRAS (resto>=0.2)  HACER
     resto<--resto-0.2
     m02<--m02+1
  FIN_MIENTRAS
  MIENTRAS (resto>=0.1)  HACER
     resto<--resto-0.1
     m01<--m01+1
  FIN_MIENTRAS
  MIENTRAS (resto>=0.05)  HACER
     resto<--resto-0.05
     m005<--m005+1
  FIN_MIENTRAS
  MIENTRAS (resto>=0.02)  HACER
     resto<--resto-0.02
     m002<--m002+1
  FIN_MIENTRAS
  MIENTRAS (resto>=0.01)  HACER
     resto<--resto-0.01
     m001<--m001+1
  FIN_MIENTRAS
  (*SI resto>0
    ENTONCES m001<--1
    FIN_SI  *)  Esto puede sustituir al último mientras
  ESCRIBIR m2, m1, m05, m02, m005, m002, m001
FIN

Diseño 2 en Pseudocódigo por lperez

ALGORITMO Cambio_dinero
ENTRADAS: dinero: REAL, cantidad de dinero que se tiene, dinero>=0.
SALIDAS: salida:ARRAY [1..8] DE ENTEROS, cantidad mínima de monedas en las que 
           se descompone, de 2,1, 0.5, 0.2, 0.1, 0.05, 0.02 y 0.01. 
VARIABLES: i: ENTERO, resto:REAL; monedas:ARRAY[1..8] DE REAL
INICIO
  PARA i=1 HASTA 8
     salida(i)<--0
  FIN_PARA
  monedas(1)<--2; monedas(2)<--1; monedas(3)<--0.5; monedas(4)<--0.2;
  monedas(5)<--0.1; monedas(6)<--0.05; monedas(7)<--0.02; monedas(8)<--0.01;
  resto<--dinero
  i<--1
  MIENTRAS (i<=8) HACER
     MIENTRAS (resto>=monedas(i)) HACER
        resto<--resto-monedas(i)
        salida(i)<--salida(i)+1
     FIN_MIENTRAS 
     SI resto>0
     ENTONCES 
        i<--i+1
     SI NO 
       i<--9
     FIN_SI
  FIN_MIENTRAS
  PARA i=1 HASTA 8 HACER
     ESCRIBIR salida(i)
  FIN_PARA
FIN


Comentario

En la segunda forma se utiliza array para almacenar los valores de las monedas de cambio por lo que los ciclos hechos en la primera resolución para calcular las monedas de cada tipo se pueden agrupar poniendo dos ciclos aninados, lo cual simplifica la escritura, aunque el comportamiento es el mismo.

Solución 1 en C

#include <stdio.h>
#include <stdlib.h>
               
int main(void){
  //ENTRADAS:
  float dinero; //(Dinero que se tiene, dinero>=0)
  //SALIDAS: (Cantidad mínima de monedas en que se descompone:2,1,0.5,0.2,0.1,0.05,0.02,0.01) 
  float m1,m2,m05,m02,m01,m005,m002,m001;
  //VARIABLES:
  float resto;
                      
  printf("Introduzca la cantidad de dinero: ");               
  scanf("%f",&dinero);                                     

  m1=0;
  m2=0;
  m05=0;
  m02=0;
  m01=0;
  m005=0;
  m002=0;
  m001=0;
  resto=dinero;
                 
  while(resto>=2){
      resto=resto-2;
      m2=m2+1;
  }
  while(resto>=1){
      resto=resto-1;
      m1=m1+1;
  }
  while(resto>=0.5){
      resto=resto-0.5;
      m05=m05+1;
  }
  while(resto>=0.2){
      resto=resto-0.2;
      m02=m02+1;
  }
  while(resto>=0.1){
      resto=resto-0.1;
      m01=m01+1;
  }
  while(resto>=0.05){
      resto=resto-0.05;
      m005=m005+1;
  }
  while(resto>=0.02){
      resto=resto-0.02;
      m002=m002+1;
  }
  while(resto>=0.01){
      resto=resto-0.01;
      m001=m001+1;
  }        
  printf("%f,%f,%f,%f,%f,%f,%f,%f",m2,m1,m05,m02,m01,m005,m002,m001);                               
}

Solución 2 en C

#include <stdio.h>
#include <stdlib.h>
                 
int main(void){
 //ENTRADAS
  float dinero;  //(Cantidad de dinero que se tiene, dinero>=0)
 //SALIDAS
  int salida[9]; //(Cantidad minima de monedas en que se descompone:
                 //  de 2,1,0.5,0.2,0.1,0.05,0.02,0.01)
 //VARIABLES
  int i;
  float resto;
  float monedas[9];
         
  for(i=1; i<=8; i++){
         salida[i]=0;
  }
  monedas[1]=2;
  monedas[2]=1;
  monedas[3]=0.5;
  monedas[4]=0.2;
  monedas[5]=0.1;
  monedas[6]=0.05;
  monedas[7]=0.02;
  monedas[8]=0.01;
  resto=dinero;
  i=1;
               
  while(i<=8){
       while(resto>=monedas[i]){
               resto=resto-monedas[i];
               salida[i]=salida[i]+1;
       }
       if(resto>0){
               i=i+1;
       }else{
               i=9;
       }
  }
  for(i=1; i<=8; i++){
       printf("%i",salida[i]);
  }
}

Programa 1 en Pascal por lperez

(* ENTRADAS: dinero: REAL, cantidad de dinero que se tiene, dinero>=0.
SALIDAS: m2, m1, m05, m02,m01, m005, m002, m001, cantidad mínima de monedas en
las que se descompone, de 2,1, 0.5, 0.2, 0.05, 0.02 y 0.01 *)
(***************************************)
program Cambio_dinero;
uses crt;
var m2, m1, m05, m02, m01, m005, m002, m001:integer;dinero,resto:REAL;
begin
    clrscr;
    write('Introduce la cantidad total de dinero: ');
    readln(dinero);
    m2:=0; m1:=0; m05:=0; m01:=0; m02:=0; m005:=0; m002:=0; m001:=0;
    resto:=dinero;
    while (resto>=2) do
       begin
  	  resto:=resto-2;
         m2:=m2+1;
       end;
    while (resto>=1) do
       begin
  	  resto:=resto-1;
         m1:=m1+1;
       end;
    while (resto>=0.5) do
       begin
  	  resto:=resto-0.5;
         m05:=m05+1;
       end;
    while (resto>=0.2) do
       begin
  	  resto:=resto-0.2;
         m02:=m02+1;
       end;
    while (resto>=0.1) do
       begin
  	  resto:=resto-0.1;
         m01:=m01+1;
       end;
    while (resto>=0.05) do
       begin
  	  resto:=resto-0.05;
         m005:=m005+1;
       end;
    while (resto>=0.02) do
       begin
  	  resto:=resto-0.02;
         m002:=m002+1;
       end;
    while (resto>=0.01) do
       begin
  	  resto:=resto-0.01;
         m001:=m001+1;
       end;
    writeln('Monedas de 2= ', m2);
    writeln('Monedas de 1= ', m1);
    writeln('Monedas de 0.5= ', m05);
    writeln('Monedas de 0.2= ', m02);
    writeln('Monedas de 0.1= ', m01);
    writeln('Monedas de 0.05= ', m005);
    writeln('Monedas de 0.02= ', m002);
    writeln('Monedas de 0.01= ', m001);
    writeln('Pulse enter para acabar');
    readln;
end.

Programa 2 en Pascal por lperez

(* ENTRADAS: dinero: REAL, cantidad de dinero que se tiene, dinero>=0.
SALIDAS: salida, array con la cantidad mínima de monedas en
     las que se descompone, de 2,1, 0.5, 0.2, 0.05, 0.02 y 0.01 *)
(*********************************)
program Cambio_dinero;
uses crt;
var salida:array[1..8] of integer;dinero,resto:REAL;
   monedas:array[1..8] of real;i:integer;
begin
    clrscr;
    write('Introduce la cantidad total de dinero: ');
    readln(dinero);
    for i:=1 to 8 do
        salida[i]:=0;
    resto:=dinero;
    monedas[1]:=2;monedas[2]:=1;monedas[3]:=0.5;monedas[4]:=0.2;
    monedas[5]:=0.1;monedas[6]:=0.05;monedas[7]:=0.02;monedas[8]:=0.01;
    i:=1;
    while (i<=8) do  
      begin
         while (resto>=monedas[i]) do
           begin
  	      resto:=resto-monedas[i];
             salida[i]:=salida[i]+1;
           end;
         if resto>0
         then i:=i+1
         else i:=9;
       end;
    for i:=1 to 8 do
       writeln('Monedas de ',monedas[i]:2:2,'=',salida[i]);
    writeln('Pulsa enter para acabar');
    readln;
end.
Tipos de soluciones
Navegación
Tipos de soluciones
Herramientas