Advertisement
Guest User

da3m0n

a guest
Jan 17th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.91 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <vector> //LIBRERÍA NECESARIA PARA LA DECLARACIÓN DE VECTORES EN C++
  5. #include <iomanip>
  6. #include <cmath> //LIBRERÍA PARA REDONDEAR UN FLOAT
  7. using namespace std;
  8.  
  9. void paravoraz(vector<int>vmonedas, int cdevolver);
  10. void cnmonedas(vector<int> vmonedas, int cdevolver);
  11.  
  12. void verVectores(vector<vector<int> > acambio, vector<vector<int> > boolcambio, int cdevolver, vector<int> vmonedas);
  13.  
  14.  
  15. void ctmonedas(vector<vector<int> > boolcambio, vector<int> vmonedas, int cdevolver);
  16.  
  17. int main(void) {
  18.     //VECTOR QUE CONTIENE EL TIPO DE MONEDAS ESTANDAR, EUROS
  19.     vector<int> vmonedas;
  20.     //DECLARACIÓN VARIABLES
  21.     float cdevolverf;
  22.     int cdevolver, numonedas, i, opcion;
  23.     int anadido;
  24.    
  25.     //MENU PRINCIPAL
  26.     cout<<endl;
  27.     cout<<"1.- SISTEMA POR DEFECTO, EUROS"<<endl;
  28.     cout<<"2.- NUEVO SISTEMA MONERARIO "<<endl;
  29.     cout<<"3.- SALIR "<<endl;
  30.     cout<<"SELECCIONE SISTEMA MONERARIO: "<<endl;
  31.     cin>>opcion;
  32.    
  33.     switch(opcion){
  34.         case 1:
  35.             vmonedas.push_back(200);
  36.             vmonedas.push_back(100);
  37.             vmonedas.push_back(50);
  38.             vmonedas.push_back(20);
  39.             vmonedas.push_back(10);
  40.             vmonedas.push_back(5);
  41.             vmonedas.push_back(2);
  42.             vmonedas.push_back(1);
  43.             cout<<endl;
  44.            
  45.             cout<<"LAS MONEDAS DEL SISTEMA POR DEFECTO SON LAS SIGUIENTES: "<<endl;
  46.             for(i=0; i<vmonedas.size(); i++){
  47.                 cout<< " "<< vmonedas[i];
  48.             }    
  49.             cout<<endl;
  50.            
  51.             break;
  52.         case 2: //PEDIR MONEDAS AL USUARIO, ALMACENAR EN EL VECTOR
  53.             cout<<" INTRODUZCA EL NUMERO DE MONEDAS QUE DESEE (MAX 8)"<<endl;
  54.             cin>>numonedas;
  55.             for(i=0; i<numonedas;i++){
  56.                 cout<<"Introduce el valor de la posicion " << i << ": " << endl;
  57.                 cin>>anadido;
  58.                 vmonedas.push_back(anadido);                  
  59.             }
  60.             break;
  61.         case 3:
  62.             return 0;
  63.             break;
  64.            
  65.         default:
  66.             cout<<"La opcion elegida no es valida"<<endl;        
  67.     }
  68.    
  69.    
  70.    
  71.     cout<<endl;
  72.     cout<<"INDIQUE CANTIDAD A DEVOLVER: "<<endl;
  73.     cin>>cdevolverf; //ALMACENA LA CANTIDAD A DEVOLVER
  74.     cdevolver = cdevolverf*100;
  75.     cout<<"1.- PARADIGMA VORAZ "<<endl;
  76.     cout<<"2.- PARADIGMA DINAMICO "<<endl;
  77.     cout<<"3.- SALIR "<<endl;
  78.     cout<<"INDIQUE METODO DE DEVOLUCION: "<<endl;
  79.     cin>>opcion;
  80.     switch(opcion){
  81.         case 1:
  82.             //LLAMADA FUNCION VORAZ
  83.             paravoraz(vmonedas,cdevolver);
  84.             break;
  85.         case 2:
  86.             //LLAMADA FUNCION DINAMICA
  87.             cnmonedas(vmonedas, cdevolver);
  88.             break;
  89.         case 3:
  90.             return 0;
  91.             break;
  92.         default:
  93.             cout<<"La opcion elegida no es valida"<<endl;  
  94.     }    
  95.    
  96.     return 0;
  97. }
  98.  
  99.  
  100. //PARADIGMA VORAZ
  101. void paravoraz(vector<int>vmonedas, int cdevolver){
  102.     vector <int> mcambio;
  103.     for (int k=0; k<8;k++)
  104.         mcambio.push_back(0);
  105.     int i = 0;
  106.     int numo=0;
  107.     while( i<vmonedas.size() && cdevolver > 0){      
  108.         while(vmonedas.at(i) <= cdevolver){
  109.             mcambio.at(i) = mcambio.at(i)+1;
  110.             numo++;
  111.             cdevolver = cdevolver - vmonedas.at(i);  
  112.             //cdevolver = floor(cdevolver*100+0.5)/100;
  113.         }
  114.         i++;
  115.     }
  116.     for (i=0;i<mcambio.size();i++) {
  117.         if (mcambio.at(i) != 0)
  118.             cout << mcambio.at(i) << " monedas de " << vmonedas.at(i) << endl;
  119.     }
  120.     cout<<"SE HA DEVUELTO UN TOTAL DE: "<<numo<<" MONEDAS"<<endl;    
  121. }
  122.  
  123. //P acambio (matriz) resultado booleana
  124. //T vmonedas (vector con las monedas disponibles)
  125. //C (nueva matriz de numeros)boolcambio
  126. //L cdevolver (cantidad a devolver)
  127.  
  128.  
  129. /*void cnmonedas(vector<float> vmonedas, float cdevolver ){
  130.     vector<int> mcambio; //Vector que muestra con 0 y 1 las monedas que devuelve
  131.     vector<vector<int> > acambio(cdevolver, vector<int>(vmonedas.size()));
  132.     //vector<vector<int> > boolcambio(cdevolver, vector<int>(vmonedas.size()));
  133.     int i=0, j=0;
  134.    
  135.     for (int k=0;k<vmonedas.size();k++)
  136.         mcambio.push_back(0);        
  137.    
  138.     for (i=1; i<=vmonedas.size(); i++){
  139.         for(j=1; j<=cdevolver;j++){
  140.             if(j<vmonedas.at(i-1)){
  141.                 acambio.at(i)[j] = acambio.at(i-1)[j];
  142.                
  143.             }else{
  144.                 int minimo =0;
  145.                 minimo = min(acambio.at(i-1)[j],acambio.at(i)[j - vmonedas.at(i-1)]+1);
  146.                
  147.             }
  148.         }
  149.         paravoraz(vmonedas, cdevolver);
  150.     }
  151. }*/
  152.  
  153. /*void ctmonedas(vector<float> vmonedas, float cdevolver){        
  154.  vector<vector<int> > acambio(cdevolver, vector<int>(vmonedas.size()));
  155.  int i, j;
  156.  vector<int> mcambio;
  157.  
  158.  for(i =0; i<vmonedas.size(); i++){
  159.  mcambio.at(i)=0;
  160.  if(i>1 && acambio.at(i)[j]==acambio.at(i-1)[j]){
  161.  i--;
  162.  }else{
  163.  mcambio.at(i-1)++;
  164.  j = j- vmonedas.at(i-1);
  165.  
  166.  }
  167.  }
  168.  
  169.  }*/
  170. void mostrarMatrices(int cdevolver, vector<int> vmonedas, vector<vector<int> > boolcambio, vector<vector<int> > acambio){
  171.     for (int i=0; i<cdevolver; i++){
  172.         for(int j=1; j<=vmonedas.size();j++){
  173.             cout << boolcambio.at(i)[j] << " ";
  174.         }
  175.         cout << endl;
  176.     }
  177.     cin.ignore();
  178. }
  179.  
  180.  
  181. void cnmonedas(vector<int> vmonedas, int cdevolver ){
  182.     vector<int> mcambio; //Vector que muestra con 0 y 1 las monedas que devuelve
  183.     vector<vector<int> > acambio;
  184.     vector<vector<int> > boolcambio;
  185.     vector<int> temp;
  186.     int i=0, j=0;
  187.    
  188.     // Rellenamos acambio y boolcambio con ceros
  189.     for (i=0;i<=cdevolver; i++){
  190.         temp.empty();
  191.         for (j=0; j<vmonedas.size();j++){
  192.             temp.push_back(0);
  193.         }
  194.         acambio.push_back(temp);
  195.         boolcambio.push_back(temp);
  196.     }
  197.     /*
  198.     for (i=0;i<cdevolver; i++){
  199.         for (j=0; j<=vmonedas.size();j++){
  200.             cout << acambio.at(i)[j] << "  ";
  201.         }
  202.         cout << endl;
  203.     }
  204.     cin.ignore();
  205.     */
  206.    
  207.     // Rellenamos el vector mcambio con ceros
  208.     for (int k=0;k<vmonedas.size();k++)
  209.         mcambio.push_back(0);        
  210.    
  211.     for (i=0; i<=cdevolver; i++){
  212.         for (j=1; j<vmonedas.size(); j++) {
  213.             if (i==0 && j<vmonedas.at(i)) {
  214.                 acambio.at(i)[j] = 0;
  215.                 boolcambio.at(i)[j] = 0;
  216.             }
  217.             else {
  218.                 if (i==1) {
  219.                     acambio.at(i)[j] = 1 + acambio.at(i)[j - vmonedas.at(0)];
  220.                     boolcambio.at(i)[j] = 1;
  221.                 }
  222.                 else {
  223.                     if (i<vmonedas.at(j)) {
  224.                         acambio.at(i)[j] = acambio.at(i-1)[j];
  225.                         boolcambio.at(i)[j] = 0;
  226.                     }
  227.                     else {
  228.                         acambio.at(i)[j] = (acambio.at(i)[j] < (1 + acambio.at(i)[j - vmonedas.at(0)]))
  229.                                 ?
  230.                                     acambio.at(i)[j]
  231.                                 :
  232.                                     1 + acambio.at(i)[j - vmonedas.at(0)];
  233.                         boolcambio.at(i)[j] = (acambio.at(i)[j] != acambio.at(i)[j])? 1 : 0;              
  234.                     }
  235.                 }
  236.             }
  237.         }
  238.     }
  239.     verVectores(acambio, boolcambio, cdevolver, vmonedas);
  240.     ctmonedas(boolcambio, vmonedas, cdevolver);
  241. }
  242.  
  243. void verVectores(vector<vector<int> > acambio, vector<vector<int> > boolcambio, int cdevolver, vector<int> vmonedas){
  244.     int i, j;
  245.     for (i=0; i<=cdevolver; i++){
  246.         for (j=1; j<=vmonedas.size(); j++) {
  247.             cout << acambio.at(i)[j] << " ";
  248.         }
  249.         cout << endl;
  250.     }
  251.     cout << endl;cout << endl;
  252.     for (i=0; i<=cdevolver; i++){
  253.         for (j=1; j<=vmonedas.size(); j++) {
  254.             cout << boolcambio.at(i)[j] << " ";
  255.         }
  256.         cout << endl;
  257.     }
  258. }
  259.  
  260.  
  261. void ctmonedas(vector<vector<int> > boolcambio, vector<int> vmonedas, int cdevolver) {
  262.     vector<int> mcambio;
  263.     for (int k=0;k<vmonedas.size();k++)
  264.         mcambio.push_back(0);
  265.     int i, numo =0;
  266.     int j;
  267.     i = cdevolver; //vmonedas -> n
  268.     //NUEVA VARIA EN CENTIMOS EJ: FLOAT C=2.71 INT CC= C*100
  269.     j = vmonedas.size()-1;
  270.     while  (i >= 0 && j>=0)
  271.     {
  272.         if (boolcambio.at(i)[j] == 0) {
  273.             j--; // Subo a la celda superior
  274.         } else {
  275.             mcambio.at(i) = mcambio.at(i) + 1 ;// Añado una moneda del tipo i
  276.             cdevolver = cdevolver - vmonedas.at(i);              
  277.             cdevolver = floor(cdevolver*100+0.5)/100;
  278.             j = cdevolver;
  279.             numo++;
  280.         }
  281.     }      
  282.     for (i=0;i<mcambio.size();i++) {
  283.         if(mcambio.at(i)!=0)
  284.         cout << mcambio.at(i) << " monedas de " << vmonedas.at(i) << endl;
  285.     }
  286.         cout<<"SE HA DEVUELTO UN TOTAL DE: "<<numo<<" MONEDAS"<<endl;
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement