que tal amigos. veran estoy haciendo un programa que deve realizar operaciones de polinomios(suma,resta,multiplicacion) usando listas el detalle es que justo cuando entre a ver la materia cambiaron de c++ y c++ builder a DEVc++ bueee...
el show de todo es que hice mi punto h (polinomio.h) ahi pretendo hacer todo ahi estan todas mis funciones ya importo la libreria poniendo en la cabesera #include<polinomio.h> using namespace std; y de ahi trato de crear el objeto de tipo clase polinomios definida en el .h pero no funciona aqui les dejo el codigo de mi .h si a algen le es de ayuda con confiansa meta mano:
#include <fstream.h>
#include <iostream.h>
#include <cstdlib.h>
//---------------------------------------------------------------------------
//**************************************************************
char c;
int co=0,i=0,cont=1,cantidad=0,x=0,y=0;
int ind=0,co2=0,exp2=0;
int caso1=0,caso2=0,nope=0;
char signo,encontrado;
//--------------------------------------------------------------
//--------------------------------------------------------------
//structuras para los terminos
struct termino{//ESTRUCTURAS DE LOS TERMINOS
int co; //COEFICIENTE
int exp; //EXPONENTEW
termino *sig; //PUNTERO A SIGUIENTE TERMINO
termino *ant; //PUNTERO A TERMINO ANTERIOR
};
typedef termino *pter;
//------------------------------------------------------
struct polinomio{ //ESTRUCTURA DE LOS POLINOMIO
pter term; //PUNTERO AL PRIMER TERMINO DEL POLINOMIO
polinomio *sig; //PUNTERO A SIGUIENTE POLINOMIO
polinomio *ant; //PUNTERO AL POLINOMIO ANTERIOR
};
typedef polinomio *nodo;
//-----------------------------------------------------
struct polinomio2{ //ESTRUCTURA DE LOS POLINOMIO
pter term; //PUNTERO AL PRIMER TERMINO DEL POLINOMIO
polinomio *sig; //PUNTERO A SIGUIENTE POLINOMIO
polinomio *ant; //PUNTERO AL POLINOMIO ANTERIOR
};
typedef polinomio2 *nodo2;
//-----------------------------------------------------
struct lista2{ //ESTRUCTURA DE LAS OPERACIONES CON LOS DEMAS POLINOMIOS
char operacion[2];//VARIABLE PARA LA OPERACION
pter poli; //PUNTERO AL PRIMER TERMINO DEL POLINOMIO
lista2 *sig; //PUNTERO AL SIGUIENTE POLINOMIO
lista2 *ant;
};
typedef lista2 *plista;
//-----------------------------------------------------
class polinomios{
public:
void inicializar();
void inicializart();
void nuevop();
void nuevot(int co,int exp);
void enlazar();
void separar();
void insertar(char aux[20]);
void enlazar2();
void nuevop2();
void nuevot2(int co,int exp);
void SUMAR();
void RESTAR();
void MULTIPLICAR();
void operacion ();
void nuevotR(int co,int exp);
char mostrar();
private:
plista auxl;
plista list;
pter listat2;
pter auxt2;
pter tmp2;
nodo listap2;
nodo auxp2;
pter listat;
nodo listap;//PRINCIPAL PARA INGRESAR AL PRIMER POLINOMIO DE LA LISTA
nodo auxp;
pter auxt;
pter tmp;
};
//-------------------------------------------------------
//ºººººººººººººººººººººINICIALIZAR
/*char polinomios::mostrar(){
auxt=auxp->term;
i=0;
do {
i++;
}while(auxt!=auxp->term);
}//FIN PROCEDIMIENTO*/
void polinomios::inicializar()
{
auxp=NULL;
listat=NULL;
auxt=NULL;
listap=NULL;
auxl=NULL;
list=NULL;
}
void polinomios::inicializart(){
auxt=NULL;
auxt2=NULL;
listat=NULL;//INICIALIZA UN PUNTERO A TERMINO
listat2=NULL;//INICIALIZA UN PUNTERO A TERMINO
}
//-------------------------------------------------------
//ºººººººººººººººººINSERCION DE POLINOMIO POR EL FINAL
void polinomios::nuevop(){
if (listap==NULL){//por que es el primero
listap=new(polinomio);
listap->sig=listap;
listap->ant=listap;
listap->term=NULL;
auxp=listap;
auxp->sig=auxp;
auxp->ant=auxp;
}//finsi
else //sino
if (listap!=NULL){
auxp=new(polinomio);//AUTOMATICAMENTE auxp QUEDA APUNTANDO AL NUEVO POLINOMIO
auxp->sig=listap;
auxp->ant=listap->ant;
listap->ant->sig=auxp;
listap->ant=auxp;
/*listap->term=NULL;*/ }
}//fin procedimiento
//-------------------------------------------------------
//ºººººººººººººººººINSERCION DE TERMINO ORDENADOS
void polinomios::nuevot(int x,int y){
if (listat==NULL){ //CREO EL PRIMER NODO
listat=new(termino);
listat->sig=listat;
listat->ant=listat;
listat->co=x;
listat->exp=y;
auxt=listat;
auxt->sig=listat;
auxt->ant=listat;
}//fin si
else
if (listat!=NULL){
//CREO EL NODO
auxt=new(termino);
auxt->co=x;
auxt->exp=y;
auxt->sig=NULL;
auxt->ant=NULL;
//REVISO SI ES EL DE GRADO MAYOR
//..............................................................................
if ((auxt->exp)>=(listat->exp)){ //AQUI DEBE ENTRAR ORDENADO Y SIN REPETIR
if ((auxt->exp)==(listat->exp)){ //SI ES IGUAL LO SUMO
listat->co=listat->co+auxt->co; //AQUI SE SUMAN SI SON IGUALES LOS EXPONENTES PARA NO REPETIR TERMINOS
}
else
if (auxt->exp>listat->exp){//SINO LO ANEXO COMO EL MAYOR
auxt->sig=listat;
auxt->ant=listat->ant;
listat->ant->sig=auxt;
listat->ant=auxt;
listat=auxt;}
}//finsi
else
//REVISO SI ES EL DE GRADO MENOR
//..............................................................................
if (auxt->exp<=listat->ant->exp){
if (auxt->exp==listat->ant->exp) {//SI ES IGUAL LO SUMO
listat->ant->co=listat->ant->co+auxt->co;//AQUI SE SUMAN SI SON IGUALES LOS EXPONENTES PARA NO REPETIR TERMINOS
}//FIN SI
else
if (auxt->exp<listat->ant->exp){ //SINO LO ANEXO
auxt->sig=listat;
auxt->ant=listat->ant;
listat->ant->sig=auxt;
listat->ant=auxt;}
}//fin si
else
if ((auxt->exp!=listat->ant->exp)&(auxt->exp)!=(listat->exp)) {
//SI ESTA DENTRO DE LA LISTA
//..............................................................................
tmp=listat->sig;
while (auxt->exp<tmp->exp){
tmp=tmp->sig; //ME DA LA POSICION DONDE DEBO INSERTAR
}//fin mientras
if (tmp->exp==auxt->exp){ //ME DA LA POSICION DONDE DEBE ESTAR
tmp->co=tmp->co+auxt->exp;
}
else
if (tmp->exp<auxt->exp){//SINO LO ANEXO ADELANTE
auxt->sig=tmp;
auxt->ant=tmp->ant;
tmp->ant->sig=auxt;
tmp->ant=auxt;}//FIN SI
}//FIN SI
}
}//fin procedimiento
//ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
void polinomios::enlazar(){
auxp->term=listat; //**ENLAZO CON EL PUNTERO DE POLINOMIO
}//FIN PROCEDIMIENTO
//ººººººººººººººººººººººººººººººººººººººººººººººººººººººº2
void polinomios::enlazar2(){
auxl->poli=listat2; //**ENLAZO CON EL PUNTERO DE POLINOMIO
nope++;
}//FIN PROCEDIMIENTO
//ººººººººººººººººººººººººººººººººººººººººººººººººººººººº2
void polinomios::insertar(char aux[20]){ //PARA LA SEGTUNDA LISTA
auxl=new(lista2); //LA OTRA LISTA SE CREA PARA LAS OPERACIONES CON LOS DEMAS POLINOMIOS
//..............................................................................
if (list==NULL){ //SI NO HAY NINGUN POLINOMIO
auxl->sig=auxl;//APUNTA ASI MISMO
auxl->ant=auxl;//APUNTA ASI MISMO
auxl->poli=NULL; //AUN NO SE ENLAZA
list=auxl;
list->poli=NULL; //AUN NO SE ENLAZA
list=auxl;//ASIGNO EL PUNTERO A LA PRIMERA OPERACION
list->sig=auxl;//APUNTA ASI MISMO
list->ant=auxl;//APUNTA ASI MISMO
StrCopy(list->operacion,aux); //GUARDO LA OPERACION
StrCopy(auxl->operacion,aux); //GUARDO LA OPERACION
}//FIN SI
else
if (list!=NULL){ //SI YA HAY UNA OPERACION CON POLINOMIO
auxl->sig=list; //INSERTO LA SIGUIENTE
auxl->ant=list->ant;
list->ant->sig=auxl;
list->ant=auxl;
auxl->poli=NULL;
StrCopy(auxl->operacion,aux);
}//FIN SI
}//FIN PROCEDIMIENTO
//ºººººººººººººººººINSERCION DE TERMINO ORDENADOS
void polinomios::nuevot2(int x,int y){ //PARA INSERTAR LOS TERMINOS ORDENADOS DE LA 2da LISTA
if (listat2==NULL){ //CREO EL PRIMER NODO
listat2=new(termino);
listat2->sig=listat2;
listat2->ant=listat2;
listat2->co=x;
listat2->exp=y;
auxt2=listat2;
auxt2->sig=listat2;
auxt2->ant=listat2;
}//fin si
else
if (listat2!=NULL){
//CREO EL NODO
auxt2=new(termino);
auxt2->co=x;
auxt2->exp=y;
auxt2->sig=NULL;
auxt2->ant=NULL;
//REVISO SI ES EL DE GRADO MAYOR
//..............................................................................
if ((auxt2->exp)>=(listat2->exp)){ //AQUI DEBE ENTRAR ORDENADO Y SIN REPETIR
if ((auxt2->exp)==(listat2->exp)){ //SI ES IGUAL LO SUMO
listat2->co=listat2->co+auxt2->co; //AQUI SE SUMAN SI SON IGUALES LOS EXPONENTES PARA NO REPETIR TERMINOS
}
else
if (auxt2->exp>listat2->exp){//SINO LO ANEXO COMO EL MAYOR
auxt2->sig=listat2;
auxt2->ant=listat2->ant;
listat2->ant->sig=auxt2;
listat2->ant=auxt2;
listat2=auxt2;}
}//finsi
else
//REVISO SI ES EL DE GRADO MENOR
//..............................................................................
if (auxt2->exp<=listat2->ant->exp){
if (auxt2->exp==listat2->ant->exp) {//SI ES IGUAL LO SUMO
listat2->ant->co=listat2->ant->co+auxt2->co;//AQUI SE SUMAN SI SON IGUALES LOS EXPONENTES PARA NO REPETIR TERMINOS
}//FIN SI
else
if (auxt2->exp<listat2->ant->exp){ //SINO LO ANEXO
auxt2->sig=listat2;
auxt2->ant=listat2->ant;
listat2->ant->sig=auxt2;
listat2->ant=auxt2;}
}//fin si
else
if ((auxt2->exp!=listat2->ant->exp)&(auxt2->exp!=listat2->exp)) {
//SI ESTA DENTRO DE LA LISTA
//..............................................................................
tmp2=listat2->sig;
while (auxt2->exp<tmp2->exp){
tmp2=tmp2->sig; //ME DA LA POSICION DONDE DEBO INSERTAR
}//finmientras
if (tmp2->exp==auxt2->exp){ //ME DA LA POSICION DONDE DEBE ESTAR
tmp2->co=tmp2->co+auxt2->exp;
}
else
if (tmp2->exp<auxt2->exp){//SINO LO ANEXO ADELANTE
auxt2->sig=tmp2;
auxt2->ant=tmp2->ant;
tmp2->ant->sig=auxt2;
tmp2->ant=auxt2;}//FIN SI
}//FIN SI
}
}//fin procedimiento
//ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
//ºººººººººººººººººINSERCION DE TERMINO ORDENADOS
void polinomios::nuevotR(int x,int y){
if (listat==NULL){ //CREO EL PRIMER NODO
listat=new(termino);
listat->sig=listat;
listat->ant=listat;
listat->co=x;
listat->exp=y;
auxt=listat;
auxt->sig=listat;
auxt->ant=listat;
}//fin si
else
if (listat!=NULL){
//CREO EL NODO
auxt=new(termino);
auxt->co=x;
auxt->exp=y;
auxt->sig=NULL;
auxt->ant=NULL;
//REVISO SI ES EL DE GRADO MAYOR
//..............................................................................
if ((auxt->exp)>=(listat->exp)){ //AQUI DEBE ENTRAR ORDENADO Y SIN REPETIR
if ((auxt->exp)==(listat->exp)){ //SI ES IGUAL LO SUMO
listat->co=listat->co-auxt->co; //AQUI SE SUMAN SI SON IGUALES LOS EXPONENTES PARA NO REPETIR TERMINOS
}
else
if (auxt->exp>listat->exp){//SINO LO ANEXO COMO EL MAYOR
auxt->sig=listat;
auxt->ant=listat->ant;
listat->ant->sig=auxt;
listat->ant=auxt;
listat=auxt;}
}//finsi
else
//REVISO SI ES EL DE GRADO MENOR
//..............................................................................
if (auxt->exp<=listat->ant->exp){
if (auxt->exp==listat->ant->exp) {//SI ES IGUAL LO SUMO
listat->ant->co=listat->ant->co-auxt->co;//AQUI SE SUMAN SI SON IGUALES LOS EXPONENTES PARA NO REPETIR TERMINOS
}//FIN SI
else
if (auxt->exp<listat->ant->exp){ //SINO LO ANEXO
auxt->sig=listat;
auxt->ant=listat->ant;
listat->ant->sig=auxt;
listat->ant=auxt;}
}//fin si
else
if ((auxt->exp!=listat->ant->exp)&(auxt->exp)!=(listat->exp)) {
//SI ESTA DENTRO DE LA LISTA
//..............................................................................
tmp=listat->sig;
while (auxt->exp<tmp->exp){
tmp=tmp->sig; //ME DA LA POSICION DONDE DEBO INSERTAR
}//fin mientras
if (tmp->exp==auxt->exp){ //ME DA LA POSICION DONDE DEBE ESTAR
tmp->co=tmp->co-auxt->exp;
}
else
if (tmp->exp<auxt->exp){//SINO LO ANEXO ADELANTE
auxt->sig=tmp;
auxt->ant=tmp->ant;
tmp->ant->sig=auxt;
tmp->ant=auxt;}//FIN SI
}//FIN SI
}
}//fin procedimiento
//ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
void polinomios::separar(){
int exp=0;
//POLI.OUT (FICHERO DE SALIDA)
ofstream out;
out.open("POLI.OUT");
out.close();//CERRAR ARCHIVO
//----------------------------------------------------
ifstream in; //in es el archivo de entrada
//----------- -----------------------------------------
in.open("POLI.IN"); //se abre el archivo
in>>cantidad;
while (cont<=cantidad){ caso1=0;caso2=0;signo='\0';ind=0;i=0;exp=0;co=0;
char a[20]=" ";
in >>a; //SE LEE POLINOMIO ACTUAL
c=a[0]; //SE LE ASIGNA EL PRIMER CARACTER
inicializart();//INICIALIZA EL PUNTERO TERMINO
nuevop();//INGRESA UN NUEVO POLINOMIO
/***********************
*SEPARACION DE TERMINOS*
************************/
while (c!='\0'){
if ((c=='+')||(c=='-')){signo=c;i++;c=a
;caso1=0;caso2=0;exp=0;co=0;ind=0;
}//para el signo
/***************
* CASOS: *
*CASOS SIMPLES *
****************/ //ESTA DE AQUI ERA PARA:
if ((c!='x')&(caso1!=2)){//recueda que la 3er condicion es para que
co=(co*10)+(StrToInt©); //no se confunda con el termino indipendiente
caso1=1;
}//finsi
if ((c=='x')&(caso1==1)){ //se puede hacer otro caso con 0
caso2=1;
caso1=2;
exp=0;
}//finsi
if ((c!='x')&(caso1==2)&(caso2==1)){
exp=(exp*10)+(StrToInt©);
}//fin si
/*************
* CASOS *
* ESPECIALES*
**************/
if ((c=='x')&(caso1==0)){ //se puede hacer otro caso con 0
co=1;
if (signo=='-'){co=(co*-1);}
caso2=1;
caso1=2;
}//finsi
if ((c=='x')&((a[i+1]=='+')||(a[i+1]=='-')||(a[i+1]=='\0')))
{exp=1;
}//FINSI
i++;
c=a;
if ((c=='+')||(c=='-')||c=='\0'){ //hay que mejorarlo por el vacio
if (signo=='-'){co=co*-1;}
x=0;y=0;
nuevot( co, exp);}
}//fin mientras
enlazar();
cont++;
}//fin mientras mayor
//**************DESCOMPOSICION Y OPERACIONES ******************
//------------------------------------------------------------------
char b[20]=" ";
while (c!='#'){
char b[20]=" ";
in >>b;
c=b[0];
inicializart();//INICIALIZA EL PUNTERO TERMINO PARA UN NUEVO POLINOMIO
//------------------------------------------------------------------
if ((b[0]=='A')||(b[0]=='S')||(b[0]=='M')){
insertar(;//CREO UN NODO PARA OPERACION QUE CONTENDRA EL POLINOMIO
}//FIN SI
if ((b[0]!='A')&(b[0]!='S')&(b[0]!='M')&(b[0]!='#')){
co=0;exp=0;caso1=0;caso2=0;
i=0;
c=b[0];
while (c!='\0'){
if ((c=='+')||(c=='-')){signo=c;i++;c=b;caso1=0;caso2=0;exp=0;co=0;ind=0;
}//para el signo
/***************
* CASOS: *
*CASOS SIMPLES *
****************/ //ESTA DE AQUI ERA PARA:
if ((c!='x')&(caso1!=2)){//recueda que la 3er condicion es para que
co=(co*10)+(StrToInt©); //no se confunda con el termino indipendiente
caso1=1;
}//finsi
if ((c=='x')&(caso1==1)){ //se puede hacer otro caso con 0
caso2=1;
caso1=2;
exp=0;
}//finsi
if ((c!='x')&(caso1==2)&(caso2==1)){
exp=(exp*10)+(StrToInt©);
}//fin si
/*************
* CASOS *
* ESPECIALES*
**************/
if ((c=='x')&(caso1==0)){ //se puede hacer otro caso con 0
co=1;
if (signo=='-'){co=(co*-1);}
caso2=1;
caso1=2;
}//finsi
if ((c=='x')&((b[i+1]=='+')||(b[i+1]=='-')||(b[i+1]=='\0')))
{exp=1;
}//FINSI
i++;
c=b;
if ((c=='+')||(c=='-')||c=='\0'){ //hay que mejorarlo por el vacio
if (signo=='-'){co=co*-1;}
x=0;y=0;
nuevot2( co, exp);}
}//fin mientras
enlazar2();
}//FIN SI
}//FIN MIENTRAS
in.close();
}//FIN PROCEDIMINETO
//ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
void polinomios::SUMAR() {
caso1=1;
auxt2=auxl->poli;
auxt=listap->term;
tmp=auxt;
i=tmp->exp;
ind=auxt2->exp;
do {
nuevop(); //CREO UN NUEVO POLINOMIO
do{
if ((tmp->co!=0)||(tmp->exp!=0)) {
co2=tmp->co;
exp2=tmp->exp;
nuevot(co2,exp2);
}
tmp=tmp->sig;
}while (tmp->exp!=i);//FIN REPETIR
do { //REPETIR
co2=auxt2->co;
exp2=auxt2->exp;
nuevot(co2,exp2);
auxt2=auxt2->sig;
}while (auxt2->exp!=ind);//FIN REPETIR
enlazar();
listat=NULL;
//................SE AVANZA EN LOS POLINJOMIOS
auxp2=auxp2->sig;
auxt=auxp2->term;
tmp=auxt;
caso1++;
}while(caso1<=cantidad);//FIN MIENTRAS
cantidad=(cantidad*2);//DUPLICO LA CANTIDAD DE POLINOMIOS
}//FIN PROCEDIMIENTO
//ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
void polinomios::RESTAR(){
caso1=1;
auxt2=auxl->poli;
auxt=listap->term;
tmp=auxt;
i=tmp->exp;
ind=auxt2->exp;
do {
nuevop(); //CREO UN NUEVO POLINOMIO
do{
if ((tmp->co!=0)||(tmp->exp!=0)) {
co2=tmp->co;
exp2=tmp->exp;
nuevotR(co2,exp2);
}
tmp=tmp->sig;
}while (tmp->exp!=i);//FIN REPETIR
do { //REPETIR
co2=auxt2->co;
exp2=auxt2->exp;
nuevotR(co2,exp2);
auxt2=auxt2->sig;
}while (auxt2->exp!=ind);//FIN REPETIR
enlazar();
listat=NULL;
//................SE AVANZA EN LOS POLINJOMIOS
auxp2=auxp2->sig;
auxt=auxp2->term;
tmp=auxt;
caso1++;
}while(caso1<=cantidad);//FIN MIENTRAS
cantidad=(cantidad*2);//DUPLICO LA CANTIDAD DE POLINOMIOS
}//FINPROCEDIMIENTO
//ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
void polinomios::MULTIPLICAR (){}//FINPROCEDIMIENTO
//ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
void polinomios::operacion()//PARA ELEGIR LA OPERACION
{
caso2=0;
auxl=list;
auxp=listap;//EL PRIMER POLINOMIO DE LA LISTA
auxp2=auxp;
do{
if (auxl->operacion[0]=='A'){ SUMAR(); }//FINSI
if (auxl->operacion[0]=='S'){RESTAR(); }//FINSI
if (auxl->operacion[0]=='M'){MULTIPLICAR(); }//FINSI
auxl=auxl->sig;
caso2++;
} while(caso2<=nope);
auxp=listap;
}//FIN PROCEDIMIENTO
Este es el error que bota:
4 D:\Dev-Cpp\include\c++\3.4.2\backward\fstream.h:31, from F:\Nueva carpeta\principal.cpp In file included from D:/Dev-Cpp/include/c++/3.4.2/backward/fstream.h:31, from F:\Nueva carpeta\principal.cpp
aclaro la libreria esta declarada tanto en el principal como en el .h
a los que tomen el codigo les explico ese codigo lo hice primero en c++builder y ahora lo trato de traducir a dev c++ muchas gracias por atender esto y aquien tome el codigo suerte