Что такое массивы и матрицы. Как их объявить и использовать в языке программирования Pascal. Открытые массивы.
Заполнение одномерного массива
for i := 1 to N do begin write(‘Введите значение a[‘, i, ‘] = ‘); readln(a[i]); end;
Источник: http://programm.top/pascal/faq/2/
Работа с одномерными массивами на языке программирования Паскаль
Массив — самая распространенная структура хранения данных, присутствующая в любом языке программирования.
В Pascal используются одномерные и двумерные массивы. В школьной программе обычно их изучают в 9-10 классах.
Одномерный массив — это конечное количество однотипных элементов, объединенных общим именем. Каждому элементу присвоен свой порядковый номер. Обращение к элементам происходит по имени массива и индексу (порядковому номеру).
Источник: http://infouch.ru/odnomernye-massivy-v-paskale/
Описание и выделение памяти
Динамический массив описывается так:
Память под динамический массив a выделяется в момент работы программы:
Здесь — первое преимущество динамических массивов — в переменной a может храниться массив любого размера, память выделяется в процессе работы программы. Кроме того, выделенная память гарантированно автоматически заполняется нулевыми значениями.
Можно совместить описание и выделение памяти — тип динамического массива выводится автоматически:
Обычно в PascalABC.NET совмещают описание динамического массива, выделение памяти и заполнение значениями. Самый простой способ — заполнить n нулями:
Источник: http://pascalabcnet.github.io/school_arrays.html
Создание динамического массива
Массив, не имеющий заданных размеров мы можем определить так:
var<имя массива>: arrayof<тип элементов массива>;
Для того, чтобы задать размер динамического массива используется функция Setlength. Она имеет два параметра. Первый – это сам массив, а второй — целое число, которое определяет размер массива.
Перед использованием Setlengthмассив имеет длину равную 0. Функцию Setlengthможно использовать и несколько раз.Проверить длину массива можно при помощи функции length.
Пример задания длины массива:
Ввод:var a: array of integer;
begin
writeln(‘Length1: ‘, length(a));
Setlength(a, 2);
writeln(‘Length2: ‘, length(a));
Setlength(a, 4);
writeln(‘Length3: ‘, length(a));
end.
Вывод:Length1: 0
Length2: 2
Length3: 4
Источник: http://welcome4u.ru/languages/pascal/dinamicheskie-massivy
Ввод массива в Паскале с клавиатуры.
Ввод массива в Паскале с клавиатуры.
programMas_Read_Task;//Ввод массива в Паскале с клавиатурыvari:word;// задаем размерность массива. Индекс массива 1 по 10// тип элементов массива Integeri_MasNum:array[1..10]ofinteger;begin//заполяем массивReadln(i_MasNum[i]);// ввод i- го элемента производится с клавиатуры//завершение работы программыWriteLn(‘Нажмите <Enter>, чтобы выйти.’);ReadLn();end.
Источник: http://info1c.com/?p=3273
Ссылки
- Программы для начинающих
- Сайт PascalABC.NET: Программы и алгоритмы для начинающих
Источник: http://pascalabc.net/wiki/index.php?title=Массивы._Тексты_программ
Одномерный числовой массив
Одномерные массивы называют линейными, так как элементы расположены друг за другом. Их можно представить в виде таблицы, в которой всего две строки. В первой перечислены индексы элементов, а во второй — значения элементов.
Одномерный массив. Обозначение элементов
Имя массива формируется по тем же правилам, что и имя любой другой переменной в программе. Границы индексов задают при описании массива в квадратных скобках. Удобнее задавать начальный индекс равный единице. Конечный индекс определяется условием задачи и численно равен размеру массива — количеству элементов. Числовые массивы могут содержать целые и действительные числа. Тип элементов указывается в описании. Смотрите рисунок выше.
Источник: http://infouch.ru/odnomernye-massivy-v-paskale/
Индексация в динамических массивах и использование статических массивов
Динамические массивы индексируются с нуля — это эффективно. В качестве индексов в динамических массивах могут выступать только целые.
Статические массивы тем не менее иногда удобно использовать — в задачах, где индексы либо символьные, либо по-существу начинаются не с нуля. Например, для подсчёта количества слов на каждую букву может использоваться стаический массив
Заполнение статических массивов — увы — производится в цикле. Кроме того, они не помнят свою длину и передача таких массивов в качестве параметров подпрограмм связана с техническими сложностями 40-летней давности, не нужными начинающим.
Источник: http://pascalabcnet.github.io/school_arrays.html
Циклы по массиву
Для обработки элементов массива используются следующие циклы:
- Цикл for по индексам (если требуется менять элементв или нужна информация об индексах)
for var i:=0 to a.Length—1 do a[i] *= 2;
- Цикл foreach по элементам (если индексы не видны и мы не меняем массив)
var sum := 0;foreach var x in a do sum += x;
- Цикл foreach по индексам
foreach var i in a.Indices do a[i] += 2;
- Цикл foreach по диапазону индексов
var (K,L) := ReadInteger2;foreach var i in K..L do a[i] := 777;
Пример. Найти количество чётных элементов, стоящих на чётных местах
Источник: http://pascalabcnet.github.io/school_arrays.html
Двумерные и многомерные массивы
Размерность массивом может быть разной.
Двумерные хранилища и многомерные – это наборы, в которых хранятся переменные во втором или n-м измерении, имеющие n * m мест хранения.
Размерные матрицы Mutli, включая 2-мерный набор, объявляются с использованием нескольких квадратных скобок, расположенных рядом друг с другом, или с использованием запятых с квадратными скобками в качестве альтернативы.
Двумерный массив можно рассматривать как прямоугольную сетку с двумя индексами, один из которых задает строку, а другой – столбец.
Например, календарь, подобный тому, что представлен на рисунке, можно рассматривать как двумерную таблицу, имеющую строки, известные как недели, и столбцы, известные как дни. Тем не менее, календарь так же можно рассматривать как набор массивов: месяц – это массив недель, а неделя – дней.
В Паскале эта декларация записывается как единый блок:
TYPE DayType = INTEGER;
DayNames = (Sun, Mon, Tue, Wed, Thu, Fri, Sat);
WeekType = ARRAY [DayNames] OF DayType;
MonthType = ARRAY [1..6] OF WeekType;
Тип MonthType также может быть записан как:
TYPE MonthType = ARRAY [1..6] OF
ARRAY [DayNames] OF DayType;
Можно записать с использованием ярлыка, как:
Тип MonthType = ARRAY [1..6, DayNames] OF DayType;
DayNames = (Вс,Пн,Вт,Ср,Чт,Пт,Сб);
WeekType = ARRAY [DayNames] OF DayType;
MonthType = ARRAY [1..6] OF WeekType;
Другой пример двумерного массива в Pascal:
Источник: http://nauka.club/informatika/massivy-v-paskale.html
Примеры работы с динамическими массивами
Ввод массива
С клавиатуры динамический массив вводится почти так, как и статический. Первый индекс такого массива всегда равен 0. Поэтому начальное значение счётчика итераций в цикле для ввода должно быть равно нулю.
Пример ввода массива:
var c: array of integer;
n, i: integer;
begin
read(n); // вводим длину с клавиатуры
SetLength(c,n); // задаём длину массива
fori := 0 to n-1 do
read(c[i]); // вводим n элементов массива
end.
Вывод массива
На экран массив выводится подобно статическому, но нужно не забывать, что первый его индекс равен нулю:
var c: array of integer;
i: integer;
begin
SetLength(c, 5); // задаём длину
fori := 0 to 4 do
c[i] := 1; // заполняем массив единицами
fori := 0 to 4 do
write(c[i], ‘ ‘); // выводим элементы через пробел
end.
Источник: http://welcome4u.ru/languages/pascal/dinamicheskie-massivy
Изменение размера динамического массива
Если в процессе работы программы требуется чтобы динамический массив менял свой размер, то следует … пользоваться типом List!Это — динамический массив с возможностью эффективного измненения размера и рядом дополнительных методов. Основным является методы Add — добавить в конец:
Для первоначального заполнения списков List используется короткая фунеция Lst:
При необходимости список List можно преобразовать к динамическому массиву, вызвав метод .ToArray:
Большинство методов, которые имеются в массивах, есть и в списках List. Поэтому выбор типа List или array of для контейнера при решении задач определяется тем, будет ли данный контейнер расширяться по ходу работы программы.
Источник: http://pascalabcnet.github.io/school_arrays.html