Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методички по информатике / Конспект лекций (Delphi).pdf
Скачиваний:
63
Добавлен:
27.05.2015
Размер:
1.2 Mб
Скачать

9

выход из цикла происходит в случае, если условие не выполнено, т.е. цикл можно трактовать как “пока выполняется <условие> выполнять тело цикла”;

в качестве тела цикла выступает один оператор, поэтому при необходимости выполнения нескольких действий требуется использование составного оператора;

в цикле нет “параметра цикла”;

в теле цикла должно быть изменение величин, входящих в условие, иначе

может получиться “вечный цикл”. Пример (xk/k < a {поиск k}):

var

k : integer; x,a,p : real;

begin

a := ???;

x := ???;

k := 1; p := x;

while p/k>=a do begin

p :=p*x; inc(k);

end; <вывод k>;

end;

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

Массив представляет собой фиксированное количество упорядоченных однотипных компонент, снабженных индексами. Формат определения массива:

<идентификатор1>[, <идентификатор2>…] : array [<тип индекса>] of <тип компонента>;

Компоненты массива могут быть любого типа, индексы могут быть любого порядкового типа и записываются в формате

<начальный индекс> … <конечный индекс>

В качестве начального и конечного индексов не могут использоваться переменные (но могут использоваться константы).

Для обращения к компоненту массива требуется указать идентификатор массива с указанием в квадратных скобках индекса компонента.

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

10

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

Пример (для пояснения массив 3 7 2 8 1 4 9):

procedure TForm1.Button1Click(Sender: TObject); var

A,B : array[1..100] of integer; C : array[1..100] of integer;

n,i,j,k,TempA,MinA,MaxIndexA,SumA : integer; key : boolean;

const

D : array[1..10] of integer = (1,2,3,4,5,6,7,8,9,10); begin

n := ???;

for i := 1 to n do A[i] := ???;

B:= A; {Допустимо}

C:= A; {Недопустимо}

{Нахождение суммы элементов массива} SumA := 0;

for i := 1 to n do SumA := SumA+A[i];

<вывод SumA>;

{Нахождение минимального элемента массива} MinA := A[1];

for i := 2 to n do if MinA>A[i] then

MinA := A[i]; <вывод MinA>;

{Нахождение индекса максимального элемента массива} MaxIndexA := 1;

for i := 2 to n do

if A[MaxIndexA]<A[i] then MaxIndexA := i;

<вывод MaxIndexA>;

{Нахождение минимального из положительных чисел массива} key := False;

for i := 1 to n do if A[i]>0 then

if not key then begin

MinA := A[i]; key := True;

end else

if MinA>A[i] then MinA := A[i];

if key then

11

<вывод MinA> else

<вывод 'Положительных элементов нет'>; {Сортировка массива по возрастанию}

for i:= 1 to n-1 do begin

k := i;

for j := i+1 to n do if A[k]>A[j] then

k := j; TempA := A[i]; A[i] := A[k]; A[k] := TempA;

end;

for i := 1 to n do <вывод A[i]>;

{Сортировка массива по убыванию} i := 1;

while i<n do

if A[i]<A[i+1] then begin

TempA := A[i];

A[i] := A[i+1];

A[i+1] := TempA; if i>1 then

dec(i) else

inc(i);

end else

inc(i);

for i := 1 to n do <вывод A[i]>;

end;

1.9 Многомерные массивы

Многомерные массивы отличаются от одномерных заданием нескольких типов индексов вместо одного, например:

A : array[1..2,1..10,1..5] of integer;

При обращении к компоненту многомерному массиву требуется указать через запятую индекс компонента по каждой из размерностей. Размерность массива может быть любой.

При обработке многомерных массивов, в большинстве случаев, требуется применение нескольких вложенных циклов, количество которых определяется размерностью массива.

12

Пример 1 (нахождение минимального элемента массива, подсчет сумм элементов массива по строкам и столбцам, вывод в табличной форме):

procedure TForm1.Button1Click(Sender: TObject); var

A : array[1..10,1..10] of integer; SumCol,SumRow : array[1..10] of integer; n,m,i,j,MinA : integer;

C : array[1..3,1..3] of integer = ((1,2,3),(4,5,6),(7,8,9));

begin

 

n := ???;

 

m := ???;

 

for i := 1

to n do

for j :=

1 to m do

A[i,j]

:= ???;

{Нахождение минимального элемента массива} MinA := A[1,1];

for i

:= 1

to

n do {Обратить внимание на начало с 1 а не с 2}

for

j :=

1 to m do

if MinA>A[i,j] then

 

MinA := A[i,j];

<вывод MinA>;

 

{Подсчет сумм

элементов по строкам}

for i := 1

to

n do

begin

SumRow[i] := 0; for j := 1 to m do

SumRow[i] := SumRow[i]+A[i,j];

end;

for i := 1 to n do <вывод SumRow[i]>;

{Подсчет сумм элементов по столбцам} for i := 1 to m do

begin

SumCol[i] := 0; for j := 1 to n do

SumCol[i] := SumCol[i]+A[j,i];

end;

for i := 1 to m do <вывод SumCol[i]>;

end;

Пример 2 (нахождение наиболее близко расположенных городов, заданных своими координатами):

procedure TForm1.Button1Click(Sender: TObject); var

A : array[1..100,1..2] of integer; n,i,j,n1,n2 : integer;

MinA,Temp : real; begin

n := ???;

for i := 1 to n do