Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок из серии Pas ABC.doc
Скачиваний:
40
Добавлен:
17.08.2019
Размер:
694.78 Кб
Скачать

Изменение значений некоторых элементов

Задача 1. Заменить отрицательные элементы одномерного массива на противоположные по знаку. Решение.

Массив обходим один раз. Если встретятся отрицательные элементы, присвоим им новое значение, противоположное по знаку. Оформим алгоритм в виде процедуры. На входе и на выходе у нас один и тот же массив. На выходе некоторые его элементы могут быть изменены. Поэтому опишем его как выходной параметр (с ключевым словом var).

Procedure Zamena (Var m : MyArray;);

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

Var

i : integer;

Begin

for i := 1 to n do

if m[i] < 0

then

m[i] := -m[i];

End;

Задача 2. Прибавить к каждому элементу одномерного массива число 25.

Решение

Преобразуем предыдущую процедуру. Присвоим каждому элементу массива новое значение, увеличив старое значение на 25.

Procedure Zamena2 (Var m : MyArray;);

{Процедура увеличения всех элементов массива на 25.}

Var

i : integer;

Begin

for i := 1 to n do

m[i] := m[i] + 25;

End;

Задача 3. Если элемент массива чётный, то прибавить к нему первый элемент, если нечётный - прибавить последний. Первый и последний элементы не изменять.

Решение

Просматриваем все элементы массива со второго до предпоследнего.

Если элемент чётный (делиться на 2 без остатка), то увеличим его на значение первого элемента, иначе - на значение последнего элемента. На входе и на выходе у нас будет один и тот же массив. Описываем его как выходной параметр. Процедура будет иметь вид:

Procedure Zamena3(Var m: myarray);

{Процедура изменения элементов массива по заданному правилу}

Var i : Integer;

Begin

For i:=2 To n-1 Do

If (i<>1) And (i<>n)

Then If m[i] Mod 2=0

Then m[i]:=m[i]+m[1]

Else m[i]:=m[i]+m[n];

End;

Заполнение массива по заданному правилу

Правила заполнения массивов могут быть разными. Рассмотрим два примера.

Задача 4. Даны два одномерных массива одинаковой размерности. Получить третий массив такой же размерности, каждый элемент которого равен сумме соответствующих элементов данных массивов.

Решение

Пусть даны два массива А и В, состоящие из пяти элементов. Создадим новый массив С, заполнив его по заданному правилу. Первому элементу массива присвоим сумму первых элементов массивов А и В, второму - сумму вторых элементов, и т. д.

i

1

2

3

4

5

A

16

4

9

10

11

B

5

8

7

14

6

C

21

12

16

24

17

Оформим алгоритм решения этой задачи в виде процедуры.

Procedure Sum_Array(a, b: myarray; Var c: myarray);

{Процедура заполнения массива-суммы двух одномерных массивов.

А, B - исходные массивы.С - результирующий массив.

}

Var i : Integer;

Begin

For i:=1 To n Do c[i]:=a[i]+b[i];

End;

Пример 5. Дан первый член арифметической прогрессии и её разность. Найти её первые n членов.

Решение

Пусть a1 - это первый член арифметической прогрессии, а p - это её разность. Тогда i-й член можно найти по формуле: а[i] = a[i-1] + p.

Опишем процедуру, которой передаём эти два параметра. Результатом выполнения будет являеться массив. Первый элемент его равен первому члену прогрессии, второй - второму и так далее.

Procedure Progress (a1, p: Integer; Var a: myarray);

{Заполнение массива первыми n-членами арифметической прогрессии.

a1 - первый член арифметической прогрессии;p- разность арифметической прогрессии.

}

Var i : Integer;

Begin

a[1]:=a1; For i:=2 To n Do a[i]:=a[i-1]+p

End;