var
a:array[1..99999]of boolean;
i,k,n,kol,kol2:integer;
begin
writeln('ВВедите кол-во чисел ');readln(n);
for i:=1 to n do
a[i]:=true;
kol:=0;
kol2:=0;
k:=2;
while k*k<=n do begin
if a[k] then begin
i:=k*k;
while i <=n do begin
a[i]:= false;
i:=i+k;
kol:=kol+1;
end;
end;
k:=k+1;
end;
for i:=1 to n do
if a[i] then begin
kol2:=kol2+1;
write(i,' ');
end;
writeln();
writeln('Кол-во шагов = ',kol);
writeln('Кол-во чисел = ',kol2);
end.
Объяснение:
Перед непосредственно кодом нужно объяснить немного математики, а конкретно формирование суммы ряда.
Начнём с того, что в самом задании логическая ошибка. 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");
}
Первая задача:
class_a, class_b, class_c = int(input("Сколько детей в А классе? ")), int(input("Сколько детей в Б классе? ")), int(input("Сколько детей в В классе? "))
print("Для класса А нужно купить " + str(round(class_a / 2)) + " парт.\nДля Б " + str(round(class_b / 2)) + " парт.\nДля В " + str(round(class_c / 2)) + " парт.")
Объяснения:
Нам известно, что за каждой партой могут сидеть два ученика.
Чтобы узнать, сколько парт нам нужно купить для каждого класса, мы за количество учеников.
Дальше мы делим количество учеников каждого класса на два и округляем функцией round(число).
Вторая задача:
km = int(input("Сколько км машина проезжает в день?"))
path = int(input("Какова длина маршрута?"))
print("Машина проедет путь за " + str(path/km) + " дня(ей).")
Объяснения:
По условиям задачи запрашиваем, сколько км проезжает машина за день и длину маршрута.
Далее мы делим длину маршрута на км/день и получаем ответ на нашу задачу.
3ую задачу не решил, извиняюсь