Массивы
Все простые типы данных, рассматриваемые ранее, имеют два характерных свойства: неделимость и упорядоченность их значений. Составные, или структурированные типы данных задают множество сложных значений с одним общим именем. Существует несколько методов структурирования, каждый из которых отличается способом обращения к отдельным компонентам. В данном учебном пособии будут рассмотрены только два структурированных типа данных: регулярный тип (массивы) и строковый тип.
С понятием «массив» приходится встречаться при решении научно-технических, экономических задач обработки большого количества однотипных значений.
Таким образом, массив – это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип, и обозначаемая одним именем.
Название регулярный тип массивы получили за то, что в них объединены однородные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.
Массиву присваивается имя, посредством которого можно ссылаться на него как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует совокупность номеров (индексов), определяющих его место в общей последовательности. Индексы представляют собой выражения простого типа. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента:
Чтобы использовать массивы в программах, нужно их описать в разделе описаний. Тип массива не является стандартным, поэтому его необходимо описать в части описания типов. Описание типа массива определяет его имя, размер массива и тип данных:
Далее, в перечне переменных указывается имя массива и через двоеточие указывается имя нового типа данных:
Массив может быть описан и без представления типа в разделе описания типов данных:
Этот вариант описания короче, но в некоторых случаях, когда описание переменных типа массив встречается несколько раз в различных частях программы, необходимо описание этого типа отдельно, как приведено в первом варианте.
Чаще всего в качестве типа индекса используется интервальный целый тип.
1. Одномерные массивы
Линейный (одномерный) массив – массив, у которого в описании задан только один индекс; если два индекса, то это двумерный массив и т. д. Одномерные массивы часто называют векторами, т. е. они представляют собой конечную последовательность пронумерованных элементов. Пример описания одномерного массива:
type vec=array[1..5] of real;
var x:vec;
var x: array[1..5] of real;
Оба из вариантов описывают одномерный массив x, состоящий из 5 вещественных элементов.
Присваивание начальных значений (заполнение массива) заключается в присваивании каждому элементу массива некоторого значения заданного типа. Наиболее эффективно эта операция осуществляется при помощи оператора for. Ввод данных может осуществляться: с клавиатуры, из файла данных, при помощи различных формул, в том числе и датчика случайных чисел.
Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу, и т. д.
Алгоритм решения задач с использованием массивов:
- описание массива;
- заполнение массива;
- вывод (распечатка) массива;
- выполнение условий задачи;
- вывод результата.
1.1. Заполнение массива
Рассмотрим типичные варианты заполнения массива х, описанного выше.
Заполнение всех элементов массива числом 1 :
for i:=1 to 5 do x[i]:=1;
Заполнение всех элементов массива случайными числами из диапазона 0–9 :
for i:=1 to 5 do x[i]:=random(9);
Заполнение всех элементов массива при помощи ввода с клавиатуры:
for i:=1 to 5 do
begin
readln(x[i]);
end;
1.2. Вывод массива на экран
Вывод массива на экран в одну строку без пояснений:
for i:=1 to 5 do writeln(x[i]:6:1);
Вывод массива на экран в столбец с пояснениями. Этот вариант гораздо нагляднее. Старайтесь использовать его:
for i:=1 to 5 do writeln(‘x[’,i,‘]=’,x[i]:6:1);
1.3. Работа с массивами
Пример 6.1. Определить самую высокую температуру и самый теплый день в мае.
program massiv;
uses crt;
var t:array[1..31] of integer;
i,max,n:integer;
begin
Clrscr;
for i:=1 to 31 do
begin
t[i]:=random(20);
write(t[i],‘ ’);
end;
writeln;
max:=t[1]; n:=1;
for i:=2 to 31 do
begin
if t[i]>max then
begin max:=t[i]; n:=i; end;
end;
writeln(‘t-макс.= ’,max,‘ в ’,n, ‘день’);
end.
2. Двумерные массивы
Двумерный массив – структура данных, хранящая прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен. В Паскале двумерный массив представляется массивом, элементами которого являются одномерные массивы. Два следующих описания двумерных массивов тождественны:
var a:array [1..5] of array [1..6] of real;
var a:array [1..5,1..6] of real;
Чаще всего при описании двумерного массива используют второй способ. Так же как и для одномерных массивов, для двумерных можно использовать отдельно описание нового типа массива, а затем описывать переменную, используя этот тип:
type matr=array [1..5,1..6] of integer;
var a:matr;
Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индексов (первый индекс – номер строки, второй индекс – номер столбца). Все действия над элементами двумерного массива идентичны действиям над элементами линейного массива. Только для инициализации двумерного массива используется конструкция, когда один цикл for вложен в другой. Например:
for i:=1 to 5 do
for j:=1 to 6 do
a[i,j]:=0;
При организации вложенных (сложных) циклов необходимо учитывать:
- Все правила, присущие простому циклу, должны соблюдаться.
- Имена параметров для циклов, вложенных один в другой, должны быть различными.
- Внутренний цикл должен полностью входить в тело внешнего цикла. Пересечение циклов недопустимо.
2.1. Заполнение матрицы
Рассмотрим типичные варианты заполнения матрицы a, описанной выше.
Заполнение всех элементов матрицы случайными числами из диапазона 1 – 9 :
for i:=1 to 5 do
for j:=1 to 6 do
a[i,j]:=random(9);
Заполнение всех элементов матрицы при помощи ввода с клавиатуры:
for i:=1 to 5 do
for j:=1 to 6 do
begin
readln(a[i,j]);
end;
2.2. Вывод матрицы на экран
Вывести на экран матрицу 5 ´ 6 можно следующим образом:
for i:=1 to 5 do
begin
for j:=1 to 6 do
end;
2.3. Работа с матрицами
Работа с матрицами осуществляется также поэлементно.
Пример 6.2. Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.
program pifagor;
uses crt;
var p:array [1..9,1..9] of integer;
i,j:integer;
begin
Clrscr;
for i:=1 to 9 do
for j:=1 to 9 do
p[i,j]:=i*j;
for i:=1 to 9 do
begin
for j:=1 to 9 do
write(p[i,j]:4);
writeln;
end;
end.
Пример 6.3. Задан двумерный массив В(10, 10), заполненный случайными числами из диапазона -10 – 10. Найти и вывести на экран произведение элементов побочной диагонали.
program massiv;
uses crt;
var b:array[1..10,1..10] of integer;
i,j,s:integer;
begin
Clrscr;
for i:=1 to 10 do
begin
for j:= 1 to 10 do
begin
b[i,j]:=random(20)-10;
write(b[i,j]:4);
end;
writeln;
end;
s:=1;
for i:=1 to 10 do
s:=s*b[i,11-i];
writeln(‘Произведение = ’,s);
end.
Пример 6.4. Ввести с клавиатуры матрицу В(5, 5) и поменять местами первый и последний столбец.
program mest;
var b:array[1..5,1..5] of integer;
i,j,s:integer;
begin
for i:=1 to 5 do
for j:=1 to 5 do
begin
readln(b[i,j]);
end;
for i:=1 to 5 do
begin
for j:=1 to 5 do
write(b[i,j]:4);
writeln;
end;
for i:=1 to 5 do
begin
s:=b[i,1]; b[i,1]:=b[i,5]; b[i,5]:=s;
end;
writeln;
writeln(‘Изменённая матрица’);
writeln;
for i:=1 to 5 do
begin
for j:=1 to 5 do
write(b[i,j]:4);
writeln;
Одномерные массивы целых чисел
Внимание! Все тесты в этом разделе разработаны пользователями сайта для собственного использования. Администрация сайта не проверяет возможные ошибки, которые могут встретиться в тестах.
Внимательно прочтите вопрос/задание и выберите правильный ответ. Ответ выбирайте обдуманно,прочитав задание правильно. Желаю успехов!
Система оценки: 5 балльная
Список вопросов теста
Вопрос 1
Как называется совокупность фиксированного числа элементов одного типа,которым присвоено общее имя?
Варианты ответов
- массив
- структура
- система
Вопрос 2
Как называют номер, по которому осуществляется доступ к элементу массива?
Варианты ответов
Вопрос 3
Что представляет собой размерность массива?
Варианты ответов
- Количество индексов, которое необходимо для однозначного доступа к элементу массива
- Количество индексов, которое содержат все элементы массива
- Количество индексов, которое необходимо для доступа ко всем элементам массива
Вопрос 4
Как называют массив с одним индексом?
Варианты ответов
- одинарный
- однозначный
- одномерный
Вопрос 5
Укажите название массива с двумя индексами?
Варианты ответов
- двумерный
- двузначный
- бинарный
Вопрос 6
Что понимают под сортировкой массива?
Варианты ответов
- Перераспределение элементов массива в определенном порядке
- Перераспределение элементов массива в хаотичном порядке
- Перераспределение совокупности массивов в определенном порядке
Вопрос 7
Какой порядок называют неубывающим?
Варианты ответов
- Порядок, при котором первый элемент массива имеет самое большое значение, и значение каждого следующего элемента массива больше значения предыдущего.
- Порядок, при котором первый элемент массива имеет самое маленькое значение, и значение каждого следующего элемента массива больше значения предыдущего.
- Порядок, при котором первый элемент массива имеет самое большое значение, и значение каждого следующего элемента массива меньше значения предыдущего.
Вопрос 8
Рассмотрите одномерный массив. Какому индексу элемента массива соответствует значение 8. -20 -35 1 8 42
Варианты ответов
Вопрос 9
Рассмотрите описание массива:
var k: array [1..15] of real;
Какие переменные используются в массиве?
Варианты ответов
- вещественные
- целочисленные
- логические
- символьные
Вопрос 10
Рассмотрите описание массива:
c: array [1..n] of ineger;
Выберите подходящие элементы массива.
Варианты ответов
Вопрос 11
Для обращения к элементу массива индекс должен быть задан в виде?
Варианты ответов
- выражения
- переменной
- константы
- все ответы верны
§ 11. Структурированный тип данных массив
В современном мире ежесекундно происходит обработка огромного числа данных с помощью компьютера. Если необходимо обрабатывать данные одного типа — числа, символы, строки и др., то для их хранения можно воспользоваться типом данных, который называется массив.
Массив — упорядоченная последовательность данных, состоящая из конечного числа элементов, имеющих один и тот же тип, и обозначаемая одним именем.
Массив является структурированным (составным) типом данных. Это означает, что величина, описанная как массив, состоит из конечного числа других величин. Так, например, можно создать массивы из 10 целых или 100 вещественных чисел. Тип элементов массива называют базовым типом. Все элементы массива упорядочены по индексам (номерам элементов), определяющим местоположение элемента в массиве. В языке С++ элементы массива всегда нумеруются с нуля.
Массиву присваивается имя, посредством которого можно ссылаться на него как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует номер (индекс), определяющий его место в общей последовательности (примеры 11.1—11.3). Индексы могут быть выражением, значение которого принадлежит любому простому типу, кроме вещественного. Индексы должны быть неотрицательными. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента, индекс элемента записывается после имени в квадратных скобках (пример 11.4).
Впервые тип данных массив появился в языке Фортран (создан в период с 1954 по 1957 г. в корпорации IBM). Уже первые версии языка поддерживали трехмерные массивы (в 1980 г. максимальная размерность массива была увеличена до 7). Массивы были необходимы для создания математических библиотек, в частности содержащих процедуры решения систем линейных уравнений.
Пример 11.1. В 10 А классе 25 учащихся. Известен рост каждого в сантиметрах. Для хранения значений роста можно использовать массив А, состоящий из 25 целых чисел.
Индекс каждого элемента — порядковый номер учащегося из списка в классном журнале. Поскольку элементы массива нумеруются от нуля, то запись а[5] — рост ученика, который в журнале записан под номером 6.
Пример 11.2. Каждый день в декабре измеряли температуру воздуха. Для хранения значений температуры можно использовать массив t , состоящий из 31 вещественного числа.
Индекс элемента — номер дня в декабре со сдвигом на 1. Запись t[15] — температура воздуха 16 декабря.
Пример 11.3. В 10 Б классе 27 учащихся. В классном журнале указаны фамилия и имя каждого учащегося. Для хранения списка учащихся можно использовать массив s , состоящий из 27 строк.
Индекс каждого элемента — порядковый номер ученика из списка в классном журнале. Тогда запись s[5] — фамилия и имя учащегося под № 6.
Пример 11.4. Обращение к элементу массива: а[3], t[i], s[n-1] .
Язык программирования С++ поддерживает работу с массивами, которые достались ему в наследство от языка С. Однако работа с такими массивами требует глубокого понимания того, как они размещаются в памяти компьютера. В качестве альтернативы рекомендуется использовать шаблоны классов, которые описаны в стандартной библиотеке: array<> и vector<>.
11.2. Описание массивов
Мы будем рассматривать работу с массивом, используя тип данных vector , реализованный в стандартной библиотеке. Этот тип данных, как и уже знакомый вам тип данных string , является шаблонным классом, поэтому многие команды для работы будут одинаковыми.
Для работы с типом данных vector необходимо подключить одноименную библиотеку:
Для создания вектора используется следующая команда:
vector < тип элементов >имя_массива ( количество элементов );
Имя массива является идентификатором и задается по тем же правилам, что и имена любых других переменных.
Тип элементов задает значение базового типа для данного массива. Базовый тип может быть любым из известных вам типов (примеры 11.5–11.7).
Размер массива — количество элементов в нем.
Понятие вектора широко применяется в физике и математике. Так, например, в физике вектор рассматривается как структура, имеющая одновременно величину (модуль) и направление. Многомерные векторы используются в квантовой механике. В геометрии под векторами понимают направленные отрезки. Арифметическим вектором называют упорядоченную совокупность из n чисел. Вектор может рассматриваться как последовательность (кортеж) однородных элементов. Именно в таком виде вектор понимается в программировании.
Пример 11.5. Опишем массив, рассмотренный в примере 11.1. Размер описанного массива 25 элементов.
Пример 11.6. Опишем массив, рассмотренный в примере 11.2. Размер описанного массива — 31 элемент.
Пример 11.7. Опишем массив, рассмотренный в примере 11.3.
Пример 11.8. Опишем массив, всем элементам которого вначале присваивается значение –1:
vector < int > a ( 25 , -1 );
11.3. Операции над массивами
Массивы, описанные типом данных vector , можно использовать в операциях присваивания. В результате выполнения этой команды все элементы одного массива будут переписаны во второй (пример 11.9). Если в описании векторы имеют разный размер, то он будет преобразован, поскольку векторы являются динамическими структурами, которые могут изменять свой размер во время выполнения программы.
Векторы можно сравнивать. При сравнении используют операции сравнения «==» и «!=». Векторы равны, если они содержат одинаковые элементы на тех же позициях, иначе они не равны.
Другие операции для массива как для типа данных не определены.
Пример 11.9. Пусть массивы a и b описаны следующим образом:
vector < int > a ( 25 ), b ( 30 );
В результате выполнения команды:
размер массива a будет увеличен до 30 элементов, все элементы в массиве a будут иметь те же значения, что и в массиве b .
В результате выполнения команды:
размер массива b будет уменьшен до 25 элементов, все элементы в массиве b будут иметь те же значения, что и в массиве a . Значения последних 5 элементов, которые исходно были в векторе b , будут потеряны.
Пример 11.10. Операции над индексированными переменными:
sr = ( t [ 0 ] + T [ 29 ]) / 2 ;
b [ k ] = a [ k ] * 2 ;
n = s [ i ]. length ();
11.4. Ввод и вывод элементов массива
Для того чтобы работать с массивом, необходимо задать начальные значения элементов массива. Сделать это можно несколькими способами:
1) определение элементов массива как констант;
2) ввод элементов массива с клавиатуры;
3) использование случайных чисел для определения значений;
4) использование функций (собственных или стандартных) для определения значений;
5) ввод элементов массива из текстового файла.
Элементам массива можно задать значения при описании (примеры 11.11, 11.12). В этом случае количество элементов не задается, а определяется автоматически.
При вводе элементов массива с клавиатуры каждый элемент должен вводится отдельно. Если количество вводимых элементов определено, то можно воспользоваться циклом for (пример 11.13).
При описании вектора его размер может быть задан переменной. Важно, чтобы значение этой переменной было определено до описания вектора. Это значение может быть задано с помощью команды присваивания или введено с клавиатуры (пример 11.14).
При вводе строк нужно помнить, что пробел используется как разделитель. Если использовать для ввода команду cin , то элементами массива могут быть только отдельные слова строки ( пример 11.15). Если нужно, чтобы элементами массива были строки с пробелами, то для ввода необходима команда getline (пример 11.16).
Иногда бывает удобно задавать элементы массива случайным образом. Для этого используется функция rand(), которая генерирует случайное целое число из промежутка [0 ; 32768). Если элементы массива должны принадлежать отрезку [a ; b], то можно определить значение элемента массива как a[i]= rand() % (b – a + 1) + a ; (пример 11.17).
Вещественное случайное число в промежутке [0, 32.768) можно получить так: a[i]= 1. * rand() / 1000 ;
Выводить элементы массива можно в строку (пример 11.18) или в столбец (пример 11.19). Если элементы массива выводятся в строку, то между ними нужно выводить символ-разделитель (чаще всего используют пробел), иначе все числа будут распечатаны подряд как одно число с большим количеством цифр. Выводить элементы массива можно не только в прямом порядке, но и в обратном (пример 11.20).
Пример 11.21. Написать программу, которая сформирует массив из n четных чисел из отрезка [20, 70] случайным образом. Записать числа из массива в текстовый файл. Вывести на экран k -й элемент массива.
Этапы выполнения задания
I. Исходные данные: количество элементов n и массив a.
II Результат: искомый элемент.
III. Алгоритм решения задачи.
1. Ввод исходных данных.
2. Генерация массива.
2.1. Для того чтобы элементы массива были только четными, необходимо каждый полученный элемент умножать на 2.
2.2. Поскольку элементы умножаются на два, границы исходного отрезка нужно уменьшить в два раза.
2.3. Вывод массива по элементам.
3. Ввод значения k и вывод результата.
IV. Описание переменных:
n, k – int, a – vector .
Пример 11.22. Написать программу, которая прочитает из текстового файла список фамилий учащихся, запишет их в массив и выведет из списка фамилии с номерами от k1 до k2 .
Этапы выполнения задания
I. Исходные данные: массив s и количество учащихся n, номера фамилий – k1 и k2 .
II. Результат: список заданных фамилий.
III. Алгоритм решения задачи.
Ввод исходных данных.
2. Вывод результата.
IV. Описание переменных:
n, k1, k2 – int, a – vector .
Если для тестирования программы используются фамилии, написанные кириллицей, то важно сохранить текстовый файл в той же кодировке, которая устанавливается для консоли. По умолчанию для Блокнота может быть установлена кодировка UTF-8.
Пример 11.11. Описание числового массива, элементы которого являются константами.
vector < int > simple_numb = < 2 , 3 , 5 , 7 , 11 >; |
Пример 11.12. Описание массива, элементы которого являются строковыми константами.
vector < string > c_rgb = < " red» , » green » , «blue » >; |
Пример 11.13. Ввести элементы массива a с клавиатуры.
for ( int i = 0 ; i < 10 ; i ++)
Пример 11.14. Ввести заданное количество элементов массива a .
for ( int i = 0 ; i < n ; i ++)
Пример 11.15. Ввод массива строк (без пробелов):
for ( int i = 0 ; i < n ; i ++)
Пример 11.16. Ввод массива строк (с пробелами):
for ( int i = 0 ; i < n ; i ++)
getline ( cin , s [ i ]);
Пример 11.17. Случайным образом задать n элементов массива А. Каждый элемент — число из отрезка [-20; 20] .
for ( int i = 0 ; i < n ; i ++)
a [ i ] = rand () % 41 — 20 ;
Пример 11.18. Вывод элементов массива в строку (через пробел):
for ( int i = 0 ; i < n ; i ++)
Если элементы массива задаются случайным образом, то после генерации их нужно вывести. Это необходимо для проверки правильности работы, иначе непонятно, с какими данными работает программа.
Пример 11.19. Вывод элементов массива в столбец (по одному в строке):
for ( int i = 0 ; i < n ; i ++)
Пример 11.20. Вывод элементов массива в строку (в обратном порядке):
for ( int i = n — 1 ; i >= 0 ; i —)
Пример 11.21.
Массивы
Понятие двумерного массива. Описание типа массива. Формирование значений элементов массива случайным образом
Одним из основных направлений использования компьютеров является накопление и обработка данных — различных таблиц, справочников, словарей и другой информации. Для представления такой информации в программе удобно использовать массивы. Как правило, обработка таких данных осуществляется по одному и тому же закону, для чего удобно использовать циклические алгоритмы. Мы уже рассматривали формирование и обработку одномерных массивов. Вспомним, что в массив мы объединяем конечную последовательность компонентов одного типа и даем им общее имя. Каждый отдельный компонент массива называется элементом. Количество элементов называется размером массива. Тип элементов определяет тип массива. Размер и тип массива указываются при его описании, причем размер может быть указан либо конкретным значением, либо ранее определенной константой. Номер элемента называется индексом. Индексы могут быть целыми положительными константами или целыми переменными. Чтобы обратиться к некоторому элементу массива, нужно рядом с идентификатором массива в скобках указать индекс элемента. Но часто данные могут быть организованы в виде таблицы (матрицы), где расположение каждой переменной определяется номером строки и номером столбца. Например, место в зрительном зале задается указанием номера ряда и номером места в этом ряду. Такие данные удобно описать как двумерный массив. В отличие от одномерного массива каждому элементу двумерного массива соответствует пара индексов. Первый индекс — это номер строки, а второй — номер столбца, где расположен элемент массива. Размер двумерного массива задается парой чисел: M*N, где M — число строк, а N — число столбцов в таблице. Пусть задан двумерный массив Matr, имеющий размер 10*20. Этот массив на языке Паскаль может быть описан следующим образом:
Var Matr : array [1..10,1..20] of integer; |
тогда Matr[5,7] — элемент, расположенный в 5-ой строке и в 7-ом столбце. Любая константа, переменная, значение функции или выражения в Турбо Паскале характеризуется своим типом. Тип любого из этих объектов определяет множество допустимых значений, которые может иметь объект, а также множество допустимых операций, которые применимы к объекту. Кроме того, тип определяет и формат внутреннего представления значения объекта. Имя, которое программист присваивает своему определяемому типу, — произвольный идентификатор. Объявление типа должно быть сделано в разделе объявлений, и ему должно предшествовать кодовое слово Type. Отличительной особенностью массивов является то обстоятельство, что все их компоненты суть данные одного типа (возможно, структурированного); эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера, например:
Type Digit = array [0..9] of integer; Matrix = array [1..100, 0..9] of real; Var m : Matrix; d : Digit; i : integer; |
Описание типа массива задается следующим образом: = array [] of ; где:
— правильный идентификатор,
— список из одного или нескольких индексных типов, разделенных запятыми,
— любой тип Турбо Паскаля.
Примечание. Обычно в качестве индексного типа используется тип-диапазон, в котором задаются границы изменения индексов через две точки (..). Так как , идущий за кодовым словом of, — любой тип Турбо Паскаля, он может быть, в частности, другим массивом. Рассмотрим примеры. Пример 1. Массив можно описать как одномерный, элементами которого в свою очередь являются одномерные массивы.
Const n=2; m=3; Type MyArray1 = array [1..m] of integer; MyArray2 = array [1..n] of MyArray1; Var V : MyArray1; A : MyArray2; |
В данном случае переменная V объявлена как одномерный массив из трех элементов целого типа, а переменная А описана как двумерный массив из двух строк, в каждую из которых включено по три элемента. Пример 2. Описание массива можно сократить, исключив определение массива MyArray1.
Const n=2; m=3; Type MyArray2 = array [1..n] of array [1..m] of integer; Var A : MyArray2; |
Пример 3. Еще более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива (чем мы уже пользовались).
Const n=2; m=3; Type MyArray2 = array [1..n, 1..m] of integer; Var A : MyArray2; |
Пример 4. Если же указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных.
Const n=2; m=3; Var A : array [1..n, 1..m] of integer; |
Формирование значений элементов массива случайным образом и с клавиатуры и вывод их на экран
Операции работы с двумерными массивами аналогичны операциям работы с одномерными массивами, нужно только не забывать о различиях между массивами. Обычно при работе с двумерными массивами используются вложенные циклы. Очень часто значения элементов массива вводятся с клавиатуры. Этот способ задания информации слишком трудоемок при работе с массивами больших размеров. Для отладки широкого класса алгоритмов такой ввод информации должен быть заменен формированием элементов массива случайным образом. Для этого используют встроенные средства Турбо Паскаля: процедуру Randomize и функцию Random. Вы уже сталкивались с этими средствами. Сегодня же наша задача создать процедуру ввода элементов в массив и процедуру вывода элементов на экран. Приведем пример заполнения массива случайными числами. Эта процедура должна принять в качестве входных параметров массив, количество строк и столбцов, заданные пользователем с клавиатуры в основном разделе операторов. Так как наша процедура будет воздействовать на пустой исходный массив, то его мы должны передать по ссылке. Количество строк и столбцов достаточно передать копиями по значению.
Procedure InsertMas1(Var X : MyArray; n, m: integer); Var i, j : integer; Begin Randomize; for i := 1 to n do for j := 1 to m do X[i, j]:= Random(50); End; |
Теперь, чтобы воспользоваться этой процедурой, достаточно вызвать ее в основном разделе программы, передав ей параметры. Рассмотрим процедуру вывода элементов массива на экран. Для того, чтобы вывести наш массив на экран в виде таблицы, поставим при переходе к новой строке оператор writeln и применим формат вывода элементов (:5).
Procedure PrintMas(X : MyArray; n, m: integer); Var i, j : integer; Begin for i := 1 to n do begin for j := 1 to m do write(X[i, j]:5); writeln; end; End; |
Задание. Наберите программу-шаблон для работы с двумерными массивами. Как вы уже знаете из предыдущей темы, она должна содержать две процедуры ввода и процедуру вывода элементов заданного массива. Основной раздел операторов должен содержать диалог с пользователем и защиту программы от ввода недопустимых значений для количества строк и столбцов. Сохраните файл в соответствующем каталоге на своей дискете. Рассмотрите процедуру, решающую следующую задачу. Задача. Дана таблица действительных чисел. Сосчитайте сумму всех чисел в таблице.
Procedure Summa(A : MyArray; n, m: integer; Var S: real); Var i, j : integer; |