Перейти к содержанию
Сумма элементов ряда чисел
Просмотров 3.4к. Обновлено 15 октября 2021
Найти сумму n элементов следующего ряда чисел:
1 -0.5 0.25 -0.125 …
Количество элементов (n) вводится с клавиатуры.
В данном случае ряд чисел состоит из элементов, где каждый следующий меньше предыдущего в два раза по модулю и имеет обратный знак. Значит, чтобы получить следующий элемент, надо предыдущий разделить на -2.
Какой-либо переменной надо присвоить значение первого элемента ряда (в данном случае это 1). Далее в цикле добавлять ее значение к переменной, в которой накапливается сумма, после чего присваивать ей значение следующего элемента ряда, разделив текущее значение на -2. Цикл должен выполняться n раз.
Следует отметить, что чем больше n, тем меньше меняется сумма от прибавления каждого следующего элемента, т.к. на каждой итерации цикла значение элемента уменьшается в два раза (по модулю), т.е. прибавляется все меньшая и меньшая величина. Попробуйте выполнить программу, введя в качестве значения n сначала 3, затем 10 и 20. Вы увидите, что разница между первым и вторым случаем значительна, а между вторым и третьим — нет.
Pascal
сумма ряда паскаль
var
n,i: byte;
e,s: real;
begin
readln(n);
e := 1;
s := 0;
for i:=1 to n do begin
s := s + e;
e := e / -2;
end;
writeln(s:9:7);
end.
6
0.6562500
Язык Си
#includemain() {
unsigned short n,i;
float e, s;
scanf("%d",&n);
e = 1;
s = 0;
for (i=0;i< n;i++) {
s += e;
e /= -2;
}
printf("%.7fn",s);
}
10
0.6660156
Python
сумма ряда python (питон)
n = int(input())
e = 1
s = 0
for i in range(n):
s += e
e /= -2
print(s)
4
0.625
КуМир
алг сумма рядя
нач
цел n,i
вещ e,s
ввод n
e := 1
s := 0
нц для i от 1 до n
s := s + e
e := e / 2 * (-1)
кц
вывод s
кон
4
0.62530
0.6666667
Basic-256
input n
start = 1
sum = 0
for i=1 to n
sum = sum + start
start = start / -2
next i
print sum
20
0.666666
- В этой теме 1 ответ, 1 участник, последнее обновление 1 год, 10 месяцев назад сделано .
-
Сообщения
-
-
Задача: дана последовательность вида:
$$sin(x) + sin(sin(x)) + … + sin(sin … (sin(x))).$$Необходимо подсчитать сумму данной последовательности. Значение x вводиться с клавиатуры.
Решение: суммирование проводится до тех пор, пока очередной член ряда не окажется меньше заданного числа (точности):
Uses Crt; Const Eps = 0.03; Var X,Y,S : Extended; I : Longint; F : Boolean; Begin WriteLn; Write('Введите значение X: '); ReadLn(X); S := 0; I := 0; Y := X; F := True; While F Do Begin Inc(I); Y := sin(Y); If Y < Eps Then F:=False; S := S + Y; WriteLn(I:5,' ',S:4:5,' ',Y:4:5); End; WriteLn('Число членов ряда: ',I); WriteLn('Сумма членов ряда: ',S); WriteLn('Последний член ряда: ',Y); Repeat Until KeyPressed End.
-
В качестве еще одного примера вычислим сумму такого ряда:
$$
arctg(x) = sumlimits_{k=1}^n frac{x^{2cdot k+1} + frac{1}{5}}{sqrt{e^frac{x}{k}} + sqrt[k]{x^{k-1}}}
$$Решение:
Блок-схема алгоритма:Назначение переменных:
Класс Имя Тип Структура Смысл Входные данные
X, N Вещ Простая переменная Начало и количество шагов. Выходные данные
s Вещ Простая переменная Сумма Промежуточные данные
i Цел Простая переменная Итератор Исходный код поиска суммы ряда на языке Паскаль:
var x,s:real; n,i:integer; begin writeln('Введите x'); readln(x); writeln('Введите n'); readln(n); s:=abs(ArcTan(x)); i:=1; for i:=1 to n do begin s+=(power(x,2*i-1)+(1/5))/sqrt(power(e,x/i)+power(power(x,i-1),1/i)); end; writeln(s); end.
-
-
Автор
Сообщения
- Для ответа в этой теме необходимо авторизоваться.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
uses crt; const n=8; m=3; var a:array[1..n,1..m] of integer; i,j,s:integer; begin writeln('Введите данные по ',m,' бригадам за ',n,' часов'); for i:=1 to n do begin writeln(i,' час:'); for j:=1 to m do begin write('Бригада ',j,'='); read(a[i,j]); end; end; clrscr; writeln('Учет в течение дня:'); writeln('----------------------------'); writeln('| час | Бр.1 | Бр.2 | Бр.3 |'); writeln('----------------------------'); for i:=1 to n do begin gotoXY(1,whereY);write('|',i:3); gotoXY(7,whereY); for j:=1 to m do write('|',a[i,j]:5,' '); gotoXY(28,whereY); writeln('|'); end; writeln('----------------------------'); write('|Итог |'); for j:=1 to m do begin s:=0; for i:=1 to n do s:=s+a[i,j]; write(s:5,' |'); end; writeln; writeln('----------------------------'); end. |
Лабораторная
работа № 3
Тема:
Вычисление сумм (произведений) конечного
числа элементов ряда. Оператор FOR …DO
(FOR … DOWNTO)
Цель
работы:
научиться разрабатывать блок-схему
алгоритма и программу с использованием
операторов цикла FOR …DO на примере
вычисления сумм (произведений) элементов
конечного ряда
Теоретическая
часть
Оператор FOR
…DO
Циклические
вычисления в Паскале реализуются с
помощью операторов
FOR…TO(DOWNTO)…DO,
WHILE…DO
или
REPEAT…UNTIL.
Особенностью
операторов FOR…TO
(DOWNTO)…DO
является
встроенный
внутренний счетчик цикла, фиксирующий
количество повторений.
Форматы записи
оператора:
FOR
переменная
цикла := выражение 1
TO
выражение
2 DO
{операторы тела
цикла};
или
FOR
переменная
цикла :=выражение
1
DOWNTO
выражение
2
DO
{операторы тела
цикла};
В
формате: переменная
цикла
(управляющая
переменная, счетчик
цикла) – имя переменной целочисленного
типа; выражения
1
и 2 — выражения, тип результата которых
совпадает с типом переменной цикла;
операторы
тела
цикла
— любой
исполнимый оператор
или блок операторов, заключенных в
операторные скобки; FOR,
TO,
DOWNTO
и
DO
–
ключевые слова.
!!!
Использование оператора FOR
регламентируется следующими правилами.
-
Переменная
цикла, её начальное и конечное значения
должны
быть одного типа. -
При
выполнении оператора очередное значение
параметра цикла вычисляется автоматически.
В частности, для
целого типа шаг изменения значения
переменной цикла равен 1
при конструкции с TO
и -1 при конструкции с DOWNTO. -
После
служебного слова DO
может стоять только один оператор.
Если в цикле необходимо выполнить
группу операторов, то
их заключают в операторные скобки
BEGIN…END,
образуя составной
оператор. -
Цикл
не выполняется вообще, если начальное
значение переменной
цикла больше (при DOWNTO
меньше), чем конечное. В
этом случае управление передается
оператору, следующему непосредственно
за конструкцией FOR..TO(DOWNTO)…DO. -
В
конструкции FOR..TO(DOWNTO)…DO
используется только
одна переменная цикла. При наличии
вложенных циклов у каждой
конструкции FOR..TO(DOWNTO)…DO
должна быть своя, отличающаяся
от других переменная. -
При
организации вложенных циклов внутренний
и внешний циклы
не должны пересекаться. Цикл, который
начинается последним,
должен завершаться первым:
FOR
N := 1 TO 5
DO
BEGIN WRITELN (N:2,’.’);
FOR
J := 1 TO 5 DO WRITELN (N:2,’.’, J:2,’.’) END;
Пример
работы циклов
Пример
3.1.
Найти сумму конечного ряда. Значение x
вводится с клавиатуры.
program
Project1;
var
x,s:real; i:integer;
begin
Write(‘x=’);
Readln(x);
s:=0;
for
i:=1 to 10 do //начало
цикла
For
s:=s+x*i;
//конец
цикла
For
Writeln(‘s=’,s:5:3);
//вывод результата
Readln;
end.
Пример 3.2.
Дано действительное число х.
Вычислить сумму элементов ряда. Число
суммируемых элементов ряда (N)
задается во время работы программы с
клавиатуры.
.
Program
Project2;
//вычисление суммы заданного числа
элементов ряда
var
x,s,a:real;
f:longint;
i,n,k:integer;
begin //начало
раздела операторов
write(‘введите
значение x=’);
readln(x);
write(‘введите
значение n=’);
readln(n);
//значение первого
слагаемого ряда вычисляется до цикла
a:=x; //значение
x
в степени (2*1-1)
f:=1; //значение
f=(2*1-1)!=1
s:=a;
//а — значение 1-го слагаемого, s=a
//к — переменная
для изменения знака очередного слагаемого
с + на —
k:=1;
for i:=2 to
n do //начало
цикла
begin
k:=-
k;
//значение (-1) для i-го
слагаемого
a:=a
* sqr(x);
//вычисление х в степени (2i+1)
i-го
слагаемого
f:=f
* (2*i-2)*(2*i-1);
//вычисление факториала i-го
слагаемого
s:=s+k*a/f;
//добавление i-го
слагаемого к общей сумме
end;
//конец цикла
//вывод
результата на экран
writeln(‘при x=’,x:4:2,’
сумма’, n,’
элементов =’,s:7:5);
readln;
end.
Пример 3.3.
Задано число х
и натуральное число N.
Вычислить произведение N
элементов ряда
.
Для вычисления
произведения целесообразно использовать
рекуррентные соотношения, т.е. каждую
дробь в скобках, начиная со второй,
выражать через предыдущую. Это позволит
существенно сократить объем вычислений.
Расчет N!
в числителе дроби каждого множителя
выполняется в программе в теле цикла
по формуле f:=f*n.
p:=p*(2+f/a)
— формула умножения элементов ряда
Р=P1*P2*…*Pi-1
на
очередной Pi
элемент
ряда.
Схема алгоритма
и текст программы
Program
Project3;
//вычисление
произведения заданного числа элементов
ряда
var
x,p,a :
real; f : longint; i,n : integer;
begin
write(‘введите
x=’);
readln(x);
write(‘введите
n=’);
readln(n);
p:=1;
//начальное значение произведения
a:=1;
f:=1;
//начальные значение числителя
и знаменателя дроби
for i:=1 to
n do //начало
цикла
begin
a:=
a*x;
f:=f*i
p:=p*(2+f/a);
end; //конец
цикла
//вывод
результата на экран
writeln(‘при x=’,x:4:2,’
произведение’, n:2,’ элементов=’,p:7:5);
readln;
end.
Задания для
лабораторной работы
1.
С клавиатуры вводится последовательность
из n-чисел.
Определить количество членов
последовательности:
-
являющихся
нечетными числами; -
кратных 3 и не
кратных 5; -
являющихся
квадратами четных чисел.
2.
Последовательность чисел Фибоначчи
u0,
u1,
… образуется по закону u0=0;
u1
=1; ui=ui-1+ui-2
(i=2,
3, …). Дано натуральное число n>1.
Получить u0,
u1,
…, un.
3.
С клавиатуры вводится натуральное число
n,
действительные числа а1,
… ,an.
В последовательности а1,
… ,an
определить
число соседств:
-
двух положительных
чисел; -
двух чисел разного
знака; -
двух чисел одного
знака, причем модуль первого числа
должен быть больше модуля второго
числа.
4.
У прилавка в магазине выстроилась
очередь из n
покупателей.
Время обслуживания продавцом i—го
покупателя равно
ti
(i=1,
… ,n).
Пусть даны
натуральное число n
и действительные
t1,
… ,tn.
Получить c1,
… ,cn
, где ci
– время
пребывания i—го
покупателя в очереди (i=1,
… ,n).
Указать
номер покупателя, для обслуживания
которого продавцу потребовалось самое
малое время.
5. Даны
действительные числа a,
b
(a<b),
натуральное
число n,
функция y=f(x),
определенная
на отрезке [a,
b].
Для значений аргумента xi
= a+ih
(i=0,1,
… ,n),
h=(b—a)/n
вычислить
значения функции yi
= f(
xi
) (i=0,1,
… ,n).
Вывести
xi
и
yi
(i=0,1,
… ,n)
в виде таблицы
из двух колонок. В i—ю
строку
таблицы заносятся соответствующие
значения xi
и
yi.
Рассмотреть следующие функции:
-
,
a= –π, b=π, n=50; -
,
a=
0, b=2π, n=50; -
,
a=
–3, b=5, n=40; -
,
a=
–1, b=2, n=30; -
,
a=
–1, b=3, n=40.
Задания для
самостоятельного выполнения
Варианты
заданий в табл. 1, 2.
Вычислить значение
суммы или произведения членов ряда.
Значение x
задать с клавиатуры.
Таблица
1–
Задание 1
1 |
|
9 |
|
2 |
|
10 |
|
3 |
|
11 |
|
4 |
|
12 |
|
5 |
|
13 |
|
6 |
|
14 |
|
7 |
|
15 |
|
8 |
|
16 |
|
Таблица
2 – Задание 2
1 |
|
9 |
|
2 |
|
10 |
|
3 |
|
11 |
|
4 |
|
12 |
|
5 |
|
13 |
|
6 |
|
14 |
|
7 |
15 |
|
|
8 |
|
16 |
|
Контрольные
вопросы
-
Для чего предназначен
оператор цикла? -
Какие виды циклов
есть в Паскале? -
Какой
формат записи имеет оператор FOR?
Какие
существуют
варианты этого цикла? -
Как
работает оператор
FOR?
B
каких случаях применяется? -
Что является телом
цикла? -
Как в теле цикла
выполнить несколько операторов? -
Почему
перед выполнением цикла некоторым
переменным
нужно задавать начальные значения? -
При
каких условиях оператор for
не выполнится ни разу?
Соседние файлы в предмете Программирование на Pascal
- #
- #
- #
- #
- #
- #
- #
- #
Вычислить значение суммы ряда через Pascal:
y=1+1/2+1/3+ … +1/i+…+1/n
Вычисления прекратить, если i член ряда, т.е. 1/i станет меньше, чем заданная точность (eps).
Код программы на Pascal
Program sum;
uses crt;
const
eps=1.0E-3;
var
y,u:real;
n:integer;
begin
clrscr;
y:=0;
for n:=1 to 10000 do
begin
u:=1/n;
y:=y+u;
if u<=eps then
break;
end;
writeln(‘значение y=’,y:10:6,
‘всего было вычислений’,n:8);
end
Пояснения
1. Точность eps задана в программе как const EPS = 1.0E-3.
2. Вычисления заданы бесконечным циклом for n:=1 to 10000 do, выход из которого осуществляется по достижению указанной точности с помощью оператора break.