daily pastebin goal
38%
SHARE
TWEET

Untitled

a guest Feb 22nd, 2019 78 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.   Autor:         COMPLETAR!
  3.   RA:            COMPLETAR!
  4.   Disciplina:    MC202
  5.   Turma:         COMPLETAR!
  6.  
  7.   Tarefa 10
  8.   Segundo semestre de 2012
  9.  
  10. */
  11.  
  12. /*
  13.  * multPoli.c - Arquivo para implementação de polinômios em
  14.  *              múltiplas variáveis.
  15.  */
  16.  
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include "balloc.h"
  20. #include "multPoli.h"
  21.  
  22. typedef enum {tipoPoli, tipoConst} tipoNo;
  23.  
  24. typedef struct Termo {
  25.   tipoNo tipo;
  26.   union {
  27.     struct Termo *poli;
  28.     float coef;
  29.   } info;
  30.   int expo;
  31.   struct Termo *prox;
  32. } Termo, *ImplPolinomio;
  33.  
  34.  
  35. /****************************************************************************/
  36.  
  37.  
  38.  
  39. Polinomio CriaTermo(float coef, int exps[], int numVars)
  40. {
  41.     ImplPolinomio *r, p, q;
  42.     int i=0;
  43.     printf("exps: %d %d %d", exps[0], exps[1], exps[2]);
  44.     r=&p;
  45.       //if(numVars != -1)
  46.       // {
  47.         while (i<numVars-1)
  48.         {
  49.             q=MALLOC(sizeof(Termo));
  50.         if(i==0)
  51.         {
  52.           // r = &q; //guarda posição inicial do poli
  53.           // return (Polinomio *) r;
  54.         }
  55.             q->tipo = tipoPoli;
  56.             q->expo = exps[i];
  57.         printf("expo %d: %d\n", i, q->expo);
  58.             q->prox = NULL;
  59.             if(i!=0)
  60.                 (p)->info.poli = q;
  61.             p = q;
  62.             i++;
  63.         }
  64.       // }
  65.     q=MALLOC(sizeof(Termo));
  66.     q->tipo = tipoConst;
  67.     q->info.coef = coef;
  68.     q->expo = exps[i];
  69.     printf("expo %d: %d\n", i, q->expo);
  70.     printf("coef: %f\n", q->info.coef);
  71.     q->prox = NULL;
  72.     if(numVars !=1)
  73.         (p)->info.poli = q;
  74.     else
  75.         p=q;
  76.  
  77.     for(i=0; i<numVars; i++)
  78.     {
  79.       printf("expo %d: %d\n", i, (*r)->expo);
  80.       if((*r)->tipo == tipoConst)
  81.     printf("coef: %f\n", q->info.coef);
  82.       else
  83.     (*r)=(*r)->info.poli;
  84.     }
  85.       return (Polinomio*) r;
  86. }
  87.  
  88. Polinomio CriaPolinomioNulo()
  89. {
  90.     return NULL;
  91. }
  92.  
  93. Boolean PolinomioNulo(Polinomio p)
  94. {
  95.     if(p==NULL)
  96.         return true;
  97.     else
  98.         return false;
  99. }
  100.  
  101. void LiberaPolinomio(Polinomio p)
  102. /* Libera toda a memória dinâmica ocupada por um polinômio.               */
  103. {
  104.   printf("não implementada");
  105. }
  106.  
  107. Polinomio CopiaPolinomio(Polinomio p)
  108.   /* Devolve uma cópia do polinômio p, sem alterá-lo. */
  109. {
  110.   return NULL;
  111. }
  112.  
  113. Polinomio SomaPolinomios(Polinomio a, Polinomio b)
  114. /* Devolve a soma dos polinômios 'a' e 'b'. Não altera os polinômios      */
  115. /* dados. Termos nulos não são inseridos no resultado.                    */
  116. {
  117.   ImplPolinomio *copy = (ImplPolinomio *)a;
  118.   ImplPolinomio  *be = (ImplPolinomio *) b;
  119.   int i=0;
  120.   if(copy==NULL)
  121.     {
  122.       printf("bolinha ");
  123.       *copy = MALLOC(sizeof(Termo));
  124.       while(i<3)
  125.     {
  126.       if((*be)->tipo = tipoConst)
  127.         {
  128.           (*copy)->tipo = tipoConst;
  129.           (*copy)->expo = (*be)->expo;
  130.           (*copy)->prox = NULL;
  131.           (*copy)->info.coef = (*be)->info.coef;
  132.         }
  133.       else
  134.         {
  135.           (*copy)->tipo = tipoPoli;
  136.           (*copy)->expo = (*be)->expo;
  137.           (*copy)->prox = NULL;
  138.           (*copy)->info.poli = (*be)->info.poli;
  139.         }
  140.      
  141.     }
  142.     }
  143.   else
  144.     {
  145.       printf("ERROR");
  146.       return NULL;
  147.     }
  148.       //(ImplPolinomio *)a = (ImplPolinomio *) b;
  149.   return (Polinomio *) *copy;
  150. }
  151.  
  152. Polinomio MultPolinomios(Polinomio a, Polinomio b)
  153. /* Devolve o produto dos polinômios 'a' e 'b', sem alterá-los */
  154. {
  155.   return NULL;
  156. }
  157.  
  158. /****************************************************************************/
  159.  
  160.  
  161. void ImprimePolinomioAux(Polinomio p, char *vars, int numVars, int indVar);      
  162. void ImprimeTermo(Termo *t, char *vars, int numVars, int indVar, Boolean primeiro);
  163.  
  164. void ImprimePolinomio(Polinomio p, char *vars) {
  165.  
  166.   if (p == NULL)
  167.     printf("0");
  168.   else
  169.     ImprimePolinomioAux(p,vars,strlen(vars),0);
  170.  
  171.   printf("\n");
  172.  
  173. } // ImprimePolinomio
  174.  
  175.  
  176. void ImprimePolinomioAux(Polinomio p, char *vars, int numVars, int indVar) {
  177.  
  178.   ImplPolinomio pp;
  179.   Boolean primeiro=true;
  180.  
  181.   for (pp=p; pp!=NULL; pp=pp->prox) {
  182.     ImprimeTermo(pp,vars,numVars,indVar,primeiro);
  183.     primeiro = false;
  184.   }
  185.  
  186. } // ImprimePolinomioAux
  187.  
  188.  
  189. void ImprimeTermo(Termo *t, char *vars, int numVars, int indVar, Boolean primeiro) {
  190.  
  191.   int expo = t->expo;
  192.   Boolean constCoef = (t->tipo==tipoConst);
  193.   char var = vars[indVar];
  194.  
  195.   if (constCoef) {
  196.     float coef = t->info.coef;
  197.     if (coef<0.0) {
  198.       printf(" - ");
  199.       coef = -coef;
  200.     } else {
  201.       if (!primeiro)
  202.     printf(" + ");
  203.     }
  204.     if (expo==0)
  205.       printf("%3.1f", coef);
  206.     else {          // expo>0
  207.       if (coef!=1.0)
  208.     printf("%3.1f", coef);
  209.     }
  210.   } else { // coef tipoPoli
  211.     if (primeiro)
  212.       printf("(");
  213.     else
  214.       printf(" + (");
  215.     ImprimePolinomioAux(t->info.poli,vars,numVars,indVar+1);
  216.     printf(")");
  217.   }
  218.   if (expo==1)
  219.     printf("%c",var);
  220.   else if (expo>1)
  221.     printf("%c^%d",var,expo);
  222.  
  223.  
  224. } // ImprimeTermo
  225.  
  226.  
  227.  
  228. /*Imprime Termo*/ //PARA TESTES
  229. /*
  230. void ImprimePolinomio(Polinomio p, char *vars)
  231. {
  232.   printf("%s \n", vars);
  233.   ImplPolinomio q= p;
  234.   int i=0;
  235.   int numvars = strlen(vars);
  236.   for(i=0; i<numvars; i++)
  237.     {printf("expo %d: %d\n", i, q->expo);
  238.       if(q->tipo == tipoConst)
  239.     printf("coef: %f\n", q->info.coef);
  240.       else
  241.     q=q->info.poli;
  242.     }
  243. }
  244. */
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top