Что такое регулярный тип данных

Что такое регулярный тип данных? Что такое массив?

Обсуждение вопроса:

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

Массив — переменная величина регулярного типа.

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

Массивом в Паскале называют переменную величину регулярного типа.

В общем случае массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип.

Массив – это составной объект, образованный из элементов (компонент) одного и того же типа. Такой тип данных применяется в программировании для обозначения объектов, аналогичных числовым последовательностям в математике, где сразу целая группа чисел обозначается одним именем (чаще всего буквой), а для обращения к каждому отдельному числу данной последовательности используются различные индексы (номера элементов).

Название регулярный тип (или ряды) массивы получили за то, что в них объединены однотипные (логически однородные) элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.

Источник

Что такое регулярный тип данных

Массивы.

Массив — это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип.

Название регулярный тип (или ряды) массивы получили за то, что в них объединены однотипные (логически однородные) элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.

В качестве элементов массива можно использовать и любой другой ранее описанный тип, поэтому вполне правомерно существование массивов записей, массивов указателей, массивов строк и т.д. Элементами массива могут быть данные любого типа, включая структурированные. Тип элементов массива называется базовым. Особенностью языка Паскаль является то, что число элементов фиксируется при описании и в процессе выполнения программы не меняется.

Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Индекс представляет собой выражение любого порядкового типа. Чтобы обратиться к элементу массива, надо указать его базовое имя и индекс (номер).

Описание массива.

Массивы можно описать 2-мя способами: через описание типа массива и простое описание:

Описание через тип:

Простое описание:

Общий вид описания массива

— правильный идентификатор;
ARRAY, OF — служебные слова (массив, из);
— список из одного или нескольких индексных типов, разделённых запятыми;
— любой тип Паскаля.

Если в форме описания массива задан один индекс, массив называется одномерным, если два индекса — двумерным, если n индексов — n-мерным. Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный — понятию прямоугольной таблицы (матрицы).

Примеры описаний массивов разной размерности:

В место числа, точной ссылки на элемент, можно подставить переменную (математическое выражение) порядкового типа, значение которой(ого) не выходят за пределы диапазона массива.

Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, использоваться в операторах FOR, WHILE, REPEAT, CASE, входить в качестве параметров в операторы READ, READLN, WRITE, WRITELN; им можно присваивать любые значения, соответствующие их типу.

Заполнение массива

Инициализация (присваивание начальных значений) массива заключается в присваивании каждому элементу массива значения, соответствующего базовому типу. Наиболее эффективно эта операция выполняется с помощью оператора FOR.

Заполнение одномерного массива:

Заполнение двумерного массива (использование вложенного цикла):

Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод значений производится поэлементно. Значения элементам массива можно присвоить с помощью оператора присваивания, однако чаще всего они вводятся с помощью оператора READ или READLN с использованием оператора цикла FOR (см. выше).

Операции над массивами

Для работы с массивом как единым целым используется идентификатор массива без указания индекса в квадратных скобках. Массив может участвовать только в операциях отношения «равно», «не равно» и в операторе присвоения. Массивы, участвующие в этих действиях, должны быть идентичны по структуре, т.е. иметь одинаковые типы индексов и одинаковые типы компонентов. Например, если массивы описаны так

то применение к ним допустимых операций даст следующий результат:

A = B True, если значение каждого элемента массива А равно соответствующему значению элемента массива В;
A <> B True, если хотя бы одно значение элемента массива А не равно значению соответствующего элемента массива В;
A := B Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменны.

Если массивы описаны следующим образом

то к ним не применимы перечисленные выше операции (т.е. возникнет ошибка при попытке их использования).

Источник

Урок 20. Описание массива

Урок из серии: «Язык программирования Паскаль»

В предыдущем уроке мы ввели понятие структурированных данных.

Изучение данных структурированного типа начнем с регулярного типа данных — массивов.

Название регулярный тип массивы получили за то, что в них объединены однотипные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.

Массив — структурированный тип данных, состоящий из фиксированного числа однотипных элементов, объединённых одним именем, где каждый элемент имеет свой номер (индекс).

Когда возникает необходимость использовать массивы?

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

Мы будем вынуждены ввести 30 имен переменных, что, естественно, очень неудобно. Как быть?

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

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

Определим еще несколько понятий, связанных с массивами.

Элемент массива — отдельная переменная, входящая в массив.

Размерность массива — количество индексов, по которым определяется положение элемента в массиве.

Индексы элемента массива — совокупность номеров, определяющих его местоположение в массиве.

Чтобы лучше понять, что такое размерность массива, сравним их с таблицами.

Одномерный массив сравним с таблицей, состоящей из одной строки. Для определения положения элемента в строке достаточно знать порядковый номер ячейки, в которой находится элемент. Поэтому в одномерном массиве один индекс — порядковый номер элемента.

Двумерный массив — прямоугольная таблица. Для определения положения элемента в прямоугольной таблице нужно знать порядковый номер строки и столбца, на пересечении которых находится ячейка. Поэтому в двумерном массиве — два индекса, номер строки и номер столбца.

И так, потребность использовать массив возникает всякий раз, когда при решении задачи приходится иметь дело с большим, но конечным количеством однотипных данных, которые необходимо хранить в памяти.

Переходим к изучению массивов.

Описание массива

Прежде чем использовать массив в программе, его необходимо предварительно описать. Описать массив — значит выделить в памяти место, достаточное для хранения всех его элементов. Для этого надо указать имя массива и длину массива — количество элементов в нем. В большинстве случаев при задании размеров массива используются диапазоны изменения значений индекса.

При описании массива используется зарезервированное слово array (массив), указываются диапазон изменения для индексов и тип компонентов массива.

Способ 1. Описание массива с определением типа.

Способ 2. Описание массива без определения типа.

Двумерный массив описывается так же, как и одномерный. Различие состоит в том, что вы должны указать диапазон для двух индексов массива — положение каждого элемента массива A[i, j] определяется номером строки и номером столбца.

Например, описание двумерного массива натуральных чисел размера N x М может быть задано следующей строкой:

Вернемся к нашей задаче. У нас 30 целых чисел, выделим для них 30 ячеек, объединим их общим именем А.

A Имя А — это общее имя для всех элементов. Элементы массива — это числа, их 30
1 25
2 64
3 27
29 53
30 89

Опишем одномерный массив из 30 целых чисел для этой задачи следующим образом:

Напомним, что раздел типов начинается со служебного слова type, после этого идет имя нового типа и его описание. Между именем типа и его описанием ставится знак «равно» (в разделе переменных между именем переменной и её описанием ставится двоеточие).

myarray — это имя нового типа;

array — служебное слово (в переводе с английского означает «массив», «набор»);

[1..30] — в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива, в этом примере первый элемент имеет номер 1, а последний — номер 30;

Of — служебное слово (в переводе с английского — «из»);

Integer — тип всех элементов массива.

Так как каждый элемент имеет свой номер, то к каждому элементу можно обращаться непосредственно. Для того чтобы получить доступ к i-му элементу этого массива, необходимо записать: A[i] — сначала имя массива, а в квадратных скобках указывается номер элемента, к которому обращаемся, — i.

Например, обращаемся к первому элементу массива А — А[1], а к пятому — А[5].

Тот же самый массив может быть задан и при определении соответствующей переменной:

Особенность языка Паскаль

Особенностью языка Паскаль является то, что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Это считается недостатком языка, так как не во всех программах можно заранее предсказать необходимый размер массива (который может определяться в зависимости от тех или иных условий, возникающих в процессе исполнения).

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

На следующем уроке мы рассмотрим основные алгоритмы, которые используются при обработке данных, хранящихся в массиве.

Источник

Что такое регулярный тип данных

Урок 48. Массивы. Описание массивов на Паскале. Правила организации ввода и вывода значений массива

Массивы

Массивом в Паскале называют переменную величину регулярного типа.

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

Описание массивов. Переменная регулярного типа описывается в разделе описания переменных в следующей форме:

Var : array[ ] of

В данном случае квадратные скобки — это обязательные символы, которые называются индексными скобками. Чаще всего в качестве типа индекса употребляется ограниченный тип. Например, массив вещественных чисел, хранящий 12 значений среднемесячных температур в течение года, опишется так:

Var Т: array[1..12] of Real;

Описание массива определяет, во-первых, размещение массива в памяти, во-вторых, правила его дальнейшего употребления в программе.

Элемент массива идентифицируется в виде переменной с индексами:

Тип индекса может быть любым скалярным порядковым типом, кроме Integer. Например, в программе могут присутствовать следующие описания:

Var cod: array[Char] of 1..100; L: array[Boolean] of Char;

В такой программе допустимы следующие обозначения элементов массивов:

cod[‘x’]; Lftrue]; cod[chr(65) ] ; L[a>0].

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

Type Index = (А, В, С, D) ;

Var class_10: array[Index] of Byte;

И если, например, элемент class 10 [А] равен 35, то это означает, что в 10А классе 35 человек. Такое индексирование улучшает наглядность программы.

Часто структурному типу присваивается имя в разделе типов, которое затем используется в разделе описания переменных.

Type Masl = array [1..100] of Integer;

Mas2 = array [-10.. 10] of Char;

Var Num: Masl; Sim: Mas2;

До сих пор речь шла об одномерных массивах, в которых типы элементов скалярные.

Многомерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов).

В качестве примера рассмотрим таблицу с информацией о среднемесячных температурах за 10 лет, например с 2001 по 2010 год. Очевидно, для этого удобна прямоугольная (двумерная) таблица, в которой столбцы соответствуют месяцам, а строки — годам.

Для обработки такой таблицы в программе следует описать массив:

Var Тabl: array[2001..2010] of array[1.. 12] of Real;

Вот примеры обозначения некоторых элементов этого массива:

Однако чаще употребляется другая, эквивалентная форма обозначения элементов двумерного массива:

Переменная ТаЫ [2 001] обозначает всю первую строку таблицы, т. е. весь массив температур за 2001 год. Другим эквивалентным вариантом приведенному выше описанию является следующее:

Туре Month = array [1..12] of Real;

Year = array [2001..2010] of Month;

Var Tabl: Year;

Наиболее краткий вариант описания данного массива такой:

Var Tabl: array [2001.. 2010, 1..12] of Real;

Продолжая по аналогии, можно определить трехмерный массив как одномерный массив, у которого элементами являются двумерные массивы. Вот пример описания трехмерного массива:

Var A: array[1..10, 1..20, 1..30] of Integer;

Это массив, состоящий из 10 • 20 • 30 = 6000 целых чисел и занимающий в памяти 6000 • 2 = 12 000 байтов. В Паскале нет ограничения сверху на размерность массива. Однако в каждой конкретной реализации Паскаля ограничивается объем памяти, выделяемый под массивы. В Турбо Паскале это ограничение равно 64 килобайтам.

По аналогии с математикой одномерные числовые массивы часто называют векторами, а двумерные — матрицами.

В Паскале не допускается употребление динамических массивов, т. е. таких, размер которых определяется в процессе выполнения. Изменение размеров массива происходит через изменение в тексте программы и повторную компиляцию. Для упрощения таких изменений удобно определять индексные параметры в разделе констант:

Const Imax = 10; Jmax = 20;

Var Mas: array[1..Imax, l..Jmax] of Integer;

Теперь для изменения размеров массива Mas и всех операторов программы, связанных с этими размерами, достаточно отредактировать только одну строку в программе — раздел констант.

Действия над массивом как единым целым. Такие действия допустимы лишь в двух случаях:

• присваивание значений одного массива другому;
• применение к массивам операций отношения «равно», «не равно».

В обоих случаях массивы должны иметь одинаковые типы (тип индексов и тип элементов).

Пример 1

Var Р, Q: array [1.. 5, 1..10] of Real;

При выполнении операции присваивания

все элементы массива Р станут равными соответствующим элементам массива Q.

Пример 2

Как уже отмечалось, в многомерных массивах переменная с индексом может обозначать целый массив. Тогда если массив ТаЫ описан так:

Type mas = array [1..12] of Real;

Var Таbl: array [2001.. 2010] of mas;

и в нем требуется данные за 2009 год сделать такими же, как за 2001 год (девятой строке присвоить значение первой строки), то это можно сделать одним присваиванием:

Таbl [2009] : =Таbl [2001]

А если нужно поменять местами значения этих строк, то это делается через третью переменную того же типа:

Р:=Таbl [2009] ; Таbl [2009] : =Таbl [2001 ] ; Таbl [2001] :=Р; где Р описана так:

Var Р: mas;

Ввод и вывод массивов производятся покомпонентно. Вот примеры ввода с клавиатуры значений одномерного и двумерного массивов:

For I: =1 То 12 Do

For I:=l To Imax Do

For J:=l To Jmax Do

Здесь каждое следующее значение будет вводиться с новой строки. Для построчного ввода используется оператор Read.

Аналогично в цикле по индексной переменной организуется вывод значений массива на экран. Например:

For I: =1 То 12 Do Write (Т [ I ] : 8 : 4 ) ;

Напомним, что модификатор формата 8:4 означает вывод числа в формате с фиксированной точкой в 8 позициях, из которых в 4 последних позициях размещается дробная часть.

Следующий фрагмент программы организует построчный вывод матрицы на экран:

После вывода очередной строки матрицы оператор Writeln без параметров переведет курсор в начало новой строки. Следует заметить, что в последнем примере матрица на экране будет получена в естественной форме прямоугольной таблицы, если Jmax не превышает 12 (подумайте почему).

Вопросы и задания

1. Что такое регулярный тип данных? Что такое массив?

2. Какие типы допустимы для индексов массива?

3. Как в Паскале трактуется многомерный массив?

4. Какие действия можно выполнять над массивом как единым целым?

5. Дан вектор , i = 1, …, 50. Составьте программу ввода значений и вычисления длины этого вектора по следующей формуле:

Источник

Массивы

Сайт: Электронные курсы ТПУ
Курс: Информационные технологии 1
Книга: Массивы
Напечатано:: Гость
Дата: Понедельник, 13 Декабрь 2021, 10:35

Оглавление

Массивы

Все простые типы данных, рассматриваемые ранее, имеют два характерных свойства: неделимость и упорядоченность их значений. Составные, или структурированные типы данных задают множество сложных значений с одним общим именем. Существует несколько методов структурирования, каждый из которых отличается способом обращения к отдельным компонентам. В данном учебном пособии будут рассмотрены только два структурированных типа данных: регулярный тип (массивы) и строковый тип.

С понятием «массив» приходится встречаться при решении научно-технических, экономических задач обработки большого количества однотипных значений.

Таким образом, массив – это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип, и обозначаемая одним именем.

Название регулярный тип массивы получили за то, что в них объединены однородные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.

Массиву присваивается имя, посредством которого можно ссылаться на него как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует совокупность номеров (индексов), определяющих его место в общей последовательности. Индексы представляют собой выражения простого типа. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента:

Чтобы использовать массивы в программах, нужно их описать в разделе описаний. Тип массива не является стандартным, поэтому его необходимо описать в части описания типов. Описание типа массива определяет его имя, размер массива и тип данных:

type =array[ ] of ;

Далее, в перечне переменных указывается имя массива и через двоеточие указывается имя нового типа данных:

Массив может быть описан и без представления типа в разделе описания типов данных:

var :array[ ] of ;

Этот вариант описания короче, но в некоторых случаях, когда описание переменных типа массив встречается несколько раз в различных частях программы, необходимо описание этого типа отдельно, как приведено в первом варианте.

Чаще всего в качестве типа индекса используется интервальный целый тип.

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]);

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],‘ ’);

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;

writeln(‘t-макс.= ’,max,‘ в ’,n, ‘день’);

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]);

2.2. Вывод матрицы на экран

Вывести на экран матрицу 5 ´ 6 можно следующим образом:

for i:=1 to 5 do

begin

for j:=1 to 6 do

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;

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);

writeln;

for i:=1 to 10 do

s:=s*b[i,11-i];

writeln(‘Произведение = ’,s);

Пример 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]);

for i:=1 to 5 do

begin

for j:=1 to 5 do

write(b[i,j]:4);

writeln;

for i:=1 to 5 do

begin

s:=b[i,1]; b[i,1]:=b[i,5]; b[i,5]:=s;

writeln;

writeln(‘Изменённая матрица’);

Источник

Читайте также:  Что такое общеизвестный товарный знак
Информационный сайт