Урок из серии: «Язык программирования Паскаль»
На предыдущих уроках мы рассмотрели алгоритмы работы с элементами одномерного массива, в которых вы использовали данные из массива, но не изменяли его. На этом уроке вы научитесь вносить изменения в массив, заполнять новый массив по заданному правилу. Рассмотрим несколько типовых задач.
Изменение значений некоторых элементов
Задача 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; |
Работа с несколькими массивами
Пример 6. Даны два одномерных массива А и В. Найти их скалярное произведение.
Решение
Скалярным произведением двух векторов называется сумма произведений соответствующих координат. Координаты векторов можно хранить как одномерные массивы, тогда скалярное произведение можно вычислить по формуле:
a[1]*b[1] + a[2]*b[2] + … + a[n-1]*b[n-1] + a[n]*b[n],
где n — это количество элементов в массивах.
На входе у нас два параметра — два одномерных массива, на выходе один — число. В таком случае алгоритм можно оформить в виде функции.
Function Sp(a, b: myarray): Iongitn; {Функция для нахождения скалярного произведения двух векторов. a, b - координаты векторов (одномерные массивы). } Var i : Integer; s : Longint; Begin s:=0; For i:=1 To n Do s:=s + a[i]*b[i]; Sp:= s; End; |
На этом уроке мы познакомились с алгоритмами, в которых мы изменяли элементы одномерного массива, заполняли новые массивы по заданному правилу.
На следующем уроке рассмотрим алгоритм удаления элементов из одномерного массива.
До встречи на следующем уроке.
Отличная статья. Очень понравилось оформление: задача+алгоритм+решение (код на языке программирования!). Все супер! Спасибо. С большим удовольствием читала задачки и программки.
Вера, здравствуйте. Примите мои поздравления — Вы получили Кубок признания http://tam-horosho.ru/?p=233