Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

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

Задача:

Требуется добавить элемент в какое-нибудь место массива.

Алгоритм решения задачи:

  1. Задаем длину массива на один элемент больше, чем он будет заполнен в начале.

  2. Выясняем значение и позицию добавляемого элемента

  3. Все элементы до указанной позиции сдвигаем на один назад.

  4. Присваиваем по указанному индексу (позиции) значение.

  5. Остальная (передняя) часть массива не изменяется.

Программа на языке Паскаль:

const n = 6;

var

arr: array[1..n] of integer;

i, j, num, id: integer;

begin

writeln('Заполните массив: ');

for i := 1 to n - 1 do

readln(arr[i]);

write('Ваш массив: ');

for i := 1 to n - 1 do

write(arr[i]:5);

writeln;

write('Укажите еще один элемент: ');

readln(num);

write('Позиция в массиве: ');

readln(id);

for i := n - 1 downto id + 1 do

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

arr[id] := num;

write(' Ваш массив: ');

for i := 1 to n do

write(arr[i]:5);

writeln;

readln

end.

Сумма элементов двумерного массива

Алгоритм решения задачи:

Задача вычисления суммы элементов массива достаточно проста: все элементы массива перебираются и добавляются в одну и ту же переменную. Перебор элементов массива осуществляется в цикле for. Аналогично находится сумма элементов двумерного массива с той лишь разницей, что добавляется вложенный цикл for для прохода по элементам каждой строки матрицы.

Более сложная задача – это найти сумму не всех элементов массива, а только удовлетворяющих какому-нибудь условию или находящихся в определенных местах матрицы.

В программе ниже находится сумма всех элементов массива (переменная sum), а также сумма элементов, составляющих столбцы таблицы (двумерного массива). Для хранения сумм столбцов чисел используется одномерный массив (s).

Программа на языке Паскаль:

const

m = 5;

n = 4;

var

a: array[1..m,1..n] of byte;

s: array[1..n] of byte;

i,j, sum: byte;

begin randomize;

for i := 1 to m do begin

for j := 1 to n do begin

a[i,j] := random(10);

write (a[i,j]:3)

end;

writeln

end;

writeln ('------------');

for j := 1 to n do begin

for i := 1 to m do begin

s[j] := s[j] + a[i,j];

sum := sum + a[i,j]

end;

write (s[j]:3)

end;

write (' | sum = ', sum);

readln

end.

Поиск максимального элемента в массиве

Задача:

Найти максимальный элемент численного массива.

Алгоритм решения задачи:

Значения, составляющие массив, могут быть получены из разных источников: путем вызова функции random, ввода значений пользователем, считывания из файла. В программе ниже используется первый вариант.

В задачах подобного рода (поиск максиму или минимума) может быть поставлена цель, найти только 1) индекс элемента, 2) только значение или 3) и то и другое. В программе ниже используется третий вариант.

Неплохо бы, чтобы при запуске программы весь массив выводился на экран. В этом случае пользователь может оценить правильность работы программы.

  1. В переменной max_num хранится текущее максимальное значение массива, а в max_index – его позиция (индекс).

  1. В программе можно выделить две части: заполнение массива числами с выводом их на экран (первый цикл for) и непосредственно поиск максимума (второй цикл for).

  1. Перед первым циклом запускается процедура randomize для того, чтобы при каждом запуске программы значения массива были разными.

  1. Изначально делается предположение, что первый элемент массива и есть максимум. Поэтому переменной max_index присваивается значение 1 (т.е. указатель на первый элемент массива), а max_num – непосредственно значение, хранящееся в первой ячейке массива.

  1. Начиная со второго элемента, каждое очередное значение массива сравнивается с текущим значением max_num. В случае, если текущее значение массива больше, чем хранящиеся в max_num, происходит новое присваивание обоим переменным текущего значения и индекса.

Программа на языке Паскаль:

const

m = 20;

var

arr: array[1..m] of byte;

max_num, max_index: byte;

i: byte;

begin

randomize;

for i := 1 to m do begin

arr[i] := random(100);

write (arr[i]:3);

end;

max_index := 1;

max_num := arr[1];

for i := 2 to m do

if arr[i] > max_num then begin

max_index := i;

max_num := arr[i];

end;

writeln;

writeln ('Max = ',max_num);

writeln ('position: ', max_index);

readln

end.