В версии 7.0 Turbo Pascal используются две новые процедуры break и continue. Процедура break позволяет досрочно выйти из цикла, не дожидаясь условия выхода. Процедура continue позволяет начать новую итерацию цикла, даже если предыдущая не завершена.
Структурированные типы данных определяют наборы однотипных или разнотипных компонентов. Типы компонентов образуются из других типов данных.
В Паскале существуют:
- тип – массив;
- тип – запись;
- тип – множество;
- тип – файл.
В Турбо Паскале существуют ещё два структурированных типа:
- тип- строка string
} разновидности массива
- тип- строка Pchar.
Массив
ОпределениеТип массив представляет собой фиксированное количество упорядоченных однотипных компонент, снабжённых индексами.
Массив может быть одномерным и многомерным. Для задания используется зарезервированное слово array of. После array указывается тип индекса (ов) компонент в квадратных скобках и далее после слова of -тип самих компонентов.
type
<имя типа> = array [<тип индексов>] of <тип компонентов>;
type
arr = array [1..3] of real;
matrix = array [1..3,1..2] of integer;
После ввода (объявления) типа массива затем объявляются (задаются) по необходимости переменные или типизированные константы этого типа.
1 способ задания типа массива
type
mas = array [1..100] of integer;
var
M1: mas;
2 способ задания типа массива
var
M1: array [1..100] of integer;
Размерность типа может быть любой.
var
matr: array [1..3, 1..2, 0..1] of integer;
Компоненты тоже могут быть любого типа, только тип индексов должен быть обязательно порядковый и не longint. В большинстве случаев используются диапазоны.
var
a,b: array [1..10] of real;
Глубина вложенности массивов (размерность) произвольная. Количество элементов в списке индексных типов не ограничено. Суммарная же длина внутреннего представления любого представления не может быть больше 65520 байт.
В памяти ЭВМ элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим быстрее меняется самый правый индекс массива.
var
a: array [1..2, 1..2] of byte;
begin
a[1,1]:=1;
a[2,1]:=2; 1 3
a[1,2]:=3; 2 4
a[2,2]:=4;
end.
В памяти друг за другом будут последовательно друг за другом расположены байты со значениями a[1,1]=1; a[2,1]=2; a[1,2]=3; a[2,2]=4.
Основные характеристики массивов
- размерность массива может быть любой;
- компоненты массива могут быть любого типа, в том числе структурированного;
- индекс(ы) могут быть любого порядкового типа, кроме типа longint и integer.
Константы – массивы
При задании значений константе-массиву компоненты указываются в круглых скобках, разделяются запятыми. Если массив многомерный, то множество констант соответствующих каждому измерению, заключаются в дополнительные скобки и отделяются от соседнего множества запятыми. В результате образуются вложенные структуры множеств. Глубина вложения должна соответствовать количеству измерений (размерности) массива. Самые внутренние множества констант связываются с изменением самого правого индекса массива.
var
M1, M2 : arr;
mtr: matrix;
const
M3: arr = (1,2,3);
1 2
Mat: matrix = ((1,2), (3,4), (5,6)); 3 4
5 6
Типизированные константы
Пример
const
x: real = 0.1;
min : integer = 0;
max : integer = 10;
В качестве начального значения типизированной константы-массива используется список констант, отделённых друг от друга запятыми. Список заключается в круглые скобки.
Пример
type
arr = array [1..3] of real;
matrix = array [1..3,1..2] of integer;
const
M3: arr = (1,2,3);
1 2
Mat: matrix = ((1,2), (3,4), (5,6)); 3 4
5 6
Пример
type
colors = (white, red, black); {перечисляемый тип}
const
colstr : array [colors] of string[5] = (‘white’, ’red’, ‘black’);
vector : array [1..5] of byte = (0,0,0,0,0);
Нельзя:
mas: array [min..max] of real; {нельзя использовать типизированные
константы в качестве границ диапазона}
a,b,c: byte = 0; {нельзя использовать список идентификаторов}
var
name : string [22] = 'prog.pas'; {нельзя объявлять типизированную константу
в разделе переменных}
Значение массива-константы типа char (одномерные массивы символов (не string)) может быть задано в виде символьной строки соответствующей длины.
В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа.
Пример
var
a, b: array [1..5] of single;
begin
………………………
a:=b;
………………………
end.
Замечание
Тип single - один из 5 вещественных типов, 4 байта, диапазон: 1,5 ×10 -45 ¸3,4 ×10 38, 7-8 значащих цифр. Можно использовать в программах при наличии арифметического сопроцессора или включенном эмуляторе сопроцессора.
Эмуляция – имитация функционирования всей или части системы без потери функциональных возможностей или искажения получаемых результатов.
После выполнения этой операции присваивания пять элементов массива a получат те же значения, что и в массиве b.
Однако над массивами не определены операции отношения.
Нельзя
if a=b then ……
Сравнивать два массива можно поэлементно.
Пример
var
a, b : array [1..5] of single;
eq : boolean;
i : byte;
begin
……………….
eq:=true;
for i:=1 to 5 do
if a[i] <> b[i] then
eq:=false;
if eq then
……………….
end.
Замечание
Для массивов типа char можно использовать операции сравнения и объединения (конкатенации). Массивы можно использовать в операторах write и writeln.
Пример
const
a : array [1..5] of char = ‘aaaaa’;
b : array [1..3] of char = ‘bbb’;
………………………………………
if a>b then
writeln(a)
else
writeln(b);
………………………………………
Задача Дана квадратная матрица n*n, состоящая из натуральных чисел. Зеркально отразить её относительно горизонтальной оси симметрии. Вывести результаты на экран.
массив A
массив B
a11 a12 a13
a31 a32 a33
b11 b12 b13
a21 a22 a23
a21 a22 a23
b21 b22 b23
A31 a32 a33
a11 a12 a13
b31 b32 b33
индексы l,m
индексы i, j
Индексы столбцов после отражения не меняют своих значений j=m.
Индексы строк после отражения меняют свои значения i+l=n+1.
b[i,j] a[l,m] b32 a12
b[i,j] = a[n+1-l,j] b[3,2] = a[3+1-3,2]
const n=100;
var
a,b:array[1..n,1..n] of integer;
k,m,i,j:integer;
begin
write(‘введите размер матрицы M= ‘);
readln(m);
writeln(‘исходная матрица’);
k:=1;
for i:=1 to m do
for j:=1 to m do
begin
a[i,j]:=k;
k:=k+1;
if j<m then write(a[i,j]:4)
else writeln(a[i,j]:4)
end;
writeln(‘матрица после преобразования’);
for i:=1 to m do
for j:=1 to m do
begin
b[i,j]:=a[m+1-i,j];
if j<m then write(b[j,j]:4)
else writeln(b[i,j]:4)
end;
end.
Пояснение к решению задачи
- формируем программу с описанием переменных ;
- вводим размеры массива А и присваиваем значения его элементам;
- присваиваем значения элементам матрицы В и выводим их на экран;
- а,b – двумерные массивы;
- m – количество строк и столбцов массива;
- i,j – переменные цикла;
- k – вспомогательная переменная.
Пример Самые внутренние множества констант связываются с изменением самого правого индекса массива.
var
i,j,k,l:byte;
const
matr: array[1..3,1..5] of byte=
((0,1,2,3,4), (5,6,7,8,9), (10,11,12,13,14));
cube:array[0..1,0..1,0..2] of {integer} byte=
(((0,1,2),(3,4,5)),
((6,7,8),(9,10,11)));
mas4:array[0..1,0..1,0.. 1,0..1 ] of {word}byte=
((((0,1),(2,3)),
((4,5),(6,7))), (((8,9),(10,11)),
((12,13),(14,15))));
begin for i:=1 to 3 do begin for j:=1 to 5 do begin write(matr[i,j]:3);
write('matr[',i,j,']=', matr[i,j]);
end;
writeln;
end;
writeln;
for i:=0 to 1 do begin for j:=0 to 1 do begin for k:=0 to 2 do begin write(cube[i,j,k]:3);
write('cube[',i,j,k.']=', cube[i,j,k]);
end;
writeln;
end;
end; writeln;
for i:=0 to 1 do begin for j:=0 to 1 do begin for k:=0 to 1 do begin for 1:=0 to 1 do begin write(mas4[i,j,k,l]:3);