Первый семестр / Лабалаторная работа №2 / Лаболаторная работа №2
.odt
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра математического обеспечения и применения ЭВМ
отчет
по лабораторной работе №2
по дисциплине «Информационные модели и системы»
Тема: Вычисление частичной суммы ряда
Студент гр. 8802 |
|
Попов А.П. |
Преподаватель |
|
Сидоров Ю.Н. |
Санкт-Петербург
2018
СОДЕРЖАНИЕ
Содержательная постановка задачи...........................................................................3
Формальная постановка задачи..................................................................................4
Алгоритмизация...........................................................................................................5
Типы структур данных................................................................................................6
Текст программы.........................................................................................................6
Примеры исполнения программы в содержательной постановке..........................7
Дополнительные примеры исполнения программы................................................8
Замечание.....................................................................................................................8
Содержательная постановка задачи
Требуется написать программу, вычисляющую сумму S, n элементов ряда, где n ∈ N и задается пользователем.
Ряд имеет вид: S=1-1/2+1/3-1/4+...
И может быть представлен как:
S ∈ R. Ряд сходится без разрывов, к значению ln 2 ≈ 0,693147181...
Примеры частичных сумм ряда (все иррациональные числа представлены с точностью до трех знаков после запятой). Частичные суммы вычислены с помощью математической библиотеки «Smath Studio»:
1. n=3; S≈ 0,833 2. n=4; S≈ 0,583 3. n=5; S≈0,783 4. n=6; S≈0,617
5. n=7; S≈0,76 6. n=10; S≈0,646 7. n=100; S≈0,682 8.n=1000; S≈0,6939. 9.n=10000; S≈0,693 10. n=100000; S≈ 0,693
Формальная постановка задачи.
Дано: n ∈ N — число членов ряда
Найти: S ∈ R – частичная сумма n элементов ряда, где
Ряд сходится к эталонному значению ln 2 ≈ 0,693147181... без разрывов.
Алгоритмизация
Сообщения, выводимые на экран, сокращены.
Типы и структуры данных
n — переменная типа integer. Является количеством подсчитываемых элементов ряда. Вводится пользователем. Количество элементов ряда не может быть дробным или меньше единицы, то есть число элементов ряда должно быть натуральным числом, что контролируется в программе. Также n может превысить значение maxINT = 214748367 (максимально допустимое значение для типа integer). В таком случае компилятор выдаст ошибку о превышении максимально допустимого знчения
i — переменная типа integer. Контролирует количество уже посчитанных элементов ряда.
S – переменная типа real. Является значением суммы i элементов ряда. Так как в конце выполнения программы i=n, переменная S будет содержать значение суммы n элементов ряда.
Текст программы.
program lab2; // Программа считает значение частичной суммы n элементов ряда S=((-1)^(n-1))*(1/n)
var sum: real; // sum - значение суммы i элементов ряда
var i,n: integer; //i - контролирует количество уже посчитанных элементов частичной суммы. n - количество элементов частичной суммы
begin
write ('Введите число n для вычисления частичной суммы n элементов ряда
(n натуральное)->');
readln (n);
while (n<1) do //Проверка на введение правильного количества элементов ряда. Нужно проверить является ли n натуральным.
Проверяется «n<1 ?» В случае ввода дробного значения
компилятор выдаст сообщение о ошибке
begin
write ('n должно быть натуральным! Введите n заново->'); readln (n); //Выполнение программы не продолжится, пока не будет введено n>=1
end;
(*продолжение смотри на странице 7)
(*продолжение)
sum:=0;
for i:=1 to n do //Подсчет частичной суммы n элементов ряда
begin
if (i mod 2)=0 then sum:=sum-1/i else sum:=sum+1/i;
//четные и первый (нулевой) элементы складываются, нечетные вычитаются так как ряд знакопеременный
end;
write ('Значение частичной суммы '); write (n); write (' элементов ряда = '); writeln (sum); //Вывод результата
write ('Ряд сходится к эталонному значению ln 2 = '); writeln (ln(2));
write ('Разность эталонного и полученного значений равна '); writeln(ln(2)-sum);
end.
Примеры выполнения программы в содержательной постановке
1. Ввод n=3.
Вывод: “Значение частичной суммы 3 элементов ряда = 0.833333333333333
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна -0.140186152773388”
2. Ввод n=4.
Вывод :“Значение частичной суммы 4 элементов ряда = 0.583333333333333
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна 0.109813847226612”
3. Ввод n=5.
Вывод “Значение частичной суммы 5 элементов ряда = 0.783333333333333
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна -0.0901861527733879”
4. Ввод n=6.
Вывод “Значение частичной суммы 6 элементов ряда = 0.616666666666667
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна 0.0764805138932787”
5. Ввод n=7.
Вывод “Значение частичной суммы 7 элементов ряда = 0.759523809523809
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна -0.0663766289638642”
6. Ввод n=10.
Вывод “Значение частичной суммы 10 элементов ряда = 0.645634920634921
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна 0.0475122599250246”
7. Ввод n=100.
Вывод “Значение частичной суммы 100 элементов ряда = 0.688172179310195
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна 0.00497500124975025”
8. Ввод n=1000.
Вывод “Значение частичной суммы 1000 элементов
ряда = 0.692647430559822
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна 0.000499750000123034”
9. Ввод n=10000.
Вывод “Значение частичной суммы 10000 элементов
ряда = 0.693097183059958
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна 4.99974999870201E-05”
10. Ввод n=100000.
Вывод “Значение частичной суммы 100000 элементов
ряда = 0.693142180584982
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна 4.99997496372639E-06”
Дополнительные примеры выполнения программы
11. Ввод n=0.
Вывод «n должны быть натуральным! Введите n заново->»
Ввод n=1.
Вывод «Значение частичной суммы 1 элементов ряда = 1
Ряд сходится к эталонному значению ln 2 = 0.693147180559945
Разность эталонного и полученного значений равна -0.306852819440055»
12. Ввод n=15.5.
Вывод «Unhandled Exception: System.FormatException: Входная строка имела неверный формат. в PABCSystem.PABCSystem.Read(Int32& x) {указание директории и названия программы}:строка 6
Замечание
Вообще, для выполнения задачи подсчета n элементов какого-либо ряда не обязательно писать программу на Паскале. Достаточно воспользоваться математическим пакетом (например «Smath Studio») и ввести там необходимый запрос.
Пример запроса для ряда, данного в формальной постановке задачи. Запрос выполнен в «Smath Studio» для значения n = 100000):