Работа с несколькими массивами
Пример Даны два одномерных массива − А и В. Найти их скалярное произведение. Решение Скалярным произведением двух массивов одинаковой размерности называется сумма произведений соответствующих элементов: a[1]*b[1]+a[2]*b[2]+...+a[n-1]* *b[n-1]+...+а[n]*b[n], где n − количество элементов в массивах. Program Example_102; Function Sp (a, b: myarray): longint; Var i: Integer; s: Longint; Begin s:=0; For i:=1 To n Do s:=s+a[i]*b[i]; Sp:=s; End; Удаление элементов из одномерного Массива Пример 1 Удалить из массива, в котором все элементы различны, максимальный элемент. После удаления максимального элемента массив "уплотнить", сдвинув все следующие за ним элементы влево. Последнему (самому правому) элементу массива присвоить 0. Решение Для того чтобы решить данную задачу, необходимо: ¨ найти номер максимального элемента k; ¨ сдвинуть все элементы начиная с k−го на один элемент влево; ¨ последнему элементу присвоить значение 0. Рассмотрим решение задачи на конкретном примере. Пусть дан одномерный массив, состоящий из 10 элементов: 6, 3, 4, 7, 11, 2, 13, 8, 1, 5. Номер максимального элемента равен 7 (k=7), то есть начиная с 7−го элемента будем сдвигать элементы на один влево: 7−му элементу присвоим значение 8−го, 8−му присвоим значение 9−го, а 9−му присвоим значение 10−го, на этом сдвиг заканчивается. Таким образом, сдвиг начинается с k−го элемента и заканчивается (n-1)−м (где n − количество элементов в массиве). После этого последнему элементу присвоим 0, тогда массив примет вид: 6, 3, 4, 7, 11, 2, 8, 1, 5, 0. Примечание. При удалении элемента размерность массива не изменяется. Составим программу для удаления максимального элемента из одномерного массива, в ней воспользуемся двумя уже знакомыми процедурами инициализации массива и вывода его на печать. Первая заполняет массив случайными числами, а вторая выводит на печать этот массив. Чтобы последний 0 не выводился на экран, мы модифицируем процедуру вывода Print и будем ей передавать не только массив, но и количество элементов, которые надо вывести, начиная с первого. Program Example_103; Const n=30; dd=51; Type myarray = Array[l..n] Of Integer; Var A: myarray; k:Integer; {k - номер максимального элемента} Procedure Init2 (Var m:myarray); {Процедура заполнения (инициализации) массива случайными числами} ... Procedure Print1 (n1: Integer; m: myarray); {Процедура вывода (распечатки) массива} Var i: Integer; Begin For i:=1 To n1 Do Write(m[i]:5); Writeln; End; Function Maximum (m: myarray): Integer; Var i, max, maxi: Integer; Begin max:=-32768; {Минимальное значение типа Integer равно -32 768} For i:=1 To n Do {Просмотр всех элементов массива} If m[i]>max Then {Если данный элемент больше максимального элемента, найденного среди первых i-1 элементов, то} Begin max:=m[i]; {Новое значение максимального элемента} maxi:=i; {Номер максимального элемента в массиве} End; Maximum:=maxi; End; Procedure Delete (k1: Integer; Var m: myarray); Var i: Integer; Begin{Сдвиг элементов на один влево} For i:=k1 To n-1 Do m[i]:=m[i+1]; {i-му элементу присваиваем значение (i+1)-го} m[n]:=0; {Последний элемент равен 0} End; Begin Randomize; {Инициализация генератора случайных чисел} Init2(A); {Заполнение массива А} Print1(n, A); {Вывод заполненного массива А} k:=Maximum(A); {Поиск номера максимального элемента} Delete(k, A); {Удаление элемента с номером k} Print1(n-1, А); {Вывод нового массива А} Readln; End. Пример 2 Решить предыдущую задачу, считая, что максимальный элемент может встречаться несколько раз. Решение Когда необходимо удалять несколько элементов, то это лучше всего делать с конца массива, так как иначе нужно будет снова возвращаться к элементу, который только что удаляли (эта проблема возникает в том случае, когда подряд идут два максимальных элемента: если первый удалить, то на его место снова встанет максимальный элемент). Просматривать массив с конца можно при помощи цикла с параметром, который имеет следующий вид: For i:=В Downto A Do <тело цикла>
Значение переменной i будет уменьшаться на единицу начиная от В до А. Кроме того, номер максимального элемента запоминать не будем, а просмотрим массив с конца, и если элемент имеет максимальное значение, то удалим его, при этом значение счетчика k будем увеличивать на 1. Для решения этой задачи надо изменить функцию Maximum, сейчас нам нужен не номер, а значение максимального элемента. В программе это будет выглядеть так: Program Example_104; Const n=30; dd=51; Type myarray=Array[1..n] Of Integer; Var A: myarray; m, k, i: Integer; {m - значение максимального элемента k - количество удаленных элементов} Procedure Init2 (Var m:myarray); {Процедура заполнения (инициализации) массива случайными числами} ... Procedure Print1 (n1: Integer; m: myarray); {Процедура вывода (распечатки) массива} ... Function Maximum (m: myarray): Integer; Var i, max: Integer; Begin max:=-32768; For i:=1 To n Do {Просмотр всех элементов массива} If m[i]>max Then max:=m[i]; {Новое значение максимального элемента} Maximum:=max; End; Procedure Delete (k1: Integer; Var m: myarray); {Процедура удаления элемента с данным номером} ... Begin Randomize; {Инициализация генератора случайных чисел} Init2 (А); {Заполнение массива А} Print1 (n, А); {Вывод заполненного массива А} {Поиск значения максимального элемента} m:=Maximum(A); k:=0; {Просмотр всех элементов начиная с последнего} For i:=n Downto 1 Do If A[i]=m Then {Если данный элемент имеет максимальное значение, то} Begin {Удаляем элемент с номером i} Delete(i, A); Inc(k); End; Print1(n-k, A); {Вывод нового массива А} Readln; End. Вставка элементов В одномерный массив
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (642)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |