Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Первый семестр / Лабалаторная работа №2 / Лаболаторная работа №2

.odt
Скачиваний:
1
Добавлен:
28.05.2022
Размер:
207.54 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра математического обеспечения и применения ЭВМ

отчет

по лабораторной работе №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):

Соседние файлы в папке Лабалаторная работа №2