- •ВВЕДЕНИЕ
- •1. ЭЛЕМЕНТЫ ЯЗЫКА ПАСКАЛЬ. ЛИНЕЙНЫЕ ПРОГРАММЫ
- •Стандартные функции
- •Функции преобразования типов
- •Порядок вычислений
- •Заданиe 1. Вычислить арифметические выражения
- •2. СТРУКТУРИРОВАННЫЕ ОПЕРАТОРЫ
- •2.1. Составной оператор
- •2.2. Условные операторы
- •2.3. Селективный оператор
- •2.4 Операторы цикла
- •Задание 2.1
- •Задание 2.2
- •Задание 3*
- •4. ПОДПРОГРАММЫ В ПАСКАЛЕ
- •4.1. Процедуры
- •4.2. Функции
- •Задание 4
- •5. МАССИВЫ
- •5.1. Одномерные масивы
- •5.2. Двумерные массивы
- •Задания 5.1
- •Задания 5.2
- •ГЛАВА 7. СОРТИРОВКА МАССИВОВ
- •Сортировка посредством простого выбора
- •Сортировка обменом (метод «пузырька»)
- •Сортировка включением
- •Быстрая сортировка
- •Задание 7.
procedure Substitution1(var m:MyArray); var i : integer;
begin
for i:=1 to n do
if m[i]<0 then m[i]:= -m[i];
end;
6. Работа с несколькими массивами.
Даны два одномерных массива A и B. Найти их скалярное произведение. Скалярным произведением называется сумма произведений соответствующих элементов: a[1]*b[1]+a[2]*b[2]+..+a[n]*b[n]
function Sp(a,b : MyArray) : longint; var i : integer;
S : longint; begin
S:=0;
for i:=1 to n do s:=s+a[i]*b[i]; Sp:=S;
end;
5.2. Двумерные массивы
Аналогом двумерного массива в математике является матрица. Номер элемента определяется пересечением строки и столбца. Существует несколько способов объявления двумерного массива.
1) Двумерный массив как одномерный, элементами которого являются одномерные массивы.
const n=2; m=3;
type omyArray = array [1..m] of тип_элемента; dmyArray = array [1..n] of omyArray;
var v : omyarray; a : dmyArray;
49
2) Можно исключить определение типа omyArray в определении типа dmyArray:
const n=2; m=3;
type dmyArray = array [1..n] of array [1..m] of тип_элемента var a : dmyArray;
3) Запись можно ещё немного сократить:
const n=2; m=3;
type dmyArray = array [1..n,1..m] of тип_элемента var a : dmyArray;
4) Ну и, наконец, задать двумерный массив можно и в секции описания переменных:
var a : array [1..n,1..m] of тип_элемента;
При работе с массивом обычно используют 2 вложенных цикла: внешний – по строкам и внутренний – по столбцам. Ниже приведен пример программы позволяющей произвести заполнение двумерного массива случайными числами в диапазоне от -25 до 26, а затем вывести полученный массив на экран.
program Ex1; const n=10; m=15;
type dmyArray = array [1..n,1..m] of integer; var A : dmyArray;
procedure Init(var x : dmyArray); {формируем массив} var i,j : integer;
begin
for i:=1 to n do
for j:=1 to m do x[i,j]:=-25+random(51);
end;
50
procedure Print(x: dmyArray); {вывод массива на экран} var i,j: integer;
begin
for j:=1 to m do begin
for i:=1 to n do write(x[i,j]:5); writeln;
end;
end;
begin {основная программа} Init(A); writeln(‘Массив A:’); Print(A);
readln;
end.
При решении задач с двумерными массивами возникают те же типы задач, что и в случае одномерных массивов.
1. Вычисление произведения матриц.
procedure Mult(x,y : dmyArray; var z : dmyArray); var i,j,k : integer;
begin
for i:=1 to n do
for j:=1 to n do begin
z[i,j]:=0;
for k:=1 to n do z[i,j]:=z[i,j]+x[i,k]*y[k,j];
end;
end;
Здесь x,y – матрицы, произведение которых необходимо найти, а z – искомое произведение.
51
2. Изменению значений некоторых элементов двумерного массива. В массиве размерности NxM к элементам чётных столбцов необходимо прибавить элемент первого столбца соответствующей строки.
procedure Sub(var x : dmyArray); var i,j : integer;
begin
for i:=1 to n do
for j:=1 to (m div 2) do x[i,2*j]:= x[i,2*j]+x[i,1]);
end;
3. Вставить строку из нулей после строки с номером k. Необходимо первые k строк оставить без изменения, все строки с
номером после k сдвинуть на одну вниз. Лучше всего начать делать это с последней до k+1-oй строки. Кроме этого, потребуется введение (описание) массива с числом строк, большим изначального на 1
type dmyArray = array [1..n+1,1..m] of integer
поскольку изменять размерность массивов в теле программы нельзя.
procedure Insert(k : integer; var x : dmyArray); var i,j : integer;
begin
for i:=n down to k+1 do for j:=1 to m do
x[i+1,j]:=x[i,j]; {элементу столбца присваиваем значение элемента того же столбца, но строчкой выше}
for j:=1 to m do x[k+1,j]:=0;
end;
52