extracted_text:
Определение массива данных.  Одномерные массивы. Примеры практической работы с массивами данных
Структурированные типы данных.  Массивы
      Занятие 7
1. Урок 1. Определение массива данных.  Одномерные массивы.
2. Урок 2. Примеры практической работы с массивами данных.
3. Урок 3. Примеры практической работы с массивами данных.
4. Контрольные вопросы и упражнения.
Рассматриваемые   ранее     типы   числовых   данных,   являлись  простыми
  типами,   т.е.   константами   или
переменными, хранящими или принимающими только одно определенное типом значение. На это в оперативной памяти
компьютера определялась только одна ячейка памяти в виде байта или нескольких байт (слово, двойное слово и т.д., в
зависимости от типа константы или переменной).
Наряду   с   этим,   язык  Pascal  содержит   и   определяет  структурированные  типы   данных,   которые   могут
представлять совокупности значений. Наиболее часто   используемым   структурированным   типом   данных является
массив  данных.
Урок 1.  Определение массива данных.  Одномерные массивы
1.1. Определение массива данных.
1.2. Одномерные массивы данных. Доступ к элементам массива.
1. 1. Определение массива данных
Массив данных  это некое фиксированное количество констант или переменных одного типа. В этом случае в
оперативной памяти компьютера резервируется заданное при определении массива количество ячеек памяти (байт,
слово, двойное слово и т.д.). Составляющие массив данные определяются одним именем и называются элементами
массива. Массив описывается в блоке описания переменных Pascalпрограммы и имеет следующий формат:
<Имя массива данных> : array [a .. b, c .. d, e .. f,  … ] of <Тип данных  массива>;
<Имя   массива   данных>
где
перечислены и имена других массивов, имеющих одинаковую размерность и тип;
       идентификатор,   определяющий   имя   массива.   Через   запятую   могут   быть
<Тип данных массива>    тип переменных массива, который может быть любым;
a .. b, c .. d, e .. f …    разделенные двумя точками пары начальных и конечных значений индексов элементов
массива,  которые задаются явно в описании массива данных.
Для указания местоположения (адреса) элемента массива служат  индексы   целые переменные типа  byte,
shortint, integer, word. Конкретное значение индекса (индексов) указывает местоположение (адрес) элемента массива.
Количество   индексов   или   размерность   массива   в   системе   программирования
 TP  7.0     может   быть   любым   и
ограничивается размером  65520 байт.
Физической моделью массива данных могут служить почтовые ящики, устанавливаемые в подъездах наших
многоквартирных железобетонных жилищ. Отдельный почтовый ящик, в данном случае, является элементом массива
почтовых   ящиков   и   имеет   свой   номер      индекс,   а   его   объем   может   быть   заполнен   различной   информацией,
доставляемой почтой.
1.2. Одномерные массивы данных.  Доступ к элементам  массива
Массив данных называется одномерным или вектором, если для определения элемента массива необходимо
и достаточно одной индексной переменной.
Для определения размера одномерного массива, в блоке описания переменных  Pascalпрограммы требуется
одна пара начальных и конечных значений индекса.
Например, некоторый одномерный массив может быть определен как:
Var mas :array[0 .. 99] of real;
i :integer;
т.е. массив вещественных данных mas размерностью в 100 элементов с целой, типа integer, индексной переменной  i.
Доступ  к элементам массива  осуществляется  по конкретному  индексу,  который можно задать  явно  или
вычислить в программе, например, фрагмент программы   WriteLn(mas[10]);   напечатает на экране дисплея значение
10го элемента массива  mas и переместит курсор на следующую строку.
Урок 2.  Примеры практической работы с массивами данных
2.1. Организация, формирование, производство вычислений.
Рассмотрим несколько практических примеров организации, формирования и  преобразования     одномерных
массивов,   а  так   же, производства различных вычислений и поиска  необходимой  информации  в  них.
42 Определение массива данных.  Одномерные массивы. Примеры практической работы с массивами данных
2.1. Организация, формирование, производство вычислений
Задача. Сложить элементы двух массивов целых, положительных и отрицательных чисел, каждый из которых
состоит из 5 элементов, и записать полученный результат в третий массив того же размера.
Рассмотрим два варианта решения задачи.
Вариант 1
 Постановка задачи
1. Обеспечить организацию и формирование массивов явно  заданием   исходных данных в программе без
участия оператора.
2. Вывести значения элементов исходных массивов на экран дисплея.
3. Произвести сложение элементов исходных массивов и записать в третий массив.
4. Вывести результат на экран дисплея.
Алгоритм решения задачи
1. Присвоить каждому элементу исходных массивов конкретные значения.
2. Складывая элементы исходных массивов, имеющих  одинаковые индексы, формировать третий массив,
указывая конкретно номера элементов этого массива.
Программа решения этой задачи выглядит следующим образом.
Program V1L08P1; {Сложение двух массивов данных и запись результата в третий массив}
Uses Crt;
Var  mas1,mas2,mas3 :array[1..5] of byte;
begin
ClrScr;
{Формирование исходного массива mas1}
WriteLn('Исходный массив mas1:');
mas1[1]:=1;WriteLn(mas1[1]:3);
mas1[2]:=2;WriteLn(mas1[2]:3);
mas1[3]:=3;WriteLn(mas1[3]:3);
mas1[4]:=4;WriteLn(mas1[4]:3);
mas1[5]:=5;WriteLn(mas1[5]:3);
{Формирование исходного массива mas2}
WriteLn('Исходный массив mas2:');
mas2[1]:=5;WriteLn(mas2[1]:3);
mas2[2]:=4;WriteLn(mas2[2]:3);
mas2[3]:=3;WriteLn(mas2[3]:3);
mas2[4]:=2;WriteLn(mas2[4]:3);
mas2[5]:=1;WriteLn(mas2[5]:3);
{Формирование результативного массива mas3}
WriteLn('Результат сложения двух исходных массивов mas1 + mas2');
mas3[1]:=mas1[1]+mas2[1];WriteLn(mas3[1]:3);
mas3[2]:=mas1[2]+mas2[2];WriteLn(mas3[2]:3);
mas3[3]:=mas1[3]+mas2[3];WriteLn(mas3[3]:3);
mas3[4]:=mas1[4]+mas2[4];WriteLn(mas3[4]:3);
mas3[5]:=mas1[5]+mas2[5];WriteLn(mas3[5]:3);
{}
ReadKey
end.
Результат работы программы
Исходный массив mas1:
  1  2  3  4  5
Исходный массив mas2:
  5  4  3  2  1
Результат сложения двух исходных массивов mas1 + mas2:
  6  6  6  6  6
В данном примере значение элементов массивов указывалось явно в тексте программы, а действия оператора
для получения результата решения задачи заключаются только в запуске программы.
Вариант 2
Постановка задачи
1.
Значения элементов массивов вводить с клавиатуры.
43 2. Обеспечить интерактивный ввод исходных данных.
3. Результаты вычислений выводить на экран дисплея.
Алгоритм  задачи (подробный)
1. Вызвать библиотечный модуль  Crt,  для обеспечения работы с экраном дисплея.
2. В блоке описания переменных определить имя первого массива mas1, второго mas2   и третьего   mas3 с
размерностью 5.
4. Там же определить имя индексной переменной идентификатором  i  тип  byte.
5. Очистить   экран от возможно присутствующей там информации.
6. Вывести на экран сообщение:  "Введи значения массива  mas1".
7. Организовать цикл со счетчиком для ввода пяти значений масссива  mas1.
8. Вывести на экран сообщение:  "Введи значения массива  mas2."
9. Организовать цикл со счетчиком для ввода пяти значений массива  mas2.
10. Вывести на экран сообщение "Результат сложения двух массивов  массив mas3".
11. В следующем цикле складывать и выводить результат на экран дисплея.
12. Задержать изображение на экране до нажатия любой клавиши на клавиатуре.
Программа решения задачи по варианту 2  имеет следующий вид.
Program V1L08P2; {Сложение двух массивов данных, введенных с клавиатуры}
Uses Crt;
Var mas1,mas2,mas3 :array[1..5] of integer; i :byte; {Описание массивов переменных}
begin
ClrScr;
{}
WriteLn('Введи значения массива mas1');
for i:=1 to 5 do Read(mas1[i]); WriteLn;
{}
WriteLn('Введи значения массива mas2');
for i:=1 to 5 do Read(mas2[i]); WriteLn;
{}
WriteLn('Результат сложения двух массивов  массив mas3');
for i:=1 to 5 do
begin mas3[i]:=mas1[i]+mas2[i]; Write(mas3[i]:3) end;
{}
ReadKey
end.
{Цикл ввода элементов массива mas1}
{Цикл ввода элементов массива mas2}
{Цикл сложения элементов массивов mas1 и mas2}
Результат работы программы
Введи значения массива mas1
4
2
8
4
5
Введи значения массива mas2
12
7
3
1
5
Результат сложения двух массивов
 3
  5
  5
 3
  0
В  данном  примере,  исходные  для   решения   поставленной   задачи  массивы   были  организованы  циклической
операцией.   Формирование   элементов   этих   массивов   происходит   посредством   ввода   их   значений   с   клавиатуры
компьютера.   Затем   значения   элементов   исходных   массивов   с   одинаковыми   индексами   складываются,   а   результат
помещается в третий массив.
44 Определение массива данных.  Одномерные массивы. Примеры практической работы с массивами данных
Урок 3.  Примеры практической работы с массивами данных
3.1. Организация, формирование, поиск необходимой информации в массиве данных.
3.1. Организация, формирование, поиск необходимой информации в массиве данных
Задача 1.   Дан       вектор,     состоящий     из 10ти     элементов,     значения     которых представляют собой
положительные действительные  и  отрицательные  числа  в диапазоне [10, 10].
Вывести на экран дисплея номера (индексы) и значения отрицательных элементов массива.
Постановка задачи
Значения  элементов массива  получить  их  генерацией  случайным  образом, используя функцию Random.
1.
2. Вывести на экран дисплея исходный массив чисел.
3. Вывести  на  экран  дисплея номера (индексы) и значения отрицательных элементов массива.
Алгоритм  задачи
1. Вызвать библиотечный модуль  Crt,  для обеспечения работы с экраном дисплея.
2. В блоке описания переменных определить имя массива  mas.
3. Там же определить имя индексной переменной идентификатором  i  тип  byte.
4. Очистить   экран от возможно присутствующей там информации.
5. Вывести на экран сообщение:  "Исходный массив:"
6. Организовать      цикл   со  счетчиком  для    генерации    10 положительных и отрицательных   элементов
массива  mas.
7. Вывести на экран сообщение "Номера (индексы) и значения отрицательных элементов массива:"
8. Организовать   цикл   со   счетчиком   для   вывода   на   экран   дисплея   номеров   (индексов)   и   отрицательных
значений элементов массива.
Задержать изображение на экране до нажатия любой клавиши на клавиатуре.
9.
Program V1L08P3; {Печать отрицательных значений элементов массива и их индексов}
Uses Crt;
Var mas :array[1..10] of real; i :byte; {Описание массива и индексной переменной}
{}
begin
ClrScr;
Randomize;
{Инициализация (подготовка) генератора случайных чисел}
{Генерация 10ти случайных значений элементов массива}
WriteLn('Исходный массив mas[1..10]:');
for i:=1 to 10 do
begin
mas[i]:=10*(RandomRandom);  {Формирование массива случ. чисел в диапазоне 10 : 10}
Write(mas[i]:6:2)            {Печать значений элементов массива в строку}
end;
WriteLn;
WriteLn
('Индексы и значения отрицательных элементов массива:');
for i:=1 to 10 do
{Перевод строки}
{Печать сообщения}
{Такой формат допустим}
if mas[i]<0 then WriteLn('mas[',i:2,'] = ',mas[i]:6:2);
{Логическое условие вывода}
ReadKey
end.
Возможный вариант результата решения
Исходный массив mas[1..10]:
  0.31 6.58  3.99 1.57  0.53  3.93  7.70  2.34 5.49 4.47
Индексы и значения отрицательных элементов массива:
mas[ 2] = 6.58
mas[ 4] = 1.57
mas[ 9] = 5.43
mas[10] = 4.47
Хотелось бы пояснить алгоритм работы строки, выделенной  в программе курсивом.   Выражение   в   скобках
генерирует   случайные   действительные  числа  в  диапазоне  [1,  1],  т.к. уменьшаемое  может быть случайно меньше
вычитаемого. Множитель увеличивает диапазон генерации чисел  в 10 раз.
45 Задача 2.  Дан    вектор,   состоящий   из 10ти   элементов,   значения   которых представляют собой  целые
положительные   и отрицательные числа в диапазоне [100, 100]. Вывести на экран дисплея значения наименьшего и
наибольшего элементов массива.

Постановка задачи
1.
Значения  элементов массива  получить  их  генерацией  случайным  образом, используя функцию Random
в заданном по условию задачи диапазоне.
2. Вывести на экран дисплея исходный массив чисел.
3. Вывести  на  экран  дисплея значения минимального и максимального элементов массива.
Алгоритм  задачи
1. Вызвать библиотечный модуль  Crt,  для обеспечения работы с экраном дисплея.
2. В блоке описания переменных определить имя массива  a  размерностью в 10 элементов  и  типом  shortint.
3. Там же определить имя индексной переменной идентификатором   i   тип   byte. Переменным, в которые
записываются минимальное и максимальное значения массива присвоить имена  k  и  р  соответственно тип
shortint.
4. Очистить   экран от возможно присутствующей там информации.
5. Вывести на экран сообщение:  "Исходный массив:"
6. Организовать         цикл     со     счетчиком     для       генерации       10     положительных   и   отрицательных
элементов массива  a,  используя  выражение   n =  Round (100*(RandomRandom))  и вывести  значения на
экран дисплея.
7. Присвоить переменным  k  и  p  значение  первого  элемента массива.
8. Сравнивания в цикле последующие элементы массива с переменными  k  и  p  записать  в них  наименьшее
и наибольшее  значения соответственно.
9. Вывести на экран сообщение "Наименьшее значение элемента массива: " и напечатать это значение.
10. Вывести на экран сообщение "Наибольшее значение элемента массива: " и напечатать это значение.
11. Задержать изображение на экране до нажатия любой клавиши на клавиатуре.
Program V1L08P4; Наименьшее и наибольшее значения элементов массива}
Uses Crt;
Const n=10;
Var a :array [1..n] of shortint; k,p :shortint; i :byte;
{}
begin
ClrScr;
Randomize;
WriteLn('Исходный массив:');
{Инициализация (подготовка) генератора случайных чисел}
{Описание константы}
{Описание массива  и переменных}
{Циклическая операция формирования массива}
for i:=1 to n do
    begin
         a[i]:=Round(100*(RandomRandom));   {Случайное целое число в диапазоне 100 : 100}
         Write(a[i]:4)
    end;
{}
WriteLn;
k:=a[1]; p:=a[1];
{}
for i:=2 to n do
    begin
         if k>a[i] then k:=a[i];
         if pa[i] then k:=a[i];
       if p

file_name: Занятие 7ч1.doc

description:
Задача 2.  Дан    вектор,   состоящий   из 10ти   элементов,   значения   которых представляют собой  целые
положительные   и отрицательные числа в диапазоне [100, 100]. Вывести на экран дисплея значения наименьшего и
наибольшего элементов массива.

Постановка задачи
1.
Значения  элементов массива  получить  их  генерацией  случайным  образом, используя функцию Random
в заданном по условию задачи диапазоне.
2. Вывести на экран дисплея исходный массив чисел.
3. Вывести  на  экран  дисплея значения минимального и максимального элементов массива.
Алгоритм  задачи
1. Вызвать библиотечный модуль  Crt,  для обеспечения работы с экраном дисплея.
2. В блоке описания переменных определить имя массива  a  размерностью в 10 элементов  и  типом  shortint.
3. Там же определить имя индексной переменной идентификатором   i   тип   byte. Переменным, в которые
записываются минимальное и максимальное значения массива присвоить имена  k  и  р  соответственно тип
shortint.
4. Очистить   экран от возможно присутствующей там информации.
5. Вывести на экран сообщение:  "Исходный массив:"
6. Организовать         цикл     со     счетчиком     для       генерации       10     положительных   и   отрицательных
элементов массива  a,  используя  выражение   n =  Round (100*(RandomRandom))  и вывести  значения на
экран дисплея.
7. Присвоить переменным  k  и  p  значение  первого  элемента массива.
8. Сравнивания в цикле последующие элементы массива с переменными  k  и  p  записать  в них  наименьшее
и наибольшее  значения соответственно.
9. Вывести на экран сообщение "Наименьшее значение элемента массива: " и напечатать это значение.
10. Вывести на экран сообщение "Наибольшее значение элемента массива: " и напечатать это значение.
11. Задержать изображение на экране до нажатия любой клавиши на клавиатуре.
Program V1L08P4; Наименьшее и наибольшее значения элементов массива}
Uses Crt;
Const n=10;
Var a :array [1..n] of shortint; k,p :shortint; i :byte;
{}
begin
ClrScr;
Randomize;
WriteLn('Исходный массив:');
{Инициализация (подготовка) генератора случайных чисел}
{Описание константы}
{Описание массива  и переменных}
{Циклическая операция формирования массива}
for i:=1 to n do
    begin
         a[i]:=Round(100*(RandomRandom));   {Случайное целое число в диапазоне 100 : 100}
         Write(a[i]:4)
    end;
{}
WriteLn;
k:=a[1]; p:=a[1];
{}
for i:=2 to n do
    begin
         if k>a[i] then k:=a[i];
         if p<a[i] then p:=a[i]
    end;
WriteLn('Наименьшее значение элемента массива: ',k:4);
WriteLn('Наибольшее значение элемента массива: ',p:4);
ReadKey
end.
{Логическое условие поиска наименьшего значения}
{Логическое условие поиска наибольшего значения}
{Начальное значение наименьшего и наибольшего элемента массива}
Возможный вариант результата решения
Исходный массив:
  57  32  27  83  29  12 8  43 91 11
Наименьшее значение элемента массива:  91
46

description:
Определение массива данных.  Одномерные массивы. Примеры практической работы с массивами данных
Наибольшее значение элемента массива:   83
Задача 3.  Дан    вектор,   состоящий   из 10ти   элементов,   значения   которых представляют собой  целые
положительные  и отрицательные числа  в диапазоне [100, 100]. Поменять местами значение наименьшего элемента со
значением первого элемента массива, а значение наибольшего элемента  с последним значением массива.

Постановка задачи
1.
Значения  элементов массива  получить  их  генерацией  случайным  образом, используя функцию Random
в заданном по условию задачи диапазоне.
2. Вывести на экран дисплея исходный массив чисел.
3. Вывести  на  экран  дисплея значения минимального и максимального элементов массива в форме:
Наименьший элемент массива:  a[значение индекса] =  значение элемента
Наибольший  элемент массива:  a[значение индекса] =  значение элемента
4. Поменять местами значение наименьшего элемента со значением первого элемента   массива, а значение
наибольшего элемента  с последним значением массива.
Алгоритм  задачи
1. Вызвать библиотечный модуль  Crt,  для обеспечения работы с экраном дисплея.
2. В блоке описания переменных определить имя массива  a  размерностью в 10 элементов  и  типом  shortint.
 byte  и   имена   минимального   и
3. Определить   имя   индексной   переменной   идентификатором
максимального значений индексной переменной  ik, ip  соответственно тип byte.  Переменным, в которые
записываются   минимальное   и   максимальное   значения   элементов   массива   присвоить   имена    k    и    р
соответственно тип  shortint.
  тип
 i
4. Очистить   экран от возможно присутствующей там информации.
5. Вывести на экран сообщение:  "Исходный массив:"
6. Организовать    цикл  со  счетчиком  для   генерации   10  случайных положительных  и  отрицательных
элементов  массива   a, используя       выражение    n =   Round (100*(RandomRandom))  и вывести  эти
значения на экран дисплея.
7. Присвоить переменным  k  и  p  значение  первого  элемента массива.
8. Сравнивания в цикле последующие элементы массива с переменными  k  и  p  записать  в них  наименьшее
и наибольшее  значения соответственно.
9. Вывести на экран сообщение "Наименьшее значение элемента массива: " и напечатать это значение.
10. Вывести на экран сообщение "Наибольшее значение элемента массива: " и напечатать это значение.
11. Поменять местами значение наименьшего элемента со значением первого элемента   массива, а значение
наибольшего элемента  с последним значением массива.
12. Вывести   на   экран   дисплея   сообщение   "Результат   обмена   элементами   массива:"   и
  распечатать
преобразованный массив.
13. Задержать изображение на экране до нажатия любой клавиши на клавиатуре.
Program V1L08P5; {Обмен значениями элементов массива}
Uses Crt;
Const n=10;
Var   a :array [1..n] of shortint; k,p,s :shortint; i,ik,ip :byte;
{}
begin
ClrScr;
Randomize;
WriteLn('Исходный массив:');
{Генерация и формирование исходного массива}
for i:=1 to n do
    begin
         a[i]:=Round(100*(RandomRandom));
         Write(a[i]:4)
 end;
WriteLn;WriteLn;
k:=a[1]; p:=a[1];
for i:=1 to n do
begin
       if k>a[i] then k:=a[i];
       if p<a[i] then p:=a[i]
end;
{Минимальное значение}
{Максимальное значение}
{Перевод 2х строк}
{Начальные значения мин. и макс. элемента массива}
{Цикл определение мин. и макс. значения элементов массива}
{Вычисление индексов наименьшего и наибольшего значений элементов массива}
47

description:
for i:=1 to n do
begin
if k=a[i] then ik:=i;
if p=a[i] then ip:=i
{Индекс минимального значения элементов массива}
{Индекс максимального значения элементов массива}
end;
WriteLn('Наименьший элемент массива: a[',ik:2,'] = ',k:3);
WriteLn('Наибольший элемент массива: a[',ip:2,'] = ',p:3); WriteLn;
WriteLn('Результат обмена элементами  массива:');
{Обмен наименьшего значения элементов массива с первым}
s:=a[1];
a[1]:=a[ik];
a[ik]:=s;
{Вновь вычисление индекса наибольшего значения элемента массива}
for i:=1 to n do
if p=a[i] then ip:=i
{Обмен наибольшего значения элементов массива с последним элементом}
s:=a[n];
a[n]:=a[ip];
a[ip]:=s;
{Вывод на экран дисплея преобразованного массива}
for i:=1 to n do Write(a[i]:4);
{}
ReadKey
end.
Возможный вариант результата решения
Исходный массив:
  75  32  27  81  39  12 8  33 93  11
Наименьшее значение элемента массива: a[9] = 93
Наибольшее значение элемента массива: a[4] =  81
Результат обмена элементами  массива:
 93  32  27  11  39  12 8  33  75  81
Контрольные вопросы и упражнения
1. Что такое массив данных? Дайте определение. Приведите примеры.
2. Как определяется в Паскаль  программе массив данных.
3. Сколько индексных переменных может содержать массив данных.
4. Чем ограничивается размерность массива в Паскаль  программе.
5. Что называется одномерным массивом? Что называется вектором?
6. Как осуществляется доступ к элементам массива?
7. Назовите способы формирования массивов данных.
8. Напишите фрагменты Pascalпрограмм генерации одномерных массивов случайных чисел в диапазонах  [0,
1],  [1, 1],  [10, 10], [50, 0].
9. Напишите   фрагмент  Pascalпрограммы   поиска   наименьшего   и   наибольшего   значений     элементов   в
одномерном массиве.
10. Как определить индекс (номер) наименьшего и наибольшего значения элементов одномерного массива?
11. Изобразите блоксхему генерации  одномерного массива  случайных чисел?
12. Изобразите блоксхему поиска наименьшего и наибольшего значения в одномерном   массиве по тексту
программы  vv21.
Для заметок, вопросов и ответов
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
48

description:
Определение массива данных.  Одномерные массивы. Примеры практической работы с массивами данных
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
49

title: Структурированные типы данных.  Массивы


extracted_text:
Преобразование одномерных массивов данных   сортировка
       Занятие 8
1. Урок 1.  Преобразование   одномерных    массивов    данных  сортировка.      Методы   сортировки   числовых
 данных. Сортировка обменом.
2. Урок 2.  Сортировка выбором.
3. Урок 3.  Сортировка вставкой.
4. Контрольные вопросы и упражнения.
Урок 1.  Преобразование   одномерных   массивов   данных  сортировка.  Методы сортировки числовых
 данных. Сортировка обменом.
1.1. Преобразование   одномерных   массивов   данных  сортировка.
1.2. Методы сортировки числовых данных.
1.3. Сортировка обменом.
1.1.  Преобразование   одномерных   массивов   данных  сортировка
Под преобразованием массива данных следует понимать действия, которые приводят к его изменению, как с
количественной,   так   и   с   качественной   стороны.   Под   количественной   стороной   преобразования   массива   следует
понимать   изменение   значения   его   элементов   по   некоторому   логическому   условию.   Под   качественной   стороной
преобразования   массива   данных   следует   понимать   изменение   порядка   следования   его   элементов,   оставляя
неизменными их значения. Примером качественного преобразования массивов данных может служить  сортировка
классическая задача в вычислительной технике.
  Слово  сортировка  используется   в   вычислительной   технике   для   обозначения   процесса   перестановки
элементов неупорядоченного массива данных для обеспечения их порядка  возрастания или убывания, по какому либо
параметру.
Механические сортировки  построение солдат по росту, раскладка денежных купюр или игральных карт по их
достоинству и т.д., имеют место в повседневной жизни и кажутся простыми. Простота эта иллюзорна,   потому что
сортируется небольшое количество элементов.
Первые программы сортировки были написаны фон Нейманом в 1945 году, и до середины 60х годов какого
либо продвижения в теории сортировки не наблюдалось.
Проблема   сортировки   остро   возникла   с   широким   внедрением   ЭВМ   в   бизнес,   где   необходимо   было
обрабатывать огромные массивы числовой и текстовой информации. Технические средства внешней памяти тогдашних
компьютеров  накопители на магнитной ленте (НМЛ) обеспечивали только последовательную запись данных.   Для
быстрого  поиска информации  в этом  случае,  необходимо было  упорядочить данные,  чтобы использовать быстрые
алгоритмы поиска информации в них.
Современные   устройства   внешней   памяти   компьютеров      накопители   на   магнитных   дисках   (НГМД)
обеспечивают прямой доступ к записанной  на  них  информации,   что,   в некоторых   случаях   организации массивов
данных,   позволяет обходиться без сортировки, но до сих пор сортировка остается   необходимым элементом почти
любого  программного продукта обработки информации.
1.2.  Методы сортировки числовых данных
Все методы сортировки делятся на  прямые и улучшенные.
Прямые методы разделяются по принципу, лежащему в их основе, на сортировки:

обменом ("пузырьковая сортировка");
выбором (выделением);
вставкой (включением).
На практике прямые методы сортировки используются крайне редко, т.к. имеют относительно низкое быстродействие,
но для  небольших массивов данных вполне приемлемы в качестве изучения принципов и методов сортировок.
Улучшенные   методы   сортировки   основываются   на   тех   же   принципах,   что   и   прямые,   с   использованием
оригинальных идей и рационализацию  для ускорения процесса  преобразования  массива данных.
1.3.  Сортировка  обменом
Этот метод сортировки является самым простым. Он применяется для преобразования небольших массивов
данных,  и получил название "пузырьковой сортировки".  Основой метода является  сравнение  двух элементов и их
перестановка  для получения порядка по возрастанию или  убыванию значений элементов массива.
Метод "пузырька" предполагает следующую физическую модель преобразования массива данных.
  Из   n   чисел массива всплывает (как в бокале с шампанским) "пузырек"  число, оказывающееся меньше, в
случае сортировки по возрастанию, чем  n  1 чисел.  Затем всплывает "пузырек"  число, оказывающееся меньше чем  n
 2  оставшихся, но больше чем первый  всплывший "пузырек" и т.д.
В качестве примера рассмотрим задачу сортировки одномерного массива методом "пузырька".
49 Преобразование одномерных массивов данных  сортировка.  Методы сортировки числовых данных. Сортировка обменом, выбором, вставкой
Задача.  Дан вектор, состоящий из 5ти случайных положительных целых чисел. Отсортировать   исходный
массив чисел в порядке возрастания значений элементов.
Постановка задачи
1.
Значения  элементов массива  получить  их  генерацией  случайным  образом, используя функцию Random
в диапазоне  [0, 100].
2. Вывести на экран дисплея исходный массив чисел.
3. Отсортировать исходный массив чисел по возрастанию их значений, распечатывая    на экране дисплея
каждую итерацию преобразования массива.
4. Вывести  на экран дисплея отсортированный массив.
Алгоритм  задачи
1. Вызвать библиотечный модуль  Crt,  для обеспечения работы с экраном дисплея.
2. В блоке описания переменных определить имя массива  a  из 5ти элементов и его тип  byte.
3. Там   же   определить   имена   индексных   переменных   идентификаторами    i,  j,  p    тип    byte    и     имена
переменных  k, c  тип  byte.
4. Очистить   экран от возможно присутствующей там информации.
5. Вывести на экран сообщение:  "Исходный массив:"
6. Организовать         цикл     со     счетчиком     для       генерации       и  вывода  на  экран   дисплея  5    случайных
положительных  целых чисел в диапазоне [0, 100].
7. Вывести на экран сообщение "Сортировка:"
8. Организовать внешний цикл со счетчиком для осуществления выбора первого элемента,  второго  и т.д.  до
n   1,   где   n   количество элементов массива, для осуществления операций просмотра, сравнения   и
перестановки элементов массива  во  внутреннем  цикле.
9. Организовать   внутренний   цикл   для   осуществления   просмотра,   сравнения   и  перестановки  элементов
массива,   начиная  со  второго.  Через  некоторую  переменную    k   поменять  местами     значение  первого
элемента с позицией наименьшего числа в массиве.
10. Выводить   состояние   вектора   на   экран   дисплея   после   каждой   итерации   перестановки   до   окончания
процесса сортировки.
11. Накопить количество итераций перестановок в некоторой переменной  c.
12. Вывести на экран сообщение "Количество итераций: " и распечатать это количество c.
13. Вывести на экран сообщение "Отсортированный массив: ".
14. Организовать цикл вывода отсортированного массива.
15. Задержать изображение на экране до нажатия любой клавиши на клавиатуре.
Алгоритм сортировки одномерного массива (вектора) реализован следующей программой. Здесь предлагается
для рассмотрения и применения на практике стиль написания текста программы в виде ступенек, который позволяет не
запутаться с операторными скобками  begin  end  и с вложениями циклических операций друг в друга.
Program V1L09P1; {Сортировка вектора методом "пузырька"}
Uses Crt;
Const n=5;
Var  a :array [1..n] of byte; i,j,p,k,c :byte;
{}
begin
ClrScr;
Randomize;
n:=5;
WriteLn('Исходный массив:');
{Стирание экрана}
{Установка генератора случайных чисел}
{Определение верхней границы массива}
{Генерация исходного массива}
for i:=1 to n do
begin
a[i]:=Random(100);
Write(a[i]:3)
{Генерация знач. элем. массива}
{Печать элементов массива}
end;
{}
WriteLn('Сортировка:');
{}
c:=0;
for i:=1 to n1 do
50

{Начальное значение счетчика итераций}
{Внешний цикл сортировки} begin
    for j:=i+1 to n do
      begin
        if a[i]>a[j] then
          begin
               k:=a[i];
               a[i]:=a[j];
               a[j]:=k
          end
       end;
for p:=1 to n do

Write(a[p]:3);
{Внутренний цикл сортировки}
{Условие перестановки}
{Переменная для обмена значений элементов массива}
{Обмен значений элементов массива}
{Обмен закончен}
{Цикл печати состояния массива}
{Счетчик итераций}
       WriteLn;
       c:=c+1
  end;
{}
WriteLn('Количество итераций: ',c);
Write('Отсортированный массив: ');
for i:=1 to n do
Write(a[i]:3);
{}
ReadKey
end.
{Цикл печати отсортированного массива}
Возможный вариант результата решения
Исходный массив
47 94  34  26  37
Сортировка:
26 94  47  34  37
26 34  94  47  37
26 34  37  94  47
26 34  37  47  94
Количество итераций: 4
Отсортированный массив:
26 34  37  47  94
Урок 2.  Сортировка выбором
Сортировку выбором называют еще  сортировкой поиском последовательных минимумов. При первом
проходе ищется минимальное значение элементов массива, который затем меняется на первый элемент. Далее поиск
продолжается   на   оставшихся   значениях.   Из   оставшихся   элементов   ищется   элемент   с   минимальным   значением   и
меняется местами с первым из оставшихся, т.е. со вторым элементом исходного массива и т.д.
Решая задачу предыдущего урока, произведем сортировку исходного массива по следующей программе:
{Вызов библиотечного модуля}
{Значение верхней границы массива}
Program V1L09P2; {Сортировка выбором}
Uses Crt;
Const n=5;
Var          v :array [1..n] of byte;
i,j,min,imin,c :byte;
begin
ClrScr;
Randomize;
WriteLn('Сортировка методом выбора (вставкой)');
WriteLn('Исходный массив:');
{Стирание экрана}
{Установка генератора случайных чисел}
{Генерация исходного массива}
for i:=1 to n do
    begin
         v[i]:=Random(100);
         Write(v[i]:3)
    end;
{}
WriteLn;
WriteLn('Сортировка:');
{}
c:=0;
for j:=1 to n1 do
{Генерация случайных целых чисел от 0 до 100}
{Двойной перевод строки}
{Начальное значение счетчика итераций}
{Внешний цикл сортировки}
51 Преобразование одномерных массивов данных  сортировка.  Методы сортировки числовых данных. Сортировка обменом, выбором, вставкой
begin
  min:=v[j];
  imin:=j;
  for i:=j+1 to n do
    if v[i]a[j] do
     j:=j+1;
{Фиксация позиции вставки}
{Цикл сдвига элементов массива для вставки}
 for k:=i1 downto j do
 a[k+1]:=a[k];
a[j]:=b; {Вставка элемента массива в найденную позицию}
{Цикл печати итераций сортировки}
  for p:=1 to n do
      Write(a[p]:3);
  c:=c+1;
  WriteLn
  end;
{}
WriteLn('Количество итераций', c);
WriteLn;
WriteLn('Отсортированный массив: ');
{Счетчик итераций}
{Цикл печати отсортированного массива}
for i:=1 to n do
Write(a[i]:3);
{}
ReadKey
end.
Возможный вариант результата решения
Сортировка методом вставки
Исходный массив:
 95 85 98 32 73
Сортировка:
 85 95 98 32 73
 85 95 98 32 73
 32 85 95 98 73
 32 73 85 95 98
Количество итераций:  4
Отсортированный массив:
 32 73 85 95 98
53 Преобразование одномерных массивов данных  сортировка.  Методы сортировки числовых данных. Сортировка обменом, выбором, вставкой
В   данном   занятии   были   изучены   прямые   методы   сортировок   числовых   данных      обменом   ("пузырьковая
сортировка"), выбором, вставкой, которые лежат в основе улучшенных методов сортировок. Приведены практические
примеры программ, реализующих эти методы.
Контрольные вопросы и упражнения
Зачем нужно упорядычевать (сортировать) массив данных?
1. Что такое сортировка массива данных? Дайте определение. Приведите примеры.
2.
3. Какие группы сортировок существуют. Назовите?
4. Назовите методы простых сортировок? Чем  они одинаковы и чем отличны ?
5. В чем состоит  принцип "пузырьковой" сортировки?
6. В чем состоит принцип сортировки вставкой?
7. В чем состоит принцип сортировки выбором?
8. Предложите способы исследования выбора метода простой сортировки по времени ее осуществления с
максимальным массивом данных, размещаемым в ОЗУ компьютера.
9. Предложите  показатели для оценки методов простых сортировок?
10. Предложите свой способ сортировки.
Для заметок, вопросов и ответов
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
54 ______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
_____________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
55

file_name: Занятие 8ч1.doc

description:
Преобразование одномерных массивов данных  сортировка.  Методы сортировки числовых данных. Сортировка обменом, выбором, вставкой
begin
  min:=v[j];
  imin:=j;
  for i:=j+1 to n do
    if v[i]<min then
      begin
       min:=v[i];
       imin:=i
      end;
{Минимальное значение элемента массива}
{Индекс минимального значения элемента массива}
{Внутренний цикл сортировки}
{Логическое условие сортировки}
{Присвоение мин. значения переменной min}
{Присвоение индекса мин.значения
 переменной imin}

{Печать преобразованного итерацией массива}
{Перевод строки}
{Обмен значений элементов массива}
{Присвоение мин. значения элементу массива}
{Счетчик итераций}
for i:=1 to n do
    Write(v[i]:3);
{}
  WriteLn;
{}
v[imin]:=v[j];
v[j]:=min;
c:=c+1
end;
{}
WriteLn('Количество итераций: ',c);
WriteLn;
WriteLn('Отсортированный массив: ');
for i:=1 to n do
Write(v[i]:3);
{}
ReadKey
end.
Возможный вариант результата решения
Исходный массив:
 93 22 74 65 60
Сортировка:
 93 22 74 65 60
 22 93 74 65 60
 22 60 74 65 93
 22 60 65 74 93
Количество итераций: 4
Отсортированный массив:
 22 60 65 74 93
Увеличивая количество сортируемых элементов массива, попробуйте оценить время сортировки. Предложите
способ автоматической оценки времени работы программы в зависимости от количества сортируемых элементов.
Урок 3. Сортировка вставкой
Суть метода заключается в следующем алгоритме. Массив данных разделяется на две части: отсортированную
и   не   отсортированную.   Элементы   из   не   отсортированной   части   поочередно   выбираются   и   вставляются   в
отсортированную   часть   так,  чтобы   не   нарушить   в  ней   упорядоченность   элементов.  В   начале  работы   алгоритма   в
качестве отсортированной части принимается первый элемент массива.
Таким образом, будет иметь место   n   1   проход (где   n   размерность массива) и каждый будет включать
четыре действия:

взятие   очередного   элемента   из   не   отсортированной   части   и   сохранение   в   дополнительной
переменной;
поиск позиции в отсортированной части массива   для вставки элемента взятого предыдущим
действием, который бы не нарушил порядок;
сдвиг элементов массива для вставки элемента массива в отсортированную часть;
вставка элемента в найденную позицию.

Для  реализации  данного  метода существует  несколько  алгоритмов,  которые  отличаются  способом  поиска
позиции вставки. Предлагаемая программа реализует один из них.
Program V1L09P3; {Сортировка вставкой.}
Uses Crt;
52

description:
Const n=5;
Var         a :array [1..n] of byte;
  b,i,j,k,p,c :byte;
begin
ClrScr;
Randomize;
WriteLn('Сортировка методом вставки');
WriteLn('Исходный массив:');
{Генерация и печать исходного массива}
{Инициализация генератора случайных чисел}
for i:=1 to n do
    begin
         a[i]:=Random(100);
         Write(a[i]:3)
    end;
WriteLn;
WriteLn('Сортировка:');
{}
c:=0;
{Внешний цикл сортировки}
for i:=2 to n do
  begin
  b:=a[i];

  j:=1;
{Генерация случайных целых чисел от 0 до 100}
{Перевод строки}
{Начальное значение счетчика итераций}
{Взятие элемента массива из не отсортированной}
{части и сохранение его в дополнительной} {переменной}
{Присвоение значения индексной переменной}
{Цикл поиска позиции вставки }
  while b>a[j] do
     j:=j+1;
{Фиксация позиции вставки}
{Цикл сдвига элементов массива для вставки}
 for k:=i1 downto j do
 a[k+1]:=a[k];
a[j]:=b; {Вставка элемента массива в найденную позицию}
{Цикл печати итераций сортировки}
  for p:=1 to n do
      Write(a[p]:3);
  c:=c+1;
  WriteLn
  end;
{}
WriteLn('Количество итераций', c);
WriteLn;
WriteLn('Отсортированный массив: ');
{Счетчик итераций}
{Цикл печати отсортированного массива}
for i:=1 to n do
Write(a[i]:3);
{}
ReadKey
end.
Возможный вариант результата решения
Сортировка методом вставки
Исходный массив:
 95 85 98 32 73
Сортировка:
 85 95 98 32 73
 85 95 98 32 73
 32 85 95 98 73
 32 73 85 95 98
Количество итераций:  4
Отсортированный массив:
 32 73 85 95 98
53

intro:
Занятие строится таким образом, что после прослушивания теоретического материала (10 –15 мин.), учащимся предлагается практическое задание, которое выполняется ими за 20 - 30 мин. и корректируется в процессе изучения материала в более сложную задачу по изучаемой теме.
Автор сознательно избегал сложных примеров, будучи убежденными, в том, что гораздо важнее для учащихся понимание алгоритмов предлагаемых  задач,  приобретение навыков  разработки  алгоритмов, их программирования и выполнения на компьютере в течение одного занятия. Такой подход к изучению языка программирования позволяет сосредоточить внимание на самом процессе программирования, который в данном случае более важен для изучения языка, чем  решение сложной задачи, наверняка трудной большинству учащихся. Такие задачи, по мнению авторов, неоправданно занимают большое количество учебного времени, превращая учителя из инициатора процесса обучения  в диктатора.

информатика

group: Дисциплины

title: Преобразование одномерных массивов данных	 - сортировка


extracted_text:
Двумерные массивы данных
     Занятие 9
1. Урок 1.  Определение    двумерного    массива   данных   и   его формирование  в памяти компьютера.
2. Урок 2.  Поиск информации в двумерных массивах данных.
3. Урок 3.  Прием бинарного поиска искомых значений в массивах данных.
4. Контрольные вопросы и упражнения.

Из определения массива  (см. занятие 8) следует, что это упорядоченный набор переменных одного и того
же   типа.   Составляющие   массив   данные   определяются  одним   именем  и   называются  элементами     массива.
Каждый элемент массива в памяти компьютера помечается своим номером (адресом), который называется индексом.
Массивы данных могут быть одномерными и многомерными по количеству индексов определяющих местонахождение
элемента массива в массиве данных. Частным случаем многомерного массива данных является двумерный массив
(таблица, матрица).
Урок 1. Определение  двумерного массива  данных и его формирование  в памяти компьютера
1.1. Определение двумерного массива данных.
1.2. Формирование двумерного массива данных в памяти компьютера. Практические примеры.
1.1. Определение двумерного массива данных
Двумерным массивом  или  матрицей  (таблицей) будем называть такой порядок элементов в ней, когда
адрес некоторого элемента массива указан двумя координатами  строкой и столбцом (колонкой).
Таким примерами может служить Таблица Пифагора, значения элементов которой являются произведением
строки   и   столбца,   расстановка     фигур   на   шахматной   доске,   где   позиция   каждой   фигуры   определяется   двумя
координатами, одна из которых имеет символьное обозначение, другая цифровое  и т.д.

1.2. Формирование двумерного массива данных в памяти компьютера
Для формирования двумерного массива данных в памяти компьютера средствами языка программирования
Turbo Pascal необходимо описать его в блоке  описания  переменных,   затем  ввести  данные  в  память компьютера с
помощью клавиатуры, либо явно записать в тексте программы, либо прочесть их с диска (дискеты) или использовать
генератор случайных чисел.
1.2.1. Описание двумерного массива в тексте программы
Двумерный массив описывается аналогично одномерному массиву (см. занятие 8), только размерность массива
указывается двумя значениями через запятую в квадратных скобках, например:
Var mas :array[1 .. 9, 1 .. 5] of real;
i, j :integer;
Здесь описан двумерный массив (таблица, матрица), имеющий 9 строк и 5 столбцов с соответствующими индексами
i,  принимающим  значения  номера строки    и   j,  принимающим  значения  номера столбца.  В этом  случае в памяти
компьютера резервируется 45 (9 * 5) ячеек для размещения в них значений элементов массива.
Существует и другой способ описания массивов данных с использованием оператора  type  (раздел типов), в
котором   описываются   имена   типов   переменных   отличных   от   стандартных,   т.е.   переменные   типа   "перечисление",
ограниченные переменные, массивы и т.д. и имеет следующий формат:
type <Имя типа> = array [1 .. m, 1 .. n] of  <Тип данных массива>;
var <Имя массива> : <Имя типа>;
Например, пусть в программе необходимо описать следующий двумерный массив (матрицу)  Matrix:

752

301


13

9

Описание первым способом выглядит следующим образом:
Var  Matrix  : array [1 .. 2, 1 .. 4] of integer;
           i, j  : integer;
55 Определение двумерного массива  данных и его формирование. Поиск информации в двумерных массивах.  Прием бинарного поиска
в этом случае номер первого элемента 0, а четвертого, соответственно, 3.
Var  Matrix    : array [0 .. 1, 0 .. 3] of integer;
           i, j   : integer
или
или
Для второго способа имеем
Type  Mas = array [1 .. 2, 1 .. 4] of integer;
        Var    Matrix : Mas;
Type  Mas = array [0 .. 1, 0 .. 3] of integer;
        Var    Matrix : Mas;
аналогично может быть описан массив любой размерности.
1.2.2. Формирование двумерного массива в памяти компьютера явно в тексте программы
Такое формирование возможно для небольших массивов, как правило, при решении учебных задач. Используя
предыдущий пример, покажем, как это делается в следующей программе:
Program V1L10P1; {Формирование двумерного массива явно в тексте программы}
Uses Crt;
Var Matrix :array[1..2,1..4] of integer;
  i,j :integer;
begin
ClrScr;
{Формирование массива данных}
Matrix[1,1]:=2;Matrix[1,2]:=5;Matrix[1,3]:=7;Matrix[1,4]:=13;
Matrix[2,1]:=1;Matrix[2,2]:=0;Matrix[2,3]:=3;Matrix[2,4]:=9;
{Печать массива данных}
WriteLn('Исходный массив');
for i:=1 to 2 do
begin
  {Внешний цикл}
for j:=1 to 4 do
Write(Matrix[i,j]:3); {Печать элементов столбцов строки}
  {Внутренний цикл}
WriteLn
end;
ReadKey
end.
  {Перевод строки}
Результат работы программы
Исходный массив
  2  5 13
  1  0  9
1.2.3. Формирование двумерного массива в памяти компьютера вводом данных с клавиатуры
Формирование массива данных в памяти компьютера можно осуществить вводом этих данных с клавиатуры.
На практике такой ввод осуществляется пользователем и в случае больших массивов данных весьма трудоемок и
чреват многочисленными ошибками, на устранение которых тратится большое время. Поэтому в производстве, где
обрабатывается   значительное   количество   информации,   вводимой   с   каких   либо   документов   вручную,   пользуются
специальными программами, проверяющими ее на достоверность.
 В последующей программе показан ввод двумерного массива данных в память компьютера с клавиатуры. Ввод
значений элементов массива осуществляется с помощью оператора Read,  во внутреннем цикле по столбцам в строку,
номер которой определяет внешний цикл.

Program V1L10P2; {Формирование двумерного массива вводом цифровых значений с клавиатуры}
Uses Crt;
Type Mas=array[0..1,0..3] of integer;
Var Matrix:Mas;
i,j :integer;
begin
{}
ClrScr;
WriteLn('Веди исходный массив');
for i:=0 to 1 do
begin
{Описание двумерного массива как тип Mas}
{Описание типа Mas}
{Внешний цикл ввода}
for j:=0 to 2 do
{Внутренний цикл ввода}
56 Read(Matrix[i,j]);
{Ввод данных с клавиатуры}
WriteLn;
end;
WriteLn('Ввуденный с клавиатуры массив массив');
for i:=0 to 1 do
begin
{Внешний цикл вывода}
for j:=0 to 2 do
Write(Matrix[i,j]:3);
WriteLn
{Внутренний цикл вывода}
{Вывод строки массива на экран}
{Перевод строки}
end;
ReadKey
end.
Результат работы программы
Введи исходный массив
1
2
3
4
5
6
Введенный с клавиатуры массив
  1  2  3
  4  5  6
1.2.3. Формирование двумерного массива в памяти компьютера генерацией случайных чисел
Массивы   случайных   чисел   используются   в   программировании   для   решения   ряда   прикладных   задач,   где
необходимо моделирование случайных процессов, например, компьютерные игры, задачи по вероятностным расчетам и
т.д.
В данном случае массивы случайных чисел используются в учебном процессе при изучении и решении задач
преобразования   и   поиска   необходимой   информации   в   подобных   массивах   данных.   Например,   при   изучении   и
исследовании методов       простых     сортировок     необходимо     обрабатывать     достаточно       большие     массивы
данных, получить которые в памяти компьютера вводом их с клавиатуры  трудно. Например, двумерный массив данных
размерностью 100 * 100 элементов потребует, как минимум, 20000 нажатий на соответствующие клавиши клавиатуры,
при   этом   возможны   и   ошибки   ввода.   Поэтому   целесообразно   формировать   массивы   данных,   где   не       требуется
конкретные     значения     элементов     массива,         их       генерацией     самим   компьютером,     используя   стандартную
математическую функцию Random (см. занятие 5).
В   последующем   примере   показано   формирование   двумерного   массива   генерацией   случайных   чисел   в
определенном диапазоне. Количество элементов массива  устанавливаетс с клавиатуры.
Задача.   Сформировать   в   памяти   компьютера   двумерный   массив,   состоящий   из  m  строк   и  n  столбцов
случайных чисел, которые должны генерироваться  в диапазоне  [5, 7]  и  вывести его на экран дисплея. Значения строк
и столбцов принимать соответственно
m
10
n
10
1
,
1
.
Program V1L10P3; {Формирование двумерного массива генерацией случайных чисел}
Uses Crt;
Var a:array[1..10,1..10] of integer; i,j,m,n,c,d :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи  количество   строк  '); Read(m);
Write('Введи количество столбцов  '); Read(n);
WriteLn('Массив случайных чисел');
{Инициализация генератора случайных чисел}
{Формирование массива случайных чисел}
for i:=1 to m do
begin
for j:=1 to n do
begin
{Внешний цикл по строкам}
{Внутренний цикл по столбцам}
c:=Random(7);
d:=Random(5);
a[i,j]:=cd
{Генерация случ. числа от 0 до 7}
{Генерация случ. числа от 0 до 5}
{Значение элемента массива}
end;
end;
{Вывод массива на экран дисплея}
57 Определение двумерного массива  данных и его формирование. Поиск информации в двумерных массивах.  Прием бинарного поиска
for i:=1 to m do
begin
for j:=1 to n do
Write(a[i,j]:4);
WriteLn
end;
ReadKey
end.
Возможный вариант работы программы
Введи  количество   строк  3
Введи количество столбцов  4
Массив случайных чисел
   3   2   2   1
   1  3   1   0
   4   1   1   1
Урок 2.   Поиск информации в  двумерных массивах данных
2.1.   Поиск элементов массива по их значениям.
2.2. Поиск наибольшего (наименьшего) элемента массива по строке, столбцу, всей матрицы, главной диагонали
квадратной матриц.
Двумерные массивы данных широко используются в производстве вычислительных работ на ЭВМ и, особенно в
задачах  экономических   расчетов   и  поиска  информации.   В   данном   занятии  будут   рассмотрены  некоторые  приемы
поиска цифровой информации в двумерных массивах данных.
2.1. Поиск элементов массива по их значениям
Данная задача предполагает нахождение элементов по их конкретным значениям или по значениям, лежащим в
некотором интервале или вне него. Рассмотрим эту задачу на предлагаемом примере.
Задача.  Дан некоторый двумерный массив, состоящий из  m  строк и  n  столбцов целых чисел, лежащих в
диапазоне (m  n, m + n). Определить количество элементов массива со значениями целой части от (m + n) / 2.
Постановка задачи.
Значения строк и столбцов массива данных вводить с клавиатуры.
1.
2. Массив данных получить генерацией случайных чисел с распечаткой его на экране дисплея.
3. Результат решения задачи выводить на экран дисплея в виде:
"Количество элементов со значением … равно …" .
Program V1L10P4; {Определение количества значений элементов массива от целой части (m+n)/2}
Uses Crt;
Var  a: array[1..10, 1..10] of integer;
i,j,k,m,n,c,d,s: integer;
{}
begin
ClrScr;
Write('Введи  количество   строк  '); ReadLn(m);
Write('Введи количество столбцов  '); ReadLn(n);
Randomize;
WriteLn('Исходный массив');
for i:= 1 to m do
begin
{Внешний цикл формирования матрицы по строкам}
for j:=1 to n do
{Внутренний цикл формирования матрицы по столбцам}
begin
c:=Random(Abs(mn));
d:=Random(m+n);
a[i,j]:=dc;
Write(a[i,j]:4)
end;
WriteLn
end;
{}
s:=0;
for i:= 1 to m do
for j:=1 to n do
begin
58
{Случайное значение элемента массива}
{Начальное значение счетчика} k:=(m+n) div 2;
if a[i,j]=k then s:=s+1
{Расчет значения элемента поиска}
{Подсчет количества элемента поиска}
end;
WriteLn('Количество элементов со значением',k:4,'  равно ',s:4);
ReadKey
end.
Возможный вариант работы программы
Введи  количество  строк   3
Введи количество столбцов  4
Исходный массив
   2   0   4   4
   0   5   1   1
   0   3   3   1
Количество элементов со значением    3 равно    2
Данная  задача  решалась в "лоб" т.е. простым перебором массива для сравнения его с искомыми данными.
Такой подход к решению задачи исходит из здравого смысла и понятен потому, что массивы  малы и не требуют
большого   времени   поиска.   Проблема   возникнет   тогда,   когда   массивы   данных   будут   большими   или   даже   очень
большими, что, естественно, приведет к увеличению времени поиска информации них.  И это обстоятельство приведет
к поискам приемов сокращения времени этого процесса.
Урок 3. Приемы поиска информации в массивах данных
3.1. Алгоритм поиска информации в сортированном массиве данных. Бинарный поиск
Начнем   объяснение   этих   приемов   (алгоритмов)   с   некоторой   практической   задачи,   которая   предполагает
массив данных, сформированных однажды, и пользователь обращается к нему лишь для поиска информации, по каким
либо  поисковым   ключам  (значениям)   будь  это   какой  либо  цифровой или  символьный  код  и  т.д.  При  достаточно
большом   количестве   данных,   скорость   поиска   вряд   ли   удовлетворит   пользователя   подобной   базы   данных.   Если
упорядочить данные по возрастанию (убыванию) значений поисковых элементов, то возможно сократить время поиска
необходимой информации.
3.1. Алгоритм поиска информации в сортированном массиве данных. Бинарный поиск
Имея отсортированный массив данных, в данном случае по возрастанию, какого либо поискового значения
(кода) и, имея поисковый код, принадлежащий этому массиву, задаемся следующим:
1. Выбираем начало проверки значения кода с середины массива данных, т.е., имея n элементов массива, и
начинаем   сравнение   с    n  /   2  элемента   или   целой   части   этого   частного.   Если   искомый   код   меньше
выбранного нами значения, то продолжаем данный прием в первой половине, если наоборот, то во второй.
Таким образом, происходит отсечение половины сортированного массива от поиска информации там, где
заведомо ее нет. Такой прием поиска информации носит название бинарного поиска от английского слова
binary   двоичный.
2. Следующий шаг предполагает поиск подобным приемом в определенной первым шагом половине массива
данных  и  т.д.  Т.е.  сокращаем  поиск   информации   в геометрической   прогрессии.   Выигрыш   во времени
поиска   обеспечивает   предварительная   сортировка   массива   данных,   которая   производится   после
обновления его новыми данными соответствующей формы, принятой для этого массива.
Контрольные вопросы и упражнения
1. Какие показатели используются для оценки прямых методов сортировок?
2. Какой из прямых методов сортировок является оптимальным по времени сортировки?
3. Какая существует зависимость времени сортировки от количества сортируемых элементов?
Для заметок, вопросов и ответов
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
59 Определение двумерного массива  данных и его формирование. Поиск информации в двумерных массивах.  Прием бинарного поиска
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
60

file_name: Занятие 9ч1.doc

title: Двумерные массивы данных


extracted_text:
Алгоритмы формирования матриц со специальными названиями.  Преобразования матриц. Типовые задачи
Операции  над  матрицами

         Занятие 10
1. Урок 1. Алгоритмы  формирования  матриц  со специальными названиями (нулевая, единичная, верхне
       треугольная, нижнетреугольная).
2. Урок 2. Алгоритмы      формирования        матриц    со    специальными      названиями      (симметричная,
        кососимметричная).
3. Урок 3. Преобразование матриц.  Типовые  задачи.
4. Контрольные вопросы и упражнения.

Урок 1. Алгоритмы формирования матриц   со   специальными    названиями    (нулевая,   единичная,    верхне
треугольная,  нижнетреугольная).
1.1. Формирование нулевой матрицы.
1.2. Формирование единичной матрицы.
1.3. Формирование верхнетреугольной и нижнетреугольной матрицы.
1.4. Алгоритмы   формирования   матриц со специальными   названиями (симметричная,  кососимметричная).
Матрицы со специальными названиями являются частными случаями общего определения матриц, потому что
имеют определенную форму в размещении значений элементов.
1.1. Формирование нулевой матрицы
Нулевой  называется матрица, у которой значения всех элементов равны 0   (см. занятие 10) и алгоритм ее
формирования   в   памяти   компьютера   весьма   прост      всем   элементам   матрицы   присваивается   значение   0.   В
производственной   практике   эта   операция   называется   "обнулением   массива".   Она   применяется   для   подготовки
оперативной памяти компьютера или магнитной памяти внешних устройств к приему массивов данных.
1.2. Формирование единичной матрицы
Единичной  является   квадратная   матрица,   у   которой   значения   элементов   главной   диагонали   равны  1,
остальные значения   0.
Алгоритм формирования единичной матрицы следующий, если номер (индекс) строки равен номеру столбца,
то элементу массива присвоить значение равное 1, иначе присвоить значение 0.
Покажем  на примере нижеследующей  программы,  как формируется  такая  матрица в оперативной  памяти
компьютера.
Program V1L11P1; {Формирование единичной матрицы}
Uses Crt;
Var a:array[1..10,1..10] of integer;
m,n,i,j:integer;
{}
begin
ClrScr;
Write('Введи количество строк квадратной матрицы ');
Read(m);
{Формирование единичной матрицы}
WriteLn('Единичная матрица');
for i:=1 to m do
begin
for j:=1 to m do
begin
{Внешний цикл  формирование строк}
{Внутренний цикл  формирование столбцов}
if i=j then a[i,j]:=1 else a[i,j]:=0;
Write(a[i,j]:3)
{Формирование значений элементов массива}
{Печать значений элементов массива}
end;
WriteLn
end;
ReadKey
end.
Результат работы программы
Введи количество строк квадратной матрицы  4
Единичная матрица
1
0
0
0
60 Алгоритмы формирования матриц со специальными названиями.  Преобразования матриц. Типовые задачи
0
0
0
1
0
0
0
1
0
0
0
1
1.3. Формирование верхне  треугольной и нижне  треугольной матриц
По   определению,  верхнетреугольная  матрица,   это  квадратная  матрица,   значения   элементов   которой
разделены  главной диагональю  на верхнюю часть    с произвольными значениями  элементов и нижнюю с нулевыми
значениями. В нижнее  треугольной матрице это разделение осуществлено наоборот. Покажем формирование таких
матриц на примере следующей программы, в которой формируется верхнее  треугольная матрица, значения элементов
которой являются  случайными  целыми  числами,   лежащими  в диапазоне  (2,  8).  Для  получения  нижнетреугольной
матрицы   с   теми   же   параметрами   значений   элементов,   следует   изменить   знак   "   >   "   на   "   <   ",   в   помеченной
соответствующим комментарием строке программы.
Program V1L11P2; {Формирование верхнетреугольной матрицы}
Uses Crt;
Var   a :array[1..10,1..10] of integer; c,i,j,m :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи количество строк квадратной матрицы ');
Read(m);
     {Формирование исходного массива}
WriteLn('Верхне  треугольная матрица случайных чисел');
for i:=1 to m do
begin
{Цикл формирования строк}
{Инициализация генератора случайных чисел}
for j:=1 to m do
begin
{Цикл формирования столбцов}
     {Цикл формирования целых значений элементов матрицы в диапазоне чисел (2, 8)}
repeat
c:=Random(9);
until (c>=2)and(c<9);
{Генерация целого случайного числа в диапазоне (0, 9)}
{Логическое условие диапазона (2, 8)}
a[i,j]:=c;
if i>j then a[i,j]:=0;   {Для получения нижне–треугольной матрицы заменить знак > на <}
Write(a[i,j]:4);
end;
     {Формирование значений элементов матрицы в диапазоне (2, 8)}
{Конец цикла формирования столбцов}
WriteLn
end;
ReadKey
end.
   {Прерывание выполнения программы до нажатия любой клавиши клавиатуры}
{Конец цикла формирования строк}
Возможный результат работы программы
Введи количество строк квадратной матрицы  4
Верхнетреугольная матрица случайных чисел
   5   4   1   6
   0   2   1   3
   0   0   3   1
   0   0   0   6
Нижнетреугольная матрица будет выглядеть следующим образом.
   5   0   0   0
   4   2   0   0
   1   1   3   0
   6   3   1   6
Урок   2.  Алгоритмы
кососимметричная)

  формирования

  матриц   со   специальными

  названиями   (симметричная,
2.1. Транспонирование матриц.
2.2. Сложение матриц.
2.3. Формирование симметричной и кососимметричной матрицы.
2.1. Транспонирование матриц
61 Определение.  Матрица   называется  транспонированной   к   исходной,   если   ее  строки  являются
соответствующими столбцами исходной матрицы.
Рассмотрим в качестве примера программу транспонирования матрицы, значения элементов которой получены
случайным образом в диапазоне (8,  9) целых чисел.
Program V1L11P3; {Транспонирование матрицы}
Uses Crt;
Var a,b :array[1..10,1..10] of integer; c,d,i,j,m,n :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи количество строк квадратной матрицы '); Read(m);
    {Формирование исходного массива}
WriteLn('Исходная матрица');
for i:=1 to m do
begin
for j:=1 to m do
begin
c:=Random(8);d:=Random(9);
a[i,j]:=dc;
Write(a[i,j]:4);
end;
WriteLn
end;
    {Транспонирование матрицы}
WriteLn('Транспонированная матрица');
for i:=1 to m do
begin
for j:=1 to m do
begin
b[i,j]:=a[j,i];{Присвоение значений элементов исходной матрицы транспонированной}
Write(b[i,j]:4);
end;
WriteLn
end;
{}
ReadKey
end.
Возможный результат работы программы
Введи количество строк квадратной матрицы  4
Исходная матрица
  4   2   0   1
   5   3  5  5
  1  3   6   1
   7   2   3  7
Транспонированная матрица
  4   5  1   7
   2   3  3   2
   0  5   6   3
   1  5   1  7
2.2. Сложение  матриц
Сложение   двух   или   нескольких   матриц   возможно   в   том   случае,   если   складываемые   матрицы   имеют
одинаковый размер, т.е. равное количество строк и столбцов. Для получения матрицы сумм двух или более матриц,
необходимо   сложить   значения   элементов,   имеющих   одинаковые   индексы.   Рассмотрим   эту   процедуру   на   примере
следующей задачи.
Задача. Даны две исходных квадратных матрицы  A m (F) и  B m (F 1). Получить третью матрицу  C m (F + F 1),
равную сумме исходных матриц.
Постановка задачи.
1. Исходные квадратные матрицы получить генерацией случайных чисел в диапазоне  (8, 9), с распечаткой
их на экране дисплея с сообщениями "Исходная матрица  "A"",  "Исходная матрица  "B"".
2. Результат сложения исходных матриц вывести на экран дисплея с сообщением  "Сумма матриц".
62 Алгоритмы формирования матриц со специальными названиями.  Преобразования матриц. Типовые задачи
Program V1L11P4; {Сложение матриц}
Uses Crt;
Var a,b :array[1..10,1..10] of integer; c,d,i,j,m,n :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи количество строк квадратной матрицы ');
Read(m);
    {Формирование исходной матрицы "A"}
WriteLn('Исходная матрица "A"');
for i:=1 to m do
begin
for j:=1 to m do
begin
c:=Random(8);
d:=Random(9);
a[i,j]:=dc;
Write(a[i,j]:4);
end;
WriteLn
end;
    {Формирование исходной матрицы "B"}
WriteLn('Исходная матрица "B"');
for i:=1 to m do
begin
for j:=1 to m do
begin
c:=Random(8);
d:=Random(9);
b[i,j]:=dc;
Write(b[i,j]:4);
end;
WriteLn
end;
    {Сумма матриц}
WriteLn('Сумма матриц');
for i:=1 to m do
begin
for j:=1 to m do
begin
a[i,j]:=a[i,j]+b[i,j];
Write(a[i,j]:4);
end;
WriteLn
end;
{}
ReadKey
end.
Возможный результат работы программы
Введи количество строк квадратной матрицы  3
Исходная матрица "A"
   3   3   2
  1  2   8
   0  3   2
Исходная матрица "B"
  4   5  1
   0   4   0
  5   6   1
Сумма  матриц
  1   8   1
  1   2   8
  5   3   3
63 2.3. Формирование симметричной и кососимметричной  матриц
Симметричной называется квадратная матрица, у которой значения элементов равны относительно главной
диагонали. У кососимметричной матрицы значения элементов относительно главной диагонали  противоположны.
Рассмотрим простой алгоритм формирования этих матриц, со случайными значениями элементов, который состоит из
следующих шагов.
1. Формирование   исходной   верхне   (или   нижне)      треугольной   матрицы





A
\
0





  случайным   образом   в
заданном диапазоне чисел.
2. Формирование  транспонированной  матрицы  B T   из исходной. Транспонированная матрица  B T  является
нижнетреугольной





0
\
B





, ненулевые  элементы  которой   B = A.
3. Преобразование матрицы  A  m   в   сумму матриц





A
\
0





     +





0
\
B





, причем элементы главной
диагонали не суммируются.
Программа,   реализующая   данный   алгоритм   выглядит   следующим   образом.   В   данной   программе   исходная
нижнее      треугольная   матрица   формируется     случайными   числами   в   диапазоне     (2,   8).   Возможен   другой   более
рациональный алгоритм решения данной задачи.
Program V1L11P5; {Формирование симметричной матрицы}
Uses Crt;
Var a,b :array[1..10,1..10] of integer; c,i,j,m :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи количество строк квадратной матрицы ');
Read(m);
    {Формирование исходного массива}
WriteLn('Нижнетреугольная матрица случайных чисел');
for i:=1 to m do
64 Алгоритмы формирования матриц со специальными названиями.  Преобразования матриц. Типовые задачи
begin
for j:=1 to m do
begin
     {Цикл формирования целых значений элементов матрицы в диапазоне чисел (2, 8)}
repeat
c:=Random(9);
until (c>=2)and(c<9);
{Генерация целого случайного числа в диапазоне (0, 9)}
{Логическое условие диапазона (2, 8)}
a[i,j]:=c;
Write(a[i,j]:4);
end;
{Формирование значений элементов матрицы в диапазоне (2, 8)}
WriteLn
end;
    {Транспонирование матрицы}
WriteLn('Транспонированная матрица');
for i:=1 to m do
begin
for j:=1 to m do
begin
b[i,j]:=a[j,i];
Write(b[i,j]:4);
end;
WriteLn
end;
{Сложение матриц}
WriteLn('Симметричная матрица');
for i:=1 to m do
begin
for j:=1 to m do
begin
if i<>j then a[i,j]:=b[i,j]+a[i,j];  {Умножить значения одной из слагаемых матриц
     на 1   для   получения   кососимметричной
     матрицы}
Write(a[i,j]:4);
end;
WriteLn
end;
{}
ReadKey
end.
Возможный результат работы программы
Введи количество строк квадратной матрицы  3
Нижнетреугольная матрица случайных чисел
   8   0   0
   7   3   0
   6   8   3
Транспонированная матрица
   8   7   6
   0   3   8
   0   0   3
Симметричная матрица
   8   7   6
   7   3   8
   6   8   3
Урок 3. Типовые задачи преобразования двумерных массивов данных .  Преобразование матрицы в вектор.
Рассмотрим несколько типовых задач преобразования двумерных массивов  данных и приведем программы
решения нескольких из них.
1.
Задача   преобразования   массива   данных   посредством   выполнения   арифметических
(математических) операций с его элементами.
Задача преобразования массива данных по логическим условиям.
Задача   формирования   нового   массива   из   исходного   массива   данных.   Пример   такой   задачи
рассмотрим ниже.
2.
3.
65 Задача.  Дан     двумерный   массив  A  случайных чисел,   лежащих   в   диапазоне  (6, 8). Создать одномерный
массив B, исключив из исходного массива отрицательные элементы.
Постановка задачи.
Значения строк и столбцов массива данных вводить с клавиатуры.
1.
2. Массив данных получить генерацией случайных чисел с распечаткой его на экране дисплея.
3.
Результат решения задачи выводить на экран дисплея с сообщением "Одномерный  массив".
Program V1L11P6; {Формирование одномерного массива из двумерного}
Uses Crt;
Var a:array[1..10,1..10] of integer; b:array[1..100] of integer; k,p,i,j,m,n,c,d :integer;
{}
begin
ClrScr;
Randomize;
Write('Введи  количество   строк  '); Read(m);
Write('Введи количество столбцов  '); Read(n);
    {Формирование исходного массива}
WriteLn('Исходный массив случайных чисел:');
for i:=1 to m do
begin
for j:=1 to n do
begin
c:=Random(6);
d:=Random(8);
a[i,j]:=dc;
Write(a[i,j]:4);
end;
WriteLn
end;
{}
    {Просмотр исходного массива и формирования массива 'b'}
k:=1;
for i:=1 to m do
begin
{Начальное значение индекса массива 'b'}
for j:=1 to n do
begin
if a[i,j]<0 then Continue else
begin
{Если истина, то продолжить, иначе выполнить}
b[k]:=a[i,j];
k:=k+1
{Формирование массива 'b'}
{Формирование индекса массива 'b'}
end;
p:=k1;
end;
{Вычисление конечного значения индекса массива 'b'}
end;
WriteLn('Сформированный одномерный массив');
    for k:=1 to p do
Write(b[k]:3);
{Цикл печати массива 'b'}
ReadKey
end.
Возможный результат работы программы
Введи  количество   строк 3
Введи количество столбцов 4
Исходный массив случайных чисел
   2   5  2  3
  3   1   3  2
   6  1  5   2
Сформированный одномерный массив
  2  5  1  3  6  2
Контрольные вопросы и упражнения
66 Алгоритмы формирования матриц со специальными названиями.  Преобразования матриц. Типовые задачи
1. Дайте определение 3х мерного, 4х мерного и  n  мерного массивов.   Приведите примеры трехмерных
массивов.
2. Какой тип могут иметь индексные переменные массивов данных?  Перечислите их.
3. Имеются ли ограничения размерности массивов в языке программирования TP 7.0, и какие?
4. Каким образом формируются массивы данных  и где они могут находиться ?
5. Какая информация может находиться в массивах данных ?
6. Напишите программу, которая выводит на экран значение элемента 1, 2, 3х   мерного массива данных,
адрес которых указывается с клавиатуры.
7. Напишите программу формирования одномерного массива   (вектора)  S    из суммы элементов столбцов
матрицы A. Найдите в последней строке матрицы A элемент с максимальным значением.
8. Напишите программу формирования вектора P из произведения элементов строк матрицы A.  Определите
сумму значений элементов вектора P.
9. Напишите   программу   формирования   вектора  B  из   средних   значений   элементов   строк   матрицы  A.
Определите минимальное значение элемента вектора B.
10. Напишите   программу   выяснения   количества   положительных,   отрицательных   и   нулевых   значений
элементов матрицы A.
Для заметок, вопросов и ответов
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________________________________________
______________________________________________________________________
________________________________
67

file_name: Занятие 10ч1.doc

title: Операции  над  матрицами