Advertisement
eduardovp97

ex5.c

Oct 24th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "listas.h"
  4.  
  5. void sumar(TLista *x, TLista *y, TLista *c);
  6. void restar(TLista *x, TLista *y, TLista *c);
  7.  
  8. int main(){
  9.    
  10.     TLista a,b,c;
  11.  
  12.     init_list(&a);
  13.     init_list(&b);
  14.     init_list(&c);
  15.     //1234
  16.     insert_list_final(&a,1);
  17.     insert_list_final(&a,2);
  18.     insert_list_final(&a,3);
  19.     insert_list_final(&a,4);
  20.     print_list(&a);
  21.     //219
  22.     insert_list_final(&b,2);
  23.     insert_list_final(&b,1);
  24.     insert_list_final(&b,9);
  25.     print_list(&b);
  26.     sumar(&a,&b,&c);
  27.     print_list(&c);
  28.     init_list(&c);
  29.     restar(&a,&b,&c);
  30.     print_list(&c);
  31.     return 0;
  32. }
  33.  
  34. void sumar(TLista *x, TLista *y, TLista *c){
  35.     int carry = 0;
  36.     TLista a,b;
  37.  
  38.     init_list(&a);
  39.     init_list(&b);
  40.    
  41.     invertir(x,&a);
  42.     invertir(y,&b);
  43.     printf("Hola\n");
  44.     TNode *n1 = malloc(sizeof(TNode));
  45.     TNode *n2 = malloc(sizeof(TNode));
  46.     n1 = a.first; // a->first == (*a.first)
  47.     n2 = b.first;
  48.     while(n1 != NULL && n2 != NULL){
  49.         insert_list_first(c,(n1->info + n2->info + carry)%10);
  50.         carry = (n1->info + n2->info + carry) / 10;
  51.         n1 = n1->next;
  52.         n2 = n2->next;
  53.     }
  54.     while(n1 != NULL){
  55.         insert_list_first(c,(n1->info + carry) % 10);
  56.         carry = (n1->info + carry) / 10;
  57.         n1 = n1->next;
  58.     }
  59.     while(n2 != NULL){
  60.         insert_list_first(c,(n2->info + carry) % 10);
  61.         carry = (n2->info + carry) / 10;
  62.         n2 = n2->next;
  63.     }
  64. }
  65.  
  66. void restar(TLista *x, TLista *y, TLista *c){
  67.     int borrow=0;
  68.     TLista a,b;
  69.     init_list(&a);
  70.     init_list(&b);
  71.     invertir(x,&a);
  72.     invertir(y,&b);
  73.     TNode *n1 = (TNode*)malloc(sizeof(TNode));
  74.     TNode *n2 = (TNode*)malloc(sizeof(TNode));
  75.     n1 = a.first; // a->first == (*a.first)
  76.     n2 = b.first;
  77.     while(n1!= NULL && n2!=NULL){
  78.        
  79.         if(n1->info < n2->info){
  80.             borrow=1;
  81.             n1->next->info--;
  82.         }
  83.         else borrow=0;
  84.         insert_list_first(c,(10*borrow + n1->info) - n2->info);
  85.         n1=n1->next;
  86.         n2=n2->next;
  87.     }
  88.     while(n1!=NULL){
  89.         if(borrow==0){
  90.             insert_list_first(c,n1->info);
  91.             n1= n1->next;
  92.         }
  93.         else{
  94.             if(n1->info - borrow ==0)
  95.                 break;
  96.             else
  97.                 insert_list_first(c,n1->info);
  98.         }
  99.     }
  100.     while(n2!=NULL){
  101.         if(borrow==0){
  102.             insert_list_first(c,n2->info);
  103.             n2= n2->next;
  104.         }
  105.         else{
  106.             if(n2->info - borrow ==0)
  107.                 break;
  108.             else
  109.                 insert_list_first(c,n2->info);
  110.         }
  111.     }
  112.  
  113. }
  114.  
  115. void multiplicar(TLista *x, TLista *y, TLista *c){
  116.     int carry = 0;
  117.     TLista a,b,d,aux,aux2;
  118.  
  119.     init_list(&a);
  120.     init_list(&b);
  121.     init_list(&d);
  122.     init_list(&aux);
  123.     init_list(&aux2);
  124.  
  125.     invertir(x,&a);
  126.     invertir(y,&b);
  127.  
  128.     TNode *n = malloc(sizeof(TNode));
  129.     n = b->first;
  130.     int i = 0;
  131.     while(n != NULL){
  132.         multiplicarAux(a,n->info,&aux);
  133.         sumar(c,&aux,&aux2);
  134.         init_list(c);
  135.         sumar(&aux2,&aux3,c);
  136.         init_list(&aux);
  137.         init_list(&aux2);
  138.         init_list(&aux3);
  139.         n = n->next;
  140.     }
  141.  
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement