Как написать программу для подсчета

Как написать программу на языке Си для расчета коэффициента

  • Post author: admin
  • Запись опубликована: 15 января, 2022
  • Post category: Вопросы по программированию

Вопрос:

Итак, проблема в том, чтобы решить эту:

И это то, что я делал до сих пор.

float sum(int x, int n) < float sum = 1; int fact, temp; for (int i= 1; i//Caculate X^N/N! sum = pow(x,i)/fact ; > return sum; >

Но когда я пытаюсь N = 4, X= 2, должно быть 7, вместо этого было 9.

Ответ №1:

Вы можете это сделать:

#include #include using namespace std; float sum(int x, int n) < float sum = 1; int fact = 1, temp; for (int i= 1; ireturn sum; > int main()

Ответ №2:

Вы должны найти факториал i .

for (int j=2; j

1 x^1/1! x^2/2! x^3/ 3! …. х^н/н!
Итак, на 1-й итерации — i=1 , вы должны найти факториал 1 того , что есть i , а не n .
Как и мудро во 2 — й итерации — i=2 , найдите факториал 2 того, что есть i .

Решение задачи «Количество цифр» по теме «Метод подсчета. Сортировка подсчетом Python»


наконец , когда i=n , факториал n этого i .

1. Это все равно не сработает. это должен быть вывод 7, но он выводит 10?

2. Это означает, что он будет работать только при 3? так как во втором цикле он уже завершает условие и движется дальше?

3.

Нет, есть 2 цикла, на каждой итерации внешнего цикла i значение будет меняться.

4. внутренний цикл предназначен для поиска факториала.

Ответ №3:

Вы можете легко рассчитать мощность x и факториал для каждого шага постепенно.

float sum(int x, int n) < float sum = 1; int powx = 1, fact = 1; for (int i = 1; i return sum; >

Источник: programbox.ru

Как написать программу подсчета циклов?

31 окт 2014 в 19:09

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

#include #include #include int main(int argc, char *argv[]) < int N = 5; // Ваше N int i; // Counter double Final = 1; // Искомое число. Почему 1? Потому что будем умножать. Умножим на 0 — будет ноль. for ( i = 0; i < N; i++ ) < double PowValue = pow ( i + 1, 2 ); double Value = ( 2 / PowValue ); // Саму исходную формулу можно чуть-чуть поменять Final *= Value; >printf («%fnr», Final ); return 0; >
Отслеживать
ответ дан 31 окт 2014 в 17:43
niks123123 niks123123
53 5 5 бронзовых знаков

Что-нибудь типа такого:

double calculation(int rounds) < if (rounds double temp = 1; while (rounds > 0) < temp = temp * (1 + 1 / (rounds * rounds)); rounds—; >return temp; >

И не кричите меня, я не помню, как правильно осуществлять декремент в while, где валяется функция степени, и есть ли *= в С.

Отслеживать
ответ дан 31 окт 2014 в 17:44
36.1k 2 2 золотых знака 55 55 серебряных знаков 81 81 бронзовый знак
31 окт 2014 в 22:18
31 окт 2014 в 22:26

Уроки Python — Арифметические операции

Это не страшно. Теперь будете вспоминать. Т.е. правильно написать temp *= 2.0 / ((long long)rownds * rownds); Операция *= , естественно, в Си есть. IMHO во все остальные языки эти операции (+=, *= . ) пришли из Си. — А вот 2 / (целое) — это неправильно. При целочисленном делении все члены, кроме round == 1 окажутся равными 0 (!).

Читайте также:
Какой программой объединить разделы жесткого диска

31 окт 2014 в 22:39

А про рекурсию забыли?

double calculate(int extent) < if (extent<2) < // проверка на степень == 1 — выход из рекурсии return 2; >return (1+1/(double)(extent*extent))*calculate(extent-1); >
double result = calculate(5);
Отслеживать
ответ дан 13 ноя 2014 в 11:04
11 2 2 бронзовых знака

    Важное на Мете

Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник: ru.stackoverflow.com

Методичка по C# / Часть 05. Реализация алгоритмов

Реализация алгоритмов static void Main() < int a1=1, a2=1, a3; // задаем известные члены последовательности Console.Write(«n p42 ft49»>int n = int.Parse(Console.ReadLine()); / / выводим известные члены последовательности Console.WriteLine(«a1=<0>na2=»,a1,a2); /* Организуем цикл для вычисления членов последовательности с номерами 3, 4,…, n. При этом в переменной a1 будет храниться значение члена последовательности с номером i-2, в переменной a2 — члена с номером i-1; переменная а будет использоваться для вычисления члена с номером i. */ for (int i = 3; i =», i, a3); // выполняем рекуррентный пересчет для следующего шага цикла // в элемент с номером i-2 записываем значение // элемента с номером i-1 a1 = a2; // в элемент с номером i-1 записываем значение // элемента с номером i a2 = a3; > > Результат работы программы : n состояние экрана 5 a1: 1 a2: 1 a3: 2 a4: 3 a5: 5 Задание Измените программу так , чтобы на экран выводились только четные члены последовательности Фибоначчи . Вычисление конечных сумм и произведений Решение многих задач связано с нахождением суммы или произведения элементов заданной последовательности . В данном разделе мы рассмотрим основные приемы вычисления конечных сумм и произведений . Пусть u 1 ( x ), u 2 ( x ), K , u n ( x ) – произвольная последовательность n функций . Будем рассматривать конечную сумму вида u 1 ( x ) + u 2 ( x ) + K + u n ( x ) . Такую сумму можно записать более компактно , используя следующее обозначение : Стр . 76 из 510

Реализация алгоритмов n u 1 ( x ) + u 2 ( x ) + K + u n ( x ) = ∑ u i ( x ) i =1 При n ≤ 0 значение суммы равно 0. В дальнейшем будем также использовать сокращенную запись для конечного произведения данной последовательности , которая выглядит следующим образом : n u 1 ( x ) × u 2 ( x ) × K × u n ( x ) = П u i ( x ) i =1 Пример 1 Написать программу , которая подсчитывает сумму натуральных чисел от 1 до n (n ³ 1). Указания по решению задачи . Пусть s n – сумма натуральных чисел от 1 до n. Тогда s n =1+2+…+(n-1)+n=(1+2+…+(n-1))+n=s n-1 +n, s 0 =0. Мы пришли к рекуррентному соотношению s 0 =0, s n =s n-1 +n, которым мы можем воспользоваться для подсчета суммы . Соотношение s n =s n-1 +n говорит о том , что сумма на n- ном шаге равна сумме , полученной на предыдущем шаге , плюс очередное слагаемое . static void Main() < Console.Write(» Введите значение n: «); uint n = uint.Parse(Console.ReadLine()); uint s = 0; for (uint i = 1; i <= n; i++) < s+=i; >Console.WriteLine(«s p13 ft29»>> Результат работы программы : n s 5 15 481 115921 Задание Измените программу так , чтобы на экран выводилось среднее арифметическое натуральных чисел от 1 до n. Пример 2 Написать программу , которая подсчитывает n! для заданного натурального n. Указание по решению задачи . Из свойства факториала : 0!=1!=1, n!=1*2*3*…*n, n!=(n-1)!n. Следовательно , факториал можно вычислять , используя рекуррентное соотношение b 0 =1, b n =b n-1 *n. Стр . 77 из 510

Читайте также:
Как запустить программу debug

Реализация алгоритмов Текст программы : static void Main() < Console.Write(» Введите значение n: «); ulong n=ulong.Parse(Console.ReadLine()); ulong f=1; for (ulong i=1; i<=n; ++i) < f*=i; >Console.WriteLine(«f p74 ft29»>> Результат работы программы :

n f
5 120
20 2432902008176640000

Задание Измените программу так , чтобы для заданного значения n на экран выводились все вычисленные факториалы . Например , для n=3 на экран следует вывести : 1!=1 2!=2 3!=6 Пример 3 Написать программу для подсчета суммы

S n = cos x + cos x + cos 2 x + cos x + cox 2 x + cos 3 x + K + cos x + . + cos nx
1 2 3 n
где х – вещественное число , n – натуральное число .

Указания по решению задачи . Если пронумеровать слагаемые , начиная с 1, то мы увидим , что номер слагаемого совпадает со значением знаменателя . Рассмотрим каждый числитель отдельно : b 1 = cos x , b 2 = cos x + cos 2 x , b 3 = cos x + cos 2 x + cos 3 x … Эту последовательность можно представить рекуррентным соотношением :
b 0 =0, b n =b n-1 +cos(nx) Теперь сумму можно представить следующим образом :

S n = b 1 + b 2 + b 3 + K + b n
1 2 3 n

для этой формулы справедливо рекуррентное соотношение : S 0 =0, S n = S n −1 + b n n При составлении программы будем использовать формулы (1-2). static void Main() < Console.Write(» Введите значение n: «); byte n = byte.Parse(Console.ReadLine()); Console.Write(» Введите значение x: «);

(1) (2) Стр . 78 из 510

Реализация алгоритмов double x = double.Parse(Console.ReadLine()); double b = 0, s = 0; for (byte i = 1; i <= n; i++) < b += Math.Cos(i*x); s += b/i; >Console.WriteLine(«s=»,s); > Результат работы программы : n x s 10 1 -0,46 120 -0,5 0,28 Задание Измените программу так , чтобы вычислялось значение выражения :

S n = − cos x + cos x + cos 2 x − cos x + cox 2 x + cos3 x + K (−1) n cos x + . + cos nx
1 2 3 n

Пример 4 Написать программу для подсчета суммы

n (−1) i +1 x i
S n = ∑ i !
i =1

где х – вещественное число , n – натуральное число . Указания по решению задачи . Переходя от сокращенной формы записи к развернутой , получим :

S n = x x 2 + x 3 − K + (−1) n +1 x n
1! 2! 3! n !

Каждое слагаемое формируется по формуле : a n = (−1) n +1 x n n ! Если в эту формулу подставить n=0, то получим : a 0 = (−1) 1 x 0 = −1 0! Чтобы не вводить несколько рекуррентных соотношений ( отдельно для числителя , отдельно для знаменателя ), выразим последовательность слагаемых рекуррентным соотношением вида a n = a n −1 q , где q для нас пока не известно . Найти его можно из выражения : q = a n a n −1 Произведя расчеты , получим , что q = − x i Стр . 79 из 510
Реализация алгоритмов Следовательно , для последовательности слагаемых мы имеем рекуррентное соотношение :

a 0 = — 1 , a i = — a i −1 × x (3)
i

а всю сумму , по аналогии с предыдущими примерами , можно представить рекуррентным соотношением :

S 0 =0, S n = S n − 1 + a n (4)

Текст программы , решающей поставленную задачу с использованием формул (3) и (4), приведен ниже . static void Main() < Console.Write(» Введите значение n: «); byte n = byte.Parse(Console.ReadLine()); Console.Write(» Введите значение x: «); double x = double.Parse(Console.ReadLine()); double a = -1, s = 0; for (byte i = 1; i Console.WriteLine(«s=»,s); > Результат работы программы : n x s 10 1 0,63 120 -0,5 -0,65 Задание Измените программу так , чтобы вычислялось значение выражения :

n (−1) i +1 x i
S n = ∑ (2 i )!
i =1
Пример 5
Написать программу для подсчета произведения :
P = k + x 2 n + x n
∏ (1 )
k n =1 n

где х – вещественное число , n – натуральное число . Указания по решению задачи . Преобразуем заданное выражение к виду :

k x n ( x n +1)
P k = ∏ (1 + )
n
n =1

и перейдем от сокращенной формы записи к развернутой :

P = (1 + x 1 ( x 1 + 1) )(1 + x 2 ( x 2 + 1) ). (1 + x k ( x k + 1) )
k 1 2 k

Стр . 80 из 510
Реализация алгоритмов В числителе каждой дроби встречается x n ( см . пример 2), его можно вычислить по рекуррентному соотношению :

b 0 =1, b n = b n-1 *x (5)
Тогда произведение можно представить как :
P = (1 + b 1 ( b 1 + 1) )(1 + b 2 ( b 2 + 1) ). (1 + b k ( b k + 1) )
k 1 2 k
Читайте также:
Как узнать версию программы 1с зуп

что , в свою очередь , можно выразить рекуррентным соотношением :

P 0 =1, P = P * (1+ b k ( b k +1) ) (6)
k k −1 k

При составлении программы будем пользоваться формулами (5-6). static void Main() < Console.Write(» Введите значение n: «); byte n = byte.Parse(Console.ReadLine()); Console.Write(» Введите значение x: «); double x = double.Parse(Console.ReadLine()); double b = 1, p = 1; for (byte i = 1; i Console.WriteLine(«p=»,p); > Результат работы программы : n x s 10 1 66,00 20 -0,5 0,85 Задание Измените программу так , чтобы вычислялось значение выражения :

k + x 2 n + x n
P = ∏ (1 )
k n !
n =1

Вычисление бесконечных сумм Будем теперь рассматривать бесконечную сумму вида : ∞ u 1 ( x ) + u 2 ( x ) + K + u n ( x ) + K = ∑ u i ( x ) i =1 Это выражение называется функциональным рядом . При различных значениях x из функционального ряда получаются различные числовые ряды : ∞ a 1 + a 2 + K + a n + K = ∑ a i i =1 Стр . 81 из 510
Реализация алгоритмов Числовой ряд может быть сходящимся , или расходящимся . Совокупность значений x , при которой функциональный ряд сходится , называется его областью сходимости . Числовой ряд называется сходящимся , если сумма n первых его членов S n = a 1 + a 2 + K + a n при n → ∞ имеет предел ; в противном случае , ряд называется расходящимся . Ряд может сходиться лишь при условии , что общий член ряда a n при неограниченном увеличении его номера стремится к нулю : lim a n = 0 n →∞ Это необходимый признак сходимости для всякого ряда . В случае бесконечной суммы будем вычислять ее с заданной точностью e. C читается , что требуемая точность достигается , если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше , чем е . Пример 1 Написать программу для подсчета суммы : ∑ ∞ ( − 1 ) i i =1 i ! с заданной точностью е ( е >0). Указание по решению задачи . Рассмотрим , что представляет собой заданный ряд :

(−1) i = − 1 + 1 1 + 1 1 + . + 1
i ! 1 2 6 24 120
i =1

Общий член ряда с увеличением значения i стремится к нулю , следовательно , данную сумму будем вычислять с определенной точностью e . Заметим также , что последовательность слагаемых можно выразить с помощью рекуррентного соотношения : a 1 =-1, a = − a i −1 ,

i i

а всю сумму — с помощью рекуррентного соотношения S 0 =0, S n =S n-1 +a n. ( выведите данные рекуррентные соотношения самостоятельно .) static void Main() < Console.Write(» Задайте точность вычислений е : «); double e = double.Parse(Console.ReadLine()); double a = -1, s = 0; for (int i = 2; Math.Abs(a) >= e; i++) < s += a; a /= -i; >Console.WriteLine(«s=», s); > Стр . 82 из 510
Реализация алгоритмов Результат работы программы :

e s
0,1 -0,66666667
0,01 -0,62500000
0,001 -0,63194444
0,0001 -0,63214286

Задание 1 Объясните , почему при разных значениях точности мы получили разные значения суммы . Задание 2 Измените программу так , чтобы на экран выводилось не только значение суммы , но и количество слагаемых .

Пример 2
Вычислить значение функции :
F (x)= − 1 + ( x −1) 2 − ( x −1) 4 + ( x −1) 6 − .
( x +1) 2( x +1) 2 4( x +1) 3 8( x +1) 4

на отрезке [a,b] c шагом h и точностью ε . Результат работы программы представить в виде таблицы , которая содержит номер аргумента , значение аргумента , значение функции . Указания по решению задачи . Перейдем от развернутой формы записи функции к сокращенной , получим :

(−1) i ( x −1) 2 i −2
F ( x ) = ∑ 2 i −1 ( x + 1) i
i =1

и воспользуемся приемом , рассмотренным в предыдущем разделе . Получим , что слагаемые данной функции определяются с помощью рекуррентного соотношения :

1 , c i = − b ( x −1) 2
c 1 = − ( x +1) i −1 .
2( x +1)

Текст программы : static void Main() < Console.Write(«a: «); double a = double.Parse(Console.ReadLine()); Console.Write(«b: «); double b = double.Parse(Console.ReadLine()); Console.Write(«h: «); double h = double.Parse(Console.ReadLine()); Console.Write(«e: «); double e = double.Parse(Console.ReadLine()); double x; byte i; // выводим заголовок таблицы Console.WriteLine(» «,’#’, ‘x’, ‘s’); Стр . 83 из 510

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru