Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 2. Алгоритм решения задачи
- функция Input(указатель на указатель l, указатель на имя файла n)
- открыть файл n
- если доступ к файлу не получен:
- вернуть EXIT_FAILURE
- создание первого элемента
- пока не достугнут конец файла:
- создание и запись нового элемента
- закрыть файл n
- вернуть EXIT_SUCCESS
- функция GetResult(указатель l)
- Переменная для хранения результата r
- Создание указателя последний элемент списка e
- Вычислять r = r * (Xi + X(n - i + 1))*(X(n - i + 1) + Xi) пока: (n - i + 1) не равен i и e на равен l -> предыдущий элемент
- Если после вычисления e равен l:
- умножить r на 2 и на значения элемента на который указывает l
- вернуть r
- процедура main()
- объявление указателя на список l
- если Input(&l, "l.txt") не равен EXIT_FAILURE:
- вывести в консоль значение GetResult(l)
- вернуть 0
- */
- #include <cstdio>
- #include <stdlib.h>
- struct list
- {
- double v{};
- list* n = NULL;
- list* p = NULL;
- };
- /// Формирует list из файла l.txt
- int Input(list** l, const char* n);
- /// Вычисляет значение (X1 + Xn)(X2 + X(n - 1))...(X(n - 1) + X2)(Xn + X1)
- double GetResult(list* l);
- int main()
- {
- list* l;
- if (Input(&l, "l.txt") != EXIT_FAILURE)
- printf_s("%s: %lf%c", "result", GetResult(l), '\n');
- return 0;
- }
- int Input(list **l, const char* n)
- {
- FILE* f;
- fopen_s(&f, n, "r");
- if (f == NULL)
- return EXIT_FAILURE;
- (*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;
- }
- fclose(f);
- return EXIT_SUCCESS;
- }
- double GetResult(list* l)
- {
- double r = 1;
- list* e = l->p;
- do
- { // обрабатка произведения (Xi + X(n - i + 1))(X(n - i + 1) + Xi)
- r *= (l->v + e->v) * (l->v + e->v);
- } while ((e = e->p) != (l = l->n) && (l->p) != e);
- if (e == l) // обработка случая когда кол-во элементов не четно
- r *= 2 * l->v;
- return r;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement