Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Обработка нескольких массивов



Задача 14: Массивы А и В имеют одинаковую длину. Массив С необходимо заполнить суммами соответствующих элементов массивов А и В. n - длина массивов А и В (и С тоже).

 

Фрагмент программы:

… {

проходим по всем элементам массивов}

for i: =1 to n do

{сумму i-ых элементов массивов A и B заносим в i-ый элемент C}

C[i]: =A[i]+B[i];

Задача 15: В конец массива А[n] приписать все элементы массива В[m].

Фрагмент программы:

… {

проходим в цикле по массиву B}

for i: =1 to m do

A[n+i]: =B[i]; {дописываем элементы в хвост A}

Inc(n, m); {увеличиваем значение n (длину массива A) на

m (длину массива B)}

Замечание: Необходимо следить, чтобы n не превысило значение maxN.

Например, так:

if n+m> maxN

then writeln('В массив А все элементы массива В не поместятся')

else... {а вот здесь выполняем добавление элементов}

Задача 16: Сформировать массив В из отрицательных элементов массива А. Массив А не изменять.

Фрагмент программы:

m: =0; {m - количество элементов в массиве В -

вначале массив B пустой}

{проходим по всем элементам массива A}

for i: =1 to n do

if A[i]< 0 then {если i-ый элемент массива A отрицательный}

begin

{то копируем его в массив B}

Inc(m); {в B добавляется еще один элемент -

увеличиваем m на 1}

B[m]: =A[i]; {копируем i-ый элемент массива A

в m-ый элемент массива B}

end;

Задача 17: Подсчитать, сколько элементов массива А совпадают с элементами массива В.

Алгоритм программы:

1. Ввести массив А[n].

2. Ввести массив В[m].

3. Счетчик совпадений cnt обнулить.

4. Пройти по всем элементам массива A.

5. Сравнить i-ый элемент массива А со всеми элементами

массива В.

6. Если А[i] совпадает хотя бы с одним элементом массива B,

то счетчик повторений увеличить на 1.

7. Вывести количество совпадений.

Текст программы:

 

{Подсчитать, сколько элементов массива А совпадают с элементами

массива В}

Program TwoArrayExample;

Const

maxN = 20; {максимальное количество элементов массива}

Type

IndexEl = 1.. maxN; {индексы массива лежат в интервале

от 1 до maxN}

arrInt = array[IndexEl] of integer; {массив целых чисел,

содержащий до maxN элементов}

Var

a, b: arrInt; {массивы A и B}

n: integer; {количество элементов массива A}

m: integer; {количество элементов массива B}

i, j: IndexEl; {переменные для сканирования массивов}

cnt: integer; {количество совпадений элементов A с элементами B}

k: integer; {количество совпадений элемента A[i] с элементами B}

Begin

{1 - ввод массива A}

{ ввод количества элементов}

repeat

write('Введите n: ');

readln(n);

until (n> =1) and (n< =maxN); {выйдем из цикла лишь тогда, когда

n будет принадлежать интервалу [1..maxN]}

{ ввод элементов массива A поодиночке}

for i: =1 to n do

begin

write('a[', i, ']');

readln(a[i]);

end;

{2 - ввод массива B}

{ ввод количества элементов}

repeat

write('Введите m: ');

readln(m);

until (m> =1) and (m< =maxN);

{ ввод элементов массива B поодиночке}

for i: =1 to m do

begin

write('b[', i, ']');

readln(b[i]);

end;

{3 - счетчик повторений обнуляем}

cnt: =0;

{4 - проходим по всем элементам массива A}

for i: =1 to n do

begin

{5 - сравниваем i-ый элемент массива А со всеми

элементами массива В}

k: =0; {k - количество совпадений i-го элемента массива A

с элементами массива В}

{считаем количество совпадений A[i] с элементами массива B}

for j=1 to m do

if A[i]=B[j] then Inc(k);

{6 - если А[i] совпадает хотя бы с одним элементом массива B,

счетчик повторений увеличить на 1}

if k> 0 then Inc(cnt);

end;

{7 - выводим количество повторений}

writeln('Количество совпадений cnt=', cnt);

readln; {ждем нажатия клавиши Enter}

End.

Проверка соседних элементов массива

Задача 18: Подсчитать, сколько в массиве элементов, равных 0, справа и слева от которых стоят отрицательные элементы.

Фрагмент программы:

k: =0; {количество таких элементов}

{проходим по всем элементам массива A}

{начинаем не с первого, а со второго, потому что у первого элемента

нет стоящего слева от него}

{заканчиваем на n-1 элементе, а не на n, потому что у последнего

n-го элемента нет элемента, стоящего от него справа}

for i: =2 to n-1 do

{если i-ый элемент равен 0 иэлемент слева от него и

элемент справа от него отрицательные}

if (A[i]=0) and (A[i-1]< 0) and (A[i+1]< 0)

then Inc(k); {тогда увеличиваем счетчик}

Задача 19: Найти номер первого элемента массива, который находится между двумя положительными элементами.

Фрагмент программы:

k: =0; {k - номер искомого элемента}

i: =2; {начинаем со второго элемента}

while (i< =n-1) and (k=0) do {пока не нашли искомый элемент

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

begin

{если элемент тот, что надо, то запоминаем его индекс}

if (A[i-1]> 0) and (A[i+1]> 0) then k: =i;

Inc(i); {переходим к следующему элементу}

end;

{выводим позицию искомого элемента}

if k=0

then writeln('искомых элементов в массиве нет')

else writeln('искомый элемент занимает позицию ', k);

Сортировка массива и работа с отсортированным массивом

Задача 20: Отсортировать массив по возрастанию. Массив A является отсортированным (упорядоченным) по возрастанию, если для всех i из интервала [1..n-1] выполняется условие A[i]< =A[i+1]. Существует множество методов сортировки, мы же воспользуемся один из самых простых - метод сортировки выбором (поиском минимального).

Суть этого метода сортировки заключается в следующем:

1. В массиве находим минимальный элемент.

2. Меняем минимальный элемент с первым.

3. В усеченном (исключая первый элемент) массиве находим

минимальный элемент.

4. Ставим 080 аu1077 его на второе место.

И так далее n-1 раз.

Пример:

Массив A, исходное состояние 1 3 0 9 2

Процесс сортировки

0: 1 3 0 9 2 min=a[3]=0 Переставляем a[1]< -> a[3]

1: 0|3 1 9 2 min=a[3]=1 Переставляем a[2]< -> a[3]

2: 0 1|3 9 2 min=a[5]=2 Переставляем a[3]< -> a[5]

3: 0 1 2|9 3 min=a[5]=3 Переставляем a[4]< -> a[5]

4: 0 1 2 3 9 Готово

Здесь знак | отделяет уже отсортированную часть массива от еще не

отсортированной.

На Turbo Pascal этот алгоритм будет выглядеть следующим образом:

 

Var {дополнительные переменные}

buf: integer; {через buf будем менять значения двух элементов массива}

imin: IndexEl; {индекс минимального элемента неотсортированной части массива}

Begin

{n-1 раз ищем минимальный элемент массива}

for i: =1 to n-1 do

begin

{Ищем минимальный элемент в несортированной части массива (от i-го элемента)}

imin: =i; {imin - это индекс минимального элемента массива}

for j: =i+1 to n do

if A[j]< A[imin] then imin: =j;

{переставляем i-ый и imin-ый элементы}

buf: =A[i];

A[i]: =A[imin];

A[imin]: =buf;

End;

Задача 21. Вставить в упорядоченный по возрастанию массив новый элемент таким образом,

чтобы сохранилась упорядоченность.

Алгоритм решения задачи следующий:

1. Ищем в массиве тот элемент, который больше вставляемого, – для

этого последовательно просматриваем все элементы, начиная с первого.

2. Увеличиваем длину массива на 1.

3. После этого все элементы, стоящие правее от найденного, включая его самого, сдвигаются вправо.

4. На освободившуюся позицию вставляется искомый элемент.

Замечание: если все элементы массива меньше вставлямого, то новый элемент надо вставить в конец массива. Если все элементы массива больше вставляемого, то новый элемент надо вставить в начало массива.

Пример: Надо вставить 5 в массив A: 3 4 7 9

1. Ищем элемент, больший вставляемого. Это элемент A[3]=7.

2. Увеличиваем длину массива на 1.

Получаем массив A: 3 4 7 9 X

3. Сдвигаем элементы, начиная с 3-го, вправо.

Получаем массив A: 3 4 7 7 9

4. В элемент A[3] заносим 5.

Получаем массив: 3 4 5 7 9

Фрагмент программы, реализующей данный алгоритм:

 

… {

считываем число, которое надо вставить в

массив}

read(g);

{1. Ищем элемент больше вставляемого }

k: =1; {k – индекс сравниваемого элемента}

while (k< =n) and (g> =a[k]) do {если k не вышла за границу n,

и вставляемый элемент меньше или равен A[k]}

k: =k+1; {то переходим к следующему элементу}

{2. Увеличиваем длину массива на 1}

n: =n+1;

{3. Сдвигаем элементы начиная с k-го вправо}

for i: =n downto k+1 do

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

{4. В A[k] заносим g}

a[k]: =g;


Варианты заданий

Задачи совсем простые

 

Вариант A1:

В массиве все четные элементы обнулить.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив 1 3 0 5 0

 

Вариант A2:

В массиве все нечетные элементы заменить на 1.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив 1 1 4 1 6

 

Вариант A3:

В массиве все элементы, стоящие после нечетных,

заменить на 0.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив 1 0 4 5 0

 

Вариант A4:

В массиве все элементы, стоящие перед четными,

заменить на 9.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив 1 9 4 9 6

 

Вариант A5:

В массиве все элементы стоящие между четными заменить

на 1.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив 1 2 4 1 6

 

Вариант A6:

В массиве все элементы, стоящие после минимального,

заменить на 0.

Пример: из массива A[5]: 3 2 1 5 6 должен получиться

массив 3 2 1 0 0

 

Вариант A7:

В массиве все элементы, стоящие перед максимальным,

заменить на 0.

Пример: из массива A[5]: 3 2 1 5 4 должен получиться

массив 0 0 0 5 4

 

Вариант A8:

В массиве все элементы, стоящие после максимального,

заменить на 0.

Пример: из массива A[5]: 3 2 1 5 4 должен получиться

массив 3 2 1 5 0

 

Вариант A9:

В массиве все нечетные элементы, стоящие после

максимального, заменить на 0.

Пример: из массива A[5]: 3 7 1 5 4 должен получиться

массив 3 7 0 0 4

 

Вариант A10:

В массиве все четные элементы, стоящие левее

минимального, заменить на 0.

Пример: из массива A[5]: 3 2 1 0 4 должен получиться

массив 3 0 1 0 4

Задачи простые

 

Вариант B1

Из массива удалить первый из четных элементов.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив A[4]: 1 3 5 6

 

Вариант B2

Из массива удалить последний из четных элементов.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив A[4]: 1 3 4 5

 

Вариант B3

Из массива удалить последний из нечетных элементов.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив A[4]: 1 3 4 6

 

Вариант B4

Из массива удалить первый из нечетных элементов.

Пример: из массива A[5]: 1 3 4 5 6 должен получиться

массив A[4]: 3 4 5 6

 

Вариант B5

После максимального из четных элементов вставить 0.

Пример: из массива A[5]: 1 9 8 3 5 должен получиться

массив A[6]: 1 9 8 0 3 5

 

Вариант B6

После первого четного элемента вставить 0.

Пример: из массива A[5]: 1 6 8 3 4 должен получиться

массив A[6]: 1 6 0 8 3 4

 

Вариант B7

После последнего нечетного элемента вставить 0.

Пример: из массива A[5]: 1 3 8 3 5 должен получиться

массив A[6]: 1 3 8 3 5 0

 

Вариант B8

Удалить максимальный из четных элементов.

Пример: из массива A[5]: 2 3 4 7 5 должен получиться

массив A[4]: 2 3 7 5

 

Вариант B9

Удалить максимальный из кратных трем элементов.

Пример: из массива A[5]: 2 3 4 7 5 должен получиться

массив A[4]: 2 4 7 5

 

Вариант B10

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

0.

Пример: из массива A[5]: 1 3 8 3 4 должен получиться

массив A[6]: 1 3 8 3 4 0

Задачи средние

 

Вариант C1

Из массива удалить четные элементы, стоящие после

максимального.

Пример: из массива A[5]: 2 7 4 6 5 должен получиться

массив A[3]: 2 7 5

 

Вариант C2

Из массива удалить четные элементы, имеющие значение

больше среднего арифметического всех элементов

массива.

Пример: из массива A[5]: 8 7 2 6 5 должен получиться

массив A[3]: 7 2 5 (среднее арифметическое всех

элементов =(8+7+2+6+5)/5=5.6)

 

Вариант C3

Из массива удалить элементы, имеющие значение меньше

среднего арифметического четных элементов массива.

Пример: из массива A[5]: 8 7 2 6 5 должен получиться

массив A[3]: 8 7 6 (среднее арифметическое четных

элементов =(8+2+6)/3=5.33)

 

Вариант C4

Из массива удалить элементы, стоящие после

максимального и имеющие значение меньше среднего

арифметического всех элементов массива.

Пример: из массива A[5]: 8 6 9 4 5 должен получиться

массив A[3]: 8 6 9 (среднее арифметическое четных

элементов =(8+6+9+4+5)/5=6.4)

 

Вариант C5

Из массива удалить четные элементы, стоящие между

максимальным и минимальным элементами.

Пример: из массива A[7]: 1 8 8 4 7 0 5 должен

получиться массив A[5]: 1 8 7 0 5

 

Вариант C6

Из массива удалить элементы, кратные трем, стоящие

между максимальным и минимальным элементами.

Пример: из массива A[7]: 1 9 3 4 9 0 0 должен

получиться массив A[5]: 1 9 4 0 0

 

Вариант C7

Из массива удалить элементы, имеющие четный индекс и

стоящие между максимальным и минимальным элементами.

Пример: из массива A[7]: 9 3 4 9 1 0 0 должен

получиться массив A[5]: 9 4 1 0 0

 

Вариант C8

Из массива удалить элементы, встречающиеся в массиве

более одного раза.

Пример: из массива A[7]: 9 3 4 9 1 0 0 должен

получиться массив A[3]: 3 4 1

 

Вариант C9

Из массива удалить элементы, встречающиеся в массиве

только один раз.

Пример: из массива A[7]: 9 1 4 9 1 9 0 должен

получиться массив A[5]: 9 1 9 1 9

 

Вариант C10

Из массива удалить нечетные элементы, встречающиеся в

массиве только один раз.

Пример: из массива A[7]: 4 1 4 3 1 9 0 должен

получиться массив A[5]: 4 1 4 1 0

Задачи посложнее

 

Вариант D1

Из массива удалить самую длинную цепочку четных

элементов.

Пример: из массива A[8]: 4 1 4 2 1 2 4 6 должен

получиться массив A[5]: 4 1 4 2 1

(самая длинная цепочка четных чисел включает элементы

с 6 по 8: 2 4 6)

 

Вариант D2

Из массива удалить цепочки из четных элементов,

состоящие менее чем из трех элементов.

Пример: из массива A[8]: 4 3 4 2 1 2 4 6 должен

получиться массив A[5]: 3 1 2 4 6

 

Вариант D3

Из массива удалить цепочки из нечетных элементов,

состоящие менее чем из трех элементов.

Пример: из массива A[8]: 3 3 4 5 2 3 7 9 должен

получиться массив A[5]: 4 2 3 7 9

 

Вариант D4

Из массива A удалить те элементы, которые встречаются

и в массиве A и в массиве B по крайней мере по 2

раза.

Пример: массив A[8]: 3 3 4 5 2 3 5 9

массив B[7]: 1 2 3 4 5 2 5

По 2 раза в обоих массивах встречается только

элемент, равный 5.

Массив A после удаления примет вид: A[6]: 3 3 4 2 3 9

 

Вариант D5

Из массива из каждой цепочки четных элементов удалить

самый маленький элемент.

Пример: из массива A[9]: 3 6 4 5 2 3 4 6 4 должен

получиться массив A[6]: 3 6 5 3 6 4

 

Вариант D6

Из массива A удалить те цепочки четных элементов, в

которых есть хотя бы один элемент из массива B.

Пример: массив A[9]: 3 2 4 5 2 3 2 6 5

массив B[6]: 1 3 4 7 8 9

Массив A после удаления примет вид:

A[7]: 3 5 2 3 2 6 5

 

Вариант D7

Из массива A удалить те цепочки нечетных элементов,

в которых нет ни одного элемента из массива B.

Пример: массив A[10]: 3 2 7 5 2 1 2 6 3 9

массив B[5]: 1 2 5 4 8

Массив A после удаления примет вид:

A[7]: 2 7 5 2 1 2 6

 

Вариант D8

Из массива A удалить те цепочки нечетных элементов,

в которых нет ни одного элемента из массива B.

Пример: массив A[10]: 3 2 7 5 2 1 2 6 3 9

массив B[5]: 1 2 5 4 8

Массив A после удаления примет вид:

A[7]: 2 7 5 2 1 2 6

 

Вариант D9

Между массивами A и B обменять их самые длинные

цепочки из одинаковых элементов.

Пример: массив A[10]: 3 2 2 5 2 1 1 1 3 9

массив B[8]: 1 2 5 5 4 8 3 3

В массиве A самая длинная цепочка:

1 1 1 (элементы с 7 по 9)

В массиве B самая длинная цепочка:

5 5 (элементы с 3 по 4)

Массив A после перестановки в него цепочки из массива

B: A[9]: 3 2 2 5 2 5 5 3 9

Массив B после перестановки в него цепочки из массива

A: B[9]: 1 2 1 1 1 4 8 3 3

 

Вариант D10

Между массивами A и B обменять их самые длинные

цепочки из четных элементов.

Пример: массив A[10]: 3 2 4 6 2 1 1 1 8 9

массив B[7]: 1 0 5 5 4 3 3

В массиве A самая длинная цепочка:

2 4 6 2 (элементы со 2 по 5)

В массиве B самая длинная цепочка:

0 (элемент 2)

Массив A после перестановки в него цепочки из массива

B: A[7]: 3 0 1 1 1 8 9

Массив B после перестановки в него цепочки из массива

A: B[10]: 1 2 4 6 2 5 5 4 3 3

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-08-31; Просмотров: 540; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.135 с.)
Главная | Случайная страница | Обратная связь