Está en la página 1de 3

PROBLEMA DE EXAMEN (Ing. Tc. Inf.

Febrero 2010 Tipo A, en C+-)

Más preguntas test y ejercicios resueltos en


http://www.aprenderaprogramar.com/foros/index.php?topic=401.0

ENUNCIADO

Realizar el tipo abstracto de datos PrecioOro para guardar el precio de la onza de oro en 5 monedas
diferentes (Dólar, Euro, Yen, Libra, Yuan). La operación NuevoPrecio guarda el nuevo precio en una
determinada moneda. La operación CambioOro entre dos monedas devuelve los cambios unitarios de cada
moneda en función de la otra tomando como base el precio del oro. La operación ListarPrecios escribe en
pantalla la tabla de precios de la onza de oro en cada moneda.

SOLUCIÓN PROPUESTA

Nota: esta solución se basa en el uso de vectores. Resulta un poco más corta en líneas de código, pero más
abstracta y difícil de entender que si en vez de un vector de monedas y precios trabajamos con cinco
monedas y con cinco precios.

Archivo precio_oro.h
/*INTERFAZ DEL TAD*/

#pragma once
/* http://www.aprenderaprogramar.com/foros/index.php?topic=401.0*/
const int numeroMonedas = 5;

extern float cambioMoneda1;


extern float cambioMoneda2;

typedef enum TipoError {errorGenerado};

typedef enum TipoNombreMoneda {desconocida, dolares, euros, yenes, libras, yuanes};

typedef struct TipoPrecioOro {


TipoNombreMoneda nombreMoneda;
float precioOroMoneda;

};

typedef TipoPrecioOro TipoVectorMoneda [numeroMonedas+1];

typedef struct TipoVectorOro {

TipoVectorMoneda moneda;
void NuevoPrecio (TipoNombreMoneda nombre_moneda, float precionuevo);
void CambioOro (TipoNombreMoneda nombre_moneda1, TipoNombreMoneda nombre_moneda2);
void ListarPrecios();
};
Archivo precio_oro.cpp
/*IMPLEMENTACIÓN DEL TAD*/

#include <stdio.h>
#include <stdlib.h>
#include "precio_oro.h"
/* http://www.aprenderaprogramar.com/foros/index.php?topic=401.0*/

float cambioMoneda1 = 0.0;


float cambioMoneda2 = 0.0;

/*OPERACION NUEVO PRECIO SOBRE EL TAD*/


void TipoVectorOro::NuevoPrecio (TipoNombreMoneda nombre_moneda, float precionuevo) {

moneda[nombre_moneda].precioOroMoneda = precionuevo;

/*OPERACION CAMBIOPRECIO SOBRE EL TAD*/


void TipoVectorOro::CambioOro (TipoNombreMoneda nombre_moneda1, TipoNombreMoneda
nombre_moneda2) {

/*Unidades de moneda 2 que nos dan por cada unidad de moneda 1*/
cambioMoneda1 = moneda[nombre_moneda2].precioOroMoneda /
moneda[nombre_moneda1].precioOroMoneda;

/*Unidades de moneda 1 que nos dan por cada unidad de moneda 2*/
cambioMoneda2 = moneda[nombre_moneda1].precioOroMoneda /
moneda[nombre_moneda2].precioOroMoneda;

void TipoVectorOro::ListarPrecios () {

printf ("1=dolares 2=euros 3=yenes 4=libras 5=yuanes\n");

for (int i=1; i<= numeroMonedas; i++) {


printf ("Valor de la onza en la moneda %d es %f uds\n", i, moneda[i].precioOroMoneda);
}
}
(No es parte de la solución). Archivos para comprobación:
programa principal programa_monedas_oro.cpp
#include <stdio.h>
#include <stdlib.h>
#include "precio_oro.h"
/* http://www.aprenderaprogramar.com/foros/index.php?topic=401.0*/

int main () {

TipoVectorOro oro;

printf ("comienzo del programa\n");

oro.moneda[1].nombreMoneda = dolares;
oro.moneda[2].nombreMoneda = euros;
oro.moneda[3].nombreMoneda = yenes;
oro.moneda[4].nombreMoneda = libras;
oro.moneda[5].nombreMoneda = yuanes;

for (int i=1; i<= numeroMonedas; i++) {


oro.moneda[i].precioOroMoneda = float(i*7+2);
printf ("Valor de la onza en la moneda %d es %.2f uds\n", i, oro.moneda[i].precioOroMoneda);
}

oro.ListarPrecios();
oro.NuevoPrecio(dolares, 13.85);
oro.NuevoPrecio(yuanes, 23.66);
oro.ListarPrecios();

oro.CambioOro(dolares, yuanes);
printf ("El cambio de dolares respecto a yuanes es de %.2f yuanes por dolar\n", cambioMoneda1);
printf ("El cambio de yuanes respecto a dolares es de %.2f dolares por yuan\n", cambioMoneda2);

oro.CambioOro(dolares, libras);
printf ("El cambio de dolares respecto a libras es de %.2f libras por dolar\n", cambioMoneda1);
printf ("El cambio de yuanes respecto a libras es de %.2f dolares por libra\n", cambioMoneda2);

EJEMPLO DE RESPUESTA DEL PROGRAMA

Ejecuta el programa y comprueba que responde como debiera. Si tienes algún problema puedes dejarme
una consulta en los foros (aprenderaprogramar.com/foros)

También podría gustarte