
- •Var a: array [1..10] of array [1.. 20] of real;
- •Var a: array [1..10, 1..20] of real;
- •14 Алгоритмы сортировки одномерных массивов
- •15 Функции
- •Описание и вызов процедур и функций
- •15 Процедуры
- •18. Механизм передачи параметров
- •23Стандартные процедуры и функции создания графических примитивов
- •26. Графические процедуры и функции: стандартные алгоритмы циклической прорисовки графических примитивов
- •27. Графические процедуры и функции: стандартные алгоритмы прорисовки движущегося рисунка
- •24. Записи
- •5.2. Доступ к файлам
- •5.3. Текстовые файлы
1-8. . Одномерные массивы
Таким образом, массив – это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип, и обозначаемая одним именем.
Название регулярный тип массивы получили за то, что в них объединены однородные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элементы в массиве.
Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует совокупность номеров (индексов), определяющих его место в общей последовательности. Индексы представляют собой выражения простого типа. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента: <имя массива>[<индекс>].
Описание массива определяет его имя, размер массива и тип данных. Общий вид описания массива:
Type <имя нового типа данных>=array[<тип индекса>] of <тип компонентов>;
Далее, в перечне переменных указывается имя массива, и через двоеточие указывается имя нового типа данных. Массив может быть описан и без представления типа в разделе описания типов данных:
Var <имя массива>: array [<тип индекса>] of <тип компонентов>;
Чаще всего в качестве типа индекса используется интервальный целый тип.
Линейный (одномерный) массив – массив, у которого в описании задан только один индекс, если два индекса – то это двумерный массив и т.д. Одномерные массивы часто называют векторами, т.е. они представляют собой конечную последовательность пронумерованных элементов.
Присваивание начальных значений (заполнение массива) заключается в присваивании каждому элементу массива некоторого значения, заданного типа. Наиболее эффективно эта операция осуществляется при помощи оператора for. Ввод данных может осуществляться : с клавиатуры, при помощи различных формул, в том числе и датчика случайных чисел.
Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу и т.д.
Алгоритм решения задач с использованием массивов:
Описание массива
Заполнение массива
Вывод (распечатка) массива
Выполнение условий задачи
Вывод результата
Пример 1. Задан одномерный массив В(10), заполненный произвольным образом. Подсчитать количество элементов массива, больших заданного числа k.
Program massiv;
Var b:array [1..10] of integer;
I, k, s : integer;
Begin
S:=0;
For i:=1 to 10 do
Begin
Write('Введите', i, '-й элемент массива ');
Readln (B[i]);
Write(b[i], ' ');
End;
Write('Введите число k');
Readln(k);
For i:=1 to 10 do
If b[i]>k then s:=s+1;
Write('Количество элементов', s);
End.
Заполнение одномерного массива по формуле
Пусть одномерный массив заполнен элементами арифметической прогрессии, первый элемент которой равен 2, а каждый последующий увеличивается на 3.
Var a: array[1..5] of integer; i: byte;
…
Begin
…
a[1]:=2
For i:=2 To 5 Do
a[i]:=a[i-1]+3;
Ввод элементов массива с клавиатуры
Var a: array[1..5] of integer; i: byte;
…
Begin
WriteLn(‘Введите элементы одномерного массива:’)
For i:=1 To 5 Do
ReadLn(a[i]);
9-10Двумерные массивы
Двумерный массив – структура данных, хранящая прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен. В Паскале двумерный массив представляется массивом, элементами которого являются одномерные массивы. Два следующих описания двумерных массивов тождественны:
Var a: array [1..10] of array [1.. 20] of real;
Var a: array [1..10, 1..20] of real;
Чаще всего при описании двумерного массива используют второй способ. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индексов (первый индекс – номер строки, второй индекс – номер столбца). Все действия над элементами двумерного массива идентичны действиям над элементами линейного массива. Только для инициализации двумерного массива используется вложенный цикл for.
Например, For i:= 1 to 10 do
For j:= 1 to 20 do
A[i, j] := 0;
При организации вложенных (сложных) циклов необходимо учитывать:
Все правила, присущие простому циклу, должны соблюдаться
Имена параметров для циклов, вложенных один в другой, должны быть различными
Внутренний цикл должен полностью входить в тело внешнего цикла. Пересечение циклов недопустимо
Пример 1. Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.
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], ‘ ‘);
writeln
end;
end.
Пример 2. Задан двумерный массив В(10, 10), заполненный случайными числами из
[-10,10]. Найти и вывести на экран те элементы массива, которые больше заданного числа k.
Program massiv;
Uses crt; {очистка экрана}
Var b: array[1..10, 1..10] of integer; i, j, k :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], ‘ ‘);
end;
writeln;
end;
write(‘Введите число k’);
readln (k);
For i:=1 to 10 do
For j:=1 to 10 do
If b[i, j] >k then write (b[i, j]);
End.
11.13 Пример программы ввода двумерного массива Паскаля с клавиатуры
type
matrix= array [1..5, 1..10] of integer;
var
a, : matrix;
i, j: integer; { индексы массива }
begin
for i :=1 to 5 do {цикл для перебора всех строк}
for j :=1 to 10 do {перебор всех элементов строки по столбцам}
readln ( a [ i , j ]); {ввод с клавиатуры элемента, стоящего в i -й строке и j -м столбце}
Двумерный массив Паскаля можно заполнить случайным образом, т.е. использовать функцию random (N), а также присвоить каждому элементу матрицы значение некоторого выражения. Способ заполнения двумерного массива Паскаля выбирается в зависимости от поставленной задачи, но в любом случае должен быть определен каждый элемент в каждой строке и каждом столбце.
12
Заполнение двумерного массива по формуле
Program xx;
var
a:array[2..9,2..9] of integer;
i,j:integer;
begin
for i:=2 to 9 do
for j:=2 to 9 do
a[i,j]:=i*j;
for i:=2 to 9 do
begin
for j:=2 to 9 do
write(a[i,j]:3);
writeln;
end;
end.
14 Алгоритмы сортировки одномерных массивов
Сортировка - один из наиболее распространённых процессов современной обработки данных. Сортировкой называется распределение элементов массива всоответствии с определёнными правилами. Например, сортировка массива по возрастанию или убыванию его элементов. Существует несколько методов сортировки, рассмотрим обменную сортировку (метод пузырька), сортировку вставками и сортироаку выбором.
Обменная сортировка (метод "пузырька").
Алгоритм начинается со сравнения 1-го и 2-го элементов массива.
Если 2-й элемент меньше 1-го, то они меняются местами. Этот процесс повторяется для каждой пары соседних элементов массива, пока все N элементов не будут обработаны. За один "проход" массива самый большой элемент встанет на старшее (N-е) место. Далее алгоритм повторяется, причем на р-м "проходе" первые (N-p) элементов сравниваются со своими правыми соседями. Если на очередном "проходе" перестановок не было, то алгоритм свою работу закончил. Таким образом, самые "легкие" элементы впроцессе исполнения алгоритма постепенно "всплывают".
Пример: Отсортировать по возрастанию 20 элементов одномерного массива. Ввод массива осуществить любым способом.
program BubbleSort;
M : array[1..n] of Real;
Var B : Real; i,j : Integer;
begin
n: = 20;
Writeln ('Введите элементы массива:');
for i:=1 to n do Read (M[i]);
for j:=n downto 2 do
for i:=1 to j-1 do
if M[i] > M[i+1] then begin B := M[i];M[i] := M[i+1];M[i+1] := B end;
Writeln ('Отсортированный массив:');
for i:=1 to n do Write (M[i]:8:2);
Writeln;
end.
Сортировка вставками.
Вначале упорядочиваются два первых элемента массива. Они образуют начальное упорядоченное множество S. Далее на каждом шаге берется следующий по порядку элемент и вставляется вуже упорядоченное множество S так, чтобы слева от него все элементы были не больше, а справа - не меньше обрабатываемого. Место для вставки текущего элемента вупорядоченное множество S ищется методом деления пополам. Алгоритм сортировки заканчивает свою работу, когда элемент, стоящий на N-м месте, будет обработан. (Именно таким образом игроки вбридж обычно упорядочивают свои карты).
Сортировка выбором.
Находится наибольший элемент вмассиве из N элементов (пусть он имеет номер р) и меняется местами с элементом, стоящим на N-м месте, при условии, что N<>p. Из оставшихся (N-1) элементов снова выделяется наибольший и меняется местами с элементом, стоящим на (N-1)-м месте и т. д. Алгоритм заканчивает свою работу, когда элементы, стоящие на 1-м и 2-м местах в массиве, будут упорядочены (для этого понадобится N-1 "проход" алгоритма). Аналогично данный алгоритм можно применять и к наименьшим элементам.
Пример: отсортировать массив А(1..N) по возрастанию.
program sort);
var a : array[1..n] of Real;
var i, j, min, vsp : integer;
begin
for i := 1 to n - 1 do
begin
min:=i;
for j := i+1 to n do
if a[j]<a[min] then min := j;
vsp:=a[i]; a[i]:=a[min]; a[min]:=vsp;
end;
end;