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;

и представить в следующем виде:

Error 201: Range check error - student2.ru

Примеры:

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 . Вывести на экран верхнюю, переднюю и правую грани массива:

Error 201: Range check error - student2.ru

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

Строки

Строки занимают

Наши рекомендации