Знаходимо обся пам'яті для збереження 194400 пікселів малюнка. За умовою задачі глибина малюнка становить 32 біт. Тобто для кодування кожного пікселя на малюнку використовують 32 біт. 32 біт = 32 : 8 = 4 байти
Тоді :
4) 194400 пікселі * 4 байти = 777600 байти
777600 байти : 1024 = 759,375 Кбайт
Відповідь : теоретично буде потрібно 759,375 Кбайт пам'яті
Перед непосредственно кодом нужно объяснить немного математики, а конкретно формирование суммы ряда.
Начнём с того, что в самом задании логическая ошибка. n-ый член ряда вычисляется по формуле
но в случае, если n=1, должно получится
В то время как мы видим, что в задании этот член ряда имеет положительный знак. Но мы будем следовать заданию и оставим его положительным, вынеся в отдельное условие.
Далее, каждый раз пересчитывать факториал до n-ного члена нерационально, поэтому нам нужно вывести формулу, которая будет считать следующий член ряда из предыдущего. В нашем случае мы должны будем постоянно домножать предыдущий член на некоторую постоянную функцию. Вот и найдём её. Во-первых, нам нужно обеспечить чередование знака, то есть если наша "константа" будет отрицательной, этого будет достаточно. Во-вторых, числитель дроби каждый раз увеличивается в x² раз, значит на это значение мы и будем домножать. Уже получилось -x². И в-третьих, знаменатель и тут нужно было быть чуть внимательнее, поскольку (2n)! ≠ (2(n-1))! * 2n. Выражение имеет другой вид (2n)! = (2(n-1))!*(2n-1)*2n
Итого имеем формулу n-ного члена в зависимости от n-1
Вот эту формулу мы и будем использовать для нахождения членов последовательности начиная со второго.
Получается вот такой код (см. ниже). А так же скриншот. Обратите внимание на отступы, потому как ваш код в задании, очень плохо читается. Учитесь сразу программировать красиво.
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int main()
{
double a = 0.1, b=1.0, h=(b-a)/10.0, S,Y,x,p;
int i, n = 80;
x = a;
do
{
p = 1;
S = p;
for (i = 1; i <= n; i++)
{
if (i == 1) p *= pow(x, 2.0) / 2;
else p *= (-1) * pow(x, 2.0) / (2*i*(2*i - 1.0));
S += p;
}
Y = cos(x);
cout << setw(15) << x << setw(15) << Y << setw(15) << S << endl;
Відповідь :
Для початку знаходимо площу малюнка :
1) 10 см * 15 см = 150 см^2
Далі знаходимо кількість пікселів в одному квадратному сантиметрі екрана :
2) 36 * 36 = 1296 пікселів / см^2
Знаходимо загальну кількість пікселів на екрані :
3) 150 см^2 * 1296 пікселів / см^2 = 194400 пікселів
Знаходимо обся пам'яті для збереження 194400 пікселів малюнка. За умовою задачі глибина малюнка становить 32 біт. Тобто для кодування кожного пікселя на малюнку використовують 32 біт. 32 біт = 32 : 8 = 4 байти
Тоді :
4) 194400 пікселі * 4 байти = 777600 байти
777600 байти : 1024 = 759,375 Кбайт
Відповідь : теоретично буде потрібно 759,375 Кбайт пам'яті
Объяснение:
Перед непосредственно кодом нужно объяснить немного математики, а конкретно формирование суммы ряда.
Начнём с того, что в самом задании логическая ошибка. n-ый член ряда вычисляется по формуле
но в случае, если n=1, должно получится
В то время как мы видим, что в задании этот член ряда имеет положительный знак. Но мы будем следовать заданию и оставим его положительным, вынеся в отдельное условие.
Далее, каждый раз пересчитывать факториал до n-ного члена нерационально, поэтому нам нужно вывести формулу, которая будет считать следующий член ряда из предыдущего. В нашем случае мы должны будем постоянно домножать предыдущий член на некоторую постоянную функцию. Вот и найдём её. Во-первых, нам нужно обеспечить чередование знака, то есть если наша "константа" будет отрицательной, этого будет достаточно. Во-вторых, числитель дроби каждый раз увеличивается в x² раз, значит на это значение мы и будем домножать. Уже получилось -x². И в-третьих, знаменатель и тут нужно было быть чуть внимательнее, поскольку (2n)! ≠ (2(n-1))! * 2n. Выражение имеет другой вид (2n)! = (2(n-1))!*(2n-1)*2n
Итого имеем формулу n-ного члена в зависимости от n-1
Вот эту формулу мы и будем использовать для нахождения членов последовательности начиная со второго.
Получается вот такой код (см. ниже). А так же скриншот. Обратите внимание на отступы, потому как ваш код в задании, очень плохо читается. Учитесь сразу программировать красиво.
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int main()
{
double a = 0.1, b=1.0, h=(b-a)/10.0, S,Y,x,p;
int i, n = 80;
x = a;
do
{
p = 1;
S = p;
for (i = 1; i <= n; i++)
{
if (i == 1) p *= pow(x, 2.0) / 2;
else p *= (-1) * pow(x, 2.0) / (2*i*(2*i - 1.0));
S += p;
}
Y = cos(x);
cout << setw(15) << x << setw(15) << Y << setw(15) << S << endl;
x += h;
}
while (x <= b + h / 2.0);
system("pause");
}