Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
strukt_tipy_massivy_odnomernye_massivy.doc
Скачиваний:
3
Добавлен:
04.09.2019
Размер:
912.38 Кб
Скачать

15

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

Как уже отмечалось, любые данные (т.е. константы, переменные, значения функций и т.д.) характеризуются в алгоритмическом языке ПАСКАЛЬ своими типами.

Тип данных определяет:

> во-первых: формат представления данных в памяти компьютера;

> во-вторых: множество допустимых значений, которые может принимать принадлежащая к выбранному типу переменная или константа;

> в-третьих: множество допустимых операций, применимых к этому типу.

Так, например, для хранения переменных типа INTEGER компилятор выделяет два байта в ОЗУ, что обеспечивает размеще­ние в памяти целочисленных значений в диапазоне от — 32768 (=-2*15) до 32767 (=2*15—Выходящие за этот диапазон целые числа, а также вещественные числа храниться в выделенном в данном случае объеме памяти не могут. Благодаря таким ограничениям возможна ситуация переполнения (overflow).

ПАСКАЛЬ язык программирования, характерной особенностью которого является "сильно" разветвленная структура типов. В языке ПАСКАЛЬ все данные, используемые программой, должны принадлежать к какому-либо заранее известному типу данных — стандартному или пользовательскому (тип данных, предопределяемый программистом).

Объявление пользовательских типов данных происходит в разделе описаний, в подразделе нестандартных типов TYPE. Вслед за зарезервированным словом TYPE следуют разделенные знаком равенства имя нового пользовательского типа и конструкция, определяющая этот тип:

TYPE

Day = ('Понедельник','Вторник','Среда');

Month - ('Май','Июнь','Июль', 'Август' );

В данном случае пользовательский тип Day определен тремя элементами (слова 'Понедельник', 'Вторник', 'Среда'), относящимися к стандартному типу STRING —строка.

Примечание:

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

Типы данных в языке программирования ПАСКАЛЬ делятся на несколько основных классов:

  • • простые типы,

  • • структурированные типы,

  • ссылочные типы и другие.

К простым типам в языке ПАСКАЛЬ относятся:

  • целочисленный типы,

  • логический тип,

  • символьный тип,

  • вещественный типы.

Интервальный тип

При описании переменных в программе, как правило, известно, что они будут использованы для представления подмножества значений некоторого типа. Это подмножество значений в языке программирования ПАСКАЛЬ может быть определено с помощью, так называемого интервального типа данных.

Интервальный тип данных определяется посредством задания подмножества значений одного из ранее определенных (в программе) типов. В языке ПАСКАЛЬ диапазон значений переменной интервального типа задается с помощью любого простого типа данных за исключением вещественного.

При задании диапазона указывается наименьшее и наибольшее значения, которые может принимать переменная соответствующего типа (обе константы должны быть одного типа). Так, с помощью объявления:

God: 1900..2020.

Указывается, что переменная God может принимать целые значения в интервале целых чисел [1900; 2020]. Такая декларация типа указывает компилятору, что для переменной этого типа допустимы в качестве значений только числа из указанного интервала. Тем самым в программе могут быть автоматически организованы проверки корректности операций присвоения для этих переменных. При выполнении программы попытка присвоить такой переменной значение, не входящее в интервал допустимых значений, квалифицируется как ошибка и приводит к прекращению работы программы и выдаче соответствующего сообщения.

Массивы

К структурированным типам данных относятся массивы (ARRAY). Массив объединяет элементы одного типа данных. Более формально массив можно определить как одномерную (последовательную) упорядоченную совокупность элементов некоторого типа, которые адресуются с помощью некоторого индекса. Индексная переменная, служащая для указания отдельного элемента массива, должна быть простого типа (например, типа BYTE или INTEGER).

Наряду с термином "массив", часто можно встретить термины "матрица", "таблица" или "вектор". Суть всех этих терминов одна и та же.

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

Наряду с одномерными массивами в алгоритмическом языке ПАСКАЛЬ используются также двухмерные массивы данных, в которых координата по горизонтали соответствует номеру строки, а координата по вертикали —номеру столбца на пересечении которых находится элемент.

При этом размер массива в языке ПАСКАЛЬ ограничивается только объемом рабочей памяти компьютера.

Одномерные массивы

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

В алгоритмическом языке ПАСКАЛЬ Вы можете объявить одномерный массив следующим образом:

Var Имя_массива : array [нач_индекс .. Кон_ивдекс] of Тип_данных;

При объявлении массива необходимо определить, каким образом (в каких пределах) производится нумерация элементов, указав начальное и конечное значение [начальный_индекс .. конечный_индекс] для индексной переменной (например 1 .. 5 или 2 .. 6). Тем самым указывается и число элементов в массиве —его размер. Кроме того, необходимо указать идентификатор (имя) массива и тип данных элементов массива.

В следующих примерах иллюстрируются возможности языка ПАСКАЛЬ по описанию массивов различного типа:

VAR Matrix: ARRAY[1..5] OF REAL;

VAR Index: ARRAY[2..7] OF INTEGER;

VAR Name: ARRAY[1..5] OF STRING[25] ;

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

В первом примере объявлена переменная-массив Matrix, состоящая из пяти элементов типа REAL, доступ к которым осуществляется помощью индекса, значение которого лежит в интервале от 1 до 5. Элемент массива Index имеет тип INTEGER. Индекс для этого массива может изменяться в интервале от 2 до 7. Массив Name отличается от массива Matrix только тем, что его элементами являются строки, которые могут иметь длину до 25 символов включительно.

Доступ к элементам массива

В отличие от переменных типа STRING, массивы не могут обрабатываться целиком. Но имеется возможность получить доступ к каждому элементу-ячейке массива. Это выполняется, как и в случае строковых переменных, путем указания значения индекса в квадратных скобках. Например с помощью оператора Index[2]:= 34;

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

FOR i:=2 TO 7 DO Index[i] := 0;

C помощью данного оператора цикла всем элементам массива Index присваивается значение 0.

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

FOR i:=1 TO 5 DO

BEGIN

Write('Введите ' ,I, ‘-е имя:’);

Read (Name[i]) ;

END;

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

Задачи

Сейчас мы рассмотрим четыре задачи и программы, написанные на алгоритмическом языке ПАСКАЛЬ.

Задача 1. Ввод и вычисление суммы элементов одномерного массива (вектора).

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

С труктурная схема задачи 1 имеет вид

Программа задачи:

PROGRAM MATRIXJL;

CONST N = 10;

VAR i, Sum : INTEGER;

Matrix : ARRAY [1 .. N] OF INTEGER;

BEGIN

Writeln('ВВЕДИТЕ ЭЛЕМЕНТЫ МАССИВА ');

FOR i:= 1 TO N DO

Read(Matrix[i]);

Writeln('Контрольный вывод элементов массива ');

FOR i:= 1 TO N DO

Write (Matrix[i]:7,' );

Writeln;

Sum := 0;

FOR i:= 1 TO N DO Sum := Sum + Matrix[i] ;

Writeln('СУММА 10 ЭЛЕМЕНТОВ МАССИВА MATRIX РАВНА ', Sum);

END.

Результаты выполнения программы:

Контрольный вывод элементов массива

5 7 9 2 45 89 64 -87 45 12

СУММА 10 ЭЛЕМЕНТОВ МАССИВА MATRIX РАВНА 191

Задача 2. Последовательный поиск в массиве

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

Структурная схема задачи 2

Программа задачи2:

PROGRAM MATRIX_2;

CONST N = 25;

VAR i, S, R : INTEGER;

Matrix : ARRAY [1 .. N] OF INTEGER;

BEGIN

FOR i := 1 TO N DO

BEGIN

Write ('ВВЕДИТЕ ',i,'-Й ЭЛЕМЕНТ МАССИВА ');

Read(Matrix[i]);

END;

Writeln('Контрольный вывод элементов МАССИВА ');

FOR i := 1 TO N DO

Write(Matrix[i],' ');

Writeln;

Write('ВВЕДИТЕ, ПОЖАЛУЙСТА, ЧИСЛО, ПОИСК КОТОРОГО,',' В МАССИВЕ ВЫ ХОТИТЕ ОСУЩЕСТВИТЬ ');

Read(S);

Writeln('Контрольный вывод введенного числа для сравнения ');

Writeln(S);

R := 0;

FOR i := 1 TO N DO

BEGIN

IF Matrix[i] = S THEN

BEGIN

R := R + 1;

WriteLn('ОБНАРУЖЕНО ',R, '-E ВХОЖДЕНИЕ ЧИСЛА', ' ',S,' В МАССИВ MATRIX В ПОЗИЦИИ ' , i) ;

END;

END;

IF R<> 0 THEN WriteLn('ИТОГО ЧИСЛО ',S,' ВСТРЕЧАЕТСЯ В МАССИВЕ', 'MATRIX ',R,' РАЗ')

ELSE WriteLn('ЧИСЛО ',S,' HE ВСТРЕЧАЕТСЯ В МАССИВЕ',

'MATRIX НИ РАЗУ');

END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]