Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <math.h>
- int Geometric_Progression(double a, double q, int n, // Premise
- double* n_member, double* n_sum);// Results
- int main()
- {
- //a – первый член,
- //q – знаменатель,
- double a, q;
- //n – номер искомого члена прогрессии)
- int n;
- scanf("%lf", &a);
- scanf("%lf", &q);
- scanf("%ld", &n);
- double n_member, n_sum;
- switch (Geometric_Progression(a, q, n, &n_member, &n_sum))
- {
- case 0:
- printf("%d\n%f\n%f\n", 0, n_member, n_sum);
- break;
- case 1:
- printf("n - negation\n");
- //printf("n - отрицательное\n");
- break;
- case 2:
- printf("+- progression\n");
- //printf("Знакочередующаяся прогрессия\n");
- printf("%d\n%f\n%f\n", 2, n_member, n_sum);
- break;
- case 3:
- //printf("Вырожденная прогрессия\n");
- printf("Viroshjdennaya progression\n");
- printf("%d\n%f\n%f\n", 3, n_member, n_sum);
- break;
- }
- return 0;
- }
- // 0 - ничего такого.
- // Если возвращаем 1, то n отрицательный,
- // если 2, то знакочередующаяся,
- // а если 3, то вырожденная.
- int Geometric_Progression(double a, double q, int n,
- double *n_member, double *n_sum) {
- int global = 0;
- //Отслеживаем неположительный n
- if (n < 0)
- return 1;
- //Находим всё по формулам, а дальше смотрим исключительные ситуации.
- *n_member = a*pow(q, n - 1);
- *n_sum = a*(pow(q, n) - 1)/(q - 1);
- //А теперь считаем элементы прогрессии,
- //чтобы отловить 2-ой и 3-ий случай.
- double member = a;
- int sign = a >= 0? 1 : 0;
- int case2 = 2, case3 = 3;
- //20 значений хватит, чтобы проверить все случаи.
- for (int i = 0; i < 20; i++)
- {
- //Проверка на 3-ий случай.
- if (case3 != 0 && member != member * a)
- case3 = 0;
- member *= a;
- //Проверка на 2-ий случай.
- if (case2 != 0, sign != member >= 0 ? 1 : 0)
- case2 = 0;
- else if (case2 != 0) sign = -sign;
- }
- return global + case2 + case3;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement