Error 201: Range check error
б) в разделе определения констант, типов и описания переменных:
Const row = 2;
Col = 3;
Type TMatrix = Array [1..row,1..col] Of Integer;
Var A : TMatrix;
Сначала определены поименованные константы row и col (описаны их имена и заданы конкретные значения), затем определен новый тип данных TMatrix с использованием ранее определенных констант, а в конце описан массив A с использованием ранее определенного типа данных,
в) определением массива как типизированной константы:
Const A : Array [1..2,1..3] Of Integer =((-5,8,0),(9,-1,4));
При этом задаются не только имя, размеры и базовый тип массива, но и конкретное значение его элементов. Эти значения могут изменяться в программе.
Номера строк и столбцов массивов могут быть заданы не только целыми положительными числами, но и символами, отрицательными целыми числами и строками.
Примеры:
1. Описать массив Doska, позволяющий рассматривать его как модель шахматной доски.
На шахматной доске строки обозначаются латинскими буквами от a доh, а столбцы – цифрами от 1 до 8, а шахматные фигуры – тоже латинскими буквами. Поэтому описание этого массива может выглядеть так:
Var Doska : Array [‘a’..’h’,1..8] Of Char;
а обращение к элементу этого массива – так:
Doska[‘c’,2]:=’f’;
Использование нечисловых индексов элементов массива повышает наглядность программы, делает ее более понятной.
2. Описать массив Roma, в котором можно было бы хранить данные о количестве жителей Рима с года его основания (754 г. до н.э.) и до 33 г. н.э.
Традиционное описание:
Var Roma : Array [1..787] Of Word;
В этом случае первый элемент массива соответствует году основания Рима:
Roma[1]:=2; в год основания Рима в нем жили два основателя
Roma[787]:=450000; в 33 г. н.э. в Риме проживали 450000 жителей
Тогда какой элемент массива соответствует, например, 639 году до н.э.? Сразу сказать трудно, необходимо вычислить индекс этого элемента.
Таким образом, при традиционном описании этого массива возникают трудности сопоставления индекса элемента с годом.
Опишем массив по-другому, используя отрицательные индексы элементов:
Var Roma : Array [-754..33] Of Word;
В этом случае можно сразу сказать, что 639 году до н.э. соответствует элемент Roma[-639].
3. Описать массив Ozenka, в котором можно было бы хранить оценки студентов Иванова И. и Петрова П. по математике, физике и информатике:
Мат. Физ. Инф.
Иванов И. 4 5 5
Петров П. 3 4 3
Традиционное описание:
Var Ozenka : Array [1..2,1..3] Of Word;
В этом случае по оператору присваивания:
Ozenka[2,1]:=3;
трудно догадаться, что у Петрова П. по математике оценка 3.
Опишем этот массив, введя новые типы данных:
Type Fam = (Ivanov, Petrov);
Predm = (Math, Phis, Inf);
Var Ozenka : Array [Fam, Predm] Of 2..5;
Сейчас можно поставить Петрову П. оценку по математике следующим образом:
Ozenka[Petrov,Math]:=3;
Конечно, такое описание массива повышает наглядность программы.
При решении некоторых задач полезно использовать массивы размерностью более двух, например, трехмерные массивы. Такие массивы представляют собой объемную конструкцию типа куба. Этот куб состоит из нескольких слоев -двумерных массивов. Каждый из них имеет строки и столбцы.
Например, целочисленный массив A размером 3 слоя,по 4 строки и 5 столбцов в каждом слое, можно описать так:
Var a: Array [1..3, 1..4, 1..5] Of Integer;
и представить в следующем виде:
Примеры:
1. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max.
Для решения этой задачи используется стандартная функция – генератор случайных чисел Random(k). При каждом обращении к этой функции она вырабатывает целое случайное число, лежащее в диапазоне от 0 до k - 1.
Program Primer_1;
Uses WinCrt;
Const n = 10; задание исходных данных в виде именованных констант
vect_min = -10;
vect_max = 20;
Var i : Word; параметр цикла
Vector : Array [1..n] Of Integer; описание вектора сиспользованием константы n
Begin
ClrScr; очистка экрана
Randomize; запуск генератора случайных чисел
For i:=1 To n Do заполнение вектора случайными числами
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
For i:=1 To n Do форматный вывод вектора на экран в однустроку
Write(Vector[i]:5);
WriteLn; переход на новую строку на экране
ReadLn; задержка картинки на экране до нажатия на ENTER
End.
2. Задать элементы целочисленного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Полученный массив вывести на экран построчно.
Program Primer_2;
Uses WinCrt;
Const n = 5;
m = 8;
mass_min = -50;
mass_max = 50;
Var i, j : Word; параметры циклов
Massiv : Array [1..n, 1..m] Of Integer; описание массива сиспользованием констант n и m
Begin
ClrScr;
Randomize; запуск генератора случайных чисел
For i:=1 To n Do заполнение массива случайными числами
For j:=1 To m Do в заданном диапазоне
Massiv[i, j]:=Random(mass_max – mass_min + 1) + mass_min;
For i:=1 To n Do форматный вывод массива на экран построчно
Begin
For j:=1 To m Do
Write(Massiv[i, j]:5);
WriteLn; переход на новую строку на экране
End;
WriteLn;
ReadLn;
End.
3. Задать элементы целочисленного массива massivnm в виде чисел от 1 до n*m . Полученный массив вывести на экран построчно:
Program Primer_3;
Uses WinCrt;
Const n = 3;
m = 5;
Var i, j, k : Word;
Massiv : Array [1..n, 1..m] Of Word;
Begin
ClrScr;
k:= 0; рабочая переменная для задания элементов массива
For i:=1 To n Do заполнение массива
For j:=1 To m Do
Begin
k:= k + 1;
Massiv[i, j]:= k;
End;
For i:=1 To n Do форматный вывод массива на экран построчно
Begin
For j:=1 To m Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
ReadLn;
End.
4. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран в одну строку. Определить индекс i_max и значение vector_max максимального элемента вектора.
Перед поиском максимального элемента вектора за таковой принимается первый элемент вектора, а затем он сравнивается с остальными элементами:
Program Primer_4;
Uses WinCrt;
Const n = 10; задание исходных данных в виде именованных констант
vect_min = -10;
vect_max = 10;
Var i, i_max, vector_max : Integer;
Vector : Array [1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
Vector_max:= Vector[1]; пока максимальный элемент – первый
i_max:= 1; элемент вектора
For i:=2 To n Do поиск начинаем со второго элемента!
If (Vector[i] > Vector_max) Then если очередной элемент больше
Begin текущего максимального,
Vector_max := Vector[i]; то максимальным элементом
i_max := i; становится очередной элемент вектора
End;
WriteLn(‘Vector_max=’, Vector_max);
WriteLn(‘i_max=’, i_max);
ReadLn;
End.
5. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Определить сумму S элементов вектора.
Перед началом суммирования сбрасываем сумму на нуль, потом в цикле будем добавлять в нее очередной элемент:
Program Primer_5;
Uses WinCrt;
Const n = 10; задание исходных данных в виде именованных констант
vect_min = -50;
vect_max = 50;
Var i, s : Integer;
Vector : Array [1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
S := 0; начальная сумма равна нулю!
For i:=1 To n Do добавляем в сумму очередной
s := s + Vector[i]; элемент вектора
WriteLn(‘s=’, s);
ReadLn;
End.
6. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Перевернуть вектор: поменять местами первый и последний элементы, второй и предпоследний, и так далее (поплавок):
Program Primer_6;
Uses WinCrt;
Const n = 10;
vect_min = -50;
vect_max = 50;
Var i, k, m : Integer;
Vector : Array [1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
WriteLn(‘Исходный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
m:= n Div 2; средина вектора
For i:=1 To m Do идем до средины вектора
Begin
k:= Vector[i];
Vector[i]:= Vector[n – i + 1];
Vector[n – i + 1]:= k;
End;
WriteLn;
WriteLn(‘Полученный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
ReadLn;
End.
7. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Определить сумму S элементов вектора, лежащих в диапазоне от min до max, и количество count этих элементов.
Перед началом суммирования сбрасываем сумму и количество на нуль, потом в цикле будем добавлять в нее очередной элемент, отвечающий заданным условиям:
Program Primer_7;
Uses WinCrt;
Const n = 10; задание исходных данных в виде именованных констант
vect_min = -50;
vect_max = 50;
min = -10;
max = 10;
Var i, s, count : Integer;
Vector : Array [1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
count:= 0;
s:= 0; начальная сумма равна нулю!
For i:=1 To n Do
If (Vector[i] >= min) And (Vector[i] <= max) проверка условия
Then
Begin
s:= s + Vector[i];
count:= count + 1;
End;
WriteLn(‘s=’, s);
WriteLn(‘count=’, count);
ReadLn;
End.
8. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Поменять местами максимальный max и минимальный min элементы вектора.
Перед началом поиска максимального и минимального элементов за таковые принимается первый элемент вектора. Для обмена местами этих элементов необходимо определить их номера (индексы) i_min и i_max:
Program Primer_8;
Uses WinCrt;
Const n = 10; задание исходных данных
vect_min = -50;
vect_max = 50;
Var i, k, min, max, i_min, i_max : Integer;
Vector : Array [1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
WriteLn(‘Исходный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
min:= Vector[1]; начальные значения минимального
max:= Vector[1]; и максимального элементов массива
i_min:= 1; индексы этих элементов
i_max:= 1;
For i:=2 To n Do начинаем просмотр со второго элемента
Begin
If (Vector[i] < min) Then если очередной элемент вектора
Begin меньше минимального,
min:= Vector[i]; то за минимальный принимаем
i_min:= i; этот очереднойэлемент
End; и запоминаем его индекс
If (Vector[i] > max) Then если очередной элемент вектора
Begin больше максимального,
max:= Vector[i]; то за максимальный принимаем
i_max:= i; этот очереднойэлемент
End; и запоминаем его индекс
End;
WriteLn;
WriteLn(‘Минимальный элемент=’, Vector[i_min]);
WriteLn(‘Его индекс=’, i_min);
WriteLn(‘Максимальный элемент=’, Vector[i_max]);
WriteLn(‘Его индекс=’, i_max);
k:= Vector[i_min]; меняем их местами через
Vector[i_min]:= Vector[i_max]; третью переменную
Vector[i_max]:= k;
WriteLn;
WriteLn(‘Полученный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
ReadLn;
End.
9. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Поменять местами первый отрицательный и последний положительный элементы массива. Предусмотреть случай, когда элементы массива имеют один знак – только отрицательные или только положительные.
Обозначим их индексы как i_otr и i_pol. Перед началом поиска сбросим их на ноль. Если после поиска какой-нибудь из них останется равным нулю, то в векторе – элементы одного знака:
Program Primer_9;
Uses WinCrt;
Const n = 10; задание исходных данных
vect_min = -50;
vect_max = 50;
Var i, k, i_otr, i_pol : Integer;
Vector : Array [1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
WriteLn(‘Исходный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
i_otr:= 0;
i_pol:= 0;
For i:=1 To n Do
If (Vector[i] < 0) Then если очередной элемент вектора
Begin меньше нуля,
i_otr:= i; тозапоминаем его индекс
Break; и выходим из цикла
End;
For i:=1 To n Do
If (Vector[i] > 0) если очередной элемент вектора
Then i_pol:= i; больше нуля, тозапоминаем его индекс
If (i_otr = 0)
Then WriteLn(‘В векторе только положительные элементы’);
If (i_pol = 0)
Then WriteLn(‘В векторе только отрицательные элементы’);
If (i_otr > 0) And (i_pol > 0) Then
Begin
WriteLn;
WriteLn(‘Первый отрицательный элемент=’, Vector[i_otr]);
WriteLn(‘Его индекс=’, i_otr);
WriteLn(‘Последний положительный элемент=’, Vector[i_pol]);
WriteLn(‘Его индекс=’, i_pol);
k:= Vector[i_otr]; меняем их местами через
Vector[i_otr]:= Vector[i_pol]; третью переменную
Vector[i_pol]:= k;
WriteLn;
WriteLn(‘Полученный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
End;
ReadLn;
End.
10. Задать элементы целочисленного вектора vectorn случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Сдвинуть элементы вектора вправо на один шаг, причем последний элемент должен встать на первое место.
Для решения этой задачи запомним последний элемент вектора на переменной posl, сдвинем все элементы на шаг вправо, начиная с предпоследнего, а затем значение переменной posl поместим в первый элемент массива:
Program Primer_10;
Uses WinCrt;
Const n = 10; задание исходных данных
vect_min = -50;
vect_max = 50;
Var i, k, posl : Integer;
Vector : Array [1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
WriteLn(‘Исходный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
posl:= Vector[n]; запоминаем последний элемент вектора
For i:= n DownTo 2 Do
Begin
k:= Vector[i]; сдвигаем элементы вектора
Vector[i]:= Vector[i-1]; на один шаг вправо
Vector[i-1]:= k;
End;
Vector[1]:= posl; вставляем последний элемент
на первое место
WriteLn;
WriteLn(‘Полученный вектор:’);
For i:=1 To n Do
Write(Vector[i]:5);
WriteLn;
ReadLn;
End.
11. Задать элементы целочисленного вектора vectork случайными числами, лежащими в диапазоне от vect_min до vect_max. Вывести полученный вектор на экран. Разместить элементы вектора в массиве massivnm построчно (n*m = k):
Program Primer_11;
Uses WinCrt;
Const k = 12; задание исходных данных в виде именованных констант
vect_min = -50;
vect_max = 50;
n = 3;
m = 4;
Var i, j, t : Integer;
Vector : Array [1..k] Of Integer;
Massiv : Array [1..n, 1..m] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To k Do
Vector[i]:=Random(vect_max – vect_min + 1) + vect_min;
WriteLn(‘Исходный вектор’);
WriteLn;
For i:=1 To k Do
Write(Vector[i]:5);
WriteLn;
t := 0; номер очередного элемента вектора
For i:=1 To n Do
For j:=1 To m Do
Begin
t := t + 1;
Massiv[i, j] := Vector[t];
End;
WriteLn(‘Полученный массив’);
WriteLn;
For i:=1 To n Do
Begin
For j:=1 To m Do
Write(Massiv[i, j]:5);
WriteLn;
End;
ReadLn;
End.
12. Задать элементы целочисленного квадратного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Разместить элементы массива в векторе Vectork построчно (k = n*m):
Program Primer_12;
Uses WinCrt;
Const n = 5;
m = 7;
k = n * m;
mass_min = -50;
mass_max = 50;
Var i, j, t : Integer;
Vector : Array [1..k] Of Integer;
Massiv : Array [1..n, 1..m] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
For j:=1 To n Do
Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;
WriteLn;
WriteLn(‘Исходный массив:’);
For i:=1 To n Do
Begin
For j:=1 To m Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
t := 0;
For i:=1 To n Do
For j:=1 To m Do
Begin
t := t + 1;
Vector[t] := Massiv[i,j];
End;
WriteLn(‘Полученный вектор’);
WriteLn;
For i:=1 To k Do
Write(Vector[i]:5);
WriteLn;
ReadLn;
End.
13. Задать элементы целочисленного квадратного массива massivnn случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Транспонировать массив, заменив его строки соответствующими столбцами: первую строку – на первый столбец, вторую – на второй, и так далее. Транспонированный массив вывести на экран построчно:
Program Primer_13;
Uses WinCrt;
Const n = 5;
mass_min = -50;
mass_max = 50;
Var i, j, k : Integer;
Massiv : Array [1..n, 1..n] Of Integer; описание массива сиспользованием константы n
Begin
ClrScr;
Randomize;
For i:=1 To n Do
For j:=1 To n Do
Massiv[i, j]:=Random(mass_max – mass_min + 1) + mass_min;
WriteLn(‘Исходный массив:’);
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
For i:=1 To n Do строки начинаем с первой
For j:=i To n Do столбцы начинаем с главной диагонали
Begin
k:= Massiv[i,j]; транспонирование массива с использованием
Massiv[i,j]:= Massiv[j,i]; алгоритма циклического обмена
Massiv[j,i]:= k; значениями двух переменных через третью
End;
WriteLn(‘Транспонированный массив:’);
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
ReadLn;
End.
14. Задать элементы целочисленного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Сдвинуть столбцы массива на шаг вправо, причем последний столбец должен встать на место первого.
Решение задачи заключается в запоминании элементов последнего столбца и последующем сдвиге элементов каждой строки на шаг вправо. Запомненный элемент становится на первое место в текущей строке:
Program Primer_14;
Uses WinCrt;
Const n = 5;
m = 6;
mass_min = -50;
mass_max = 50;
Var i, j, k, posl : Integer;
Massiv : Array [1..n, 1..m] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
For j:=1 To m Do
Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;
WriteLn(‘Исходный массив:’);
For i:=1 To n Do
Begin
For j:=1 To m Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
For i:=1 To n Do перебираем строки массива
Begin
posl:= Massiv[i, m]; запоминаем последний элемент строки
For j:=m DownTo 2 Do
Begin
k:= Massiv[i,j]; сдвигаем элементы строки на шаг Massiv[i,j]:= Massiv[i, j-1]; вправо
Massiv[i, j-1]:= k;
End;
Massiv[i,1]:= posl; вставляем последний элемент
на первое место в строке
End; конец цикла по строкам
WriteLn(‘Полученный массив:’);
For i:=1 To n Do
Begin
For j:=1 To m Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
ReadLn;
End.
15. Задать элементы целочисленного квадратного массива massivnn случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Повернуть массив на 900 по часовой стрелке, например:
1 2 3 7 4 1
4 5 6 => 8 5 2
7 8 9 9 6 3
Для выполнения этой операции массив сначала транспонируют, а затем применяют для каждой строки поплавок – переворачивают строки:
Program Primer_15;
Uses WinCrt;
Const n = 5;
mass_min = -50;
mass_max = 50;
Var i, j, k, m : Integer;
Massiv : Array [1..n, 1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
For j:=1 To n Do
Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;
WriteLn(‘Исходный массив:’);
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
For i:=1 To n Do строки начинаем с первой
For j:=i To n Do столбцы начинаем с главной диагонали
Begin
k:= Massiv[i,j]; транспонирование массива с использованием
Massiv[i,j]:= Massiv[j,i]; алгоритма циклического обмена
Massiv[j,i]:= k; значениями двух переменных через третью
End;
WriteLn(‘Транспонированный массив:’);
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
m:= n Div 2;
For i:=1 To n Do перебираем строки массива
For j:=1 To m Do переворачиваем каждую строку
Begin
k:= Massiv[i,j];
Massiv[i,j]:= Massiv[i, n – j + 1];
Massiv[i, n – j + 1] := k;
End;
WriteLn;
WriteLn(‘Полученный массив:’);
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
ReadLn;
End.
16.Задать элементы целочисленного массива massivnm случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Определить седловую точку массива. Седловой точкой массива называется элемент, наименьший в своей строке и одновременно наибольший в своем столбце:
Program Primer_16;
Uses WinCrt;
Const n = 5;
m = 10;
mass_min = -50;
mass_max = 50;
Var i, j, k, i_max, j_min : Word;
min, max : Integer;
Massiv : Array [1..n, 1..m] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
For j:=1 To m Do
Massiv[i, j]:= Random(mass_max – mass_min + 1) + mass_min;
WriteLn(‘Исходный массив:’);
For i:=1 To n Do
Begin
For j:=1 To m Do
Write(Massiv[i, j]:5);
WriteLn;
End;
WriteLn;
For i:=1 To n Do перебираем строки массива
Begin
min:= Massiv[i,1];
j_min:= 1; номер столбца с минимальным элементом в этойстроке
For j:=2 To m Do
If (Massiv[i,j] < min) Then
Begin
min:= Massiv[i,j];
j_min:= j;
End;
max:= Massiv[1, j_min]; ищем максимальный элемент в столбце,
i_max:= 1; содержащем минимальный элемент этой строки
For k:=2 To n Do
If (Massiv[k,j_min] > max) Then
Begin
max:= Massiv[k,j_min];
i_max:= k;
End;
If (i = i_max) Then
Begin
WriteLn(‘Номер строки=’,i,
‘ Номер столбца=’,j_min,
‘ Седловая точка=’, Massiv[i, j_min]);
Break;
End;
End; конеццикла по строкам
ReadLn;
End.
17. Задать элементы целочисленного квадратного массива ann случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Заполнить вектор vk суммами элементов исходного массива, расположенных параллельно побочной диагонали (k = 2n – 1).
Для решения этой задачи рассмотрим исходный массив поэлементно:
a11 a12 a13 a14 . . . a1n
a21 a22 a23 a24 . . . a2n
a31 a32 a33 a34 . . . a3n
. . . . . . . . . . . . .
an1 an2 an3 an4 . . . ann
Заметим следующую закономерность образования сумм элементов по диагоналям, параллельным побочной:
v1 = a11 сумма индексов элемента 1 + 1 = 2
v2 = a21 + a12 сумма индексов элементов 1 + 2 = 3
v2 = a31 + a22 + a13 сумма индексов элементов 1 + 3 = 4
. . . . . . . . .
v2n-1 = ann сумма индексов элемента n + n = 2n
Таким образом, сумма индексов элементов массива, входящих в сумму элементов, на единицу меньше индекса соответствующего элемента вектора:
Program Primer_17;
Uses WinCrt;
Const n = 5;
k = 2*n - 1;
mass_min = -50;
mass_max = 50;
Var i, j, t : Integer;
vector : Array [1..k] Of Integer;
a : Array [1..n, 1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
For j:=1 To n Do
a[i, j]:= Random(mass_max – mass_min + 1) + mass_min;
WriteLn;
WriteLn(‘Исходный массив:’);
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(a[i, j]:5);
WriteLn;
End;
WriteLn;
For i:=1 To k Do обнуляем выходной вектор
vector [i]:= 0;
For i:=1 To n Do
For j:=1 To n Do
Begin
t:= i + j - 1; определяем индекс элемента вектора
vector[t]:= vector[t] + a[i,j]; вычисляем сумму элементов массива
End;
WriteLn;
WriteLn(‘Полученный вектор’);
WriteLn;
For i:=1 To k Do
Write(vector[i]:5);
WriteLn;
ReadLn;
End.
18. Задать элементы целочисленного квадратного массива ann случайными числами, лежащими в диапазоне от mass_min до mass_max. Исходный массив вывести на экран построчно. Заполнить вектор vk суммами элементов исходного массива, расположенных параллельно главной диагонали (k = 2n – 1).
Для решения этой задачи рассмотрим исходный массив поэлементно:
a11 a12 a13 a14 . . . a1n
a21 a22 a23 a24 . . . a2n
a31 a32 a33 a34 . . . a3n
. . . . . . . . . . . . .
an1 an2 an3 an4 . . . ann
Заменим элементы исходного массива элементами вычисляемого вектора:
vn vn-1 vn-2 vn-3 . . . v2 v1
vn+1 vn vn-1 vn-2 . . . v3 v2
vn+2 vn-1 vn vn-2 . . . v4 v3
. . . . . . . . . . . . . . . .
V2n-1 v2n-2 v2n-3 v2n-4 . . . vn+1 vn
Алгоритм очевиден:
Program Primer_18;
Uses WinCrt;
Const n = 5;
k = 2*n - 1;
mass_min = -50;
mass_max = 50;
Var i, j, m, t : Integer;
vector : Array [1..k] Of Integer;
a : Array [1..n, 1..n] Of Integer;
Begin
ClrScr;
Randomize;
For i:=1 To n Do
For j:=1 To n Do
a[i, j]:= Random(mass_max – mass_min + 1) + mass_min;
WriteLn;
WriteLn(‘Исходный массив:’);
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(a[i, j]:5);
WriteLn;
End;
WriteLn;
For i:=1 To k Do обнуляем выходной вектор
vector[i]:= 0;
m:= n-1;
For i:= 1 To n Do
Begin
m:= m+1;
t:= m;
For j:=1 To n Do
Begin
vector[t]:= vector[t] + a[i,j];
t:= t - 1;
End;
End;
WriteLn;
WriteLn(‘Полученный вектор’);
WriteLn;
For i:=1 To k Do
Write(vector[i]:5);
WriteLn;
ReadLn;
End.
19.Задать элементы целочисленного трехмерного массива massivknm по слоям в виде чисел от 1 до k*n*m . Вывести на экран верхнюю, переднюю и правую грани массива:
Program Primer_19;
Uses WinCrt;
Const k = 3; количество слоев
n = 4; количество строк в слое
m = 5; количество столбцов в слое
Var i, j, b, c : Word;
Massiv : Array [1..k, 1..n, 1..m] Of Word;
Begin порядок следования индексов: слой, строка,столбец
ClrScr;
c:= 0; рабочая переменная для задания элементов массива
For i:=1 To k Do заполнение слоев массива
For j:=1 To n Do заполнение строк массива
For b:=1 To m Do заполнение столбцов массива
Begin
c:= c + 1;
Massiv[i, j, b]:= c;
End;
WriteLn('Верхняя грань:');
For i:=1 To n Do
Begin
For j:=1 To m Do
Write(Massiv[1, i, j]:5);
WriteLn;
End;
WriteLn;
WriteLn('Передняя грань:');
For i:=1 To k Do
Begin
For j:=1 To m Do
Write(Massiv[i, n, j]:5);
WriteLn;
End;
WriteLn;
WriteLn('Правая грань:');
For i:=1 To k Do
Begin
For j:=1 To n Do
Write(Massiv[i, j, m]:5);
WriteLn;
End;
WriteLn;
ReadLn;
End.
Результат работы программы:
Верхняя грань:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
Передняя грань:
16 17 18 19 20
36 37 38 39 40
56 57 58 59 60
Правая грань:
5 10 15 20
25 30 35 40
45 50 55 60
Строки
Строки занимают