- •Конспект лекций
- •1.4 Общая структура программы
- •1.5 Стандартные процедуры и функции
- •1.6 Процедуры ввода/вывода
- •2. Простые типы данных
- •2.1 Целые типы
- •2.2 Вещественные типы
- •2.3 Cимвольный тип данных
- •2.4 Логический тип данных.
- •2.5 Ограниченные типы
- •2.6 Перечислимые типы
- •2.7 Описание типов
- •2.8 Преобразование типов
- •2.9 Порядок вычисления выражений
- •3. Операторы языка Паскаль
- •3.1 Оператор присваивания
- •3.2 Составной оператор
- •3.3 Условный оператор
- •3.4 Оператор выбора case
- •3.5 Оператор цикла с параметром (цикл for)
- •3.6 Оператор цикла с предусловием (цикл while)
- •1 Вариант:
- •2 Вариант:
- •3 Вариант:
- •3.7 Оператор цикла с постусловием (цикл repeat)
- •3.8 Вложенные циклы
- •3.9 Оператор перехода goto
- •4. Массивы
- •4.2 Сортировка элементов массива
- •4.3 Многомерные массивы
- •5. Подпрограммы (процедуры и функции)
- •5.1 Процедуры
- •5.2 Функции
- •5.3 Области действия имен
- •5.4 Параметры процедур и функций
- •5.5 Побочные эффекты при использовании подпрограмм
- •5.6 Передача массивов в подпрограммы
- •5.7 Параметры-костанты
- •5.8 Массивы открытого типа
- •5.9 Рекурсия в подпрограммах
- •6. Строковый тип данных
- •6.1 Описание строк
- •6.2 Операции со строками
- •6.3 Процедуры и функции для работы со строками
- •7. Стандартные модули Турбо-Паскаля
- •7.1 Модули турбо3 и graph3
- •7.2 Модуль overlay
- •7.3 Модуль dos
- •7.4 Модуль system
- •7.5 Модуль printer
- •7.6 Модуль crt
- •7.7 Модуль graph
- •8. Записи
- •8.1 Определение записи
- •8.2 Оператор над записями
- •8.3 Вложенные записи
- •8.4 Массив записей
- •8.5 Записи с вариантами
- •9. Файлы
- •9.1 Определение файла
- •9.2 Процедуры и функции для работы с файлами
- •9.3 Нетипизированные файлы
- •10. Интегрированная среда Турбо Паскаля
- •10.1 Как начать работу с Турбо Паскалем
- •10.2 Ваша первая программа
4. Массивы
Массивы относятся к структурированным типам данных. В отличие от простых, структурированные типы определяют наборы однотипных или разнотипных компонент.
В Паскале существуют следующие структурированные типы:
Массивы
Записи
Множества
файлы
Одномерные массивы
Массив представляет собой фиксированное количество элементов одного и того же типа. Такой способ организации позволяет обозначать все значения этого типа одним именем, а для доступа к отдельным элементам массива использовать это имя и индекс (порядковый номер) необходимого элемента.
Например, пусть для решения какой-либо задачи требуется в программе выделить 7 ячеек памяти и занести в них начальные значения, равные нулю.
Как бы вы это сделали,
используя простые переменные: |
используя массив: |
Var a, b, c, d, e, g, h: integer; Begin a:=0; b:=0; c:=0 d:=0; e:=0; g:=0; h:=0; …
|
Var a: array [1..7] of integer; p:integer; Begin for p:=1 to 7 do a[p]:=0; … |
|
|
|
|
|
|
|
В памяти наш массив можно представить следующим образом:
a1, a2, a3, a4, a5, a6, a7
Описание массива
var <имя>: array [n1..n2] of <тип элементов>;
- одномерный массив, имеет один размер – количество элементов:
n1 – начальный индекс массива (порядковый номер 1-го элемента),
n2 – конечный индекс массива (порядковый номер последнего элемента),
<тип> - тип элементов массива.
Индексы задаются константами, обычно целого или символьного типа. Тип элементов массива может быть любой.
Пример 1:
var a: array [-2..5] of integer; {8 элементов целого типа}
var b: array [0..3] of integer; {4 элемента целого типа }
Доступ к элементам массива осуществляется указанием имени массива, за которым в квадратных скобках указывается значение индекса элемента: имя[индекс]
В качестве индекса можно использовать:
константы: а[5], b[38]
переменные: a[i], b[k]
выражения: a[i+1], b[2*i]
Элементы массива можно использовать везде, где допустимо использование простых переменных. Обычно при работе с массивами используют операторы цикла.
Необходимо следить за тем, чтобы индекс массива не выходил за диапазон, указанный при описании (типичная ошибка).
Пример 1.
var mas: array [1..10] of real;
i: integer;
begin
mas[11]:=0; {ошибка трансляции}
mas[1]:=1;
for i:=1 to 10 do при i=1 mas[2]: = mas[1]*2
mas [i+1]:=mas[i]*2; при i=2 mas[3] := mas[2]*2
………………………
{ошибка выполнения} при i=10 mas[11] := mas[10]*2
end.
Пример 2. Ввести с клавиатуры массив из 10 элементов и вычислить сумму элементов.
var a: array [0..9] of real;
s:real;
i:integer;
begin
writeln (‘Введите 10 элементов массива’);
for i:=0 to 9 do readln (a[i]);
s:=0;
for i:=0 to 9 do s:=s+a[i];
writeln (‘сумма=’, s);
end.
Пример 3: Ввести с клавиатуры массив положительных чисел (ввод закончить отрицательным числом). Определить максимальный элемент массива.
var m: array [1..1000] of real;
p, max: real;
i,n: integer;
begin
i:=1;
repeat
write(‘Введите ’,i,’ элемент’);
readln(p);
if p>0 then m[i]:=p;
i:=i+1;
until p<0;
n:=i-1;
max:=m[1];
for i:=1 to n do
if m[i]>max then max:=m[i];
writeln(‘max = ’, max);
end.
Пример 4: Сформировать массив из 50 случайных целых чисел, распечатать его и определить номер элемента, ближайшего к среднему арифметическому.
var b: array [1..50] of integer;
ras, s: real;
num, i: integer;
begin
randomize;
for i:= 1 to 50 do b[i]:=random(100);
for i:= 1 to 50 do write(b[i], ‘ ’);
s:=0;
for i:= 1 to 50 do s:=s+b[i];
s:=s/50;
num:=1;
ras:=abs(s-b[1]);
for i:=2 to 50 do
if abs(s-b[i])<ras then
begin
ras:=abs(s-b[i]);
num:=i;
end;
writeln(‘Среднее = ’,s,’ ближайший элемент b[’,num,’]=’,b[num]);
end.
Пример 5: Использование стандартных процедур BREAK и CONTINUE в операторах циклов. В массиве целых чисел найти первое отрицательное число и вывести его на экран.
const n=10;
var a: array [1..n] of integer;
i: integer;
yes: boolean;
begin
writeln(‘Введите элементы массива’);
for i:=1 to n do
begin
write(‘a[’,i,’]=’);
readln(a[i]);
end;
yes:=false;
for i:=1 to n do
begin
if a[i]>=0 then continue; { continue – возврат на заголовок цикла}
writeln(‘первое отрицательно число = ’, a[i]);
yes:=true;
break; { break – окончание выполнения цикла и переход к следующему оператору
программы, в данном примере – к условному оператору if }
end;
if not yes then writeln(‘Отрицательных чисел нет’);
end.