Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <iostream>
- #include <cstdlib>
- #include <vector> //LIBRERÍA NECESARIA PARA LA DECLARACIÓN DE VECTORES EN C++
- #include <iomanip>
- #include <cmath> //LIBRERÍA PARA REDONDEAR UN FLOAT
- using namespace std;
- void paravoraz(vector<int>vmonedas, int cdevolver);
- void cnmonedas(vector<int> vmonedas, int cdevolver);
- void verVectores(vector<vector<int> > acambio, vector<vector<int> > boolcambio, int cdevolver, vector<int> vmonedas);
- void ctmonedas(vector<vector<int> > boolcambio, vector<int> vmonedas, int cdevolver);
- int main(void) {
- //VECTOR QUE CONTIENE EL TIPO DE MONEDAS ESTANDAR, EUROS
- vector<int> vmonedas;
- //DECLARACIÓN VARIABLES
- float cdevolverf;
- int cdevolver, numonedas, i, opcion;
- int anadido;
- //MENU PRINCIPAL
- cout<<endl;
- cout<<"1.- SISTEMA POR DEFECTO, EUROS"<<endl;
- cout<<"2.- NUEVO SISTEMA MONERARIO "<<endl;
- cout<<"3.- SALIR "<<endl;
- cout<<"SELECCIONE SISTEMA MONERARIO: "<<endl;
- cin>>opcion;
- switch(opcion){
- case 1:
- vmonedas.push_back(200);
- vmonedas.push_back(100);
- vmonedas.push_back(50);
- vmonedas.push_back(20);
- vmonedas.push_back(10);
- vmonedas.push_back(5);
- vmonedas.push_back(2);
- vmonedas.push_back(1);
- cout<<endl;
- cout<<"LAS MONEDAS DEL SISTEMA POR DEFECTO SON LAS SIGUIENTES: "<<endl;
- for(i=0; i<vmonedas.size(); i++){
- cout<< " "<< vmonedas[i];
- }
- cout<<endl;
- break;
- case 2: //PEDIR MONEDAS AL USUARIO, ALMACENAR EN EL VECTOR
- cout<<" INTRODUZCA EL NUMERO DE MONEDAS QUE DESEE (MAX 8)"<<endl;
- cin>>numonedas;
- for(i=0; i<numonedas;i++){
- cout<<"Introduce el valor de la posicion " << i << ": " << endl;
- cin>>anadido;
- vmonedas.push_back(anadido);
- }
- break;
- case 3:
- return 0;
- break;
- default:
- cout<<"La opcion elegida no es valida"<<endl;
- }
- cout<<endl;
- cout<<"INDIQUE CANTIDAD A DEVOLVER: "<<endl;
- cin>>cdevolverf; //ALMACENA LA CANTIDAD A DEVOLVER
- cdevolver = cdevolverf*100;
- cout<<"1.- PARADIGMA VORAZ "<<endl;
- cout<<"2.- PARADIGMA DINAMICO "<<endl;
- cout<<"3.- SALIR "<<endl;
- cout<<"INDIQUE METODO DE DEVOLUCION: "<<endl;
- cin>>opcion;
- switch(opcion){
- case 1:
- //LLAMADA FUNCION VORAZ
- paravoraz(vmonedas,cdevolver);
- break;
- case 2:
- //LLAMADA FUNCION DINAMICA
- cnmonedas(vmonedas, cdevolver);
- break;
- case 3:
- return 0;
- break;
- default:
- cout<<"La opcion elegida no es valida"<<endl;
- }
- return 0;
- }
- //PARADIGMA VORAZ
- void paravoraz(vector<int>vmonedas, int cdevolver){
- vector <int> mcambio;
- for (int k=0; k<8;k++)
- mcambio.push_back(0);
- int i = 0;
- int numo=0;
- while( i<vmonedas.size() && cdevolver > 0){
- while(vmonedas.at(i) <= cdevolver){
- mcambio.at(i) = mcambio.at(i)+1;
- numo++;
- cdevolver = cdevolver - vmonedas.at(i);
- //cdevolver = floor(cdevolver*100+0.5)/100;
- }
- i++;
- }
- for (i=0;i<mcambio.size();i++) {
- if (mcambio.at(i) != 0)
- cout << mcambio.at(i) << " monedas de " << vmonedas.at(i) << endl;
- }
- cout<<"SE HA DEVUELTO UN TOTAL DE: "<<numo<<" MONEDAS"<<endl;
- }
- //P acambio (matriz) resultado booleana
- //T vmonedas (vector con las monedas disponibles)
- //C (nueva matriz de numeros)boolcambio
- //L cdevolver (cantidad a devolver)
- /*void cnmonedas(vector<float> vmonedas, float cdevolver ){
- vector<int> mcambio; //Vector que muestra con 0 y 1 las monedas que devuelve
- vector<vector<int> > acambio(cdevolver, vector<int>(vmonedas.size()));
- //vector<vector<int> > boolcambio(cdevolver, vector<int>(vmonedas.size()));
- int i=0, j=0;
- for (int k=0;k<vmonedas.size();k++)
- mcambio.push_back(0);
- for (i=1; i<=vmonedas.size(); i++){
- for(j=1; j<=cdevolver;j++){
- if(j<vmonedas.at(i-1)){
- acambio.at(i)[j] = acambio.at(i-1)[j];
- }else{
- int minimo =0;
- minimo = min(acambio.at(i-1)[j],acambio.at(i)[j - vmonedas.at(i-1)]+1);
- }
- }
- paravoraz(vmonedas, cdevolver);
- }
- }*/
- /*void ctmonedas(vector<float> vmonedas, float cdevolver){
- vector<vector<int> > acambio(cdevolver, vector<int>(vmonedas.size()));
- int i, j;
- vector<int> mcambio;
- for(i =0; i<vmonedas.size(); i++){
- mcambio.at(i)=0;
- if(i>1 && acambio.at(i)[j]==acambio.at(i-1)[j]){
- i--;
- }else{
- mcambio.at(i-1)++;
- j = j- vmonedas.at(i-1);
- }
- }
- }*/
- void mostrarMatrices(int cdevolver, vector<int> vmonedas, vector<vector<int> > boolcambio, vector<vector<int> > acambio){
- for (int i=0; i<cdevolver; i++){
- for(int j=1; j<=vmonedas.size();j++){
- cout << boolcambio.at(i)[j] << " ";
- }
- cout << endl;
- }
- cin.ignore();
- }
- void cnmonedas(vector<int> vmonedas, int cdevolver ){
- vector<int> mcambio; //Vector que muestra con 0 y 1 las monedas que devuelve
- vector<vector<int> > acambio;
- vector<vector<int> > boolcambio;
- vector<int> temp;
- int i=0, j=0;
- // Rellenamos acambio y boolcambio con ceros
- for (i=0;i<=cdevolver; i++){
- temp.empty();
- for (j=0; j<vmonedas.size();j++){
- temp.push_back(0);
- }
- acambio.push_back(temp);
- boolcambio.push_back(temp);
- }
- /*
- for (i=0;i<cdevolver; i++){
- for (j=0; j<=vmonedas.size();j++){
- cout << acambio.at(i)[j] << " ";
- }
- cout << endl;
- }
- cin.ignore();
- */
- // Rellenamos el vector mcambio con ceros
- for (int k=0;k<vmonedas.size();k++)
- mcambio.push_back(0);
- for (i=0; i<=cdevolver; i++){
- for (j=1; j<vmonedas.size(); j++) {
- if (i==0 && j<vmonedas.at(i)) {
- acambio.at(i)[j] = 0;
- boolcambio.at(i)[j] = 0;
- }
- else {
- if (i==1) {
- acambio.at(i)[j] = 1 + acambio.at(i)[j - vmonedas.at(0)];
- boolcambio.at(i)[j] = 1;
- }
- else {
- if (i<vmonedas.at(j)) {
- acambio.at(i)[j] = acambio.at(i-1)[j];
- boolcambio.at(i)[j] = 0;
- }
- else {
- acambio.at(i)[j] = (acambio.at(i)[j] < (1 + acambio.at(i)[j - vmonedas.at(0)]))
- ?
- acambio.at(i)[j]
- :
- 1 + acambio.at(i)[j - vmonedas.at(0)];
- boolcambio.at(i)[j] = (acambio.at(i)[j] != acambio.at(i)[j])? 1 : 0;
- }
- }
- }
- }
- }
- verVectores(acambio, boolcambio, cdevolver, vmonedas);
- ctmonedas(boolcambio, vmonedas, cdevolver);
- }
- void verVectores(vector<vector<int> > acambio, vector<vector<int> > boolcambio, int cdevolver, vector<int> vmonedas){
- int i, j;
- for (i=0; i<=cdevolver; i++){
- for (j=1; j<=vmonedas.size(); j++) {
- cout << acambio.at(i)[j] << " ";
- }
- cout << endl;
- }
- cout << endl;cout << endl;
- for (i=0; i<=cdevolver; i++){
- for (j=1; j<=vmonedas.size(); j++) {
- cout << boolcambio.at(i)[j] << " ";
- }
- cout << endl;
- }
- }
- void ctmonedas(vector<vector<int> > boolcambio, vector<int> vmonedas, int cdevolver) {
- vector<int> mcambio;
- for (int k=0;k<vmonedas.size();k++)
- mcambio.push_back(0);
- int i, numo =0;
- int j;
- i = cdevolver; //vmonedas -> n
- //NUEVA VARIA EN CENTIMOS EJ: FLOAT C=2.71 INT CC= C*100
- j = vmonedas.size()-1;
- while (i >= 0 && j>=0)
- {
- if (boolcambio.at(i)[j] == 0) {
- j--; // Subo a la celda superior
- } else {
- mcambio.at(i) = mcambio.at(i) + 1 ;// Añado una moneda del tipo i
- cdevolver = cdevolver - vmonedas.at(i);
- cdevolver = floor(cdevolver*100+0.5)/100;
- j = cdevolver;
- numo++;
- }
- }
- for (i=0;i<mcambio.size();i++) {
- if(mcambio.at(i)!=0)
- cout << mcambio.at(i) << " monedas de " << vmonedas.at(i) << endl;
- }
- cout<<"SE HA DEVUELTO UN TOTAL DE: "<<numo<<" MONEDAS"<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement