Advertisement
Nikmosi

pz1 5b v2

Feb 28th, 2021
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <cstdio>
  2.  
  3. struct list
  4. {
  5.    double v;
  6.    list* n;
  7.    list* p;
  8. };
  9.  
  10.  
  11. /// Формирует list из файла l.txt
  12. int Input(list** l, const char* fileName);
  13.  
  14. /// Вычисляет значение (X1 + Xn)(X2 + X(n - 1))...(X(n - 1) + X2)(Xn + X1)
  15. double GetResult(list* l);
  16.  
  17. int main()
  18. {
  19.    list* l;
  20.    Input(&l, "E:\\code projects\\_visual studio\\LinkedList\\Debug\\l.txt");
  21.    printf_s("%s: %lf%c", "result", GetResult(l), '\n');
  22.  
  23.    return 0;
  24. }
  25.  
  26. int Input(list **l, const char* fileName)
  27. {
  28.    FILE* f;
  29.    fopen_s(&f, fileName, "r");
  30.  
  31.    if (f == NULL)
  32.       return NULL;
  33.  
  34.    (*l) = new list;
  35.    list *p = *l; // создание первого элемента
  36.    p->n = p->p = p;  // настройка первого элемента
  37.    fscanf_s(f, "%lf", &p->v); // чтение и запись первого элемента
  38.  
  39.    double d;
  40.    while (fscanf_s(f, "%lf", &d) != EOF) // чтение элемента
  41.    {  //создание и запись элемента
  42.       (p->n = new list)->v = d;
  43.       p->n->n = *l;
  44.       p->n->p = p;
  45.       (*l)->p = p->n;
  46.       p = p->n;
  47.    }
  48.  
  49.    return true;
  50. }
  51.  
  52. double GetResult(list* l)
  53. {
  54.    double r = 1;
  55.  
  56.    auto* s = l, * e = l->p;
  57.    do
  58.    {  // обрабатка произведения (Xi + X(n - i + 1))(X(n - i + 1) + Xi)
  59.       r *= (s->v + e->v) * (s->v + e->v);
  60.    } while ((e = e->p) != (s = s->n) && (s->p) != e);
  61.  
  62.    if (e == s) // обработка случая когда кол-во элементов не четно
  63.       r *= (s->v + e->v);
  64.  
  65.    return r;
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement