Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
met_2011.doc
Скачиваний:
95
Добавлен:
13.11.2019
Размер:
2.46 Mб
Скачать

4.3.1. Объявление массива

Тип массива или сам массив определяются соответственно в разделе типов (Type) или переменных (Var) с помощью следующей конструкции:

Array [описание индексов] Of <тип элемента массива>;

Например:

Const

N_Max = 100;

Type

Mas = Array [1 .. N_Max] Of тип элементов массива;

Var

A: Mas;

i, n : Byte; {i – порядковый номер (индекс) элемента в массиве А;

n – количество элементов массива А}

Примеры описания массивов:

Const

N_Max=20; // Задание максимального значения размерности массива

Type

Mas =Array[1..N] Of Byte; // Описание типа одномерного массива

Var

a: Mas; // А – массив типа Mas;

b:Array[1..10] Of Integer; // b – массив из десяти целых чисел

y:Array[1..5,1..10] Of Char; // y– двумерный массив символьного типа

Элементы массивов могут использоваться в выражениях так же, как и обычные переменные, например:

F:=2*a[3]+a[b[4]+1]*3;

a[n]:=1+sqrt(abs(a[n-1]));

Для доступа к элементу массива необходимо указать его имя и индекс (порядковый номер элемента в массиве): имя_массива [индекс]

4.3.2. Примеры программ

Пример 1. Подсчитать сумму и количество отрицательных и положительных элементов массива.

Const

N_Max = 100;

Type

Mas = Array [1 .. N_Max] Of Extended;

Var

a: Mas;

i, n, K_Pol, K_Otr : Byte; // K_Pol – количество положительных элементов,

Sum_P, Sum_O : Extended; // K_Otr – количество отрицательных элементов

// Sum_P – сумма положительных элементов,

// Sum_O – сумма отрицательных элементов

Begin

// Ввод элементов массива

Sum_P := 0; // Инициализация переменных

K_Pol := 0;

Sum_O := 0;

K_Otr := 0;

For i :=1 To n Do Begin // Подсчет сумм и количества

If A [i] > 0 Then Begin // Если элемент положительный, то

Inc (K_Pol); // подсчитываем количество

Sum_P := Sum_P + A[i]; // и сумму

End;

If A [i] < 0 Then Begin // Если элемент отрицательный, то

Inc (K_Otr); // подсчитываем количество

Sum_O := Sum_O + A[i]; // и сумму

End;

End; { For i }

// Вывод результатов

End;

Пример 2. Изменить значения элементов массива по заданному правилу:

  • если значение элемента массива четное и положительное, то увеличить его в 2 раза,

  • если кратно 3 – уменьшить на 10.

Const

N_Max = 100;

Type

Mas = Array [1 .. N_Max] Of Integer ;

Var

A: Mas;

i, n : Byte;

Begin

// Ввод элементов массива

For i :=1 To n Do Begin // Изменение значений элементов

If (A [i] > 0) And (Not Odd (A[i])) Then A[i]:= A[i] *2;

If A [i] Mod 3 = 0 Then A[i]:= A[i] - 10;

End; { For i }

// Вывод результатов

End;

Пример 3. Записать положительные элементы массива А в массив В, а отрицательные элементы – в массив С, не меняя порядка следования элементов.

i_b :=0; // i_bколичество элементов массива B,

i_c :=0; // i_c количество элементов массива C

For i :=1 to n Do Begin // Формирование новых массивов

If A [i] > 0 Then Begin

Inc (i_b); // Увеличиваем индекс

B [i_b] := A [i]; // Записываем в массив B

End;

If A [i] < 0 Then Begin

Inc (i_c); // Увеличиваем индекс

C [i_c] := A [i]; // Записываем в массив

End;

End; { For }

Пример 4. Упорядочить элементы массива по возрастанию их значений, т.е. для всех элементов массива должно выполняться условие: ai < ai+1.

For k :=1 To n-1 Do // k – номер просмотра массива

For i :=1 To n-k Do // Просмотр элементов массива

If A [i] > A [i+1] Then Begin // Сравнение элементов массива

Tmp := A [i]; // Перестановка элементов

A [i]:=A[i+1]; // ai и ai+1, если они

A [i+1] := Tmp; // стоят неправильно

End;

Пример 5. Удалить из одномерного массива все отрицательные элементы.

Для решения данной задачи необходимо выполнить следующие действия:

  • Найти индекс удаляемого элемента.

  • Сдвинуть элементы, стоящие после него, в начало на один индекс.

  • Уменьшить размерность на 1.

i :=1;

While i<=n Do Begin

If В [i] < 0 Then Begin {1}// Если найден отрицательный элемент, то

For j := i DownTo n-1 Do {2} // сдвинуть все элементы, стоящие после

В [j] := В [j+1]; // удаляемого, на одну позицию

Dec (n); {3}// Уменьшить размер массива

Dec (i); // Возврат к предыдущему индексу

End;

Inc(i);

End;

Пример 6. Циклический сдвиг элементов массива на k позиций

  • влево:

k := k Mod n;

For j :=1 To k Do Begin

Tmp := A [1];

For i :=1 To n-1 Do

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

A [n] := Tmp;

End;

  • вправо:

k := k Mod n;

For j :=1 To k Do Begin

Tmp := A [n];

For i :=n DownTo 2 Do

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

A [1] := Tmp;

End;

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