p align="left">Программа Prim 27 работает аналогично программе Prim 26b, однако выводит элементы, лежащие на дополнительной диагонали. Program Prim28; Var i,j,min,m,n,k:integer; a:array[1..20,1..10] of integer; b:array[1..10] of integer; BEGIN writeln('ввести m,n'); readln(m,n); for i:=1 to m do {m - количество строк } for j:=1 to n do {n - количество столбцов} Begin writeln('ввести a[', i ,', ', j,']'); readln(a[i , j]); end; { вывести элементы массива а } for i:=1 to m do Begin writeln; for j:=1 to n do write(a[i,j],' '); end; min:=32767; {максимальное integer, чтобы в последующем сравнивать} {и заносить в min все элементы a[i,j], которые меньше min} for i:=1 to m do for j:=1 to n do if a[i , j]<min then Begin min:=a[i , j]; k:=i; end; writeln(' строка, содержащая наименьший элемент'); for j:=1 to n do write(' a[', k ,',', j ,']=',a[k , j]); readln; END. Программа Prim 28 находит в массиве строку размером до 20х10, содержащую наименьший элемент. Program Prim29; Var i,j:integer; a:array[1..5, 1..7] of integer; b:array[1..7] of integer; c:array[1..5] of integer; BEGIN for i:=1 to 5 do for j:=1 to 7 do begin writeln('введите a[',i,',',j,'] элемент матрицы а'); readln(a[i,j]); end; for j:=1 to 7 do begin writeln('введите b[',j,'] элемент вектора b'); readln(b[j]); end; for i:=1 to 5 do {начало перемножения матрицы на вектор} begin c[i]:=0; for j:=1 to 7 do c[i]:=c[i]+ a[i,j]*b[j]; end; {конец перемножения матрицы на вектор} writeln('распечатка массива а'); for i:=1 to 5 do begin writeln; {начать новую строку} for j:=1 to 7 do write(' ',a[i,j]); end; writeln; writeln('распечатка массива b'); for j:=1 to 7 do write(' ',b[j]); writeln; writeln('результирующий массив с'); for i:=1 to 5 do write(' ',c[i]); readln; END. Программа вводит матрицу А размером 5х7 и вектор размером 7 элементов, затем их перемножает по правилу Сi = Сi + a[i,j]b[j] и выводит пять элементов массива С. Заметим, что для вычисления каждого с необходимо каждый элемент строки массива a умножить на соответствующий по индексу элемент массива b, а затем все эти произведения сложить. таким образом, количество элементов массива с будет равно количеству строк матрицы a (и, соответственно, количеству элементов массива b). Program Prim29a; Var i,j,n,m:integer; a:array[1..50,1..70] of integer; b:array[1..70] of integer; c:array[1..50] of integer; BEGIN writeln('ввести количество строк и столбцов'); readln(n,m); for i:=1 to n do for j:=1 to m do begin writeln('ввести a[',i,',',j,'] элемент матрицы а'); readln(a[i,j]); end; for j:=1 to m do begin writeln('ввести b[',j,'] элемент вектора b'); readln(b[j]); end; for i:=1 to n do {начало перемножения матрицы на вектор} begin c[i]:=0; for j:=1 to m do c[i]:=c[i]+ a[i,j]*b[j]; end; {конец перемножения матрицы на вектор} writeln('распечатка массива а'); for i:=1 to n do Begin writeln; {начать новую строку} for j:=1 to m do write(' ',a[i,j]); end; writeln; writeln('распечатка массива b'); for j:=1 to m do write(' ',b[j]); writeln; writeln('результирующий массив с'); for i:=1 to n do write(' ',c[i]); readln; END. Программа Prim 29a тоже перемножает матрицу на вектор. Здесь матрица может иметь размеры до 50х70, соответственно вектор B может иметь размер до 70, а вектор С - размер до 50 элементов. 7. Подпрограммы7.1. Общие положения В практике программирования часто встречаются ситуации, когда одну и ту же группу операторов необходимо выполнить в различных местах программы, неважно, что при этом по-разному будут называться исходные данные и результаты работы этих операторов. Важно, что эти группы операторов выполняют одну и ту же работу. Например, в различных местах программы необходимо вычислить корни квадратного уравнения, причем в одном месте это будет уравнение ax2+bx+c=0, в другом - sz2+tz+p=0, в третьем - ky2+ly+n=0 и т.д. В этом случае алгоритм вычисления корней уравнения в программе можно писать один раз в виде подпрограммы, а использовать его многократно. Блок-схема такой программы без применения подпрограммы изображена на рис. 7.1. Блок-схема алгоритма с использованием подпрограммы изображена на рис. 7.2. Подпрограммой называется имеющая имя логически законченная группа операторов (возможно со своими описаниями), к которой по имени можно обратиться для выполнения неограниченное количество раз из различных мест основной программы, возможно, с различным, но фиксированным набором входных величин и результатов. Подпрограммы могут быть оформлены в виде функций и процедур. Функции применяют тогда, когда результат работы подпрограммы один. Обращение к функции может записываться в выражениях, например: (а+b)/cos(x). Здесь cos(x) есть обращение к подпрограмме типа "функция", правда, стандартной, а не написанной пользователем. Встретив имя cos, машина с входной величиной x обращается к подпрограмме, вычисляет с помощью ряда функцию cos(x) (см. программу в подразд. 4.4.), и результат этой работы в виде значения функции возвращается в арифметическое выражение. Функция может иметь несколько входных параметров, но всегда один результат. Процедура также может иметь несколько входных параметров, но несколько результатов. Несколько - это 0, или 1, или 2, или 3 и т.д. результатов. Обращение к процедуре состоит из отдельного оператора. Например, обращение к процедуре, вычисляющей корни квадратного уравнения, может иметь вид: root(a, b, c, x1, x2); Подпрограммы, как функции, так и процедуры могут быть стандартными, например sin(x), cos(x), sqrt(x), succ(y), ord(y) и т.п.; библиотечными, которые становятся доступными при подключении модулей и библиотек (см. далее), а также определены пользователем, т.е. написаны программистом для решения своей задачи.
7.2. Подпрограммы-функции, определенные пользователем Функции пользователя описываются в разделе описания функций и процедур основной программы. Описание функции строится как законченная программа, т.е. может состоять из заголовка и шести разделов: описания, меток, констант, типов, переменных, функций и процедур и раздела операторов. Заканчивается описание функции символом точка с запятой. Написать программу, вычисляющую с помощью подпрограммы-функции, выражение: f1(x)=x+256.4; f2(y)=y+256.4; f3(z)=z+256.4; Program Prim30; Var x,y,z,f1,f2,f3:real; function f(x:real):real; {заголовок функции;} { f - имя функции, это же и имя} {результата, х - формальный параметр} Begin f:=(x+256.4); end; {тело функции} BEGIN {начало основной программы} writeln('ввести x,y,z'); readln(x,y,z); f1:=f(x); {обращение к подпрограмме f с фактическим параметром x} f2:=f(y); {обращение к подпрограмме f с фактическим параметром y} f3:=f(z); {обращение к подпрограмме f с фактическим параметром z} writeln(f1:20,f2:20,f3:20); readln; END. Написать программу, вычисляющую G: Оформим вычисления в виде подпрограммы-функции: Program Prim31; Var h,x,y,z,g:real; function f(a,b:real):real; {входные формальные параметры a,b}
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
|