Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- struct list
- {
- double v;
- list* n;
- list* p;
- };
- /// Формирует list из файла l.txt
- int Input(list** l, const char* fileName);
- /// Вычисляет значение (X1 + Xn)(X2 + X(n - 1))...(X(n - 1) + X2)(Xn + X1)
- double GetResult(list* l);
- int main()
- {
- list* l;
- Input(&l, "E:\\code projects\\_visual studio\\LinkedList\\Debug\\l.txt");
- printf_s("%s: %lf%c", "result", GetResult(l), '\n');
- return 0;
- }
- int Input(list **l, const char* fileName)
- {
- FILE* f;
- fopen_s(&f, fileName, "r");
- if (f == NULL)
- return NULL;
- (*l) = new list;
- list *p = *l; // создание первого элемента
- p->n = p->p = p; // настройка первого элемента
- fscanf_s(f, "%lf", &p->v); // чтение и запись первого элемента
- double d;
- while (fscanf_s(f, "%lf", &d) != EOF) // чтение элемента
- { //создание и запись элемента
- (p->n = new list)->v = d;
- p->n->n = *l;
- p->n->p = p;
- (*l)->p = p->n;
- p = p->n;
- }
- return true;
- }
- double GetResult(list* l)
- {
- double r = 1;
- auto* s = l, * e = l->p;
- do
- { // обрабатка произведения (Xi + X(n - i + 1))(X(n - i + 1) + Xi)
- r *= (s->v + e->v) * (s->v + e->v);
- } while ((e = e->p) != (s = s->n) && (s->p) != e);
- if (e == s) // обработка случая когда кол-во элементов не четно
- r *= (s->v + e->v);
- return r;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement