28631

Структурный тип - Массив

Лекция

Информатика, кибернетика и программирование

Понятие массива в Паскале. Описание массивов и доступ к элементам массива. Понятие массива в Паскале. Идея массива состоит в том чтобы объединить в одно целое фиксированное количество элементов одного и того же типа.

Русский

2013-08-20

48.5 KB

6 чел.

Лекция 10: Структурный тип - Массив.

1. Понятие массива в Паскале.

2. Описание массивов и доступ к элементам массива..

3. Обработка массивов.

4. Пример работы с массивом.

1. Понятие массива в Паскале.

Массив является одним из основных структурных типов Паскаля, широко применяемым в практике программирования. Идея массива состоит в том, чтобы объединить в одно целое фиксированное количество элементов одного и того же типа. Например, массив результатов измерений, массив данных о ежедневном расписании и др. Без использования массива в этих и многих других случаях пришлось бы описывать большое число переменных для представления данных, что делает нереальной обработку таких данных. Массив дает удобный способ представления и обработки массовых однородных данных.

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

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

2. Описание массивов и доступ к элементам массива.

Прежде чем использовать массив, его следует описать в разделе описаний программы. Общая форма описания массива имеет вид:

type <имя типа-массива> = array [ < тип индекса > ] of  < тип  элементов>;

где: <имя типа-массива> - имя, выбираемое программистом.

      < тип индекса > - любой порядковый тип (кроме longint) или тип-диапазон.

      < тип элементов > - любой тип Турбо Паскаля.

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

type measure = array [ 1..16] of  real; {тип -массив измерений}

var m1,m2: measure; {переменные-массивы измерений}

Кроме переменных допускается также описание типизированных констант-массивов, в котором элементы-константы перечисляются через запятую. Например:

сonst vect: array [1..8] of 0..9 = (0,0,0,0,1,2,3,4);

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

Двумерный массив (матрица) может быть описан в виде:

type <имя типа-массива>= array [<тип индекса1>] of  array [<тип индекса2>] of <тип >;

Однако в Паскале допускается более компактная форма таких описаний, в которой вместо одного типа индекса используется список из нескольких типов индексов.

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

type <имя типа-массива>=array[<тип индекса1,тип индекса2>]of <тип компонент>;

Например: type matr= array [ 1..16,1..8] of real; {тип - матрица 16х8}

       var mt1,mt2: matr; {переменные типа matr}

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

<имя переменной-массива > [<индексное выражение > ];

где : <индексное выражение > - выражение типа индекса (в частности, индексным выражением может быть переменная).

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

<имя переменной-массива >[<индексное выражение1 >,<индексное выражение2 >, ...];

Например: m1[ j ]  {значение j- элемента  массива m1}

       mt2[j+3, k]  {значение элемента (j+3)-строки, k-столбца матрицы mt2}

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

3. Обработка массивов.

Для массивов допустим оператор присваивания в форме:

<переменная1-массив> := < переменная2 -массив>;

где: левая и правая части содержат переменные массивов только одного типа.

Такие операторы присваивания могут использоваться для копирования одного массива в другой. Однако над массивами не определены отношения <,>,<=,>=,=.<>. Кроме того, в Турбо Паскале нельзя использовать выражения над массивами.

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

<переменная-массив> [<индексная переменная>] := < выражение >;

где: < выражение > должно быть согласовано по типу с типом элементов массива.
Индексированные имена могут входить в состав выражений соответствующего т
ипа также как простые имена.

Важным средством обработки массивов являются циклы. Хотя для обработки массивов можно использовать описанные ранее итерационные циклы, обычно более удобными являются циклы с параметром.

В Турбо Паскале имеются две разновидности циклов с параметром (циклов for):

for <параметр> := < нач.зн.> to <кон.зн.> do <оператор тела цикла>;

for <параметр> := <кон.зн.> downto <нач.зн.> do <оператор тела цикла>;

Параметром цикла for может быть переменная любого порядкового типа.

< нач.зн.> и  <кон.зн.> - выражения того же типа, что и параметр, определяющие границы изменения параметра в данном цикле.

<оператор тела цикла> - любой оператор Турбо Паскаля.

Цикл с параметром (первая его разновидность) выполняется следующим образом: вначале вычисляются < нач.зн.> и < кон.зн.> и осуществляется присваивание параметру цикла < нач.зн.>. Проверяется, не превышает ли параметр значения <кон.зн.> (т.е. выполняется сравнение <параметр> <  <кон.зн.>), и если не превышает, то выполняется тело цикла, после чего параметру присваивается следующее по порядку значение  (т.е. succ(< нач.зн.>)) и цикл повторяется. Если параметр превысил <кон.зн.>, цикл завершается (осуществляется переход к следующему за циклом оператору программы).

Таким образом, цикл for повторяет выполнение оператора тела цикла несколько раз с разными значениями параметра от начального значения до конечного значения.

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

При использовании цикла for желательно, чтобы параметр цикла, выражения  <нач.зн.> и  <кон.зн.> не изменяли свои значения при выполнении тела цикла ( а также <нач.зн.> и  <кон.зн.> не имели зависимости от параметра цикла). Это гарантирует завершение цикла за конечное число шагов и ясную для понимания структуру цикла.

Хотя часто цикл for используют с целочисленным параметром, полезно помнить, что он может быть использован с параметром любого порядкового типа, что придает ему значительно большую гибкость, чем имеют циклы с параметром в других языках (например, в Фортране).  

Проиллюстрируем использование цикла for на примерах.

4. Примеры работы с массивом.

Приведём вначале простую программу на Турбо Паскале, иллюстрирующую обе разновидности цикла for , а также описание массива и создание массива.

program Lat_alphabet;

{Создание массива латинских букв и вывод лат. алфавита}

type m_let = array [1..26] of 'a'..'z';

var letters:m_let; let:char;j:byte;

begin writeln('Латинский алфавит:'); j:=1;

         for let:='a' to 'z' do begin letters[j]:=let; inc(j) end;

         for j:=1 to 26 do write(letters[j], upcase(letters[j]),' ');writeln;

         for j:=26 downto 1 do write(letters[j], upcase(letters[j]),' ');writeln;

end.

Следующая программа на Турбо Паскале иллюстрирует работу с одномерным и двумерным массивом, а также с функцией random (генератором псевдослучайных чисел):

          program test_random;{Тест распределения псевдослучайных чисел}

          uses CRT;

          type dec=0..9; {тип - десятичная цифра}

         var ms:array [dec] of integer; {измерительный массив} i,j:integer;

               matr:array [1..20,1..30] of dec;{генерируемая матрица цифр}

           begin TextBackground(cyan);TextColor(white);ClrScr;

                   writeln(' Матрица пс цифр:');randomize;

       for j:=0 to 9 do {инициация измерительного массива нулями}  ms[j]:=0;

       {заполнение матрицы пс цифрами}

                 for i:=1 to 20 do  for j:=1 to 30 do

             begin matr[i,j]:=random(10); write(matr[i,j],' ');

                   if j=30 then writeln;

         {коррекция элемента массива ms}

                   ms[matr[i,j]]:=ms[matr[i,j]]+1;

             end;  writeln(' Количество пс цифр по значениям:');

                       writeln('   0  1   2   3   4   5   6   7   8   9  ');

   { вывод массива ms}  for i:=0 to 9 do write(ms[i]:4);writeln;

         end { test_random}.


 

А также другие работы, которые могут Вас заинтересовать

40325. ЭПИЛЕПСИЯ 40.5 KB
  Следует регулярно контролировать состояние кожи лимфатических узлов печени селезенки исследовать неврологический статус речь состояние сознания темп психических процессов каждые 3 6 мес следует делать анализы крови мочи выполнять ЭЭГ не реже одного раза в полгода Вальпроаты ламотриджин карбомазепин. Среди них значительное место занимают пароксизмально возникающие сумеречные расстройства сознания способные сопровождаться как сравнительно простыми действиями больных так и сложными состояниями с внешне целесообразными действиями...
40326. Эпилептический статус 25.5 KB
  Постоянно повторяющиеся припадки вызывают нарушение ликвородинамики вторичную гипертермию нарастающий отек мозга с нарушением дыхания и сердечной деятельности. Гипотермия мозга и гемосорбция.
40327. Рассмотрение особенностей тарифов на транспортировку нефти и газа 560 KB
  Федеральная служба по тарифам (ФСТ России) — федеральный орган исполнительной власти Российской Федерации, уполномоченный осуществлять правовое регулирование в сфере государственного регулирования цен (тарифов) на товары (услуги) в соответствии с законодательством
40328. Алкогольный галлюциноз 34 KB
  По течению выделяют 3 основные формы галлюциноза острый протрагированный и хронический. Острый галлюциноз. Галлюциноз развивается на фоне похмельных расстройств сопровождаемых тревогой параноидной настроенностью и вегетативносоматическими симптомами а у женщин также на фоне депрессии.
40329. Алкогольный делирий 37 KB
  Гипнагогический делирий ограничивается многочисленными яркими в ряде случаев сценоподобными сновидениями или зрительными галлюцинациями при засыпании и закрывании глаз. Гипнагогический делирий фантастического содержания называют гипнагогическим ониризмом. Делирий без делирия возникает остро.
40330. Антидепрессанты 28 KB
  Механизм действия: неселективное угнетение обратного захвата НА и серотонина 5HT нервными окончаниями соответствующих структур мозга обратимое ингибирование моноаминооксидазы МАО пиразидол. Селективные ингибиторы обратного захвата НА и серотонина СИОЗНС. Механизм действия: избирательное угнетение обратного захвата НА и серотонина нервными окончаниями. Селективные ингибиторы обратного захвата серотонина СИОЗС.
40331. Аутизм 33.5 KB
  Важно знать что ребенок с данным синдром показывает свою привязанность к матери и другим людям которые о нем заботятся. Однако способ при помощи которого ребенок с аутизмом выражает свою любовь и привязанность сильно отличается от способов нормальных детей. Если ребенок мало общается с другими детьми и своими родителями то врачи не всегда могут определить диагноз аутизма. Обычно ребенку с аутизмом трудно установить какиелибо взаимоотношения со сверстниками и чаще всего ребенок остается изолированным от общества.
40332. Бред 25 KB
  Три группы фабул: 1бред преследованиясобственно преследование воздействияим кто то управляет отравления материального ущерба отношенияслучайная улыбка прохожего лай собакопасность ревности. 2депрессивный бредтоска подавленность стыд безысходность разочарование. 3бред величиябогатства изобретательства реформаторства высокого происхождения любовный.
40333. Военная экспертиза 30 KB
  В новом положении впервые узаконена военноврачебная комиссия ВВК и определены ее функции введен термин медицинское освидетельствование под которым понимается изучение и оценка состояния здоровья и физического развития граждан на момент освидетельствования в целях определения их годности к военной службе обучению службе по военноучетной специальности службе в органах внутренних дел а также разрешение других предусмотренных Положением вопросов с вынесением письменного заключения. Установлено 5 категорий годности к воинской службе:...