Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_na_ekzamen_OAiP (1).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
71.77 Кб
Скачать

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;

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