Вычислительная техника и программирование. В 2 ч. Ч. 1. Программирование в среде TURBO PASCAL 7
.0.pdf
|
|
6 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
цикл вычисления наименьшего значения |
|
y=f(x) |
|
|
функции с текущим значением шага h |
|||||
|
|
|
изменения аргумента х |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 Нет y<ymin
Да
9ymin=y xmin=x x=x+h
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
проверка условия прохождения экстремаль- |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
y>ymin |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ной точки функции или функция в заданном |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
интервале монотонно убывающая |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
DY = |
|
y − ymin |
|
|
|
|
|
|
|
относительная погрешность определения |
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
|
|
|
|
|
экстремума функции |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
12 |
|
|
|
|
|
|
|
|
|
|
|
Да |
|
|
|
|
проверка условия достижения требуемой |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
DY≤ε |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
точности |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
задание нового начального значения аргу- |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
x0=xmin-h |
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
мента в окрестности минимума функции |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
h=h/2 |
|
|
|
|
|
|
|
дробление шага изменения аргумента |
|||||||||||||||||||
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вывод результатов |
|||
|
|
|
min,ymin |
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
x |
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
конец
61
Рис.2 Программа реализующая схему алгоритма (рис.2.), имеет вид:
Program PRIM6b; {Лабораторная работа № 6б}
{Cтудент группы ****** Иванов И.И.}
Label M1;
Const EPS = 1E - 5;
Var A, B, XO, XMIN, Y, YMIN, X, H, DY:real;
Begin
Writeln(‘Введите А, В ‘);
Read(A, B); {Ввод исходных данных} Write(A,B); {Вывод исходных данных}
XO:=A; H:=0.15; {Задание начального значения аргумента и шага его изменения}
While TRUE do {Начало внешнего цикла} begin
YMIN:=1E10; X:=XO;
Repeat {Начало вложенного цикла} Y:=X SQR(X-1)SQR(X-2)(X-2);
if Y<YMIN then begin
YMIN:=Y; XMIN:=X X:=X+H;
if X>=B then Writeln(‘Отсутствие экстремума’); end;
Until Y>YMIN; {Конец вложенного цикла} DY:=ABS(Y-YMIN)/Y;
if DY<=EPS then GoTo M1; {Условие выхода из внешнего цикла}
XO:=XMIN-H; H:=H/2;
end; {Конец внешнего цикла}
M1: Writeln(‘XMIN=‘, XMIN:8:3, ‘ YMIN = ‘, YMIN:8:5) {Вывод результатов}
End.
В соответствии с принципами структурного программирования для организации итерационного внешнего цикла используется оператор цикла WHILE, а для внутреннего цикла - оператор REPEAT-UNTIL.
62
Для контроля вычислений определим экстремум функции у=х(х- 1)2(х-2)3 на интервале [-0,3;0,5]. Минимум функции равен ymin=−0,76.
63
Л а б о р а т о р н а я р а б о т а N 7 “Обработка матриц”
Цель работы - овладение навыками алгоритмизации и программиро- вания структур с вложенными циклами, навыками использования приемов программирования во вложенных циклах, способами ввода и вывода мат- риц.
Задания для самостоятельной подготовки
1.Изучить:
-правила организации вложенного цикла с учетом порядка перебора элементов матрицы;
-правила использования приемов программирования в структурах с вложенными циклами;
-способы ввода и вывода матриц, имеющиеся в языке программиро-
вания.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи.
4. Подготовить тестовый вариант программы и исходных данных.
Задание к работе
1.Обработать на ЭВМ матрицу в соответствии с вариантом задания, указанного в таблице. Вывести на печать результаты и исходную матрицу в общепринятом виде.
2.Проверить правильность выполнения программы с помощью тесто- вого варианта.
Пример выполнения работы
Выполнить на ЭВМ решение задачи. Записать в массив В(N,KMAX) положительные элементы строк матрицы A(N,M) (N≤20, M≤10) до пер-
вого отрицательного, где KMAX - наибольшее значение числа положитель- ных элементов в строке до первого отрицательного. Вывести на печать сформированную матрицу В. На печать выводить только те элементы, ко- торые записаны в матрицу В.
64
|
|
Т а б л и ц а |
||
|
|
|
|
|
Вариант |
Имя матрицы |
Действия |
Условия и |
|
задания |
и размеры |
ограниче- |
||
|
||||
|
|
|
ния |
|
1 |
2 |
3 |
4 |
|
|
|
|
|
|
|
|
Вычислить и запомнить сумму и число |
аij > 0 |
|
1 |
А(10,15) |
положительных элементов каждого столб- |
||
|
|
ца матрицы. Результаты отпечатать в виде |
|
|
|
|
двух строк. |
|
|
|
|
Вычислить и запомнить суммы и числа |
N ≤ 20 |
|
2 |
А(N,M) |
элементов каждой строки матрицы. Ре- |
||
|
|
зультаты отпечатать в виде двух столбцов. |
M ≤ 15 |
|
|
|
Вычислить сумму и число элементов мат- |
N ≤ 12 |
|
3 |
В(N,N) |
рицы, находящихся под главной диагона- |
||
|
|
лью и на ней. |
|
|
|
|
Вычислить сумму и число положительных |
сij > 0 |
|
4 |
С(N,N) |
элементов матрицы, находящихся над |
||
|
|
главной диагональю. |
N ≤ 12 |
|
|
|
Записать на место отрицательных элемен- |
K ≤ 10 |
|
5 |
D(K,K) |
тов матрицы нули и вывести ее на печать |
||
|
|
в общепринятом виде. |
|
|
|
|
Записать на место отрицательных элемен- |
|
|
6 |
D(10,10) |
тов матрицы нули, а на место положитель- |
|
|
|
|
ных - единицы. Вывести на печать ниж- |
|
|
|
|
нюю треугольную матрицу в общеприня- |
|
|
|
|
том виде. |
|
|
|
|
Найти в каждой строке матрицы макси- |
N ≤ 20 |
|
7 |
F(N,M) |
мальный и минимальный элементы и |
||
|
|
поместить их на место первого и послед- |
M ≤ 10 |
|
|
|
него элемента строки соответственно. |
|
|
|
|
Матрицу напечатать в общепринятом |
|
|
|
|
виде. |
|
|
|
|
Транспонировать матрицу и вывести на |
|
|
8 |
F(10,8) |
печать элементы главной диагонали и |
|
|
|
|
диагонали, расположенной под главной. |
|
|
|
|
Результаты разместить в двух строках. |
|
|
|
|
Для целочисленной матрицы найти для |
nij /5 5=nij |
|
9 |
N(10,10) |
каждой строки число элементов, кратных |
||
|
|
пяти, и наибольшее из полученных резуль- |
|
|
|
|
татов. |
|
|
65
П р о д о л ж е н и е т а б л и ц ы
1 |
2 |
3 |
4 |
|
|
|
|
10 |
N(10,10) |
Из положительных элементов матрицы N |
|
сформировать матрицу М (10, KMAX), |
|
||
|
|
располагая их в строках матрицы подряд, |
|
|
|
где KMAX - максимальное число положи- |
|
|
|
тельных элементов строки матрицы N. |
|
|
|
Записать нули на место отсутствующих |
|
|
|
элементов. Отпечатать обе матрицы в |
|
|
|
общепринятом виде. |
|
|
|
Найти в каждой строке наибольший эле- |
N ≤ 15 |
11 |
Р(N,N) |
мент и поменять его местами с элементом |
|
|
|
главной диагонали. Отпечатать получен- |
|
|
|
ную матрицу в общепринятом виде. |
|
|
|
Найти наибольший и наименьший элемен- |
K ≤ 20 |
12 |
R(K,N) |
ты матрицы и поменять их местами. |
N ≤ 10 |
|
|
Вывести исходные данные в первые 24 |
|
13 |
S(25,8) |
строки и первые 7 столбцов. Вычислит |
|
|
|
среднее арифметическое значение элемен- |
|
|
|
тов каждой строки и записать его в 8-й |
|
|
|
столбец, а также среднее арифметическое |
|
|
|
каждого столбца и записать его в 25-ю |
|
|
|
строку. Отпечатать полученную матрицу в |
|
|
|
общепринятом виде. |
|
|
|
Найти строку с наибольшей и наименьшей |
N ≤ 20 |
14 |
T(N,M) |
суммой элементов. Вывести на печать |
|
|
|
найденные строки и суммы их элементов. |
M ≤ 15 |
|
|
Упорядочить по возрастанию элементы |
|
15 |
V(15,10) |
каждой строки матрицы. Отпечатать полу- |
|
|
|
ченную матрицу в общепринятом виде. |
|
Алгоритм решения следующий. Организовать вложенный цикл для перебора элементов исходной матрицы А по строкам. Для этого во внеш- нем цикле следует изменять индекс строки, а во внутреннем - индекс столб- ца; во внутреннем цикле - находить и записывать в соответствующую стро- ку матрицы В положительные элементы строки до первого отрицательного, а также подсчитывать число положительных элементов К в этой строке. Для подсчета числа положительных элементов необходимо перед внутрен- ним циклом задать его начальное значение, равное 0, а внутри цикла счи- тать число таких элементов, используя оператор присваивания К=К+1.
66
Если положительных элементов в строке нет, то К=0, если в строке элемен- ты положительны, то К=N.
Как только встретиться отрицательный элемент в строке матрицы, необходимо записать в матрицу В вместо него -1 и выйти из внутреннего цикла. Во внешнем цикле следует найти наибольшее значение из всех К, вычисленных для отдельных строк. Для этого перед внешним циклом необ- ходимо задать начальное значение KMAX , например, равное нулю, а внут-
ри внешнего цикла сравнить К с KMAX и находить наибольшее из них. Таким образом, матрица В имеет размер N×KMAX. В некоторых стро-
ках матрицы В будет записано элементов меньше, чем KMAX. По условию задачи на печать необходимо вывести только элементы, записанные в мат- рицу В. Наличие в строках матрицы - 1 указывает на окончание вывода элементов этой строки.
Схема алгоритма решения представлена на рисунке 7.1.
1
начало
2
N,M,A
3
N,M,A
4
kmax=0
5
i=1,N
6
k=0
7
ввод исходных данных
вывод исходных данных
задание начального значения
организация внешнего цикла изменения индекса строк матрицы А
задание начального значения
67
6 |
|
|
|
7 |
|
организация внутреннего цикла |
|
j=1,M |
изменения индекса столбцов матрицы А |
||
|
|||
8 |
Да |
проверка знака элемента матрицы А |
|
aij<0 |
|
||
|
|
||
Нет |
|
||
9 |
|
запись положительного элемента матрицы А |
|
bij=aij |
|
в матрицу В и увеличение значения k на 1 |
|
k=k+1 |
|
||
10 bij=−1 |
запись в матрицу В −1, если элемент |
||
матрицы А отрицательный |
|||
j |
|
||
|
|
||
11 |
Да |
определение максимального числа столбцов |
|
k>kmax |
матрицы В |
||
|
|||
|
|
12 |
|
Нет |
|
kmax=k |
|
|
|
||
13 |
|
|
|
i |
|
|
|
14 |
|
|
|
i=1,N |
|
организация внешнего цикла изменения |
|
|
|
||
15 |
|
индекса строк матрицы В |
|
|
|
||
j=1,kmax
68
16
организация внутреннего цикла изменения
индекса столбцов матрицы В
|
15 |
|
|
16 |
|
Да |
|
|
проверка знака элемента матрицы В |
||
bij<0 |
|||
|
|||
17 |
Нет |
|
|
|
bij |
вывод результатов |
|
|
переход на следующую строку печатающего |
||
|
|
||
18 |
|
устройства, при обнаружении отрицательного |
|
|
j |
элемента массива В или завершении |
|
|
внутреннего цикла |
||
|
|
||
19Пропуск
строки
20
i
21
конец Рис. 7.1
Программа, реализующая алгоритм решения задачи на языке Pascal, имеет вид:
Program PRIM7; {Лабораторная работа № 7}
{Cтудент группы ******* Иванов И.И.}
Label 10;
Const N=20; M=10;
Var I, J, NR, MR, K, KMAX:Integer;
69
A, B:array [1..N,1..M] of real;
Begin
Writeln(‘Введите значение NR,MR‘);
Read(NR,MR); {Ввод числа строк и столбцов матрицы А} Writeln(Введите значения матрицы А’);
for i:=1 to NR do for j:=1 to MR do
begin
Read(A[i,j]); {Ввод матрицы А} Writeln(A[i,j]) {Вывод исходных данных}
end;
KMAX:=0; {Задание начального значения}
for i:=1 to NR do {Организация внешнего цикла} begin
K:=0; {Задание начального значения}
for j:=1 to MR do {Организация внутреннего цикла}
if A[i,j]>0 then {Проверка знака элемента матрицы А} begin
B[i,j]:=A[i,j] {Запись положительных элементов
матрицы А в В и увеличение К на
1}
K:=K+1; end
else begin
B[i,j]:=-1; {Запись в матрицу В −1}
Goto 10 end;
10: if K>KMAX then KMAX:=K; {Определение макси-
мального числа столбцов матрицы В}
end;
for i:=1 to NR do {Организация цикла вывода результатов} for j:=1 to KMAX do
if B[i,j]>0 then Write(B[i,j])
else
Writeln
End.
70
