Laba_infa6 (Все ЛР)

2021-12-10СтудИзба

Описание файла

Файл "Laba_infa6" внутри архива находится в папке "Labs". Документ из архива "Все ЛР", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .

Онлайн просмотр документа "Laba_infa6"

Текст из документа "Laba_infa6"

Задача

Вычислить значение определенного интеграла от выбранной подынтегральной функции и заданных с клавиатуры интервала интегрирования, точности и двух значений начальных разбиений 4-мя методами:

  1. Метод левых прямоугольников:

Int = h * ∑ yi , h = (b-a) / n

  1. Метод трапеций:

Int = h * ((y0 + yn)/2 + ∑ yi )

  1. Метод кубических парабол:

Int = 3*h/8 * (y0+yn+2*S1+3*S2),

S1 = y3+y6+y9+y12+…

S2 = y1+y2+y4+y5+…

Условие: n - кратно 3.

  1. Метод Уэддля:

Int = 6*h/840 * (41*(y0+yn) + 82*S1 + 216*S2 + 27*S3 + 272*S4),

S1 = y6+y12+y18+y24+…

S2 = y1+y5+y7+y11+…

S3 = y2+y4+y8+y10+y…

S4 = y3+y9+y15+y21+…

Условие: n - кратно 6.



Требования

Требования к отчету:

  • Титульный лист;

  • Формулировка задания;

  • Обоснование используемых типов данных;

  • Листинг программы;

  • Набор исходных тестовых данных с результатами (скриншоты окна).

Общие для всех требования:

  1. Построить меню «по запросу» в виде:

    1. Ввод исходных данных

    2. Вычисление интеграла 4 способами

      1. функция 1

      2. функция 2

      3. функция 3

    3. Вывод таблицы с результатами

    4. Выход;

  2. Процедуры ввода данных и процедуры для каждого метода вынести в модуль;

  3. Подынтегральные функции передавать в процедуры методов в качестве параметров (использовать процедурный тип);

  4. Исходные данные: интервал, точность и два количества начальных разбиений вводить с клавиатуры;

  5. Вид результатов:

Метод Количество Значение

разбиений итераций интеграла

Прямоугольников n1 it1 s1 при n1

n2 it2 s2 при n2

Парабол n1 it1 s1 при n1

n2 it2 s2 при n2

и т.д.

Обоснование типов данных

Переменные для границ интервала, погрешности, значения функции и её интеграла возьмём типа double, так как это нецелые числа. Переменные-счётчики возьмём беззнакового типа word, так как они всегда больше 0 и принимают только целые значения. Переменные для выборов в меню сделаем типа shortint. Количество разбиений будет иметь тип smallint для возможности исправления неверного ввода пользователем.

Код

program laba6;

{Выполнил Кирдин М.Д., Вариант 9, Группа ФН12-11Б. Вычислить значение определенного интеграла от выбранной подынтегральной функции и заданных с клавиатуры интервала интегрирования, точности и двух значений начальных разбиений 4-мя методами.}

uses

crt,

lab6;

var

i, k: shortint;

//переменные для меню

S: double;

//значение интеграла

a, b: double;

//границы интегрируемого отрезка

h: double;

//шаг интегрирования

error: double;

//погрешность

n1, n2: smallint;

//количество разбиений

it1, it2: word;

//количество итераций

begin

repeat

ClrScr;

WriteLn('1 -> Input');

WriteLn('2 -> Integration of... ');

WriteLn('3 -> Display resulting table');

WriteLn('4 -> Exit');

Write('Select the action: ');

//очищаем окно от лишнего текста каждый раз после окончания действий определенного пункта меню

repeat

ReadLn(i);

if (i = 1) or (i = 2) or (i = 3) or (i = 4) then

break;

writeln('Incorrect input. Try again.');

until False;

//проверяем правильность ввода варианта в меню

case i of

1:

begin

Input(a, b, n1, n2, error);

writeln ('Input successful, press <Enter> to continue');

readln;

end;

2:

begin

WriteLn('1 -> f(x) = cos(x)');

WriteLn('2 -> f(x) = pi^x');

WriteLn('3 -> f(x) = 4x^2 - 1');

repeat

ReadLn(k);

if (k = 1) or (k = 2) or (k = 3) then

begin

case k of

1:

writeln ('You have chosen cos(x). Press <Enter> to continue.');

2:

writeln ('You have chosen pi^x. Press <Enter> to continue.');

3:

writeln ('You have chosen 4x^2 - 1. Press <Enter> to continue.');

end;

//выбираем функцию, которую будем интегрировать

readln;

break;

end;

writeln('Incorrect input');

until False;

end;

3:

begin

case k of

1:

writeln('Displaying cos(x)');

2:

writeln('Displaying pi^x');

3:

writeln('Displaying 4x^2 - 1');

end;

writeln ('Integration limits are [ ', a:5,'; ', b:5, ']');

writeln('Method of ': 25, 'Amount of ': 25,

'Value of integration': 25);

writeln('divisions': 35, 'iterations': 15);

left_out(a, b, n1, n2, it1, it2, S, h, error, k);

trapezoid_out(a, b, n1, n2, it1, it2, S, h, error, k);

cubics_out(a, b, n1, n2, it1, it2, S, h, error, k);

Weddle_out(a, b, n1, n2, it1, it2, S, h, error, k);

writeln('Press <Enter> to continue');

readln;

end;

4:

halt;

end;

until False;

end.

unit lab6;

{модуль, содержащий все необходимые процедуры}

interface

procedure Input (var a_p, b_p: double; var n1_p, n2_p: smallint; var error_p: double);

//процедура ввода данных

function funk (x_f: double; k_f: shortint): double;

//функция для подынтегральных функций

procedure left (a_p1, b_p1: double; n_p1: smallint; var S_p1: double; var it_p1: word; h_p1: double; error_p1: double; k_p1: shortint);

//расчёт методом левых прямоугольников

procedure trapezoid (a_p2, b_p2: double; n_p2: smallint; var S_p2: double; var it_p2: word; h_p2: double; error_p2: double; k_p2: shortint);

//расчёт методом трапеций

procedure cubics (a_p3, b_p3: double; n_p3: smallint; var S_p3: double; var it_p3: word; h_p3: double; error_p3: double; k_p3: shortint);

//расчёт методом кубических парабол

procedure Weddle (a_p4, b_p4: double; n_p4: smallint; var S_p4: double; var it_p4: word; h_p4: double; error_p4: double; k_p4: shortint);

//расчёт методом Уэддля

procedure left_out (a_o1, b_o1: double; n1_o1, n2_o1: smallint; it1_o1, it2_o1: word; S_o1: double; h_o1: double; error_o1: double; k_o1: shortint);

//вывод результатов левых прямоугольников

procedure trapezoid_out (a_o2, b_o2: double; n1_o2, n2_o2: smallint; it1_o2, it2_o2: word; S_o2: double; h_o2: double; error_o2: double; k_o2: shortint);

//вывод результатов трапеций

procedure cubics_out (a_o3, b_o3: double; n1_o3, n2_o3: smallint; it1_o3, it2_o3: word; S_o3: double; h_o3: double; error_o3: double; k_o3: shortint);

//вывод результатов кубических парабол

procedure Weddle_out (a_o4, b_o4: double; n1_o4, n2_o4: smallint; it1_o4, it2_o4: word; S_o4: double; h_o4: double; error_o4: double; k_o4: shortint);

//вывод результатов метода Уэддля

implementation

procedure Input (var a_p, b_p: double; var n1_p, n2_p: smallint; var error_p: double);

begin

repeat

write ('Enter the interval of integration: ');

readln (a_p, b_p);

if (a_p < b_p) then

break;

writeln ('Incorrect input');

until false;

repeat

write ('How many divisions will be made(enter 2 numbers)? ');

readln (n1_p, n2_p);

if (n1_p > 0) and (n2_p > 0) then

break;

writeln ('Incorrect input');

until false;

repeat

write ('Enter error: ');

readln (error_p);

if (error_p > 0) then

break;

writeln ('Incorrect input');

until false;

//для каждого значения, вводимого с клавиатуры делаем проверку на правильность, прогоняем каждое из них пока пользователь не введёт правильное значение

end;

function funk (x_f: double; k_f: shortint): double;

begin

case k_f of

1: funk := abs (cos (x_f));

2: funk := exp (x_f * ln(pi));

3: funk := 4 * x_f * x_f - 1;

end;

end;

procedure left (a_p1, b_p1: double; n_p1: smallint; var S_p1: double; var it_p1: word; h_p1: double; error_p1: double; k_p1: shortint);

var

i: word;

//переменная-счётчик

S1: double;

//промежуточное значение интеграла

begin

S_p1 := 0;

h_p1 := (b_p1 - a_p1) / n_p1;

for i:= 0 to n_p1 - 1 do

begin

S1 := S1 + funk (a_p1 + h_p1 * i, k_p1) * h_p1;

if (S1 - S_p1 > error_p1) then

begin

S_p1 := S1;

end;

//учитываем изменения в значении только если они меньше погрешности

end;

it_p1 := n_p1 + 1;

end;

procedure trapezoid (a_p2, b_p2: double; n_p2: smallint; var S_p2: double; var it_p2: word; h_p2: double; error_p2: double; k_p2: shortint);

var

i: word;

//переменная-счётчик

S1: double;

//промежуточное значение интеграла

y1, y2: double;

//боковые стороны трапеции

x: double;

//промежуточное значение аргумента

begin

S_p2 := 0;

h_p2 := (b_p2 - a_p2) / n_p2;

x:= a_p2;

for i := 0 to n_p2 - 1 do

begin

y1 := funk (x, k_p2);

x := a_p2 + h_p2 * i;

y2 := funk (x, k_p2);

S1 := S1 + (y1 + y2) / 2 * h_p2;

if (S1 - S_p2 > error_p2) then

S_p2 := S1;

end;

it_p2 := n_p2 + 1;

end;

procedure cubics (a_p3, b_p3: double; n_p3: smallint; var S_p3: double; var it_p3: word; h_p3: double; error_p3: double; k_p3: shortint);

var

i: word;

//переменная счётчик

x: double;

//промежуточное значение аргумента

S1, S1_1, S2, S2_1: double;

//S1, S2 и их промежуточные значения

begin

S1_1 := 0;

S2_1 := 0;

S_p3 := 0;

h_p3 := (b_p3 - a_p3) / n_p3;

it_p3 := n_p3 + 1;

for i := 1 to n_p3 do

begin

x := a_p3 + h_p3 * i;

if (i mod 3 = 0) then

begin

S1_1 := S1_1 + funk (x, k_p3);

if (S1_1 - S1 > error_p3) then

S1 := S1_1;

end;

if (i mod 3 <> 0) then

begin

S2_1 := S2_1 + funk(x, k_p3);

if (S2_1 - S2 > error_p3) then

S2 := S2_1;

end;

//выбираем значения в итерациях, кратных 3, и все остальные

end;

S_p3 := 3 / 8 * h_p3 * (funk (a_p3, k_p3) + funk (b_p3, k_p3) + 2*S1 + 3*S2);

end;

procedure Weddle (a_p4, b_p4: double; n_p4: smallint; var S_p4: double; var it_p4: word; h_p4: double; error_p4: double; k_p4: shortint);

var

i: word;

// переменная-счётчик

x: double;

//промежуточное значение аргумента

S1, S1_1, S2, S2_1, S3, S3_1, S4, S4_1: double;

//S1, S2, S3 и S4 с их промежуточными значениями

begin

S_p4 := 0;

h_p4 := (b_p4 - a_p4) / n_p4;

it_p4 := n_p4 + 1;

for i := 1 to n_p4 do begin

begin

x := a_p4 + h_P4 * i;

if (i mod 6 = 0) then

begin

S1_1 := S1_1 + funk (x, k_p4);

if (S1_1 - S1 > error_p4) then

S1 := S1_1;

end

else

begin

if (i mod 2 <> 0) and (i mod 3 <> 0) then

begin

S2_1 := S2_1 + funk (x, k_p4);

if (S2_1 - S2 > error_p4) then

S2 := S2_1;

end;

if (i mod 2 = 0) then

begin

S3_1 := S3_1 + funk (x, k_p4);

if (S3_1 - S3 > error_p4) then

S3 := S3_1;

end;

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
427
Средний доход
с одного платного файла
Обучение Подробнее