InicioCiencia Educacionprograma con listas enlasadas operaciones con polinomios

programa con listas enlasadas operaciones con polinomios

Pues este programa consta de tres archivos un header y dos archivos .cppTienen q separar los archivos vean bien el codigo
ISC... ESCOM IPN
el header define la el TDA

//ListaEnlasada.h
 #include <stdio.h>
 #include <stdlib.h>
 #include "square.h"

typedef struct Nodo {
        item *dato;
        struct Nodo *siguiente;
        }NODO;
 
 void InsertarLista(NODO **cab, item *x);
 void ImprimirLista(NODO *primero);
 void InsertarOrden(NODO **cab,item *valor) ;     
Despues vamos a definir las funciones
//ListaEnlasada.cpp
typedef struct termino
     {
     float lit;
     float exp;    
     }Termino;

typedef Termino item;
#include "ListaEnlasada.h"

void InsertarLista(NODO **cab, item *x)
{
     NODO *aux = (NODO *)malloc(sizeof(NODO));
     aux->dato = x;
     aux->siguiente = *cab;
     *cab = aux;
}
 
 //------------------------MOSTRAR LISTA------------------
 void ImprimirLista(NODO *cab) 
 {
      system("cls");
      if(cab==NULL)
      {
      printf("La lista esta vacian");
      }
      else{
      printf("nel polinomio es:n");
      printf("n");
      while (cab != NULL) {
            printf( "%2.2f",cab->dato->lit);
            printf( "x^");
            printf( "%2.2f  +",cab->dato->exp);
            cab = cab->siguiente;
      }}
 }
 
void InsertarOrden(NODO **cab,item *valor)
    {                    
    NODO *nuevo,*back,*next;
    nuevo=(NODO *) malloc (sizeof(NODO));
    if(nuevo != NULL)
    {
       nuevo->dato=valor;
       nuevo->siguiente=NULL;
       back=NULL;
       next=(*cab);
       while(next != NULL && (valor->exp) < next->dato->exp)
          {
           back=next;
           next=next->siguiente;
          }
       if(back==NULL)
          {
           nuevo->siguiente=(*cab);
           (*cab)=nuevo;
          }
       else
       {
       back->siguiente=nuevo;
       nuevo->siguiente=next;
       }
    }
    else{printf("no hay espacio disponible en memoria");}
    }
Y por ultimo el programa principal "main"
#include "ListaEnlasada.cpp"
#include <windows.h>
void Sumarp(NODO *polmay,NODO *polmen);
void Multp(NODO *cab,NODO *cab2);
void derip(NODO **cab);
void Intp(NODO **cab);
char menu(void);
int polin(NODO **cab);

main()
{
char opc;
int a,b;
NODO *cab,*cab2; 
char opc2;
cab=NULL;
cab2=NULL;
puts("ingresa el polinomio numero 1");
a=polin(&cab);
puts("ingresa el polinomio numero 2");
b=polin(&cab2);

do{
  opc=menu();
  switch (opc)
      {
      case 'i':ImprimirLista(cab);
      case 'a':{
           if(a>b)
           Sumarp(cab,cab2);
           else
           Sumarp(cab2,cab);
           break;}
      case 'b':{
           Multp(cab,cab2);
           break;}
      
      //      Derivar 
      case 'c':
           {
           fflush(stdin);
           do
             {
             system("cls");
             puts("deseas obtener la derivada de: ");
             puts(" a) La derivada del primer polinomio");
             puts(" b) La derivada del segundo polinomio");
             puts(" c) Regresar menu principal");
             opc2=getchar();fflush(stdin);
             switch (opc2)
                    {
                    case 'a':{derip(&cab);break;}
                    case 'b':{derip(&cab2);break;}
                    case 'c':{printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");}
                   default: {printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");}     
                   }
              }while(opc2!='c');
           break;
           }
      
      //        integral     
      case 'd':fflush(stdin);
           do
             {
             system("cls");
             puts("deseas obtener la integral de: ");
             puts(" a) La integral del primer polinomio");
             puts(" b) La integral del segundo polinomio");
             puts(" c) Regresar menu principal");
             opc2=getchar();fflush(stdin);
             switch (opc2)
                    {
                    case 'a':{Intp(&cab);break;}
                    case 'b':{Intp(&cab2);break;}
                    case 'c':{printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");}
                   default: {printf(".");printf("..");Sleep(250);printf("...");Sleep(250);printf("....");}     
                   }
              }while(opc2!='c');
           break;
      }
  }while(opc!='e');

}

char menu(void)
{
char opc;
system("cls");
marco(1,77,1,24);
gotoxy(5,6);puts("Este programa realiza operaciones con polinomios n");
gotoxy(5,7);puts("Introduce el primer polinomio");
gotoxy(5,9);puts("   Elige una opcion a realizar n");
gotoxy(5,11);puts("    a) Sumar polinomios n");
gotoxy(5,12);puts("    b) Multiplicar polinomios n");
gotoxy(5,13);puts("    c) Derivar polinomios n");
gotoxy(5,14);puts("    d) Integrar polinomiosn");
gotoxy(5,16);puts("    e) Salirn");
return opc=getchar();
}
//---------Sumar polinomio--------------------------

void Sumarp(NODO *pol1,NODO *pol2)
   {
   int flag=0;
   NODO *suma=NULL,aux,*aux1;
   aux1=pol2;
   while(pol1 != NULL)
      {
      pol2=aux1;
      aux.dato=(item *) malloc (sizeof(item));
      while(pol2 != NULL)
         {
         if(pol1->dato->exp == pol2->dato->exp )
            {
            aux.dato->lit=pol1->dato->lit + pol2->dato->lit;
            aux.dato->exp=pol1->dato->exp;
            InsertarOrden(&suma,aux.dato);
            flag=1;
            }
            pol2=pol2->siguiente;
         }
         if(flag==0)
            {
            aux.dato->lit=pol1->dato->lit;
            aux.dato->exp=pol1->dato->exp;
            InsertarOrden(&suma,aux.dato);
            }
         pol1=pol1->siguiente;
         flag=0;
      }ImprimirLista(suma);printf("n");system("pause");
   }

void Multp(NODO *pol1,NODO *pol2)
{
int flag=0;
   NODO *mult=NULL,aux,*aux1;
   aux1=pol2;
   while(pol1 != NULL)
      {
      pol2=aux1;
      aux.dato=(item *) malloc (sizeof(item));
      while(pol2 != NULL)
         {
         
            aux.dato->lit=pol1->dato->lit * pol2->dato->lit;
            aux.dato->exp=pol1->dato->exp + pol2->dato->exp;
            InsertarOrden(&mult,aux.dato);
            flag=1;
            pol2=pol2->siguiente;
         }
         pol1=pol1->siguiente;
      }ImprimirLista(mult);printf("n");system("pause");
   }

//------esta funcion calcula la derivada del polinomio---------//
void derip(NODO **cab)
{
 ImprimirLista(&(**cab));
 NODO *auxiliar; /* lo usamos para recorrer la lista */
      auxiliar = (*cab);
      printf("nla derivada es :n");  
      printf("n");
      while (auxiliar!=NULL) {
            printf( "%2.2f",(auxiliar->dato->lit)*(auxiliar->dato->exp));
            printf( "x^");
            printf( "%2.2f  +",(auxiliar->dato->exp)-1);
            auxiliar = auxiliar->siguiente;
      }printf("n");system("pause");
 }


//------esta funcion calcula la integral del polinimo----------//
void Intp(NODO **cab)
{
 ImprimirLista(&(**cab));
 NODO *auxiliar; /* lo usamos para recorrer la lista */
      auxiliar = (*cab);
      printf("nLa integral es :n");
      printf("n");
      while (auxiliar!=NULL) {
            printf( "%2.2f",(auxiliar->dato->lit));
            printf( "x^");
            printf( "%2.2f  +",(auxiliar->dato->exp)+1);
            printf( " / ");printf( "%2.2f  +",(auxiliar->dato->exp)+1);
            auxiliar = auxiliar->siguiente;
      }printf("n");system("pause");
}

//-------funcion lee un polinomio-------------------------------//
int polin(NODO **cab)
{
int cont=1;
char salir;
NODO nuevo,*aux;
aux=(*cab);
do{
   printf("n  introduce el coheficiente del %d termino : ",cont);
   nuevo.dato=(item *) malloc (sizeof(item));
   scanf("%f",&(nuevo.dato->lit));
   fflush(stdin);
   printf("  introduce el exponente del %d termino : ",cont);
   scanf("%f",&(nuevo.dato->exp));
   fflush(stdin);
   InsertarOrden(&(*cab),nuevo.dato);
   ImprimirLista((*cab));
   puts("n desea introducir otro termino presiona "s"  para salir presiona "n"");
   salir=getchar();
   cont++;
  }while(salir!='n');
}
Por ultimo una pequeña libreria creada por mi para dar formato a los programas
//square.h

#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define f1 'xba'
#define f2 'xbb'
#define f3 'xbc'
#define f4 'xcd'
#define f5 'xc8'
#define f6 'xc9'
void marco(int,int,int,int);
void marcob(int,int,int,int);//marco negro
void marcoc(int hor,int hmax,int ver,int vmax);
void cuadro(int hor,int xmax,int ver,int ymax);
void cuadro2(int hor,int hmax,int ver,int vmax);
void cuadro3(int hor,int hmax,int ver,int vmax);
void cuadro4(int hor,int hmax,int ver,int vmax);
void movimiento(int x,int y);
void gotoxy(int,int);
//marco completo
void marco(int hor,int hmax,int ver,int vmax)
{
     int vmin=ver,hmin=hor,cont=7;
     gotoxy(hor,ver);printf("%c",f6);
     for(ver=ver+1;ver<=vmax;ver++){
     gotoxy(hor,ver);printf("%c",f1);
}
     gotoxy(hor,ver);printf("%c",f5);
     for(hor=hor+1;hor<=hmax;hor++){
     gotoxy(hor,ver);printf("%c",f4);
}
     gotoxy(hor,ver);printf("%c",f3);
     for(ver=vmax;ver>vmin;ver--){
     gotoxy(hor,ver);printf("%c",f1);
}
     cont=32;
     gotoxy(hor,ver);printf("%c",f2); 
     for(hor=hmax;hor>hmin;hor--){
     gotoxy(hor,ver);printf("%c",f4);
}
}
//marco negro
void marcob(int hor,int hmax,int ver,int vmax)
{
    int vmin=ver,hmin=hor,x1=hor;
    for(vmin=ver;vmin<=vmax;vmin++)
       {
       for(hmin=hor;hmin<=hmax;hmin++)
       {
       gotoxy(hor,ver);
       printf(" ");
       hor=hor+1;
       }
       hor=x1;
       ver++;
       }
       }
 //marco abierto en un extremo   
void marcod(int hor,int hmax,int ver,int vmax)
{
     int vmin=ver,hmin=hor;
     gotoxy(hor,ver);printf("%c",f6);
     for(ver=ver+1;ver<=vmax;ver++){
     gotoxy(hor,ver);printf("%c",f1);
}
     gotoxy(hor,ver);printf("%c",f5);
     for(hor=hor+1;hor<=hmax;hor++){
     gotoxy(hor,ver);printf("%c",f4);
}
     gotoxy(hor,ver);printf("%c",f2);
     for(ver=vmax;ver>vmin;ver--){
     gotoxy(hor,ver);printf(" ");
}
     gotoxy(hor,ver);printf("%c",f3); 
     for(hor=hmax;hor>hmin;hor--){
     gotoxy(hor,ver);printf("%c",f4);
}
}    
//abierto por la derecha
void marcoc(int hor,int hmax,int ver,int vmax)
{
     int vmin=ver,hmin=hor;
     gotoxy(hor,ver);printf("%c",f5);
     for(ver=ver+1;ver<=vmax;ver++){
     gotoxy(hor,ver);printf(" ");
}
     gotoxy(hor,ver);printf("%c",f6);
     for(hor=hor+1;hor<=hmax;hor++){
     gotoxy(hor,ver);printf("%c",f4);
}
     gotoxy(hor,ver);printf("%c",f3);
     for(ver=vmax;ver>vmin;ver--){
     gotoxy(hor,ver);printf("%c",f1);
}
     gotoxy(hor,ver);printf("%c",f2); 
     for(hor=hmax;hor>hmin;hor--){
     gotoxy(hor,ver);printf("%c",f4);
}

//abierto por arriba
void marcoe(int hor,int hmax,int ver,int vmax)
{
     int vmin=ver,hmin=hor;
     gotoxy(hor,ver);printf("%c",f2);
     for(ver=ver+1;ver<=vmax;ver++){
     gotoxy(hor,ver);printf("%c",f1);
}
     gotoxy(hor,ver);printf("%c",f5);
     for(hor=hor+1;hor<=hmax;hor++){
     gotoxy(hor,ver);printf("%c",f4);
}
     gotoxy(hor,ver);printf("%c",f3);
     for(ver=vmax;ver>vmin;ver--){
     gotoxy(hor,ver);printf("%c",f1);
}
     gotoxy(hor,ver);printf("%c",f6); 
     for(hor=hmax;hor>hmin;hor--){
     gotoxy(hor,ver);printf(" ");
}
}
void cuadro(int hor,int hmax,int ver,int vmax)
{
     marco(hor,hmax,ver,vmax);
     marcob(hor+1,hmax-1,ver+1,vmax);
}
void cuadro2(int hor,int hmax,int ver,int vmax)
{
     marcoc(hor,hmax,ver,vmax);
     marcob(hor+1,hmax-1,ver+1,vmax);
}

void cuadro3(int hor,int hmax,int ver,int vmax)
{
     marcod(hor,hmax,ver,vmax);
     marcob(hor+1,hmax-1,ver+1,vmax);
}
void cuadro4(int hor,int hmax,int ver,int vmax)
{
     marcoe(hor,hmax,ver,vmax);
     marcob(hor+1,hmax-1,ver+1,vmax);
}

void gotoxy(int x,int y)
{
     HANDLE hConsoleOutput;
     COORD cursor_Pos={x,y};
     hConsoleOutput=GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleCursorPosition(hConsoleOutput,cursor_Pos);
     }

Datos archivados del Taringa! original
0puntos
0visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

t
thor11🇦🇷
Usuario
Puntos0
Posts3
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.