Advertisement
easklund

C poly

Oct 11th, 2017
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. #include <stdbool.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <string.h>
  6.  
  7. #include "error.h"
  8. #include "poly.h"
  9.  
  10. int i = 0;
  11. int j = 0;
  12.  
  13. typedef struct poly_t poly_t;
  14. struct poly_t {
  15. int* coef;
  16. int* expo;
  17. char* sign;
  18. int size;
  19. };
  20.  
  21. poly_t* new_poly_from_string(const char* c){
  22. poly_t *p = malloc(sizeof(poly_t));
  23. p->coef = malloc(sizeof(p->coef));
  24. p->expo = malloc(sizeof(p->expo));
  25. p->sign = malloc(sizeof(p->sign));
  26.  
  27. //int b = 0;
  28. int size = 0;
  29. int index = strlen(c);
  30. for (i = 0; i < index; i++){ //while (c[index] != EOF){
  31. if (c[i] == '\n'){
  32. return p;
  33. }
  34. //(x^2 - 7x + 1)
  35. if (c[i] == 'x'){
  36. if (c[i+1] == '^'){
  37. printf("c+1: %c\n", c[i+1]);
  38. printf("c+2: %c\n", c[i+2]); // När denna skrivs ut blir den 2
  39. p->coef[size] = 1;
  40. printf("Coeff = 0\n");
  41. p->expo[size] = c[i+2]; //När denna skrivs ut iraden under blir den 50
  42. printf("hej:%d\n", p->expo[size]);
  43. i+=2;
  44. } else {
  45. p->coef[size] = 0;
  46. p->expo[size] = c[0];
  47. i+=1;
  48. }
  49. if (i > 1){
  50. if (c[i-2] == '+'){
  51. p->sign[size] = '+';
  52. }else {
  53. p->sign[size] = '-';
  54. }
  55. }
  56. }else if (c[i] == ' '){
  57. size++;
  58. p->coef = realloc(p->coef, sizeof(int));
  59. p->expo = realloc(p->expo, sizeof(int));
  60. p->sign = realloc(p->sign, sizeof(int));
  61. }
  62. // printf("hej %c\n", c[i]);
  63. }
  64. p->size = size;
  65. return p;
  66. }
  67.  
  68.  
  69. void free_poly(poly_t* p){
  70. free(p->coef);
  71. free(p->expo);
  72. free(p->sign);
  73. free(p);
  74. }
  75.  
  76. poly_t* mul(poly_t* p1, poly_t* p2){
  77. int s = 0;
  78. poly_t *p = malloc(sizeof(*p));
  79. p->coef = malloc(sizeof(p->coef));
  80. p->expo = malloc(sizeof(p->expo));
  81. p->sign = malloc(sizeof(p->sign));
  82. for (i=0; i < p1->size; i ++){
  83. for (j=0; j < p2->size; i++){
  84. p->coef[s] = p1->coef[i]*p2->coef[j];
  85. p->expo[s] = p1->expo[i]+p2->expo[j];
  86. if (p1->sign[i] != p2->sign[j]){
  87. p->sign[s] = '-';
  88. }else {
  89. p->sign[s] = '+';
  90. }
  91.  
  92.  
  93. }
  94. }
  95. return p;
  96. }
  97.  
  98. void print_poly(poly_t* p){
  99. int index = p->size;
  100. printf("storlek: %d\n", index);
  101. for (i = 0; i < index; i++){
  102. printf("coef= %d\n", p->coef[i]);
  103. printf("expo= %d\n", p->expo[i]);
  104. printf("sign= %d\n", p->sign[i]);
  105. }
  106.  
  107.  
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement