- •2. Приближенное решение нелинейных уравнений. Метод касательных.
- •3 . Вычислить интеграл функции на промежутке [0.1, 0.6]c точностью .
- •2. Решение задачи Коши. Метод Эйлера.
- •3 . Найти в каждой строке матрицы максимальный и минимальный элементы и поместить их на место первого и последнего элемента строки соответственно.
- •2) Условный оператор
- •3.Тоже подобная
- •Var x1:[1..10,1..5] of integer;
3 . Найти в каждой строке матрицы максимальный и минимальный элементы и поместить их на место первого и последнего элемента строки соответственно.
const
nmax = 20;
var
a: array[1..nmax, 1..nmax] of integer;
n, m, i, j, jmin, jmax, t: integer;
begin
repeat
write('Enter n, m(n<=', nmax, '; m<=', nmax,'): ');
readln(n, m);
until (n in [1..nmax]) and (m in [1..nmax]);
writeln('Source matrix');
for i := 1 to n do
begin
for j := 1 to m do
begin
a[i, j] := random(99);
write(a[i, j]:4);
end;
writeln;
end;
// дабы не было путаницы при перестановке, разделяем цикл:
// сначала ищем и меняем минимум, потом максимум
jmin := 1; jmax := 1;
for i := 1 to n do
begin
for j := 2 to m do
if a[i, j] < a[i, jmin] then jmin := j;
t := a[i, 1];
a[i, 1] := a[i, jmin];
a[i, jmin] := t;
for j := 2 to m do
if a[i, j] > a[i, jmax] then jmax := j;
t := a[i, m];
a[i, m] := a[i, jmax];
a[i, jmax] := t;
end;
writeln('New matrix');
for i := 1 to n do
begin
for j := 1 to m do
write(a[i, j]:4);
writeln;
end;
readln;
end.
Билет № 7
1)Операторы языка описывают некоторые алгоритмические действия, которые необходимо
выполнить для решения задачи. Тело программы можно представить как последовательность
таких операторов.
Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки.
Begin ... Begin ... Begin ... End; End; End;
2) Условный оператор
IF<условие>THEN<оператор1>0[ELSE<оператор2>]
Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.
3) Операторы повторений
А)Цикл с предопределенным числом повторений.
For <переменная цикла>:=<начальное значение> To(DownTo) <конечное значение> Do <блок операторов>
Переменная должна быть целого или перечислимого типа. При исполнении цикла переменная цикла изменяется от начального до конечного значения с шагом 1. Если стоит to, то переменная увеличивается, если downto – уменьшается.
Б)Условный цикл с проверкой условия перед исполнением блока операторов.
While <условие> Do <блок операторов>
Блок операторов будет исполняться, пока условие имеет значение true. Необходимо, чтобы значение условия имело возможность изменения при исполнении блока операторов, иначе исполнение цикла не закончится никогда.
В)Условный цикл с проверкой после выполнения блока операторов.
Repeat <тело цикла> Until <условие>
Блок операторов независимо от значения условия будет выполнен хотябы один раз. Цикл заканчивается, если после очередного исполнения блока операторов условие имеет значение true.
Г)Оператор выбора одного из вариантов.
Case <ключ выбора> Of <список выбора> Else <оператор> End;
<ключ выбора> - выражение любого перечислимого типа, <список выбора> - одна или более конструкций вида <значение ключа>:<блок операторов>.
Билет 8 1)сортировкой или упорядочением массива называется расположение его элементов по возрастанию (или убыванию). Если не все элементы различны, то надо говорить о неубывающем (илиневозрастающем) порядке. Метод "пузырька"что массив (таблица) расположен вертикально. Элементы с большим значением всплывают вверх наподобие больших пузырьков. При первом проходе вдоль массива, начиная проход "снизу", берется первый элемент и поочередносравнивается с последующими. При этом:
если встречается более "легкий" (с меньшим значением) элемент, то они меняются местами; при встрече с более "тяжелым" элементом, последний становится "эталоном" для сравнения, и все следующие сравниваются с ним .В результате наибольший элемент оказывается в самом верху массива.Во время второго прохода вдоль массива находится второй по величине элемент, который помещается под элементом, найденным при первом проходе, т.е на вторую сверху позицию, и т.д.
|
begin for j:=1 to N-1 do for i:=1 to N-j do if M[i] > M[i+1] then swap(M[i],M[i+1]) end; |
|
procedure swap(var x,y: ...); var t: ...; begin t := x; x := y; y := t end; |
|
begin
M[0]
:= -oo;
for j:=2
to N do
begin
i := j;
while
M[i] < M[i-1]
do
begin
swap(M[i],M[i1]);
i := i-1 end end end; |
|
begin for j:=1 to N-1 do begin FindMin(j, i); swap(M[j],M[i]) end end; |
Чтобы сделать процесс перемещения элемента M[j], более простым, полезно воспользоваться барьером: ввести "фиктивный" элемент M[0], чье значение будет заведомо меньше значения любого из "реальных"элементов массива (как это можно сделать?). Мы обозначим это значение через —оо.
Если барьер не использовать, то перед вставкойM[j], в позицию i-1 надо проверить, не будет ли i=1. Если нет, тогда сравнить M[j] ( который в этот момент будет находиться в позиции i) с элементом M[i-1].
Сортировка посредством выбора
Идея сортировки с помощью выбора не сложнее двух предыдущих. Наj-ом этапе выбирается элемент наименьший среди M[j], M[j+1],. . ., M[N](см. процедуру FindMin) и меняется местами с элементом M[j]. В результате после j-го этапа все элементы M[j], M[j+1],. . ., M[N]будут упорядочены.
для j от 1 до N-1
выбрать среди M[j],. . ., M[N] наименьший элемент и поменять его местами с M[j]
2.Метод Гаусса является наиболее оптимальным и быстрым решением систем линейный уравнений.
Решение системы уравнений методом Гаусса
Все методы решения систем уравнений делятся на: точные и приближенные. Метод Гаусса является точным решением систем уравнений, так как последовательность действий при нахождении корней конечно, приближенные методы считаются иттерационно, т.е до тех пор, пока погрешность вычислений не будет меньше заданной.
Основной идеей метода Гаусса,как и отмечалось ранее, является последовательное исключение неизвестных, приводящее к построению эквивалентной системы с треугольной матрицей. Рассмотрим следующую систему уравнений 4 порядка:
Метод Гаусса при решении системы уравнений можно разделить на два этапа: прямой и обратный ход. Вычисление неизвестных ведется в обратной последовательности: x4,x3 x2,x1. Необходимым и достаточным условием выполнения метода Гаусса должно быть следующим: все ведущие элементы Аii не должны равняться нулю.
Прямой ход:
Ведущий элемент А11=2.
Нормирование первого уравнения: x1=-(3/2)*x2-(11/2)*x3-(5/2)*x4+1.
Исключение неизвестной x1 из оставшихся трех уравнений:
2-е уравнение: (-(3/2)*1+1)*x2+(-(11/2)*1+5)*x3+(-(5/2)*1+2)*x4+(1*1-1)=0
3-е уравнение: (-(3/2)*2+1)*x2+(-(11/2)*2+3)*x3+(-(5/2)*2+2)*x4+(1*2+3)=0
4-е уравнение: (-(3/2)*1+1)*x2+(-(11/2)*1+3)*x3+(-(5/2)*1+4)*x4+(1*1+3)=0
После преобразований получим следующую систему:
![]()
Выбираем снова ведущий элемент А33=-6.
Нормирование 1го уравнения новой системы: x3=-(1/6)*x4+(5/6)
Исключаем неизвестую x3 из оставшегося уравнения: (-(1/6)*(-2)+2)*x4+((5/6)*2+4)=0
Получим
уравнение: (7/3)*x4+7/3=0.![]()
После нормирования x4=-1
Обратный ход:
Формирование эквивалентной системы с треугольной матрицей и вычисление неизвестных:
|
|
|
Единственным
недостатком является чувствительность
к ошибка округления.
Решение систем уравнений методом Гаусса c выбором главного элемента.Большинство распространенных методов решений уравнений являются вариантами метода Гаусса, отличающиеся незначительными нюансами. Метод Гаусса с выбором главного элемента фактически повторяет предыдущий способ за тем исключением, что вместо выбора ведущего элемента на каждом этапе здесь в самом начале определяется главный элемент. Единственным условием выполнения метода является неравенство нулю детерминанта матрицы.
Расширенная прямоугольная матрица коэффициентов СЛУ:
Также
как и в обычном методе Гаусса нахождение
корней разбивается на два этапа:
|
|
|
|
Выбор главного элемента по критерию: Apq=max|aij|, (без учета bi)
Вычисление множителей mi=-(aij)/(Apq)
Исключение переменной, соответствующей главному элементу: [строка]i+[главная строка]*mi
Таким образом, новая матрица будет на порядок меньше исходной. Иттерационно повторяя аналогичные действия формируем последовательность матриц. В конечном итоге завершающей будет матрица строка. Обратный ход:
Обратный ход метода заключается в:
1) Объединение главных строк в систему
2) Вычисление xi
Пример решения системы уравний методом Гаусса с выбором главного элемента можно разобрать по таблице. В отличие от просого метода Гаусса данный способ менее чувствителен к ошибкам округлений. Метод Гаусса-Жордана для решения системы уравнений Метод Гаусса-Жордана является еще одной вариацией метода Гаусса для решений систем уравнений. Его отличием является отсутствие обратного хода, но при этом количество действий, выполняемых для решения системы увеличивается. Рассмотрим следующую систему уравнений 3-го порядка:
Первым
этапом производится нормирование
первого уравнения, далее исключается
переменная x1.
Отличием является то, что выражение для
xkподставляется
во все уравнения кроме k-го (с ведущим
элементом). Далее действия повторяются
и исключается вторая переменная, а затем
и третья.![]()
|
|
|
|
|
Нормирование 1-го уравнения исключение x1 |
Нормирование 2-го уравнения исключение x2 |
Нормирование 3-го уравнения исключение x3
|
|
|
|
|
|
|
|
|
|
|
|
|
uses crt; type mas=array[1..10] of integer; procedure Vvod(var a:mas;n:byte;c:char); var i:byte; begin writeln('Введите ',n,' элементов массива ',c); for i:=1 to n do begin write(c,'[',i,']='); readln(a[i]); end; clrscr; end; procedure Vyvod(a:mas;n:byte;c:char); var i:byte; begin writeln('Массив ',c); for i:=1 to n do write(a[i],' '); writeln; end; procedure Kol(a:mas;n:byte); var i,j,k:byte; begin i:=1; j:=0; while(i<=n)and(j=0) do if a[i]<0 then j:=i else i:=i+1; if j=0 then writeln('В массиве нет отрицательных элементов') else if j=1 then writeln('Отрицательный элемент первый') else begin k:=0; for i:=1 to j-1 do if a[i]>0 then k:=k+1; writeln('Количество положительных до первого отрицательного=',k) end; writeln; end; var x,y,z:mas; begin clrscr; Vvod(x,40,'X'); Vvod(y,30,'Y'); Vvod(z,20,'Z'); Vyvod(x,40,'X'); Kol(x,40); Vyvod(y,30,'Y'); Kol(y,30); Vyvod(z,20,'Z'); Kol(z,20); readln end.
Билет 9 1.Строковый тип данных Для обработки строковой информации в Турбо Паскаль введен строковый тип данных. Строкой в Паскале называется последовательность из определенного количества символов. Количество символов последовательности называется длиной строки. Синтаксис: var s: string[n]; var s: string; n - максимально возможная длина строки - целое число в диапазоне 1..255. Если этот параметр опущен, то по умолчанию он принимается равным 255. Пустой символ обозначается двумя подряд стоящими апострофами. Если апостроф входит в строку как литера, то при записи он удваивается. Переменные, описанные как строковые с разными максимальными длинами, можно присваивать друг другу, хотя при попытке присвоить короткой переменной длинную лишние символы будут отброшены. Выражения типа char можно присваивать любым строковым переменным. Кроме слияния над строками определены операции сравнения <,>,=,<>,<=,>=. Две строки сравниваются посимвольно, слева направо, по кодам символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются символом с кодом 0. Процедуры и функции для работы со строками В системе Turbo Pascal имеется несколько полезных стандартных процедур и функций, ориентированных на работу со строками. Ниже приводится список этих процедур и функций с краткими пояснениями. Length(s:string):integer Функция возвращает в качестве результата значение текущей длины строки-параметра Функция выполняет слияние строк-параметров, которых может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации "+" и работает немного менее эффективно, чем эта операция. Copy(s:string; index:integer; count:integer):string Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index. Процедура удаляет из строки-параметра s подстроку длиной count символов, начиная с символа под номером index. Процедура предназначена для вставки строки source в строку s, начиная с символа index этой строки. Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0. Процедура преобразует численное выражение X в его строковое представление и помещает результат в st. Val(st: string; x: числовая переменная; var code: integer) Процедура преобразует строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x. x - может быть как целой, так и действительной переменной. Если в st встречается недопустимый (с точки зрения правил записи чисел) символ, то преобразование не происходит, а в code записывается позиция первого недопустимого символа. Выполнение программы при этом не прерывается, диагностика не выдается. Если после выполнения процедуры code равно 0, то это свидетельствует об успешно произошедшем преобразовании. В дополнение приведем некоторые функции, связанные с типом char, но которые тем не менее часто используются при работе со строками. Chr(n: byte): char Функция возвращает символ по коду, равному значению выражения n. Если n можно представить как числовую константу, то можно также пользоваться записью #n. Ord(ch: char): byte; В данном случае функция возвращает код символа ch. UpCase(c: char): char; Если c - строчная латинская буква, то функция возвращает соответствующую прописную латинскую букву, в противном случае символ c возвращается без изменения.
2.Нелинейные уравнения можно разделить на 2 класса - алгебраические и трансцендентные. Алгебраическими уравнениями называют уравнения, содержащие только алгебраические функции (целые, рациональные, иррациональные). В частности, многочлен является целой алгебраической функцией. Уравнения, содержащие другие функции (тригонометрические, показательные, логарифмические и другие) называются трансцендентными.Методы решения нелинейных уравнений делятся на две группы: точные методы; итерационные методы.Точные методы позволяют записать корни в виде некоторого конечного соотношения (формулы). Из школьного курса алгебры известны такие методы для решения тригонометрических, логарифмических, показательных, а также простейших алгебраических уравнений.Как известно, многие уравнения и системы уравнений не имеют аналитических решений. В первую очередь это относится к большинству трансцендентных уравнений. Доказано также, что нельзя построить формулу, по которой можно было бы решить произвольное алгебраическое уравнение степени выше четвертой. Кроме того, в некоторых случаях уравнение содержит коэффициенты, известные лишь приблизительно, и, следовательно, сама задача о точном определении корней уравнения теряет смысл. Для их решения используются итерационные методы с заданной степенью точности.Пусть дано уравнение где: Функция f(x) непрерывна на отрезке [a, b] вместе со своими производными 1-го и 2-го порядка.Значения f(x) на концах отрезка имеют разные знаки (f(a) f(b) < 0).Первая и вторая производные f' (x) и f'' (x) сохраняют определенный знак на всем отрезке.Условия 1) и 2) гарантируют, что на интервале [a, b] находится хотя бы один корень, а из 3) следует, что f(x) на данном интервале монотонна и поэтому корень будет единственным.Решить уравнение (1) итерационным методом значит установить, имеет ли оно корни, сколько корней и найти значения корней с нужной точностью.Всякое значение , обращающее функцию f(x) в нуль, т.е. такое, что:называется корнем уравнения (1) или нулем функции f(x).Задача нахождения корня уравнения f(x) = 0 итерационным методом состоит из двух этапов: отделение корней - отыскание приближенного значения корня или содержащего его отрезка;уточнение приближенных корней - доведение их до заданной степени точности.Процесс отделения корней начинается с установления знаков функции f(x) в граничных x = a и x = b точках области ее существования.



