Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: flony en 9 Abril 2013, 05:57 am



Título: clase racional
Publicado por: flony en 9 Abril 2013, 05:57 am
hola amigos, tengo este problema y ya me maree bastante si alguno me puede echar una mano seria genial, programo en visual 2012 c++
"programar en c++ de deitel "
problema n° 9.6
dice
Citar
cree una clase llamada racional para realizar operaciones aritmeticas con fracciones escriba un programa para evaluar su clase.
use variables enteras para representar los datos private de la clase:numerador y denominador. Proporcione un constructor que permita a un objeto de esta clase inicializarse cuando se declare. El constructor debe tener valores prederminados en caso de que no se proporcione inicializaodres y debe almacenar una fracion en forma reducida. Por ejemplo la fracion 2/4 se se almacena en el objeto como 1/2.Proporcione funciones mienbro public que realizen cada una de las siguientes tareas sumar restar multiplicar dividir imprimir fraciones en modfo a/b y en forma de punto flotante
mi code es
Código:
// Racional.h
#ifndef RACIONAL_H
#define RACIONAL_H

#pragma once

using namespace System;

namespace Racional {

public ref class miRacional
{
// TODO: agregar aquí los métodos de la clase.
public:
miRacional(int , int );
~miRacional();
//funciones
void suma();
void resta();
void multiplicar();
void dividir();
void ImprimirFraccion();
void ImprimirFlotante();
int reducir(int, int);
private:
int numerador;
int denominador;

};
}
#endif
y
Código:
// Archivo DLL principal.
//racional.cpp

#include "stdafx.h"

#include "Racional.h"

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
using std::fixed;

#include<iomanip>
using std::setprecision;

Racional::miRacional::miRacional(int num, int deno)
{
numerador=denominador=1;
reducir(int num, int deno);

}

int Racional::miRacional::reducir(int n, int d )
{
int i;
for (int i = 2; i <= 11; i++)
{
while ((d%i==0)&&(n%i==0))
{
d=d/i;
n=n/i;
}
}
return d,n;
}

void Racional::miRacional::suma()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
numerador=((n1*d2)+(d1*n2));
denominador=(d1*d2);
}

void Racional::miRacional::resta()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
denominador=(d1*d2);
numerador=((d2*n1)-(d1*n2));
}

void Racional::miRacional::multiplicar()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
numerador=(n1*n2);
denominador=(d1*d2);
}

void Racional::miRacional::dividir()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
numerador=n1*d2;
denominador=d1*n2;
}

void Racional::miRacional::ImprimirFraccion()
{
cout<<"el resultado es "<<numerador<<"/"<<denominador<<endl;
system("PAUSE");
}

void Racional::miRacional::ImprimirFlotante()
{
double a;
a=static_cast<double>(numerador)/denominador;
cout<<"el resultado de la fraccion en decimales es"<< setprecision(5)<<fixed<<a;
system("PAUSE");
}

el problema me lo da el constructor para reducir una fracion aca los errores
Citar
1>------ Operación Compilar iniciada: proyecto: Racional, configuración: Debug Win32 ------
1>  Racional.cpp
1>Racional.cpp(19): error C2144: error de sintaxis : 'int' debe estar precedido de ')'
1>Racional.cpp(19): error C2660: 'Racional::miRacional::reducir' : la función no acepta 0 argumentos
1>Racional.cpp(19): error C2059: error de sintaxis : ')'
========== Compilar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========


Título: Re: clase racional
Publicado por: flony en 9 Abril 2013, 15:58 pm
me auto-respondo...pero no para infringir las reglas del foro sino por si le sirve a alguien, acá la solución
Código:
// Racional.h
#ifndef RACIONAL_H
#define RACIONAL_H

#pragma once

using namespace System;

namespace Racional {

class miRacional
{
// TODO: agregar aquí los métodos de la clase.
public:
miRacional(int =1, int=1);
~miRacional();
//funciones
void suma();
void resta();
void multiplicar();
void dividir();
void ImprimirFraccion();
void ImprimirFlotante();
void reducir(int, int);
void reducida(int,int);
private:
int numerador;
int denominador;

};
}
#endif

y
Código:
// Archivo DLL principal.
//racional.cpp

#include "Racional.h"

#include<iostream>
using std::cout;
using std::cin;
using std::endl;
using std::fixed;

#include<iomanip>
using std::setprecision;



Racional::miRacional::miRacional(int deno, int num)
{
reducir(deno, num);
}

void Racional::miRacional::reducir(int de, int nu)
{
reducida(de, nu);
}

void Racional::miRacional::reducida(int d, int n)
{
int i;
for (int i = 2; i <= 11; i++)
{
while ((d%i==0)&&(n%i==0))
{
d=d/i;
n=n/i;
}
}
denominador=d;
numerador=n;
}

void Racional::miRacional::suma()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
numerador=((n1*d2)+(d1*n2));
denominador=(d1*d2);
}

void Racional::miRacional::resta()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
denominador=(d1*d2);
numerador=((d2*n1)-(d1*n2));
}

void Racional::miRacional::multiplicar()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
numerador=(n1*n2);
denominador=(d1*d2);
}

void Racional::miRacional::dividir()
{
int n1,d1,n2,d2;
cout<<"ingrese numerador y denominador de 1° fraccion";
cin>>n1,d1;
cout<<"ingrese numerador y denominador de 2° fraccion";
cin>>n2,d2;
numerador=n1*d2;
denominador=d1*n2;
}

void Racional::miRacional::ImprimirFraccion()
{
cout<<"el resultado es "<<numerador<<"/"<<denominador<<endl;
system("PAUSE");
}

void Racional::miRacional::ImprimirFlotante()
{
double a;
a=static_cast<double>(numerador)/denominador;
cout<<"el resultado de la fraccion en decimales es"<< setprecision(5)<<fixed<<a;
system("PAUSE");
}
ahora solo falta la implementacion...jijiji ahí no se si funca  :silbar: :silbar: