Advertisement
Guest User

PolinoMios

a guest
Mar 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.03 KB | None | 0 0
  1. //
  2. //  main.c
  3. //  Suma de Polinomios
  4. //
  5. //  Created by Joaquin on 31/3/15.
  6. //  Copyright (c) 2015 Joaquin Gimenez. All rights reserved.
  7. //
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12.  
  13. typedef struct nodo poli_t;
  14.  
  15. typedef struct nodo {
  16.     int expon;
  17.     int coef;
  18.     poli_t *sgte;
  19. } poli_t;
  20.  
  21. void addNode(poli_t **, poli_t *);
  22. void printPol(poli_t *, char);
  23. poli_t *sumaPoli(poli_t *, poli_t *);
  24.  
  25.  
  26.  
  27. int main(int argc, const char * argv[]) {
  28.     poli_t *a = NULL, *b = NULL, *c=NULL;
  29.     poli_t *tmp = NULL;
  30.     int op, co, ex;
  31.    
  32.     do {
  33.         printf("\nMenu \n1)Agregar un elemento al polinomio A \n2)Agregar un elemento al pelinomio a B \n3)Imprimir polinomios \n4)Sumar e imprimir polinomios \nOpcion: ");
  34.         scanf("%d", &op);
  35.         switch (op) {
  36.             case 1:
  37.                 printf("\nPolinomio A: Agregar coeficiente -> ");
  38.                 scanf("%d",&co);
  39.                
  40.                 printf("Polinomio A: Agregar exponente -> ");
  41.                 scanf("%d", &ex);
  42.                
  43.                 tmp= (poli_t *) malloc(sizeof(struct nodo));
  44.                 if (tmp) {
  45.                     tmp->expon = ex;
  46.                     tmp->coef = co;
  47.                     tmp->sgte = NULL;
  48.                 } else{
  49.                     printf("ERROR, no se ha podido asignar a la memoria.");
  50.                 }
  51.                 addNode(&a , tmp);
  52.                 printPol(a, 'a');
  53.                 break;
  54.             case 2:
  55.                 printf("\nPolinomio B: Agregar coeficiente -> ");
  56.                 scanf("%d",&co);
  57.                
  58.                 printf("Polinomio B: Agregar exponente -> ");
  59.                 scanf("%d", &ex);
  60.                
  61.                 tmp= (poli_t *) malloc(sizeof(struct nodo));
  62.                 if (tmp) {
  63.                     tmp->expon = ex;
  64.                     tmp->coef = co;
  65.                     tmp->sgte = NULL;
  66.                 } else{
  67.                     printf("ERROR, no se ha podido asignar a la memoria.");
  68.                 }
  69.                 addNode(&b , tmp);
  70.                 printPol(b, 'b');
  71.                 break;
  72.  
  73.             case 3:
  74.                 printPol(a, 'a');
  75.                 printPol(b, 'b');
  76.                 printPol(c, 'c');
  77.                 break;
  78.             case 4:
  79.                 printf("Suma de pol: ");
  80.                 c=sumaPoli(a,b);
  81.                 printPol(c, 'c');
  82.                 break;
  83.             case 0:
  84.                 break;
  85.             default:
  86.                 printf("Error. Opcion %d es invalida.", op);
  87.                 break;
  88.         }
  89.     } while (op != 0);
  90.     return 0;
  91. }
  92.  
  93.  
  94. void addNode (poli_t ** ptr, poli_t * newNode){
  95.     poli_t ** pp, *actual;
  96.     pp = ptr;
  97.     while (((actual=*pp) != NULL) && (actual->expon > newNode->expon)) {
  98.         pp = &actual->sgte;
  99.     }
  100.     *pp = newNode;
  101.     newNode->sgte = actual;
  102. }
  103.  
  104.  
  105. void printPol (poli_t *p, char x){
  106.     if (!p) {
  107.         printf("\nEl polinmio %c esta vacio", x);
  108.     } else{
  109.         printf("\nPolinomio %c -> ", x);
  110.         while (p) {
  111.             if (p->sgte) {
  112.                 if (p->expon == 1) {
  113.                     printf("%d x + ", p->coef);
  114.                 } else {
  115.                     printf("%d x^%d +",p->coef, p->expon );
  116.                 }
  117.             } else {
  118.                 if (p->expon == 0) {
  119.                     printf("%d ", p->coef);
  120.                 } else if (p->expon == 1) {
  121.                     printf("%d x + ", p->coef);
  122.                 } else {
  123.                     printf("%d x^%d +",p->coef, p->expon );
  124.                 }
  125.             }
  126.             p = p->sgte;
  127.         }
  128.     }
  129. }
  130.  
  131. poli_t *sumaPoli (poli_t *a, poli_t *b){
  132.     void agregar (int, int, poli_t **);
  133.     poli_t *ultimo, *primero, *temp;
  134.     ultimo = (poli_t *)malloc(sizeof(struct nodo));
  135.     if (!ultimo) {
  136.         printf("\nERROR. No se pudo asignar espacio de memoria para el polinomio c");
  137.     } else {
  138.         primero = ultimo;
  139.         while (a && b) {
  140.             if (a->expon < b->expon) {
  141.                 agregar(b->coef, b->expon, &ultimo);
  142.                 b = b->sgte;
  143.             } else if (a->expon == b->expon) {
  144.                 agregar(a->coef + b->coef, a->expon, &ultimo);
  145.                 a = a->sgte;
  146.                 b = b->sgte;
  147.             } else {
  148.                 agregar(a->coef, a->expon, &ultimo);
  149.                 a = a->sgte;
  150.             }
  151.         }
  152.         for (; a; a=a->sgte) {
  153.             agregar(a->coef, a->expon, &ultimo);
  154.         }
  155.         for (; b; b=b->sgte) {
  156.             agregar(b->coef, b->expon, &ultimo);
  157.         }
  158.         ultimo->sgte = NULL;
  159.         temp = primero;
  160.         primero = primero->sgte;
  161.         free(temp);
  162.         return primero;
  163.     }
  164.     return NULL;
  165. }
  166.  
  167. void agregar (int co, int ex, poli_t **q) {
  168.     poli_t * temp;
  169.     temp = (poli_t *)malloc(sizeof(struct nodo));
  170.     if (!temp) {
  171.         printf("ERROR Critico. No se ha asignado memoria en el polinomio c!");
  172.         exit(1);
  173.     }
  174.     temp->coef = co;
  175.     temp->expon = ex;
  176.     (*q)->sgte = temp;
  177.     *q = temp;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement