3 4 2 2 М инистерство образования Республики Беларусь БЕЛ О РУ С СК И Й Н А Ц И О Н А Л ЬН Ы Й ТЕХ Н ИЧЕСКИ Й У Н И ВЕРС И ТЕТ Кафедра «Теория механизмов и маш ин» ИНФОРМАТИКА Методическое пособие к лабораторным работам для студентов машиностроительных специальностей Ч а с т ь 4 М и н с к 2 0 0 8 Министерство образования Республики Беларусь БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра «Теория механизмов и машин» ИНФОРМАТИКА Методическое пособие к лабораторным работам для студентов машиностроительных специальностей В 4 частях Ч а с т ь 4 Второе издание, исправленное и дополненное М и н с к 2 0 0 8 УДК 6 * ^ 0 7 5 .4 ) БСК 32.0fli И74 Авторы: П. П. Анципорович, О. И. Алейникова, Т. И. Булгак, Н. Я. Луцко Рецензенты: В. И. Туромша, И. А. Каштальян Анципорович, П.П. И 74 Информатика: метод, пособие к лабораторным работам для студ. машиностроит. спец.: в 4 ч. / П. П. Анципорович [и др.]. - 2-е изд., испр. и доп. - Минск: БНТУ, 2008. - Ч. 4. - 85 с. ISBN 978-985-479-972-8 (4.4). Учебное пособие представляет собой практикум по курсу «Инфор­ матика», предназначенное для студентов машиностроительного про­ филя. Практикум состоит из четырех частей. Часть 4 посвящена про­ граммированию задач с использованием подпрограмм, записей, фай­ лов, а также численным методам решения инженерных задач. С це­ лью лучшего понимания процесса программирования лабораторные рабо-ты включают два этапа - разработку и построение алгоритма, напи-сание программы на алгоритмическом языке Паскаль. Часть 1 данного пособия была переиздана в 2007 г., часть 2 - в 2006, а часть 3 - в 2008 г. (БНТУ). 1 -е издание вышло в БНТУ в 2005 г. УДК 681.3(075.4) ББК 32.081 ISBN 978-985-479-972-8 (4.4) ISBN 978-985-479-739-7 © БНТУ, 2008 Л а б о р а т о р н а я р а б о т а № 3. 8 ПРОГРАММИРОВАНИЕ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ПОДПРОГРАММ-ПРОЦЕДУР Цель работ ы: приобретение практических навыков составления алгоритмов, программ с использованием подпрограмм-процедур. Теоретические сведения Часто в программе обнаруживаются однотипные участки, кото­ рые выполняют одни и те же действия, но с различными данными. Такие участки программ целесообразно оформлять в виде подпро­ грамм. Одним из видов подпрограмм являются процедуры. Они раз­ мещаются в разделе описания процедур и функций и имеют вид Procedure <имя>(<формальные параметры>); {заголовок процедуры} <разделы описания данных> begin <раздел операторов> end; где <имя> - имя процедуры; <разделы описания данных> - могут содержать разделы Label, Const, Type, Var и раздел описания процедур и функций; <формальные параметры> - список переменных с указанием их типа. Параметры могут быть трех видов: 1) параметры-значения (входные параметры); 2) параметры-переменные (выходные параметры); 3) параметры функционально-процедурного типа. Входные параметры - переменные, которые передаются в про­ цедуру для ее выполнения. Они могут изменять свои значения, но эти изменения не возвращаются в головную программу. Описание входных параметров процедуры в списке формальных параметров имеет следующий вид: <список переменных> : <тип1> ; <список переменных 2> : <тип2> ; . . . Выходные параметры - это переменные, которые являются ре­ зультатом выполнения процедуры, их значения возвращаются в го­ 3 ловную программу. При описании выходных параметров процеду­ ры в списке формальных параметров перед каждым описанием пи­ шется слово Var: Var <список переменных1> : <тип1> ; Var <список переменных 2> : <тип2> ; Пример заголовка процедуры имеет вид Procedure SUM(k:integer;x,у:real;Var a,b:integer; Var w:real); Вызов процедуры производится в требуемом месте раздела опе­ раторов в виде <имя процедуры> (<фактические параметры>) ; где фактические параметры - данные, с которыми выполняется про­ цедура, перечисляются через запятую без указания их типа. Между формальными и фактическими параметрами должно быть полное соответствие - по количеству; - по порядку их следования; - по типу данных. Фактическими входными параметрами могут быть константы, переменные, выражения. Фактическими выходными параметрами могут быть только переменные. Пример обращения к процедуре SUM может иметь вид SUM(kl,xl,yl,al,bl,wl); или SU M (2,2.7,xl+yl,al,bl,wl); В данном примере шести формальным параметрам соответству­ ет шесть фактических, из них двум формальным выходным пара­ метрам а и b целого типа и одному w вещественного типа соответ­ ствуют два фактических а 1, Ы типа integer и один wl типа real. Пр име р . Для заданных массивов Р(8), <2(15), R(k), где к < 25, определить максимальные элементы и их месторасположение. Очевидно, что повторяющимися процессами являются: 1) ввод массива; 2) определение максимального элемента и его номера. Реализуем их двумя процедурами - VVOD и МАХ. 4 В процедуре ввода массива VVOD формальными параметрами являются следующие: п - размерность массива - входной параметр; А — массив - выходной. Процедура МАХ имеет формальные параметры: п - размерность массива - входной; А - массив - входной; атах - значение максимального элемента - выходной; imax - значение его номера - выходной. При решении поставленной задачи потребуется обратиться к на­ званным процедурам для каждого заданного массива. Схемы алгоритмов головной программы и процедур имеют вид начало I Введите массив Р( 8) VVOD Введите массив 6 ( 15) Ввод массива Р{8) 8, Р - фактические параметры VVOD Ввод массива Q(\5) 15, Q - фактические параметры Ввод массива R(k), к, R - фактические параметры Поиск максимального значения элемента массива Р и его номера, 8, Р,ртах, pimax - фактические параметры Поиск максимального значения элемента массива Q и его номера, 15, Q, qmax, qimax - фактические параметры Поиск максимального значения элемента массива и его номера, к, R, rmax, rimax - фактические параметры 6 вход Процедура VVOD Формальные параметры: и: integer; Var A : Vect; i=1, п At выход Процедура МАХ 7 Текст программы на языке Паскаль имеет вид Program 1г9_111;{ 103111 User 54 Иванов И. Uses Crt; Type Vect=array [1..25] of real; Var k,pimax,qimax,rimax:integer; P,Q,R:Vect; pmax, qmax, m a x : real ; Procedure VVOD(n:integer;Var A:vect); Var i:integer; begin for i:=l to n do read(A[i]); writeln end; Procedure MAX(n:integer;A:Vect; Var amax:real;Var imax:integer); Var i:integer; begin amax:=A[1]; imax:=l; for i:=2 to n do if A[iJ>amax then begin amax:=A[i]; imax:=i end end; begin Clrscr; writeln('Введите массив P(8):'); VVOD(8,P); writeln('Введите массив Q(15):'); VVOD(15,Q); writeln(’Введите количество элементов' 'массива R:'); readln{k); writeln{'Введите массив R(k)'); VVOD(k,R); writeln('Максимальный элемент 'массива P и его номер:'); MAX (8, P,pmax,pimax) ; writeln(1P [1,pimax:2,']=',pmax:5:2); writeln('Максимальный элемент 'массива Q и его номер:'); МАХ (15, Q, qmax, qimax) ; writeln('Q [',qimax:2, '] = ' , qmax:5 : 2 ) ; writeln('Максимальный элемент ', 'массива R и его номер:'); MAX(k,R,rmax,гimax); writeln('R [',rimax:2 ,' ] =' ,rmax:5 :2 ); Repeat until Keypressed end. Результаты работы программы имеют вид Введите массив Р(8): 2 .3 4 .6 1 .6 - 5 . 6 3 . 4 - 7 . 5 - 9 . 2 6 . 1 Введите массив Q (15): 4 . 1 6 . 1 6 . 8 - 3 . 6 - 9 . 2 0 . 1 2 . 3 4 . 3 6 . 3 5 . 6 - 2 . 4 - 5 . 2 8 . 2 0 . 3 6 . 4 ' Введите количество элементов массива R: 6 Введите массив R(k) 4 . 6 1 . 5 5 . 5 - 0 . 2 0 . 1 - 4 . 0 Максимальный элемент массива Р и его номер Р[ 8]= 6 . 10 Максимальный элемент массива Q и его номер Q[13]= 8 . 20 Максимальный элемент массива R и его номер R [ 3]= 5 . 50 Контрольные вопросы 1. В каких случаях используются процедуры? 2. Какого вида могут быть формальные параметры? 3. Опишите структуру процедуры. 4. Каковы правила обращения к процедуре? Задания для выполнения В а р и а н т 1 Используя массивы А(к), В(к), где к < 15, построить массивы С(к), D(k) с элементами Д = а • В( , где х, а - вещественные. В а р и а н т 2 Используя массивы Z(l), W(l), где I < 25, построить массивы Н{1), G(t) с элементами гг "Q. - —L , где а, с - вещественные. Используя массивы Х(т), Y(m), где т < 20, построить масси­ вы К(т), L(m) с элементами В а р и а н т 4 Используя массивы T(l), V(l), где I < 2 3 , построить массивы Z(7), Y{1) с элементами В а р и а н т 5 Используя массивы А(к), В(к), С(к), где к < 18, построить массивы Н{к), G(k) с элементами с В а р и а н т 3 10 В а р и а н т 6 Используя массивы Н(т), G(m), где т < 17, построить масси­ вы А(т), В(т) с элементами В{ ~ JIG,] + /2 ? где h ,h ~ вещественные, положительные. В а р и а н т 7 Используя массивы С(к), ДА:), где £ < 14, построить массивы 0(A) с элементами Qt ~ 2 fc -D ? , где fd ,fc - вещественные. В а р и а н т 8 Используя массивы Д т ) , Г(т), где т< 16, построить масси­ вы VX(m), VY(m) с элементами YYi = р • 2 + Р , где а , Р - вещественные, положитель­ ные. В а р и а н т 9 Используя массивы Sin), Р(п), где п <22, построить массивы AS(n), АР(п) с элементами В а р и а н т 10 Используя массивы К(п), Q(ri), где п < 24, построить массивы ХК(п), Х(п) с элементами R ^ 2 f d - c f ; APj = — , где t\ ,t2 - вещественные. XKt = V 9+ In |* ,- |; 11 x t = v © + in| a | , где ф, со - вещественные, положительные. В а р и а н т 11 Определить площадь S заштрихованной фигуры между кривыми уа(х) и уь(х), которые заданы массивами координат у а, ха, уь, %ь из п элементов: i 1 2 3 4 5 Уа 25 30 40 80 120 Ха 0 2 3 5 10 Уь 10 15 20 70 100 x h 0 2 3 5 10 Площадь определяется как S = Sa-Sb, где Sa и Sb - площади, за­ ключенные между соответствующей кривой и осью X. Для ввода массивов координат разработать процедуру VVOD. Для вычисления площадей Sa и Sb разработать процедуру SQ для расчета площадей на элементарных участках и их суммирования. 12 = 2 Ц ± А ( Х1_ Дм) В а р и а н т 12 Заданы проекции векторов: V(Vx = 8,66; Vy = 5), F (Fx = -8,66; Fy = 5), a (ax = -8,66; ay = -5), fc(x = 8,66;_y = -5). Определить длины векторов и углы наклона их относительно оси X (в радианах и градусах). Для этого разработать процедуру VECTOR. 13 В а р и а н т 13 Для фигуры, образованной из стержней постоянного сечения, определить координаты центров масс каждого стержня, если зада­ ны координаты Х\, у\, х%, Уъ ... , *п, Уп- Для этого разработать про* цедуру CENTR, производящую вычисление: Х; x i+ 1 У / + У 1+1Х с; =— 1 > Ус, = если i = п, то Хс, = *‘ +Х' , Гс, 2 У; + Ух 2 2 Для ввода координат х\, у\, Хг, Уг, ■■■, ^п, Jn разработать процеду­ ру VVOD. Х2,У2 ХиУ\ i 1 2 3 4 х, 2 5 7 3 У* 4 7 5 2 Хз,Уз Х 4, У 4 о В а р и а н т 14 Заданы три треугольника со сторонами а\, b\, с\, a-i, b% с% аз, Ьз, сз. Определить углы треугольников (в градусах и радианах) cxi, Pi, Уь ..., аз, Рз, уз, используя теорему косинусов. 14 с Для ввода исходных данных использовать процедуру VVOD, для определения углов - процедуру UGOL. / 1 2 3 а 35 30 50 Ъ 40 30 30 с 50 40 40 Л а б о р а т о р н а я р а б о т а № 3. 9 ПРОГРАММИРОВАНИЕ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ПОДПРОГРАММ-ФУНКЦИЙ Це ль работ ы: приобретение практических навыков составле­ ния алгоритмов, программ с использованием подпрограмм-функций. Теоретические сведения Подпрограмма, результатом выполнения которой является един­ ственное значение, называется функцией. Особенности функции: 1) функция, имея только одно значение выполнения, может иметь несколько входных параметров; 2) в заголовке функции обязательно должен быть указан тип ре­ зультата; 3) в разделе операторов функции должен присутствовать опера­ тор присваивания. В его левой части стоит переменная с именем этой функции, а в правой - результат выполнения функции. Эта пе­ ременная не описывается в разделе описания переменных; 4) вызов функции в основной программе осуществляется непо­ средственно внутри выражения по ее имени с указанием фактиче­ ских параметров. Функция имеет вид Function <имя>(<входные формальные параметры>):<тип резуль­ тата^ {заголовок функции} <разделы описания данных> 15 begin <операторы> <имя>:=<результат> end; где <имя> - имя функции; <разделы описания данных> могут содержать разделы Label, Const, Type, Var и раздел описания процедур и функций; •-формальные параметры> - список переменных с указанием их типа; <тип результата> - тип возвращаемого результата, который мо­ жет быть вещественным, целым, символьным или логическим. Например, Function DL(г:real):real; <разделы описания данных> begin <операторы> DL:=2*Pi*r; end; Пример . Вычислить сумму длин трех окружностей с радиуса­ ми г\ = 5,7мм, гг - 4,3мм, гз = г\ + г%. Поскольку повторяющимся действием является вычисление длины окружности I = 2пг, создаем подпрограмму-функцию DL с входным параметром г и результатом DI вещественного типа. Схемы алгоритмов головной программы и функции имеют вид 16 D = DL(n)+DL(r2)+DL(ri+r2) D конец Функция DL Формальные параметры: г : real; тип результата - real Текст программы на языке Паскаль имеет вид Program 1г10_110;{ 103110 User20 Киреев С. } Uses Crt; Var D, rl, r2:real; Function DL(r:real):real; begin DL:=2*Pi*r end; begin clrscr; write('Введите rl: '); readln(rl); write(’Введите r2: '); readln(r2); writeln; D:=DL(rl)+DL(r2}+DL(rl+r2); writeln('Полученный результат D=', D:6:3); repeat until keypressed end. Результаты работы программы имеют вид Введите rl: 2.4 Введите г2: 5.1 Полученный результат D=94.248 Контрольные вопросы 1. В каких случаях используются подпрограммы-функции? 2. Опишите структуру функции. 3. Каковы правила обращения к функции? 4. Назовите основные отличия функции от процедуры. Задания для выполнения В а р и а н т 1 Используя массивы Т(к), F(t), где к,1 <12, вычислить к Г О ? = -=!— ,где Т, < 0 , F , < 0 . Г О /=1 В а р и а н т 2 Используя массивы А(к), В(т), где к, т < 23, вычислить к Z 4 S = — , где Ак < 0 , Д < 0. т 1 1 z * . /=1 18 В а р и а н т 3 kl Используя массивы X(l), Z(k), где !,к < 20, вычислить кс = — , к 2 где к\ - количество элементов, равных заданному вещественному с в массиве Х\ к2 - количество элементов, равных заданному вещественному Ъ в массиве Z. В а р и а н т 4 Используя массивы А(п), D(m), где п,т <12, вычислить ml = та ■ m d , где та - максимальный элемент массива/!; md - максимальный элемент массива D. В а р и а н т 5 Используя массивы W{t), A(s), где t,s < 20, вычислить р = Y l w i + t l Ai *где w i > *’5 > л >> !’5 ■ *■=1 i=i В а р и а н т 6 Используя массивы Т(к), F(l), где к,1 < 14, вычислить S = i t T i + f dFi ,m e T i < 2 ,7 ,F i <2,7. i= i /= i В а р и а н т 7 Используя массивы B(t), Т(т), где 1,т < 14, вычислить k = kb+kt, где кЪ - количество элементов, больших заданного вещественного х в массиве 5; kt - количество элементов, больших заданного вещественного у в массиве Т. 19 В а р и а н т 8 тс Используя массивы С (г), H{t), где r,t < 18, вычислить т - —- mh где тс - минимальный элемент массива С; mh - минимальный элемент массива Н. Используя массивы G(n), Т(к), где п,к < 20, вычислить Используя массивы Q(s), C(m), где s,m< 24, вычислить rk=kq-kc, где kq - количество элементов, меньших заданного вещественного а в массиве Q\ кс - количество элементов, меньших заданного вещественного Ъ в массиве С. В а р и а н т 11 Вычислить площадь многоугольника, используя формулу для определения площади треугольника 5 = : Z G! - Z ^ ’ r«e l ^ G< <5, 2 , 1 <7; <5,2. i=1 г=1 В а р и а н т 10 где р - полупериметр. Значения а = 20, Ъ = 30, с = 45, d= 15, е = 5 0 ,/= 30, g =35. £ = л/р { р ~ аХр ~ b](p - с ) , В а р и а н т 12 Вычислить с использованием функции возведения в степень Step: 20 при х > 0 х а = еаЛпх; при х < О и целом показателе степени вычисления производятся через цикл; при х < 0 и дробном показателе степени вывести сообщение “Осно­ вание степени отрицательное11 и прервать выполнение программы. Тестовые значения х - 2 , х = -6, х = 8. В а р и а н т 13 Вычислить z - arccos а + arccos(a + b) + arccos 0, используя 71 X функцию arccos х - ---- arctg ... — , при а = 0,51, b = 0,367. 2 V l - x 2 В а р и а н т 14 Вычислить у - tgx + tg2 х + ... + tglO х при* = 30°. В а р и а н т 15 Даны а, Ь, с - длины сторон треугольника. Найти длины ме­ диан треугольников: 1) а = 100,6 = 100, с =141; 2) а = 90, Ъ = 90, с = 90; 3) а= 100, Ь = 80, с = 174,2. Дтина медианы, проведенной к стороне а, равна Аа\ = 0,5л/2£2 + 2с2 - д2 . В Л а б о р а т о р н а я р а б о т а № 3 . 1 0 РАБОТА С ФАЙЛАМИ Цель работ ы: получить практические навыки работы с тек­ стовыми файлами. Теоретические сведения В случае хранения информации в текстовых файлах обработка их производится с помощью стандартных процедур. 21 Так, чтобы использовать исходные данные, записанные на диск в файле Namel, необходимо в программе: 1. В разделе описания переменных Var описать файловую пере­ менную / 1 типа text в виде Var fl:text; 2. В разделе операторов выполнить следующие действия: 2.1. связать файловую переменную/1 с внешним файлом Namel, обратившись к стандартной процедуре Assign^ 1,Namel); 2.2. открыть файл для чтения, обратившись к стандартной про­ цедуре Reset(/"1); 2.3. прочитать данные из файла, обратившись к стандартной про­ цедуре Read(/1 ,<список ввода>); 2.4. закрыть файл, обратившись к стандартной процедуре Close(/l). Например, Assign(f1, 'Lrl0_136.dat') ; Reset(f1); Readln(fl,xl,x2); Read(f1,x3); Readln(f1,x4,xn); Close(f1); Здесь xl, x2, xn - переменные, значения которых счи­ тываются из файла Lrl0_136.dat. Чтобы записать результаты в файл Name2, необходимо: 1. В разделе описания переменных Var описать файловую пере­ менную / 2 типа text в виде Var f2:text; 2. В разделе операторов выполнить следующие действия: 2.1. связать файловую переменную/ 2 с внешним файлом Name2, обратившись к стандартной процедуре Ass!gn(/"2,Name2); 2.2. открыть файл для записи, обратившись к стандартной про­ цедуре Rewrite(/2); 22 2.3. записать данные в'файл, обратившись к стандартной проце­ дуре W гке(/"2,<список вывода>); 2.4. закрыть файл, обратившись к стандартной процедуре Close{/2). Например, Assign(f2, 'Lrl0_136.rez1) ; Rewrite(f2); Writeln(f2,xl,x2); Write(f2,x3); Writeln(f2,x4,xn); Close(f2); Здесь x l, x2, ..., xn - переменные, значения которых записыва­ ются в файл Lrl0_136.rez. Порядок выполнения работы 1. Набрать текст Pascal-программы, записать на диск и откомпи­ лировать. 2. До первого выполнения программы создать в текстовом редакторе файл исходных данных с расширением .dat, набирая зна­ чения исходных данных в соответствии со списками ввода. Сохра­ нить файл. Для этого: 2.1. активизировать команду File; 2.2. в локальном меню выбрать команду New; 2.3. набрать значения исходных данных в соответствии со спис­ ками ввода; 2.4. сохранить файл с расширением .dat. 3. Вернуться в созданный файл с расширением .pas. Для этого: 3.1. активизировать команду File; 3.2. в локальном меню выбрать команду Directory; 3.3. проверить наличие шаблона *.* и нажать клавишу <Ввод>; 3.4. выбирать нужный файл и нажать <Ввод>. 4. Выполнить программу. 5. Открыть файл результатов, выполняя действия п.З, и проана­ лизировать результаты. 6. Для возврата к тексту программы выполнить действия п.З. 23 Пример . Для заданного массива А(5) и вещественного числа х построить массив 5(5), в котором В, = А/ + х . Исходные данные прочитать из файла. И сходны е данны е 4 .5 - 1 . 4 3 . 6 8 . 1 - 4 . 5 2 . 8 Сформировать файл результатов, содержащий исходные данные и результаты работы программы с пояснительным текстом. Вид файла исходных данных определяет следующую последова­ тельность ввода: а) ввод строковой переменной st, которой соответствует строковая константа И сходны е данны е; б) ввод переменной х, которой соответствует вещественная константа 4 . 5 ; в) ввод массива Л(5), которому соответствуют константы - 1 . 4 3 . 6 8 . 1 - 4 . 5 2 . 8 . Схема алгоритма и текст программы имеют вид /1 , ’lrl0.dat’ / 2 , ’lrlO.rez’ Я /= 1, 5 А, <- / 2 Значение x=, x Полученный массив В: /2 /2 / - 1 , 5 Bi /2 CLOSE /2 Результат записан в файл lrl O.rez 26 Program 1г10_132;{103132 User20 Киреев С.И.} Uses crt; Type Vector=array[1..20] of real; Var A,В:Vector; i:integer; к :real; st:string[15]; f1,f2:text; begin ClrScr; Assign(f1,1lrlO.dat1); Assign(f2,'lrlO.rez1); Reset(f1); readln(f1,st); readln(f1,x); for i:=l to 5 do read(fl,A[i]); Close(f1); writeln('Данные прочитаны из файла lrl0.dat for i:=l to 5 do В [i],: =fA[i]+x; Rewrite(f2); writeln(f2,' ':5,st); writeln(f2,' Массив A:1); for i:=l to 5 do write(f2,A[i]:5:2,' '); writeln(f2); writeln(f2); write(f2,' Значение x='); writeln(f2,x:5: 2) ; writeln(f2); writeln(f2," 4 Полученный массив В:1); for i:=l to 5 do write(f2,В [i] :5:2, ' '); Close(f2); writeln('Результат записан в файл lrlO.rez' Repeat until keypressed end. Результаты работы программы имеют вид: Данные прочитаны из файла lrl0.dat Результат записан в файл lrlO.rez Файл результатов lrlO.rez имеет вид Исходные данные Массив А: -1.40 3.60 8.10 -4.50 2.80 Значение х= 4.50 Полученный массив В: 3.10 8.10 12.60 0.00 7.30 Контрольные вопросы 1. Какие операторы необходимы для чтения исходных данных из файла? 2. Какие операторы необходимы для записи результатов в файл? 3. Как создать на диске файл, содержащий значения исходных данных? 4. Какие действия необходимо выполнить для просмотра файла результатов? Задания для выполнения В а р и а н т 1 1) Создать текстовый файл dl.dat, содержащий строковые конс­ танты и одномерный массив студент группы 10313 6 Сидоров И.Д. 3.2 7.1 -4.5 -2.3 5.1 -7.1 5.2 2.4 2) Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла dl .dat; b) вычисление суммы положительных и произведения отри­ цательных элементов массива; c) вывод в файл результатов dl.rez : 28 - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. В а р и а н т 2 1. Создать текстовый файл d2.dat, содержащий строковые кон­ станты и одномерный массив студент группы 103142 2.4 -4.6 8.2 0.8 -7.4 6.3 -0.9 Петров Д.А. 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d2.dat; b) вычисление суммы и количества элементов массива, при­ надлежащих отрезку [0,1; 2,5]; c) вывод в файл результатов d2.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. В а р и а н т 3 1. Создать текстовый файл d3.dat, содержащий строковые кон­ станты и одномерный массив Игнатов Б.Д. студент группы 303236 -4.5 -7.2 6.4 9.6 2.08 -7.5 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d3.dat; b) вычисление произведения и количества элементов масси­ ва, принадлежащих отрезку [-1.4; 6,5]; c) вывод в файл результатов d3.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. В а р и а н т 4 1. Создать текстовый файл d4.dat, содержащий строковые кон­ станты и одномерный массив студент группы 103152 7.1 -5.1 7.1 -2.4 5.3 7.6 7.8 Туров Е.Д. 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d4.dat; b) вычисление суммы и количества элементов массива, при­ надлежащих отрезку [-2,9; 4,5]; c) вывод в файл результатов d4.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; ■ - вычисленных значений с пояснительным текстом. В а р и а н т 5 1. Создать текстовый файл d5.dat, содержащий строковые кон­ станты и одномерный массив Дубов Н.Т. 3.4 -0.8 2.5 6.2 6.4 -6.7 -8.6 студент группы 1034 02 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d5.dat; b) вычисление суммы и количества отрицательных элементов массива; c) вывод в файл результатов d5.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. В а р и а н т 6 1. Создать текстовый файл d6.dat, содержащий строковые кон­ станты и одномерный массив 3.6 7.8 -9.8 -0.5 7.6 8.7 0.9 Мурашко Е.Д. студент группы 103102 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d6.dat; b) вычисление количества положительных и количества от­ рицательных элементов массива; 30 с) вывод в файл результатов d6.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. В а р и а н т 7 1. Создать текстовый файл d7.dat, содержащий строковые кон­ станты и одномерный массив Панин Р.Л. 3.6 7.8 -9.8 -0.5 7.6 8.7 0.9 студент группы 103182 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d7.dat; b) вычисление произведения и количества положительных эле­ ментов массива; c) вывод в файл результатов d7.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. В а р и а н т 8 1. Создать текстовый файл d8.dat, содержащий строковые конс­ танты и одномерный массив Носов О.В. студент группы 103192 5.2 -2.3 5.2 8.4 -5.6 -8.7 -3.1 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d8.dat; b) вычисление суммы и количества элементов массива, рав­ ных 5,2; c) вывод в файл результатов d8.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. 31 В а р и а н т 9 1. Создать текстовый файл d9.dat, содержащий строковые кон­ станты и одномерный массив 2 3 5 7 - 9 4 7 6 5 Сидоров И.Д. студент группы 10313 6 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла d9.dat; b) вычисление произведения и количества нечетных элемен­ тов массива; c) вывод в файл результатов d9.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. В а р и а н т 10 1. Создать текстовый файл dl0.dat, содержащий строковые кон­ станты и одномерный массив студент группы 103142 2 5 3 - 7 5 - 7 4 Новиков Л.Д. 2. Построить вычислительный процесс, реализующий: a) ввод исходных данных из файла dl0.dat; b) вычисление суммы и количества четных элементов массива; c) вывод в файл результатов dlO.rez: - сведений о студенте; - заглавия исходного массива и значений его элементов; - вычисленных значений с пояснительным текстом. Задания для самостоятельной работы 1. Для заданного целочисленного массива Л5(15) определить сумму индексов четных элементов. Исходные данные ввести из файла Fxs.dat следующего вида: 7 4 -2 8 1 б 10 -1 4 2 -1 12 5 -7 -3 Массив XS: 32 Сформировать файл результатов Fxs.rez, содержащий поясни­ тельные тексты, исходные данные и результат вычислений. 2. Ввести массив D{6) из файла dz2.dat вида -1.2 5.7 4.1 6.8 -4.5 7.1 Сформировать файл результатов Otr.rez, содержащий поясни­ тельные тексты, исходный массив и его отрицательные элементы. Сформировать файл результатов Pol.rez, содержащий поясни­ тельные тексты, исходный массив и его положительные элементы. 3. Для заданных массивов А(6) и 5(8) определить произведение и количество элементов, принадлежащих отрезку [-1,4; 6,5]. Исход­ ные данные ввести из файлов: bl.dat вида -4.5 -7.2 6.4 9.6 2.08 -7.5 студент группы 103148 Новиков С.П. b2.dat вида 0.2 -5.3 0.3 4.7 3.5 9.7 1.1 6.9 Сформировать файл результатов Ab.rez, содержащий поясни­ тельные тексты, исходные данные и результаты вычислений. 4. Ввести массив Q(9) из файла z4.dat вида: -7.1 8 2.5 -4.5 7.8 -4.6 -5.1 0.6 3.5 Поменять в нем местами минимальный и максимальный элемен­ ты. Сформировать файл результатов z4.rez, содержащий поясни­ тельные тексты, заданный массив 6(9), построенный массив Q(9). 5. Для заданных матриц А(3, 4) и 5(3, 4) построить матрицы С = А + В и D ~ х - А . Исходные данные ввести из файла Matr .dat вида Переменная х:-0.5 Матрица А: 2.5 7.1 -4.8 2.5 4.3 7.8 1.6 -3.1 -1.2 -4.3 8.1 3.7 33 Матрица В: -1.2 7.3 4.2 -6.5 3.8 1.7 -1.5 1.8 -4.2 3.3 1.7 8.0 Сформировать файл результатов Matr.rez, содержащий поясни­ тельные тексты, исходные данные и результаты вычислений. 6. Для заданных целочисленных массивов С(11) и D(8) вычис­ лить сумму и количество четных элементов каждого массива. Ис­ ходные данные ввести из файлов: Z6_l.dat вида Массив С: 5 2 4 8 5 - 9 3 9 4 6 5 студент группы 103417 Z6_2.dat вида Массив D: 3 5 7 - 9 47 65 Николаев И.А. Сформировать файл результатов Z6.rez, содержащий поясни­ тельные тексты, исходные данные и полученные результаты. При организации вычислительного процесса использовать процедуры и (или) функции. Л а б о р а т о р н а я р а б о т а № 3 . 11 ПРОГРАММИРОВАНИЕ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ С ИСПОЛЬЗОВАНИЕМ ПЕРЕМЕННЫХ ТИПА ЗАПИСЬ Цель работ ы: приобретение практических навыков построе­ ния программ, содержащих переменные типа запись. Теоретические сведения Запись - структурированный тип данных, состоящий из фик­ сированного числа компонентов (полей, элементов) одного или не­ скольких типов. Например, записью является совокупность сведений об абоненте телефонной сети, включающая порядковый номер абонента, его фамилию и инициалы, номер телефона, домашний адрес. Телефон­ ный справочник можно представить как массив таких записей. В программе переменные типа запись целесообразно описывать, используя пользовательский тип, в виде 34 Туре <имя типа> = record <список компонентов 1> : <тип 1> ; <список компонентов 2> : <тип 2> ; <список компонентов п> : <тип п> end ; Var <имя записи> : <имя типа> ; . Здесь <список компонентов 1>, <список компонентов 2>, <список компонентов п> - перечни имен компонентов, разделен­ ных запятой, соответствующего типа <тип 1>, <тип 2 > , < т и п п>. Например, Туре Abon = record nom :integer; fio :string[40]; nomtel:string[8]; adres :string[60] end; Var abonent:Abon; {описание записи для отдельного абонента} Sprav:array [1..60000] of Abon; {описание телефонного справочника} {как массива переменных типа Abon}. Обращение к элементу записи выполняется с помощью состав­ ного имени в виде <имя записи> . <имя компонента> . Например, значением abonent .nomtel является номер теле­ фона отдельного абонента, имя Sprav[i] .adres позволяет об­ ратиться к домашнему адресу /-го абонента. Компонент записи используется как обычная переменная соот­ ветствующего типа в выражениях и операторах. Запись составных имен можно сократить, используя оператор присоединения With в виде With <имя записи> do <оператор> ; . Здесь <оператор> — простой или составной оператор языка Пас­ каль, в котором при ссылке на компонент записи используется только его имя. 35 Пример . В учреждении имеется ведомость выдачи зарплаты сотрудникам. Каждая её строка содержит порядковый номер со­ трудника, его фамилию и инициалы, занимаемую должность, раз­ мер зарплаты за прошлый месяц. Вывести сведения о сотрудниках, получивших зарплату выше средней. Используем следующие идентификаторы: п - количество сотрудников; Ved - ведомость о заработной плате; пот - порядковый номер сотрудника в ведомости; fio - фамилия и инициалы сотрудника; dolg - должность; zarp - размер заработной платы сотрудника; sum - суммарная заработная плата всех сотрудников; sr - средняя заработная плата. Исходные данные запишем на диск в файл Vedom.dat, например, в виде 5 1 Курбан С. Н. Секретарь 150.000 2 Николаев С. П. Заместитель 280.000 3 Петрова О. И. Инженер 220.000 4 Степанов А. И. Директор 330.000 5 Фигурнов И. П. Инженер 210.000 Схема алгоритма решения задачи имеет вид /1 , ’vedom.dat’ Я 36 Текст программы на языке Паскаль имеет вид Program 1гЗ_11;{103402 User65 Виктюк К.С.} Uses crt; Type Sotr = record nom:integer; 38 fio:string[16]; dolg:string[11]; zarp:real end; Var Ved:array[1..30] of Sotr; i,n:integer; sum,sr:real; f1:text; begin ClrScr; assign(f1, 'Vedom.dat1 ) ; reset(f1); readln(f1,n); writeln{' 1:6, 1 Ведомость выдачи зарплаты'}; writeln; for i:=l to n do with Ved[i] do begin readln(f1,nom,fio,dolg,zarp); writeln(nom:2,fio:16,dolg:12,zarp:10:3); end; writeln; sum:=0; for i:=l to n do sum:=sum+Ved[i].zarp; sr:=sum/n; writeln(' 1 : б,'Сотрудники, получающие', ' зарплату'); writeln (' вше средней'); for i:=l to n do with Ved[i] do if zarp>sr then writeln(nom:2,' ',fio:16,' ',dolg:ll, ' ',zarp:8:3); close(f1); repeat until keypressed end. 39 Результаты работы программы имеют вид Ведомость выдачи зарплаты 1 Курбан С. Н. 2 Николаев С. П. 3 Петрова О. И. 4 Степанов А. И. 5 Фигурнов И. П. Секретарь Заместитель Инженер Директор Инженер 150.000 280.000 2 2 0 . 0 0 0 330. 000 2 1 0 . 0 0 0 2 4 Сотрудники, получающие зарплату выше средней Николаев С. П. Заместитель 280.000 Степанов А. И. Директор 330.000 Контрольные вопросы 1. Приведите примеры использования записей. 2. Как описать запись в Паскаль - программе? 3. Как обратиться к компоненту (элементу) записи? 4. Приведите примеры выполнения действий над компонентами записи. Задания для выполнения В а р и а н т 1 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, получивших 9 по информатике. Значения 4 1 Петров Олег 103402 5 6 4 2 Фролов Петр 103122 9 6 7 3 Туров Александр 103402 8 9 9 4 Фомин Егор 103152 9 7 9 40 В а р и а н т 2 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, получивших 7 по математике. Значения 4 1 Петров Игорь 103122 4 5 7 2 Фроликова Анна 103172 7 5 8 3 Туров Александр 103402 7 8 9 4 Фомичев Петр 103152 9 8 9 В а р и а н т 3 Дана ведомость успеваемости студентов. Каждая её строка со ­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике Вывести сведения о студентах, получивших хотя бы одну 3. Значения 4 1 Попов Игорь 103402 3 2 3 2 Красикова Анна 103122 9 9 8 3 Туромша Слава 103402 3 3 5 4 Фомичев Петр 103162 9 8 9 В а р и а н т 4 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, успевающих на 9 и 10. Значения 4 1 Попов Игорь 103102 4 3 4 2 Краснова Елена 103132 9 10 9 3 Туромша Слава 103402 4 5 4 4 Кривец Петр 103152 10 9 9 41 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, получивших 7 или 8 по физике. Значения 4 В а р и а н т 5 1 Котов Игорь 103112 4 5 7 2 Михеева Ирина 103182 9 5 8 3 Гаков Александр 103402 7 8 9 4 Ревич Дмитрий 103152 10 7 9 В а р и а н т 6 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, успевающих на 8 и 9. Значения 4 1 Жук Павел 103402 4 3 5 2 Кириенко Света 103122 9 8 8 3 Титов Слава 103402 2 3 4 4 Хрущёв Женя 103162 9 8 9 В а р и а н т 7 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, получивших хотя бы одну 4. Значения 4 1 Попов Игорь 103402 4 3 4 2 Красикова Анна 103122 9 7 8 3 Туромша Слава 103402 7 4 5 4 Шилов Сергей 103162 8 8 9 42 В а р и а н т 8 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, успевающих на 4 и 5. Значения 1 Бойко Фёдор 103142 5 4 4 2 Кириенко Света 103122 9 8 8 3 Свиридов Кирилл 103402 4 4 5 4 Хрущёв Женя 103182 6 8 7 В а р и а н т 9 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, получивших хотя бы одну 6. Значения 4 1 2 3 4 Попов Игорь Дрозд Михаил Ревич Андрей Шилов Сергей 103402 103102 103402 103162 4 6 6 9 3 7 6 8 5 8 7 9 В а р и а н т 10 Дана ведомость успеваемости студентов. Каждая её строка со­ держит порядковый номер студента, его фамилию и имя, номер группы, полученные оценки по математике, физике, информатике. Вывести сведения о студентах, не имеющих оценок 9 и 10. Значения 4 1 2 3 4 Попова Ольга Кушнер Иван Сергеев Лев Шилов Сергей 103402 4 4 3 103122 9 8 7 103402 7 8 6 103162 9 8 10 43 Задания для самостоятельной работы 1. В диспетчерской имеются сведения об аудиториях в виде Номер аудитории Количество посадочных мест а. 304 к. 1 28 а.208 к.6 119 а. 308 к.6 104 а. 221 к.6 56 а. 321 к.6 18 В каких аудиториях можно разместить лекции потока из р сту­ дентов. 2. Результаты тестирования по математике имеют вид Порядковый Фамилия, ини­ Номер Балл по номер циалы тестируе­ и серия тесту мого паспорта 1 Николайчук С.И. МР 7658985 86 п Фалевич И.В. МР 5698341 35 Вывести сведения об участниках тестирования, имеющих балл от 70 до 98. 3. Сведения о наличии тетрадей в магазине имеют вид Наименование Производитель Цена, руб. Тетрадь 12 л. г. Москва 120 Тетрадь 48 л. г. Добруш 580 Тетрадь 96 л. г. Винница 1015 Тетрадь 96 л. г. Добруш 980 Определить каких тетрадей в количестве к может купить сту­ дент, имея х рублей. 44 4. Сведения о наличии краски на складе имеют вид Наименование Количество банок Вес одной банки, кг Расход краски на 1 м2, кг Артикул 1084 2 1,5 0,15 Артикул 5768 1 2 0,12 Артикул 8472 5 0,5 0,13 Артикул 2237 3 2,3 0,15 Артикул 1526 3 0,8 0,12 Какую краску может использовать факультет для покраски по­ лов площадью S, м2. 5. В ЖЭС сведения о домах имеют вид Адрес Количествоэтажей Материал дома Год постройки ул. Якуба Коласа, 17 4 кирпич 1964 ул. Якуба Коласа, 19 9 блок 1998 ул. JI. Беды, 3 12 панель 1974 ул. Некрасова, 5 7 кирпич 1980 Капитальный ремонт панельного дома должен осуществляться после 25 лет эксплуатации, блочного - 30 лет, кирпичного - 50 лет. Вывести сведения о домах, которые должны ремонтироваться в этом году. 6. База данных МСФ содержит сведения об п абитуриентах в виде По­ Фамилия, ини­ Балл Балл Балл Балл ряд­ циалы тести­ теста по теста теста по аттес­ ковый руемого матема­ по фи­ русско­ тата номер тике зике му языку 1 Сидоров С.И. 87 65 45 86 п Фалевич И.В. 45 38 73 35 Создать таблицу, содержащую сведения о будущих студентах, количество которых к. 45 4. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ ИНЖЕНЕРНЫХ ЗАДАЧ Л а б о р а т о р н а я р а б о т а № 4.1 ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ. МЕТОД ТРАПЕЦИЙ Цель работы: изучение методов численного интегрирования и использование их при решении инженерных задач. Теоретические сведения Постановка задачи. Задача численного интегрирования заклю- ь чается в получении приближенного значения | / (x)dx . а Численное интегрирование используется: 1) при задании подынтегральной функции Дх) в виде таблицы X XI *2 *3 хк У =№) У\ У2 Уз Ук где Х\ = a, Xk = b, к - количество значений аргумента и подынте­ гральной функции; 2) при задании подынтегральной функции fix) в виде графика, полученного, например, опытным путем : 3) если аналитическое определение первообразной F(x) сложно или невозможно. 46 Математическая модель задачи. Построим математическую мо- Для непрерывной на интервале [а, b] функции fix) величина опре- кривойу =fix), осью абсцисс ох и прямымих = а их = b (рис. 4.1). Разобьем отрезок интегрирования [а, Ъ] на п равных элементар- нумеруем от 1 до п + 1. Используем переменную i для определения номера промежуточной точки. Каждая i-я точка определяется значением аргумента, которое обозначим Xj. Из рис. 4.1 видно, что при i = 1 Xi = а ; i = 2 Х2 = а + h; i = 3 Xj = а + 2h ; а b деленного интеграла равна площади, ограниченной а У Уп+1 1 2 3 п п-Н х Xi=a х2 h Хп+1= Ь Рис. 4.1 ных участков длиной h = Ъ -а . Полученные точки разбиения про- п г = / Xi = a + ( i- \ )h ; 47 i = n + 1 xn+1 = a + (n + l - l ) f t = a + n b - a n Для каждой i-ой точки вычислим значение подынтегральной функции y t = f ( x j ) • Площадь под кривой у = / ( х ) на одном из участков разбиения */ [*,_!, х; ] равна j f (x )d x (рис. 4.2). /-1 Эту площадь можно с неко­ торой погрешностью считать рав­ ной площади трапеции и вычис­ лить по формуле s, = b ± l l L h . Следовательно, X\ f ( x ) d x » ^ t l L h . Тогда (см. рис. 4.1) ln l J \ f ( x)b ^ S l = f b i ± ± i h . а / = 2 1=2 2 Алгоритм решения задачи. Если подынтегральная функция Дх) задана аналитически (в виде формулы), то алгоритм вычисления ь приближенного значения J f (x)dx методом трапеций имеет вид а 1. Ввод исходных данных а,Ъ,п \ Ь — а 2. h = п 3. Для i = 1 , п + 1 3.1.x, = a + ( i - 1) ■ h; 48 3.2. у, = /(*,); 4. Int = 0 ; 5. Д л я / = 2 , п+ 1 5.1. Int = In t+ y '' + - -h. 2 Если подынтегральная функция f(x) задана таблицей, со­ держащей к значений аргумента и функции, то алгоритм вычисления ь приближенного значения j f(x )d x методом трапеций имеет вид а 1. Ввод количества значений к; 2. Ввод массива х размерностью к; 3. Ввод массива у размерностью к; 4. Int = 0; 5. Для / = 2,..., к 5.1. Int = Int + - (х, - дсм ). Пример . Определить максимальную высоту hmax подъема тела, брошенного вертикально вверх со скоростью vHa4, вычислив t КОИ ^тах = \(г’нач ~ 8 t)d t, где g - 9,81м/с2. Получить точное и при- tмач ближенное значения интеграла. При вычислении интеграла аргументом является t, подынте­ гральная функция v(t) = vm4 - gt, нижний предел интегрирования tнач ~ 0. Верхний предел интегрирования tK0H вычислим из условия равенства нулю скорости тела в наивысшей точке подъема: v - e t = 0 t = —нач о кон ’ кон 8 Найдем точное значение интеграла по формуле Ньютона-Лейб- ница. Если подынтегральная функцияX*) непрерывна на отрезке [а, Ъ\ 49 и на нем существует ее первообразная F(x), то по формуле Ньюто- Приближенное значение интеграла вычисляется по алгоритму метода трапеций для случая аналитического задания подынтеграль­ ной функции. Окончательно алгоритм решения задачи примет вид 1. Ввод исходных данных vHa4, tHa4, g, п ; ь на-Лейбница J f(x )d x = F(b) - F(a). В результате получим: а о 1 нач'^кон & К О Н 2 5 g t —t__ кон нач , П 4. Для /'= 1 ,..., п + 1 = v Hm - g t t ; 5. h = 0 ; 6. Для i = 2,..., п + 1 2 max и нач 1 кон ^ * 9. Вывод h Z ? \ /С ГtmoHHmax Схема алгоритма имеет следующий вид: 50 Контрольные вопросы 1. В каких случаях используется численное интегрирование? 2. Приведите алгоритм метода трапеций для подынтегральной функции заданной аналитически. 3. Приведите алгоритм метода трапеций для подынтегральной функции заданной таблично. 51 Задания для выполнения В а р и а н т 1 Определить длину / кривой, вычислив: х КО И Q а) / = | (1 н-----х )dx , используя метод трапеций;j 4X ннач X К О Н Q б) / = } (1ч-----x)dx по формуле Ньютона-Лейбница; * dXнач Xкон в) / = | / (x)dx дом подынтегральной функции, заданной таб- нач ЛИЧНО. Значения хнач = 0, хКОИ - 1 м, число интервалов п = 40 X 0,00 0,14 0,20 0,28 0,40 0,52 0,70 0,93 1,00 /(* ) 1,00 1,32 1,45 1,63 1,90 2,17 2,58 3,09 3,25 В а р и а н т 2 Определить работу Дд силы , вычислив: а) — Ж , используя метод трапеций; S H(14 ^кон б) АД = JS'VS' по формуле Ньютона-Лейбница; 8 мач s КОН (S)dS для подынтегральной функции, заданной таб- sнач ЛИЧНО. 52 Значения SHa4 = О, SKOH = 3 м, число интервалов п - 44 S 0,00 0,30 0,78 1,20 1,55 1,80 2,25 2,60 3,00 f a (S) 0,00 0,09 0,61 1,44 2,40 3,24 5,06 6,76 9,00 В а р и а н т 3 Определить работу Ад момента М д, вычислив: Ф кон а) Ад - JM 0 sinфб/ф, используя метод трапеций; Фт нач Фкои б) Лд = Гм0 sin ф п о формуле Ньютона-Лейбница; в) Лд = |Мд(ф)(t)dt для подынтегральной функции, заданной таб­ лично. Значения tm4 = 0, tK0H = 5 с, соо = 25 с'1, число интервалов п - 40 t 0,00 0,50 1,25 2,10 2,50 3,40 4,00 4,45 5,00 с0 (0 25,00 36,99 48,72 46,58 39,96 18,61 6,08 0,86 1,03 В а р и а н т 5 Определить массу т топлива, сгоревшего при полете ракеты, вычислив: tКОН а) т — J*Wq (l - sin t)d t, используя метод трапеций; к и н б) т - jm 0 (l - sin t)dt по формуле Ньютона-Лейбница; нач в) т ~ |т (t)d t для подынтегральной функции, заданной таб- tнач лично. Значения = 0, tK0H = 1,5 с, т0 = 2530 кг, число интервалов п - 50 t 0,00 0,51 0,94 1,06 1,17 1,35 1,40 1,50 m (t) 2530,0 1294,9 486,9 322,9 200,5 61,4 36,8 6,3 54 В а р и а н т 6 Определить путь S, пройденный телом, вычислив: t кон а) S = J ( i>0 + a t)d t, используя метод трапеций; ^нач ^кон б) S - |(^о + at)dt по формуле Ньютона-Лейбница; в) S = Jv(t)dt для подынтегральной функции, заданной таблично. ^нач Значения tнач = 0, tK0H = 5 с, Vq = 1,2 м/с, а = 0,5 м/с2, число ин­ тервалов п = 42 t 0,00 1,00 1,50 2,00 2,65 3,50 4,35 5,00 V( t ) 1,20 1,70 1,95 2,20 2,53 2,95 3,38 3,70 В а р и а н т 7 Определить площадь S, вычислив: ХКОН a) S = jexc£c, используя метод трапеций; КО Н б ) S = по формуле Ньютона-Лейбница; нач X в) S = | / ( x ) d x для подынтегральной функции, заданной таб­ лично. 55 Значения хнач = 0, хкон = 1 м, число интервалов п = 60 X 0,00 0,20 0,33 0,50 0,60 0,82 1,00 / ( * ) 1,00 1,22 1,39 1,65 1,82 2,27 2,72 В а р и а н т 8 Определить работу Ас, совершаемую силой F c , вычислив: SKOH а )А с= fF 0(l + 0,5S)dS , используя метод трапеций; Анач С КОН б) Ас = J-FqO+ ®£S)dS по формуле Ньютона-Лейбница; &нач Sкон в) Ас = j> c (S)dS для подынтегральной функции, заданной таб- sнач ЛИЧНО. Значения SHa4 = 3, SK0H = 5 м, Fq = 10 Н, число интервалов п = 46 S 3,00 3,28 3,50 3,80 4,00 4,26 4,40 4,62 5,00 F c (S ) 25,00 26,40 27,50 29,00 30,00 31,30 32,00 33,10 35,00 В а р и а н т 9 Определить реакцию R„, вычислив: Р кон а) Rn =2/7 J/?cosPt/p , используя метод трапеций; Р нач Р кон б) Rn = 2rl Jpcospc/p по формуле Ньютона-Лейбница; Р нач 56 Q кон в) Rn = 2 rl | / (P)rfP для подынтегральной функции, заданной Р нач таблично. Значения рнач = О, Ркон = тс/2, г = 0,01 м, / = 0,025 м ,р = 1,5, число интервалов п - 40 р 0,00 0,16 0,44 0,63 0,70 0,94 1,20 1,40 1,57 / О ) 1,50 1,48 1,36 1,21 1,15 0,88 0,54 0,25 0,00 В а р и а н т 10 Определить время t, вычислив: , Г «юа) t = J п I -------, используя метод трапеции; J Q — т9 -(0 с/СОб) t = J /7 J -------по формуле Ньютона-Лейбница; 9 -со ®нач ® кон в) t = J п J / (co)efa) для подынтегральной функции, заданной таблично. Значения ю„ач = 0, = 5 с'1, Ju = 7,5 кг м2, число интервалов л = 36 со 0,00 0,80 1,50 2,00 3,00 3,50 4,30 5,00 / ( О ) 0,11 0,12 0,13 0,14 0,17 0,18 0,21 0,25 57 Задания для самостоятельной работы 1. Определить кинетическую энергию Е% тела, движущегося под действием силы F, вычислив S«m Ек = F0 \е- hS clS методом трапеций. н^ач Значения Fo = 2,5 Н, SHa4 = О, SK0H = 1,5 м, А, = 0,5, число интерва­ лов п = 95. 2. Определить путь S точки, движущейся по эллиптической тра­ ектории, вычислив t кон ____________________________ S — 4 jVкон — тс, Mj = 10 Н м, Jn = 10кг-м2, число ин­ тервалов п - 50. 5. Определить время t перемещения рабочего органа пружинно­ го механизма, вычислив 58 t = нач методом трапеций. Значения SHa4 = 0,05 м, SK0H = 0,5 м, Smax = 0,1 м, т - 0,1 кг, 1нач ~ 1 с, число интервалов п = 78. Л а б о р а т о р н а я р а б о т а № 4. 2 РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ Цель работы: изучение методов решения нелинейных урав­ нений и их использование при решении инженерных задач. Теоретические сведения Постановка задачи. Решением нелинейного уравнения f ( x ) = 0, где fix) определена, непрерывна и нелинейна на отрезке [а, Ъ] и / (а ) ' /Ф ) < 0 , является такое значение х , для которого f{ x * ) = 0. Для решения широко используются такие методы как метод поло­ винного деления, метод Ньютона и др. Математическая модель задачи. Метод половинного деле­ ния. При использовании метода половинного деления математиче­ скую модель можно пояснить с помощью рис. 4.2.1. У и у X Рис. 4.2.1 59 Корнем уравнения является х* - точка пересечения кривой у = / (х) с осью х. Требуется определить значение х с точностью 8. Отрезок [а, b1 делят пополам, т.е. определяют х = •. Если 2 f ( x ) = О, то х - корень уравнения. В противном случае в качестве нового отрезка [а, b] выбирается тот из отрезков [а, х] или [х, Ь], на концах которого значения функции j{x) имеют противоположные знаки. На данном рисунке это [х, Ь], рассматриваемый как новый ин­ тервал [а, Ь\. Этот интервал снова делится пополам, находится новая середина и т.д. Деление пополам продолжается до тех пор, пока дли­ на очередного отрезка [а, b] не станет меньше 2е. Тогда его середина и будет корнем уравнения, вычисленным с точностью 8. Схема алгоритма метода половинного деления. Так как середи­ на отрезка определяется хотя бы один раз и количество повторений алгоритма зависит от условия, поэтому при реализации метода поло­ винного деления целесообразно использовать цикл с постусловием. Схема алгоритма процедуры POLOV имеет следующий вид: Формальные параметры: a, b, e:real; Varx, у: real; Использование метода Ньютона. Метод Ньютона реализован процедурой RTNI, находящейся в учебном модуле METOD (см. приложение). Обращение к ней возможно только после подсоеди­ нения модуля к программе пользователя. Заглавие процедуры с формальными параметрами и описание типов имеют вид Туре Tf unc = F u n c t i o n ( х : r e a l ) : r e a l ; T proc = P r o c e d u r e ( x : r e a l ; Var f , p r l : r e a l ) ; P ro c e d u re R T N I ( a , b , e : r e a l ; f p r l : T p r o c ; p r 2 : Tf unc ; m i : i n t e g e r ; Var x , y : r e a l ) ; , где a , b - граница интервала; e - точность; f p r l - имя внешней процедуры, вычисляющей значение fix) и f '(x ) для аргумента х; рг2 - имя внешней функции, вычисляющей значение / ”(х) для аргумента х; 61 mi - максимальное число заданных итераций (повторений ал­ горитма); х - вычисленный корень; у - значение функции Дх). Типы Tfunc и T proc, описанные в модуле METOD, использу­ ются в программе пользователя без описания после подсоединения модуля. Трансляция внешних процедуры и функции, передаваемых в качестве фактических параметров для f p r l и рг 2 , осуществляет­ ся с опцией компилятора {$ F+}. Программа для решения нелинейного уравнения х 3 — 1 = 0 с ис­ пользованием RTNI имеет вид Program 1г4_2; {103111 U s e r l 2 Жук С.М.} U ses c r t , m e t o d ; Var а , b , е , х , у : r e a l ; m i : i n t e g e r ; {$F+} p ro c e d u re f p r l ( x : r e a l ; v a r f , p r l : r e a l ) ; {определяет вид функции и первой производной} {для уравнения лс3 —1 = 0} b e g in f : = х * х * х - 1 ; p r l : =3*х*х end; f u n c t i o n p r 2 ( х : r e a l ) : r e a l ; {определяет вид второй производной} b e g in р г 2 : = 6 * х ; end; {$ F - } b e g in C l r S c r ; w r i t e ( ' введите a = 1) ; r e a d l n ( a ) ; w r i t e ( ' введите b = ' ) ; r e a d l n ( b ) ; w r i t e ( ' введите точность вычислений e = ' ) ; r e a d l n ( e ) ; w r i t e ( ' введите количество повторений m i = ' ) ; r e a d l n ( m i ) ; R t n i ( a , b , e , f p r l , p r 2 , m i , x , y ) ; 62 w r i t e ( ' корень x - ’ , x : 5 : 2 , ' функция y = ' , y : 5 : 2 ) ; r e p e a t u n t i l k e y p re s s e d end . Контрольные вопросы 1. Что является решением нелинейного уравнения? 2. Приведите математическую модель метода половинного деления. 3. Постройте схему алгоритм метода половинного деления. 4. Как использовать процедуру RTN1 из модуля METOD для ре­ шения нелинейного уравнения? Задания для выполнения В а р и а н т 1 2 Определить угол а , решив уравнение c o s a - a + 6 = 0 ( a - в радианах): а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [1; 2,5], точность 8 = 0,01, ко­ личество итераций mi = 200. В а р и а н т 2 Для расчета плотности вещества решить уравнение sinp - lnp + 0,5 = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [2; 3], точность s = 0,01, коли­ чество итераций mi = 200. В а р и а н т 3 Для расчета геометрических параметров червячных фрез решить уравнение sinx + cosx + х +1 = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. 71 71 З а д а н ы интервал уточнения корня - - ; — количество итераций mi — 200. 63 точность Е = 0,01, В а р и а н т 4 Определить расстояние, пройденное телом, решив уравнение 0,25s3 + s - 1,2502 = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [0; 2], точность е = 0,01, коли­ чество итераций mi - 200. В а р и а н т 5 Определить время полета брошенного тела, решив уравнение 0,1Г2 - t in t = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [1; 2], точность е = 0,01, коли­ чество итераций mi = 200. В а р и а н т 6 Определить максимальную скорость движения тела, решив урав­ нение е” +1пг>-10г> = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [3; 4], точность s = 0,01, коли­ чество итераций mi = 200. В а р и а н т 7 Определить массу тела, решив уравнение 3/и -1 4 + em + е~"! = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [1; 3], точность s = 0,01, коли­ чество итераций mi = 200. В а р и а н т 8 Определить силу, действующую на тело, решив уравнение l n F - F + 2 = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. 64 Заданы интервал уточнения корня [2; 4], точность 8 = 0,01, коли­ чество итераций mi — 200. В а р и а н т 9 Определить плотность вещества, решив уравнение sinp—Зр 4-5 = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [1,5; 2,5], точность 8 = 0,01, количество итераций mi - 200. Вариант 10 Определить максимальный объем вещества, решив уравнение 3 v - c o s v - 4 = 0: а) методом половинного деления; б) используя стандартную процедуру RTNI. Заданы интервал уточнения корня [0,5; 1,9], точность s = 0,01, количество итераций mi = 200. Задания для самостоятельной работы 1. Определить угол зацепления а зубчатой передачи, решив уравнение tg a - а = inva ( а - в радианах) методом половинного деления на интервале [а нач, а К0И ]. Заданы inv а = 0,029975, интервал уточнения корня [22°; 30°], точность 8 = 0,01. 2. Для расчета плотности вещества решить уравнение 0,3tgp - 0,5р -1 = 0 методом половинного деления на интервале [р нач » Р кон ] ' Заданы интервал уточнения корня [0; 1,5], точность е = 0,01. 3. Определить силу, действующую на тело, решив уравнение 3 In 2 F + 6 In F - 5 = 0 методом половинного деления на интервале [F F 1L нач ’ кои J * Заданы интервал уточнения корня [1; 3], точность s = 0,01. 65 4. Определить угловую скорость, решив уравнение ш • tgco - — = О методом половинного деления на интервале [шнач, (£>кон ] . Заданы интервал уточнения корня [0,2; 1], точность е = 0,01. 5. Определить ускорение движущегося тела, решив уравнение V l- а = co sV l- а методом половинного деления на интервале \^ нач •> &кон ]' Заданы интервал уточнения корня [0; 1], точность е = 0,01. Л а б о р а т о р н а я р а б о т а № 4. 3 ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ Цель работы: изучение методов численного интегрирования обыкновенных дифференциальных уравнений и их использование при решении инженерных задач. Теоретические сведения Постановка задачи. Численные методы решения обыкновенно­ го дифференциального уравнения у ' = f i x , у) позволяют найти его частное (удовлетворяющее какому-нибудь условию) решение в ви­ де совокупности значений аргумента и функции на отрезке [хиач, хкон\ . Решение задачи Коши \ у ' = f i x , у), 1 ^(.хнач) — у нач на отрезке [хнач, хкон] представляется в виде таблицы X X] х2 Хз Х п +\ У У\ У2 Уз Уп +1 66 где xj = хнач, xn+l = хкон , y l = унач, п - число интервалов деле­ ния отрезка изменения аргумента. Для решения дифференциальных уравнений достаточно широко используются метод Эйлера и метод Рунге-Кутга четвертого порядка точности. Математическая модель задачи. Построим математическую модель метода Эйлера. Разобьем отрезок [.хтч, хкон] на п равных х — х элементарных участков длиной h = ——------— . Полученные точки п пронумеруем от 1 до п + 1. В соответствии с постановкой задачи зададим х, = хиач, у, = у нач. Номер текущей точки характеризует­ ся переменной /, которой соответствует значение аргумента хj = хнач + (/ -1 ) • h . Для любого элементарного участка [хг_,, x i ] отрезка [хнач, хкон] представим АУ^Уг-Ух-х и Дх( = х , - х м . Тогда У', = ~ ’ У,л ) ■Ах, Откуда У; ~ Уi-i = (xt - хм ) • /(х ,_ !, y t_x) И у г = у,-1 + (X, - Х,_!) • f (X iA , y t_x) . Окончательно, при равноудаленных значениях аргумента Х\, Х2,..., x„+i формула метода Эйлера для всего отрезка [хнач, хкон] при­ мет вид У> = У i-i + h ■ А * ы ’ У i-\), /' = 2 , . . я + 1. Алгоритм метода Эйлера. Алгоритм метода Эйлера при равно­ удаленных значениях аргумента имеет вид 1. Ввод исходных данных Хнач> ХКОн, Уначч W 5 67 X — X2 f a _ кои_____ нач . п 3- *i = хнач; y t = ушч; 4. Для /' = 2 , п + 1 4Л- х, = хит +(*' —1)-Л; 4-2- y i= y i- \+ b -f(x ,_ l,y l_l) . Использование метода Рунге-Кутта. Метод Рунге-Кутта чет­ вертого порядка точности реализован процедурой RUNGE, находя­ щейся в учебном модуле METOD (см. приложение). Обращение к ней возможно только после подсоединения модуля к программе пользователя. Заглавие процедуры имеет вид P rocedure RUNGE(n:integer; x n , x k , y n : r e a l ; f : T f u n c l ; Var x , у :V e c t ) ; , где n - количество интервалов разбиения отрезка [хнач, хкон]; хп - начальное значение аргумента, равное хнач; хк - конечное значение аргумента, равное хК0И; уп - начальное значение функции, равное унач', f - имя внешней функции, вычисляющей значение fix, у)-, х - вычисленный массив значений аргумента; у - вычисленный массив значений функции у(х). Описание типов T f u n c l и V ect произведено в модуле METOD и имеет вид Туре T f u n c l = F u n c t i o n ( х , у : r e a l ) : r e a l ; V ect = a r r a y [0..100] o f r e a l ; . Они используются в программе пользователя без описания после подсоединения модуля. Трансляция внешней функции, передавае­ мой в качестве фактического параметра для f, осуществляется с опцией компилятора {$ F+}. Программа для решения задачи Коши , dv v - — = v + t, dt v(Q) = 1 68 program 1г4_3; {103122 User34 Игнатьев Ю.С.} Uses crt,metod; Var tn,tk,vnrreal; i,n:integer; v,t:vect; {$F+} function fvt (t,v:real):real; begin fvt:=v+t; end; {$F-} begin ClrScr; write('введите tn='); readln(tn); write('введите tk-’); readln(tk); write('введите vn='); readln(vn); write('введите n='); readln(n); writeln; Runge(n,tn,tk,vn,fvt,t, v) ; writeln (’ i t, v'); for i:=l to n+1 do writeln(1 ',i:2, ' ':5,t[i]:5:2,’ ’:5,v[i]:5:2); repeat until keypressed end. Результаты работы программы имеют вид введите tn=0 введите tk=0.6 введите vn=l введите п=б на интервале [0; 0,6] с использованием RUNGE имеет вид i t V 1 0.00 1.00 2 0.10 1.11 3 0.20 1.24 4 0.30 1.40 5 0.40 1.58 б 0.50 1.80 7 0. 60 2.04 69 Контрольные вопросы 1. Что является приближенным решением задачи Коши? 2. Приведите математическую модель метода Эйлера. 3. Постройте алгоритм метода Эйлера. 4. Как использовать процедуру RUNGE из модуля METOD для решения задачи Коши? Задания для выполнения В а р и а н т 1 Определить скорость движения тела, решив задачу Коши а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов п = 10, отрезок нахождения решения [1; 2]. а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов п = 10, отрезок нахождения решения т{ 0) = 0 а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов «=10, отрезок нахождения решения [0; 1]. у , _ dv _ t2 + v 2 V ~~dt~ 10 ’ p(l) = 1 В а р и а н т 2 Определить перемещение тела, решив задачу Коши s(0,5) - 0,5 dt 70 В а р и а н т 4 Определить угол поворота, решив задачу Коши Ф dt ф(0 ) = о а) методом Эйлера, создав пользовательскую процедуру; б) используя стандартную процедуру RUNGE. Количество интервалов п= 10, отрезок нахождения решения [0; 1]. В а р и а н т 5 Определить плотность тела, решив задачу Коши Р = dp р 2 + t2 dt 12 р(2) = 3 а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов п = 10, отрезок нахождения решения [2; 3]. В а р и а н т 6 Определить угловую скорость движения тела, решив задачу Коши , d(& 2 2ю = — = Г +со t +Ф , dt ю(0) = 0 а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов «=10, отрезок нахождения решения [0; 0,5]. В а р и а н т 7 Определить угол поворота, решив задачу Коши _ f*P _ 1 + Ф2 dt ф t ф(2) = 1 71 а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов п = 10, отрезок нахождения решения [2; 4]. В а р и а н т 8 Определить силу F, решив задачу Коши dt 2 J i ’ F(4) = 1 а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов п = 10, отрезок нахождения решения [4; 6]. В а р и а н т 9 Определить скорость движения тела, решив задачу Коши v' = — = 2tv3 - 1, dt v(0) = 0 а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов п = 10, отрезок нахождения решения [0; 0,8]. В а р и а н т 10 Определить угловую скорость движения тела, решив задачу Коши , d(o з з (О = — = « Г - Г , dt со(0) = 1 а) методом Эйлера; б) используя стандартную процедуру RUNGE. Количество интервалов п = 10, отрезок нахождения решения [0; 0,5]. 72 Задачи для самостоятельного решения 1. Определить перемещение тела, решив задачу Коши = ^ = Л + 2, dt [*(1) = 2 методом Эйлера на отрезке [tHm, tK0H ] . Количество интервалов п = 10, отрезок нахождения решения [1; 3]. 2. Определить силу F, решив задачу Коши V , dF s1 + 3 F 2 F(2) = 0 методом Эйлера на отрезке [sHa4, Л’ган]- Количество интервалов п ~ 10, отрезок нахождения решения [2; 3]. 3. Определить момент сопротивления М с, решив задачу Коши М г = ' dMc__ 2 С «ftp ф2 + ЗМ 2 5 М с { 3) = 0 методом Эйлера на отрезке [фшч, Фтон]- Количество интервалов п = 10, отрезок нахождения решения [3; 5]. 4. Определить угловую скорость вала, решив задачу Коши , d(0 М д - М с со = — = — ---------- , dt J jj , со(0) = 0 где М д =ах +Ьх(й', М с = const 5 методом Эйлера на отрезке [tHm, tK0H ]. 73 Количество интервалов /7=10, отрезок нахождения решения [0; 10], #] = 55, Ь\ — 0,61, Мс = 50, Jyi = 6. 5. Определить угловую скорость вращения ротора вентилятора, решив задачу Коши , da М д —M(j со = — = — - --------- dt J ц , со(5) = 5 где М д = а, - 6 ,со; л /с = « 2 -А ® методом Эйлера на отрезке [tMm, tK0H ]. Количество интервалов «=10, отрезок нахождения решения [5; 10], а\ = 210, Ь\ = 20, а2 = 96, bi = 0,56, Jji = 12. Л а б о р а т о р н а я р а б о т а № 4.4 РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ Цель работы: разработка алгоритмов и программ для реше­ ния систем линейных алгебраических уравнений (СЛАУ). Теоретические сведения Постановка задачи. Задача заключается в определении неизвест­ ных переменныхх и х2, ...,х„ системы «11*1 + ^12*2 + - + «1«*И =ЬХ а 2 \ х \ + а 2 2 х 2 + • • • + а 2 п х п — ^ 2< ап1хх +an2Xi +... + атх„ = Ьп . 74 В матричной форме система запишется в виде А Х = В, где А - матрица системы, X - столбец неизвестных, В - столбец свободных членов. Математическая модель задачи. Система имеет единственное решение, если определитель матрицы detA * 0. Для решения СЛАУ при п < 103 наиболее часто используется ме­ тод исключения Гаусса. Для повышения точности в качестве диаго­ нального элемента выбирается наибольший по модулю элемент в непреобразованном остатке соответствующего столбца. Путем эк­ вивалентных преобразований матрица А приводится к треугольной матрице вида 1 а} 2 aj3 ......... а\п 1 а 23 .......... а 2п 1 „п- 11 Qn-\п Одновременно с матрицей преобразуется и столбец свободных членов. Этот этап называется прямым ходом метода Гаусса. Во время обратного хода осуществляется последовательное определе­ ние неизвестных %П-1) • ' -5 *1- Использование процедуры GAUS для решения СЛАУ. Предла­ гается для решения СЛАУ использовать разработанную процедуру GAUS, включенную в модуль METOD (см. приложение). Заглавие процедуры имеет вид Procedure GAUS(A:Matr; n:integer; В:Vect; Var X:Vect); , где A - матрица системы; n - её размерность; В - столбец свободных членов; X - столбец неизвестных. 75 Описание типов Mat r и V ect произведено в модуле METOD и имеет вид Туре Mat r = a r r a y [ 1 . . 1 0 , 1 . . 1 0 ] o f r e a l ; V ect = a r r a y [ 0 . . 1 0 0 ] o f r e a l ; . В программе пользователя после подсоединения модуля METOD они используются без описания. Контрольные вопросы 1. Запишите систему линейных алгебраических уравнений. 2. В каком случае СЛАУ имеет единственное решение? 3. Как использовать процедуру GAUS из модуля METOD? Задания для выполнения Решить СЛАУ. Для этого: 1. Построить схемы алгоритмов головной программы и проце­ дур ввода матрицы, ввода и вывода столбца. 2. Написать головную программу, содержащую 2.1 подсоединение модуля METOD; 2.2 тексты процедур; 2.3 обращения к процедурам в соответствии со схемой алго­ ритма. 3. Подготовить исходные данные, сформировав матрицу А и стол­ бец свободных членов В . В а р и а н т 1 3xj - Зх2 + 4jc4 = 4, 2х 2 + 5х3 = 7, 2 х { + 5х 2 + х 3 =8, - х2 + х 4 = 0 76 В а р и а н т 2 - 2хх + 2х2 ~ 2х4 = -2, Ъхх - 5х4 = -2, 2хх - Зх3 + 2х4 = 1, В а р и а н т 3 х 2 - 4х3 - 2х4 = -5, Ъхх + 4х3 - х4 =6 , 2xj - 2х2 + х3 - х4 = О, Зх2 - 2х4 = 1 . В а р и а н т 4 х х - х2 + 2х3 + х4 = 3, 5xj - 2х2 - Зх3 = О, 2xj - 2х4 = О, 5х2 - Зх3 - Зх4 = -1 В а р и а н т 5 х2 - 2х3 + х4 =0 , - 3xj + 2х2 + 2х4 = 1, 2х2 - Зх3 —х 4 = -2, ^х, + х4 = 2 . В а р и а н т 6 5х! - х2 + 2х3 + х4 = 7, - Зх2 - Зх3 + х4 = -5, 2хх + Зх3 + х4 =6, Х1 + 4х2 ~ 3*3 = 2 х 2 + 2х3 - 2х4 = 1, Xi - 2х2 - *з = -2, *1 + 5*2 - 2х3 - 4х4 = О, Xj + 6х2 - 6х4 = 1 В а р и а н т 8 — х2 + х3 + 4х4 = 4, 3xj - Зх3 + х4 =1, х2 +х3 - 2х4 = О, 2xj + 2х3 - 2х4 = 2 В а р и а н т 9 2Х[ + Зх2 - 2х3 = 3, Xj + Зх3 - 4х4 = О, < 3xj + х2 - 2х4 = 2, х2 + Зх3 + 2х4 = 6 В а р и а н т 10 х г - 2 х 2 + 2х3 + х4 =2, 3xj - 2х2 - Зх3 + 2х4 = О,< 2xj + х2 + Зх3 - 2х4 = 4, - 2xj + х2 + х3 + 2х4 = 2 В а р и а н т 7 78 ПРИЛОЖЕНИЕ Модуль METOD Unit METOD; Interface Type Vect = Array[0..100] of Real; Matr = A r ray[1..10,1..10] of Real; TFunc = Function(X:Real):Real; TProc = Procedure(X:Real;Var FI,Prl:Real); TFuncl = Function(x,у :real):real; function Itab(n:integer; x,f:vect):real; function Intfan(n:integer; xn,xk:real; f :TFunc):real; procedure RTNI(a,b,e:real; FPRl:tproc; PR2:tfunc; m i :integer;var xl,yl:real); procedure RUNGE(n:integer;xn,xk, yn:real;F:tfuncl; var x,у :vect); Procedure Gaus(a:Matr;n:integer;B:Vect; Var x:vect); Implementation function Itab; {Вычисление интеграла по формуле трапеций от} {таблично заданной подынтегральной функции} var i :integer;int:real; BEGIN int:=0.0; for i:=2 to n do int:=int+(f[i]+f[i-1])/2* (x[i]-x[i—1]) ; I t a b :=int END; function Intfan; {Вычисление интеграла по формуле трапеций} {от аналитически заданной подынтегральной функции} var i :integer;int,h :real;х,у:vect; BEGIN h:=(xk-xn)/n; for i:=l to n+1 do begin x [i ]:= x n + (i-1)*h; у [i]:=f(x[i]) end; 79 i n t :=0 .О ; for i : = 2 to n+1 do i n t :=i n t + ( y [i-1 ]+ y [i ])/2 *h; In t f a n :=int END; procedure RTNI; {Решение нелинейного уравнения методом Ньютона} label 1 ; var f 1 ,p r , x p :real;n :integer; BEGIN fprl(a,f 1 /p r ); if fl*pr2 (a)> 0 . 0 then xp:=a else xp:=b; n : =0 ; 1 : fprl(xp,fl,pr); if abs (pr)< 1 .Oe - 6 then begin writeln('Производная функции при значении 'аргумента 1,хр:1 0 :5 ); writeln ( 1 близка к нулю с точностью 1 .Ое— б '); halt end; x l :=xp-f 1 /pr; n := n + l ; if n>mi then begin w r i t e l n ('Корень не найден за ',mi:3 , ' и т е р а ц и й '); halt end; if abs(xp-xl)>e then begin x p := x l ; goto 1 end; fprl(xl,yl,p r ) END; procedure RUNGE; {Решение диффренциального уравнения методом} {Рунге-Кутта четвертого порядка точности} var h, k l ,k2 ,k3 ,k4 :real; i :integer; BEGIN у [1 ]:=yn; x [1 ]:= x n ; 80 h :=(xk-xn)/n; for i : = 2 to n + 1 do begin x[i]:=xn+(i- 1 )*h; kl:=f(x[i- 1 ],у [i-1 ]); k2 :=f(x[i-l]+0 .5 *h,y[i-l]+0 .5 *h*kl); k 3 :=f(x[i-l]+ 0 .5 *h,y[i-l]+ 0 .5 *h*k2 ) ; k 4 :=f(x[i],у [i-1 ]+h*k3 ) ; У [i]:=y[i-1 ]+h/6 *(kl+2 *k2 + 2 *k3 +k 4 ) end END; Procedure Gaus; {Решение системы линейных алгебраических уравнений} Var im,k,i,j:integer; m,s,d:real; Begin For k:=l to n - 1 do begin M:=abs(a [k, k] ) ; im:=k; For i:=k+l to n do if m