еnd.
Найти элементы массива большие числа 5.
еnd.
5) Поиск наибольшего (наименьшего) элемента в массиве.
end;
writeln (‘ max=’,max,’ min=’, min);
еnd.
6) Упорядочение массива
Упорядочение (сортировка) - это расположение значений элементов массива в порядке возрастания или убывания их значений.
Некоторые типичные действия с массивами:
-
вывод массива;
-
ввод массива;
-
поиск в массиве заданного элемента;
-
поиск в массиве минимального или максимального элемента;
-
сортировка массива.
Вывод массива.
Под выводом массива понимается вывод на экран значений элементов массива. если в программе необходимо вывести значения всех элементов массива, то для этого удобно использовать оператор цикла for, переменная – счетчик которой может быть использована как индекс элемента массива.
var
a: array [1..20] of integer;
i, n: integer;
begin
clrscr;
for i:=1 to n do
writeln (a[i]); {вывод в столбик}
либо write (a[i],’ ‘); {вывод в строчку}
либо writeln (‘a[‘,i,’]=’,a[i]); {вывод с пояснениями}
readln;
end
Задание:
-
В массиве хранятся значения роста двадцати человек. С помощью датчика случайных чисел заполнить массив целыми значениями, лежащими в диапазоне от 50 до 100 включительно.
-
Заполнить массив из двенадцати элементов следующим образом:
-
Заполнить массив из двадцати элементов следующим образом:
-
Ввод массива.
Под вводом массива понимается ввод значений элементов массива. Как и вывод массива, ввод удобно реализовать с помощью оператора цикла for. Чтобы пользователь программы знал, ввода какого элемента массива ожидает программа, следует организовать вывод подсказок перед вводом очередного элемента массива. В подсказке обычно указывают индекс элемента массива.
var
a: array [1..20] of integer;
i, n: integer;
begin
clrscr;
writeln (’Введите количество элементов массива’); readln (n);
for i:=1 to n do begin
write (‘a[‘,i,’]=’);
readln (a[i]);
end;
Пример: Найти сумму элементов массива.
var
a: array [1..20] of integer;
i, n, s: integer;
begin
clrscr;
s:=0;
writeln (’Введите количество элементов массива’); readln (n);
for i:=1 to n do begin
write (‘a[‘,i,’]=’);
readln (a[i]);
s:=s+a[i];
end;
writeln (‘Сумма элементов массива=’,s);
readln;
end.
Задание:
-
Заполнить массив:
а) десятью первыми членами арифметической прогрессии с известным первым членом прогрессии a и ее разностью p;
б) двадцатью первыми членами геометрической прогрессии с известным первым членом прогрессии a и ее знаменателем z.
-
Дан массив. Все его элементы:
а) уменьшить на 20;
б) умножить на последний элемент;
в) увеличить на число b.
-
Определить:
а) сумму всех элементов массива;
б) произведение всех элементов массива;
в) сумму квадратов всех элементов массива;
г) сумму шести первых элементов массива;
д) сумму элементов массива с k1-го по k2-й (значения k1 и k2 вводятся с клавиатуры; k2>k1);
е) среднее арифметическое всех элементов массива;
ж) среднее арифметическое элементов массива с s1-го по s2-й (значения s1 и s2 вводятся с клавиатуры; s2>s1).
-
Дан массив. Напечатать:
а) все неотрицательные элементы;
б) все элементы, не превышающие числа 100.
-
Дан массив целых чисел. Напечатать:
а) все четные элементы;
б) все элементы, оканчивающиеся нулем.
-
Дан массив натуральных чисел. Напечатать:
а) все элементы массива, являющиеся двузначными числами;
б) все элементы массива, являющиеся трехзначными числами.
-
Дан массив. Напечатать:
а) второй, четвертый и т.д. элементы;
б) третий, шестой и т.д. элементы.
Поиск в массиве.
При решении многих задач возникает необходимость установить, содержит ли массив определенную информацию или нет. Например, определить есть ли в массиве нулевые элементы. Задачи такого типа называются поиском в массиве.
Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой – это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом.
Например:
-
Определить сколько раз в массиве встречается число а.
var
b: array [1..20] of integer;
i, n, k, a: integer;
begin
clrscr;
k:=0;
writeln (‘Введите искомое число’); readln (a);
writeln (’Введите количество элементов массива’); readln (n);
for i:=1 to n do begin
write (‘b[‘,i,’]=’);
readln (b[i]);
if b[i]=a then inc(k);
end;
writeln (‘Количество элементов равных ’,a,’ в массиве ’,k);
readln;
end.
Задачи:
-
Выяснить, верно ли, что сумма элементов массива есть неотрицательное число.
-
Дан массив целых чисел. Выяснить:
а) верно ли, что сумма элементов массива есть четное число;
б) верно ли, что сумма квадратов элементов массива есть пятизначное число.
-
Определить количество положительных и количество отрицательных элементов массива.
-
Дан массив. Найти:
а) сумму элементов массива, значение которых не превышает 20;
б) сумму элементов массива, больших числа a.
-
Дан массив целых чисел. Найти:
а) сумму нечетных элементов;
б) сумму элементов, кратных заданному числу;
в) сумму элементов массива, кратных a или b.
-
Определить сумму второго, четвертого, шестого и т.д. элементов массива.
-
Определить частное от деления суммы положительных элементов массива на модуль суммы отрицательных элементов.
-
Дан массив целых чисел. Определить количество четных элементов и количество элементов, оканчивающихся на цифру 5.
-
Определить количество элементов массива, принадлежащих промежутку от a до b (значения a и b вводятся с клавиатуры; b>a).
-
Найти число пар ''соседних'' элементов массива, являющихся четными числами.
-
Найти число пар ''соседних'' элементов массива, оканчивающихся нулем.
-
Найти число элементов массива, которые больше своих ''соседей'', т.е. предшествующего и последующего.
-
Найти среднее арифметическое элементов массива, больших числа 10.
-
Найти средние арифметические положительных и отрицательных элементов массива.
-
Дан массив вещественных чисел.
а) Каждый отрицательный элемент заменить на его абсолютную величину.
б) Все элементы с нечетными номерами заменить на их квадратный корень.
в) Из всех положительных элементов вычесть элемент с номером k1, из остальных - элемент с номером k2.
г) Все элементы с нечетными номерами увеличить на 1, с четными - уменьшить на 1.
д) Из всех положительных элементов вычесть элемент с номером k1, из всех отрицательных - число n. Нулевые элементы оставить без изменения.
е) Ко всем нулевым элементам прибавить n, из всех положительных элементов вычесть a, ко всем отрицательным прибавить b.
-
Дан массив вещественных чисел.
а) Каждый элемент, больший 10, заменить на его квадратный корень.
б) Все элементы массива с четными номерами заменить на их абсолютную величину.
в) Ко всем отрицательным элементам прибавить элемент с номером m1, к остальным - элемент с номером m2.
г) Все элементы с четными номерами удвоить, с нечетными - уменьшить на 1.
д) Ко всем отрицательным элементам прибавить элемент с номером a1, из всех нулевых вычесть число b. Положительные элементы оставить без изменения.
е) Из всех положительных элементов вычесть a, из всех отрицательных вычесть b. Ко всем нулевым элементам прибавить c.
-
Дан массив целых чисел.
а) Все элементы, оканчивающиеся цифрой 4, уменьшить вдвое.
б) Все четные элементы заменить на их квадраты, а нечетные удвоить.
в) Четные элементы увеличить на a, а из элементов с четными номерами вычесть b.
-
Дан массив целых чисел.
а) Все элементы, кратные числу 10, заменить нулем.
б) Все нечетные элементы удвоить, а четные уменьшить вдвое.
в) Нечетные элементы уменьшить на m, а элементы с нечетными номерами увеличить на n.
Самостоятельная работа на ввод и вывод массива.
Поиск в массиве минимального или максимального элемента.
Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива сравниваются с этим элементом. Если обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент принимается за минимальный (максимальный) и продолжается проверка остальных элементов.
Найти минимальный элемент массива и его индекс.
var
a: array [1..20] of integer;
i, n, k, min, nmin: integer;
begin
clrscr;
writeln (’Введите количество элементов массива’); readln (n);
for i:=1 to n do begin
write (‘a[‘,i,’]=’);
readln (a[i]);
end;
min:=a[1]; nmin:=1;
for i:=2 to n do
if min>b[i] then begin
min:=b[i];
nmin:=i;
end;
writeln (‘Минимальный элемент массива ’, min, ‘ его индекс ’, nmin);
readln;
end.
Задачи:
-
Дан массив. Определить:
а) максимальный элемент;
б) минимальный элемент;
в) на сколько максимальный элемент больше минимального;
г) индекс максимального элемента;
д) индекс минимального и индекс максимального элементов.
-
Дан массив. Определить:
а) количество максимальных элементов в массиве;
б) количество минимальных элементов в массиве.
-
Изменить знак у максимального по модулю элемента массива. Минимальный элемент массива при этом не определять.
-
Дан массив. Найти количество элементов, значение которых больше среднего арифметического минимального и максимального элементов массива, и напечатать их номера.
-
Найти элемент, наиболее близкий к среднему значению всех элементов массива.
-
Дан массив. Скопировать все его элементы в другой массив такого же размера:
а) в том же порядке расположения элементов;
б) в обратном порядке расположения элементов.
-
Дан массив. Переписать его второй, четвертый и т.д. элементы в другой массив такого же размера:
а) расположив элементы на тех же местах, что и в исходном массиве;
б) расположив элементы подряд с начала массива.
-
Из элементов массива A сформировать массив B того же размера по правилу: если номер i элемента массива A четный, то Bi = Ai2, в противном случае Bi = 2·Ai.
-
Из элементов массива A, заполненного целыми числами, сформировать массив B того же размера по правилу: четные элементы массива A удвоить, нечетные оставить без изменения.
-
Даны два массива одного размера. Получить третий массив, каждый элемент которого равен:
а) сумме элементов с одинаковыми номерами в заданных массивах;
б) произведению элементов с одинаковыми номерами в заданных массивах;
в) максимальному из элементов с одинаковыми номерами в заданных массивах.
-
Даны два массива одного размера, в которых нет нулевых элементов. Получить третий массив, каждый элемент которого равен 1, если элементы заданных массивов с тем же номером имеют одинаковый знак, и равен нулю в противном случае.
-
Дан массив целых чисел.
а) Напечатать все элементы, предшествующие первому элементу с заданным значением n. Если элементов, равных n, в массиве нет, то должны быть напечатаны все элементы.
б) Напечатать все элементы, следующие за последним элементом, оканчивающимся цифрой "7". Если элементов, оканчивающихся цифрой "7", в массиве нет, то ни один элемент не должен быть напечатан.
-
Найти количество различных элементов в массиве.
-
Дано натуральное число n. Определить количество различных цифр в нем. Например, в числе 1234 количество различных цифр равно 4, в числе 22424 - 2, в числе 333 - 1.
-
Дан массив целых чисел. Найти:
а) номер первого нечетного элемента. Если нечетных элементов в массиве нет, то должно быть напечатано соответствующее сообщение;
б) номер первого элемента, кратного числу 13. Если нечетных элементов в массиве нет, то должно быть напечатано соответствующее сообщение;
-
Дан массив вещественных чисел. Определить, есть ли в нем отрицательные числа. В случае положительного ответа:
а) определить номер первого из них и напечатать все следующие за ним элементы;
б) определить номер последнего из них напечатать все элементы, расположенные слева от него.
Самостоятельная работа на поиск в массиве.
Обмены и перестановки. Для перестановки элементов вводят вспомогательную переменную, которой присваивают значение первого элемента, после чего первому элементу присваивают значение второго элемента, а второму – значение вспомогательной переменной.
Задачи:
-
Дан массив. Поменять местами:
а) второй и пятый элементы;
б) m-й и n-й элементы;
в) третий и максимальный элементы. Если элементов с максимальным значением несколько, то в обмене должен участвовать первый из них;
г) первый и минимальный элементы. Если элементов с минимальным значением несколько, то в обмене должен участвовать последний из них.
-
Дан массив из четного числа элементов. Поменять местами:
а) его половины;
б) первый элемент со вторым, третий - с четвертым и т.д.;
в) его половины следующим способом: первый элемент поменять с последним, второй - с предпоследним и т.д.
-
Дан одномерный массив из 20 элементов. Переставить первые три и последние три элемента, сохранить порядок их следования.
-
Поменять местами первый отрицательный и последний положительный элементы массива. Учесть возможность того, что отрицательных или положительных элементов в массиве может не быть.
В задачах под удалением элемента массива следует понимать:
1) исключение этого элемента из массива путем смещения всех следующих за ним элементов влево на 1 позицию;
2) присваивание последнему элементу массива значения 0.
-
Удалить из массива:
а) третий элемент; б) k-й элемент.
-
Удалить из массива, в котором все элементы различны:
а) максимальный элемент; б) минимальный элемент.
-
Удалить из массива:
а) первый отрицательный элемент (если отрицательные элементы в массиве есть);
б) удалить последний четный элемент (если четные элементы в массиве есть).
-
Удалить из массива:
а) все отрицательные элементы;
б) все элементы, большие данного числа n;
в) все элементы, начиная с n1-го по n2-й (n1n2).
-
Дан массив целых чисел. Удалить из него:
а) все четные элементы, стоящие на нечетных местах;
б) все элементы, кратные 3 и 5.
-
Удалить из массива все повторяющиеся элементы, оставив их первые вхождения, то есть в массиве должны остаться только различные элементы.
В задачах под вставкой числа n в массив после k-го элемента следует понимать:
1) увеличение размера массива на 1;
2) смещение всех элементов, начиная с (k+1)-го, вправо на 1 позицию;
3) присваивание (k+1)-му элементу массива значения n.
-
Вставить в массив:
а) число 10 после второго элемента; б) число 100 после m-го элемента.
-
Вставить заданное число в массив целых чисел:
а) после первого отрицательного элемента;
б) перед последним четным элементом.
-
Вставить заданное число в массив целых чисел:
а) перед всеми элементами, кратными числу a;
б) после всех отрицательных элементов.
Контрольная работа на массивы.
8 класс.
Сортировка массива.
Под сортировкой массива подразумевается процесс перестановки элементов с целью упорядочивания их в соответствии с каким-либо критерием. Например, если имеется массив а - целых чисел, то после сортировки по возрастанию должно выполняться условие: a[1]a[2] …a[n], где n – верхняя граница индекса массива.
Существует много методов сортировки массивов. Но наиболее часто используемые это:
-
метод прямого выбора (метод главного элемента);
-
метод прямого обмена(метод пузырька).
Метод главного элемента.
Алгоритм сортировки массива по возрастанию методом прямого выбора или методом главного элемента может быть представлен так:
-
Просматривая массив от первого элемента, найти минимальный и поместить на место первого элемента, а первый на место минимального.
-
просматривая массив от второго элемента, найти минимальный и поместить его на место второго элемента, а второй на место минимального.
-
И так далее до предпоследнего элемента.
Ниже представлена программа сортировки массива целых чисел по возрастанию.
program vosr;
uses crt;
var a: array [1..15] of integer;
i, j, k, n, m, c: integer;
begin
clrscr;
writeln (‘’); readln (n);
for i:=1 to n do begin
write (i,’:’); readln (a[i]);
end;
for i:=1 to n-1 do begin
k:=i;
for j:=i+1 to n do
if a[j]
c:=a[i];
a[i]:=a[k];
a[k]:=c;
end;
for i:=1 to n do
writeln (a[i]);
readln;
end.
Метод прямого обмена (метод пузырька).
В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого сравнивается со следующим и если он больше следующего, то элементы меняются местами. Таким образом, элементы с наименьшим значением продвигаются к началу массива (всплывают), а элементы с большим значением – к концу массива (тонут), поэтому его и называют методом пузырька. Этот процесс повторяется на единицу меньше раз чем элементов в массиве, либо возможно другой способ реализации этого метода, повторяется до тех пор пока находятся соседние элементы, такие что элемент стоящий правее оказывается меньше элемента стоящего левее.
program vosr;
uses crt;
var a: array [1..15] of integer;
i, j, k, n, m, c, f: integer;
begin
clrscr;
writeln (‘’); readln (n);
for i:=1 to n do begin
write (i,’:’); readln (a[i]);
end;
for i:=1 to n-1 do begin
for j:=1 to n-1 do
if a[j]>a[j+1] then begin
c:=a[j];
a[j]:=a[j+1];
a[j+1]:=c;
end;
end;
for i:=1 to n do
writeln (a[i]);
readln;
end.
program vosr;
uses crt;
var a: array [1..15] of integer;
i, j, k, n, m, c, f: integer;
begin
clrscr;
writeln (‘’); readln (n);
for i:=1 to n do begin
write (i,’:’); readln (a[i]);
end;
k:=n-1;
repeat
f:=0;
for i:=1 to k do
if a[i]>a[i+1] then begin
f:=1;
c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
end;
dec(k);
until f=0;
for i:=1 to n do
writeln (a[i]);
readln;
end.
6) Упорядочение массива
Упорядочение (сортировка) - это расположение значений элементов массива в порядке возрастания или убывания их значений.
Сортировка простым выбором.
Рассмотрим идею этого метода на примере. Пусть исходный массив А состоит из 10 элементов : 5 13 7 9 1 8 16 4 10 2.
После сортировки массив : 1 2 4 5 7 8 9 10 13 16
Максимальный элемент текущей части массива заключен в кружок, а элемент, с которым происходит обмен, в квадратик. Скобкой помечена рассматриваемая часть массива.
5 13 7 9 1 8 16 4 10 2
5 13 7 9 1 8 2 4 10 16
1 шаг Рассмотрим весь массив и найдем в нем максимальный элемент - 16. Поменяем его местами с последним элементом - с числом 2.
2 шаг. Рассмотрим часть массива, исключая последний элемент. Максимальный элемент этой части - 13, он стоит на втором месте. Поменяем его местами с последним элементом этой части - с числом 10.
И т.д.
Фрагмент программы :
for i:=n downto 2 do
begin {цикл по длине рассматриваемой части массива}
maxi:=i;
for j:=1 to i-1 do if a[j]>a[maxi] then maxi:=j;
if maxi<>i then begin {перестановка элементов}
k:=a[i]; a[i]:=a[maxi]; a[maxi]:=k
end;
end;
«Пузырьковый метод»
Массив просматривают слева направо. Каждый предыдущий элемент сравнивается с последующим. Если предыдущий элемент больше последующего, то предыдущий и последующий элементы меняются местами.
Program sort1;
const n=10;
label metka;
var a: array [1..n] of integer;
i, c, k : integer;
begin
for i:=1 to n do readln(a[i]);
metka: k=0; {счетчик перестанокок}
for i:=1 to n-1 do
if a[i]>a[i+1] then begin c:=a[i];
a[i]:=a[i+1];
a[i+1]:=c;
k:=1;
end;
if k=1 then goto metka
else writeln(‘упорядочен‘);
for i:=1 to n do writeln(a[i]);
еnd.
Тоже самое, но с использованием вложенных циклов
Program sort2;
const n=10;
var a: array [1..n] of integer;
i, k, c : integer;
begin
for i:=1 to n do readln(a[i]);
for i:=1 to n-1 do
for k:=1 to n-i do
if a[k]>a[k+1] then begin c:=a[k];
a[k]:=a[k+1];
a[k+1]:=c;
end;
for i:=1 to n do writeln(a[i]);
еnd.
Двухмерные массивы.
Описание двумерного массива определяет имя, размер массива (количество строк и столбцов) и базовый тип. Формат описания в разделе переменных:
Var <имя маcсива > : array [<тип индекса1> , <тип индекса2>] of <базовый тип>;
Двумерный массив — массив, у которого положение каждого элемента характеризуется двумя числами, первое из них определяет номер строки, второе – номер столбца, на пересечении которых находится элемент. Он так же, как и одномерный массив, состоит из значений одного типа. В двумерных массивах хранятся значения прямоугольных таблиц. Примеры описания двумерных массивов:
Var С : array [1. .5, 1. .10] of real;
R1, R2: array [0. .10, 1. .365] of char;
Sim : array [1. .20, 1. .10] of string[20];
Const M=10; N=20;
Var X, S : array [1. .M, 1. .N] of byte;
1. Организация данных в виде массивов помогает нам решать многие задачи. Вот еще одна: разработать программу, обслуживающую шахматный турнир.
В одиночных соревнованиях каждый участник имеет один результат, поэтому данные о результатах соревнований удобно хранить в знакомых нам массивах. Игровой турнир предполагает встречи участников друг с другом, при этом каждый участник имеет столько результатов, со сколькими соперниками он встречался.
Обычно результаты турниров заносятся в турнирные таблицы. Средством обработки таких таблиц в языках программирования служат двумерные массивы.
2. Описание двумерного массива в языке паскаль записывается так:
<Имя_массива> : array[..,..] of [<тип>]
где строки таблицы имеют номера с n1 по n2, а столбцы - с k1 по k2. Запись <Имя_массива>[n,k] указывает на элемент, стоящий на пересечении n-й строки и k-го столбца. Например, описание
Tab : array[1..10,1..15] of Integer
задает таблицу из 10 строк и 15 столбцов (всего 10 х 15 = 150 элементов), состоящую из целых чисел. Tab[3,5] указывает на 5-й элемент в 3-й строке.
Турнирную таблицу для N участников удобно хранить в двумерном массиве N x N типа Real, т.к. результатом шахматной партии для каждого участника может быть победа (1 очко),
поражение (0 очков) или ничья (0.5 очка). Вот описание таблицы:
Tab : array[1..N,1..N] of Real .
3. Для простоты не будем пока рассматривать фамилии участников, а будем различать их по номерам. Вводить результаты встреч будем в таком виде: номер первого участника, номер второго участника, результат первого участника (количество очков). Понятно, что одна встреча приводит к заполнению сразу двух элементов таблицы. Так будет выглядеть фрагмент программы, предназначенный для ввода результата одной встречи:
writeln('Введите номера участников встречи');
readln(n1,n2);
writeln('Сколько очков у участника ',n1,' ?');
readln(Tab[n1,n2]);
Tab[n2,n1] := 1-Tab[n1,n2];
4. Эти действия нужно повторять столько раз, сколько встреч состоится в турнире. Если все запланированные встречи состоятся, то их количество можно сосчитать по формуле n(n-1) - подумайте, почему. Однако, может случиться, что по каким-то причинам часть встреч не состоится, а какие-то будут сыграны дважды. Поэтому удобнее как-то обозначить окончание ввода данных в программе, например, после каждой встречи выяснять, будут ли еще вводиться данные. Вот фрагмент программы, предназначенный для ввода результатов всех встреч турнира:
kon := 'Д';
while kon <> 'Н' do
begin
writeln('Введите номера участников встречи');
readln(n1,n2);
writeln('Сколько очков у участника ',n1,' ?');
readln(Tab[n1,n2]);
Tab[n2,n1] := 1-Tab[n1,n2];
writeln('Будут ли еще встречи ? (Д/Н)');
readln(kon);
end;
5. По окончании турнира нужно вывести турнирную таблицу на экран:
for i := 1 to N do
begin
for k := 1 to N do
write(Tab[i,k]:3:1);
writeln;
end;
-
Бывают задачи, в которых данные удобно хранить в виде трехмерного (и даже четырех- и более -мерного) массива. Например, результат встречи в футбольном турнире представляет собой не одно, а три числа - количество забитых и пропущенных мячей и количество очков (2 - победа, 0 - поражение, 1 - ничья). Такую таблицу удобно заносить в массив
Football : array[1..N,1..N,1..3] of Integer;
Элемент Football[3,5,2] содержит информацию о количестве мячей, пропущенных 3-й командой в матче с 5-й командой.
Поразмышляйте самостоятельно над процедурой ввода результатов футбольного турнира.
Работа с элементами
В математике часто используют многомерные массивы (двумерные, трехмерные и т.д.). Мы рассмотрим двумерные массивы, иначе называемые матрицами.
Например : 5 4 3 6
2 8 1 7
4 3 9 5
Данная матрица имеет размер 3 на 4, т.е. она состоит из трех строк и четырех столбцов. Если всю матрицу обозначить одним именем, например А, то каждый элемент матрицы будет иметь два индекса - А[i,j]
Здесь первый индекс i обозначает номер строки (i=1,2,3), второй индекс j - номер столбца (j=1,2,3,4).
Такую матрицу можно описать следующим образом :
1 способ :С использованием типа
Type T=array [1..3,1..4] of integer;
Var A: T;
2 способ :
Var A: array [1..3,1..4] of integer;
При решении задач с использованием двумерных массивов во всех случаях (кроме некоторых частных) организуются вложенный циклы.
Перемещение по строке :
for i:=1 to m do {внешний цикл, изменяется номер строки}
.......
for j:=1 to n do {внутренний цикл, изменяется номер столбца}
..........
Перемещение по столбцу :
for j:=1 to n do {внешний цикл, изменяется номер столбца}
.......
for i:=1 to m do {внутренний цикл, изменяется номер строки}
Перечислим базовые алгоритмы и рассмотрим каждый из них.
1. Заполнение двумерного массива :
а) по строке; б) по столбцу
2. Печать в виде таблицы.
3. Вычисление суммы элементов каждой строки и каждого столбца.
4. Поиск максимального (минимального) элементов каждой строки (столбца) и их индексов.
5. Сумма элементов массива.
6. Максимальный (минимальный) элемент массива.
Ввод (заполнение) элементов двумерного массива (матрицы)
For i:=1 to n do
For j:=1 to m do
Readln(A[i,j]);
1. Заполнение двумерного массива по строке.
Массив содержит 3 строки и 4 столбца, т.е. 3х4=12 элементов
а11
|
а12
|
а13
|
а14
|
а21
|
.
|
.
|
.
|
.
|
.
|
.
|
.
|
F
or i:=1 to 3 do
For j:=1 to 4 do
a[i,j]:=random(100);
2. Заполнение двумерного массива по столбцу :
а11
|
а12
|
.
|
.
|
а21
|
.
|
.
|
.
|
а31
|
.
|
.
|
.
|
F
or j:=1 to 4 do
For i:=1 to 3 do
a[i,j]:=random(100);
3. Печать содержимого на экран :
For i:=1 to n do
begin
For j:=1 to m do
Write (A[i,j]); {Вывод элементов одной
строки матрицы}
Writeln; { переход на следующую строку экрана}
end;
где
А - имя массива;
i - индекс строки;
j - индекс столбца;
n - количество элементов в строке;
m - количество элементов в столбце.
4. Вычисление суммы элементов каждой строки, столбца.
Дана квадратная матрица NxN, содержащая вещественные числа. Найти сумму элементов первого столбца.
Program pr2;
CONST N=3;
TYPE MAS=array [1..N,1..N] of real;
Var a: MAS;
i: 1..3;
j : 1..3;
s:real;
BEGIN
Writeln(‘Введите элементы массива’);
For i:=1 to n do
For j:=1 to n do
Readln(a[i,j]);
{Вывод значений массива}
For i:=1 to n do
begin
For j:=1 to n do
Write (a[i,j]:5:1);
Writeln;
end;
s:=0; j=1;
For i:=1 to n do
s:=s+a[i,j];
Writeln(‘Сумма элементов первого столбца = ’,s:5:2);
end.
5.Вычисление суммы элементов всего двумерного массива.
......
S:=0;
for i:=1 to m do
for j:=0 to n do
S:=S+a[i,j];
.............
6. Задача поиска максимального (минимального) элемента и его индексов.
Ищем максимальный элемент каждой строки :
For i:=0 to m do
begin
max:=a[i,1];
ind_L:=i; {сохраняем номер строки}
ind_C:=1; {заносим номер 1 - первый столбец}
for j:=1 to n do
if a[i,j]>max then begin
max:=a[i,j];
ind_C:=j {сохраняем номер j-ого столбца}
end;
writeln(‘max строки ’,i,’=’,max)
end;
Ищем минимальный элемент каждого столбца :
For j:=0 to n do { перемещаемся по столбцу}
begin
min:=a[1,j];
ind_L:=1; {сохраняем номер строки}
ind_C:=j; {сохраняем номер столбца}
for i:=1 to m do
if a[i,j]
min:=a[i,j];
ind_L:=i {сохраняем номер j-ой строки}
end;
writeln(‘min ‘,j,’ столбца’,min)
end;
7. Алгоритм поиска минимального элемента и его индексов для всего массива.
Min:=a[1,1];
ind_L:=1;
ind_C:=1;
for i:=1 to m do
for j:=1 to n do
if a[i,j]
min:=a[i,j]; ind_L:=i; ind_C:=j;
end;
8. Квадратные матрицы.
Type mas4x4=array[1..4,1..4] of integer;
var a: mas4x4;
a11
|
a12
|
a13
|
a14
|
a21
|
a22
|
a23
|
a24
|
a31
|
a32
|
a33
|
a34
|
a41
|
a42
|
a43
|
a44
|
Главная диагональ - элементы a11, a22, a33, a44 (индексы элементов, расположенных на главной диагонали (i=j)
Побочная диагональ - элементы a41, a32, a23, a14 (сумма индексов элементов на 1 больше размерности строки (или столбца), т.е. i+j=4=1 или i+j=n+1. На рисунке главная диагональ закрашена сплошным серым цветом, побочная - черным.
|
a12
|
a13
|
a14
|
|
|
a23
|
a24
|
|
|
|
a34
|
|
|
|
|
Элементы, расположенные над главной диагональю, Для индексов элементов, расположенных над главной диагональю выполняется отношение i<j;
|
|
|
|
a21
|
|
|
|
a31
|
a32
|
|
|
a41
|
a42
|
a43
|
|
Элементы, расположенные под главной диагональю, Для индексов элементов, расположенных под главной диагональю выполняется отношение i>j;
Примеры :
1) Найти сумму элементов главной диагонали:
S:=0;
for i:=1 to n do
S:=S+a[i,i];
2) Найти минимальный элемент побочной диагонали:
min:=a[1,n];
for i:=1 to n do
if a[i,n+1-i]
Примеры решения задач
Задача 1. Дан массив действительных чисел, состоящий из 3 строк и 5 столбцов. Вычислить произведение всех элементов массива.
Program pr1;
CONST N=3; M=5;
TYPE MAS=array [1..N,1..M] of real;
Var b: MAS;
i: 1..N;
j : 1..M;
p:real;
BEGIN
Writeln(‘Введите элементы массива’);
For i:=1 to n do
For j:=1 to m do
Readln(b[i,j]);
{Вывод значений массива}
For i:=1 to n do
begin
For j:=1 to m do
Write (b[i,j]); {Вывод элементов одной строки матрицы}
Writeln; { переход на следующую строку экрана}
end;
p:=1;
For i:=1 to n do
For j:=1 to m do
p:=p*b[i,j];
Writeln(‘Произведение = ’,p:7:2);
end.
Задача 2. Дан двумерный массив A[N,M]
Сформировать массив B[N,M], где
SQR(A[I.J]), если I- НЕЧЕТНОЕ;
B[I,J] =
SQRТ(A[I.J]), если I- ЧЕТНОЕ;
Program pr3;
CONST N=3; M=5;
TYPE MAS=array [1..N,1..M] of real;
Var a,b : MAS;
i: 1..N;
j : 1..M;
BEGIN
Writeln(‘Введите элементы массива’);
For i:=1 to N do
For j:=1 to M do
Readln(a[i,j]);
{Вывод значений массива}
For i:=1 to N do
begin
For j:=1 to M do
Write (a[i,j]:5:1);
Writeln;
end;
For i:=1 to N do
if i/2= int(i/2) Then For j:=1 to M do
b[i,j]:=sqrt (a[i,j])
Else For j:=1 to M do
b[i,j]:=sqr (a[i,j])
For i:=1 to N do
begin
For j:=1 to M do
Write (b[i,j]:7:2);
Writeln;
end;
end.
-
Дан двухмерный массив целых чисел. Составить программу :
а) вывода на экран элемента, расположенного в правом верхнем углу массива;
б) вывода на экран элемента, расположенного в левом нижнем углу массива;
в) вывода на экран любого элемента второй строки массива;
г) вывода на экран любого элемента третьего столбца массива;
д) вывода на экран любого элемента массива.
-
Дан двухмерный вещественный массив. Поменять местами :
а) элементы, расположенные в верхнем правом и нижнем левом углах;
б) элементы, расположенные в нижнем правом и верхнем левом углах;
-
Известен номер строки, на которой расположен элемент главной диагонали двумерного массива целых чисел. Вывести на экран значение этого элемента.
-
Вывести на экран (в одну строку) :
а) все элементы главной диагонали целочисленного массива, начиная с элемента, расположенного в левом верхнем углу;
б) все элементы главной диагонали вещественного массива, начиная с элемента, расположенного в правом нижнем углу.
-
Заменить значения всех элементов главной диагонали целочисленного массива на нулевые.
-
Заменить значения всех элементов побочной диагонали целочисленного массива на значения, равные 100.
-
Определить :
а) сумму элементов главной диагонали вещественного массива;
б) сумму элементов побочной диагонали целочисленного массива;
в) среднее арифметическое элементов главной диагонали массива целых чисел;
г) среднее арифметическое элементов побочной диагонали вещественного массива;
д) минимальный (максимальный) элемент главной диагонали целого массива;
е) максимальный (минимальный) элемент побочной диагонали вещественного массива;
ж) координаты первого максимального элемента главной диагонали вещественного массива;
з) координаты первого минимального элемента главной диагонали целочисленного массива.
-
Верно ли, что сумма элементов главной диагонали целочисленного массива не превышает 100?
-
Дан двухмерный массив вещественных чисел .
а) вывести на экран все элементы пятой строки массива;
б) вывести на экран все элементы третьей строки массива, начиная с по следнего элемента этой строки;
в) вывести на экран все элементы s-го столбца массива;
г) заменить значения всех элементов второй строки массива на число 5;
д) заменить значения всех элементов пятого столбца на число 10.
е) определить максимальный (минимальный) элемент третьего столбца;
-
Дан двухмерный целых чисел массив. Составить программу :
а) расчета произведения двух любых элементов любой строки массива
б) сумму всех элементов любой строки массива;
-
Дан двумерный массив целых чисел. Определить :
а) в каком столбце массива сумма элементов меньше, в первом или в последнем;
б) в какой строке произведение элементов больше, во второй или в третьей.
-
Заполнить двумерный массив размером 7х7 следующим образом :
-
а)
|
1
|
0
|
0
|
0
|
0
|
0
|
1
|
б)
|
1
|
0
|
0
|
1
|
0
|
0
|
1
|
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
|
0
|
0
|
1
|
1
|
1
|
0
|
0
|
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
|
0
|
0
|
1
|
1
|
1
|
0
|
0
|
|
0
|
1
|
0
|
0
|
0
|
1
|
0
|
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
|
1
|
0
|
0
|
0
|
0
|
0
|
1
|
|
1
|
0
|
0
|
1
|
0
|
0
|
1
|
-
* Заполнить массив 5х5 следующим образом :
-
а)
|
1
|
1
|
1
|
1
|
1
|
б)
|
1
|
2
|
3
|
4
|
5
|
|
1
|
2
|
3
|
4
|
5
|
|
16
|
17
|
18
|
19
|
6
|
|
1
|
3
|
6
|
10
|
15
|
|
15
|
24
|
25
|
20
|
7
|
|
1
|
4
|
10
|
20
|
35
|
|
14
|
23
|
22
|
21
|
8
|
|
1
|
5
|
15
|
35
|
70
|
|
13
|
12
|
11
|
10
|
9
|
-
*Заполнить двумерный массив размером nxn числами 1, 2, ... n2, расположенным в нем по спирали : (см 9.13б)
-
Дан двухмерный целочисленный массив размером 10 х 10. Вывести на экран часть массива :
а) расположенную выше главной диагонали;
б) расположенную ниже главной диагонали;
в) расположенную выше побочной диагонали;
г) расположенную ниже побочной диагонали;
-
Дан двумерный массив целых чисел :
а) в каждом его столбце найти максимальный (минимальный) элемент;
б) координаты максимального (минимального) элемента;
в) сумму нечетных элементов в каждом столбце (строке);
г) количество элементов кратных А или В.
д)* найти строку с максимальной суммой элементов;
е)* найти столбец с минимальной суммой элементов.
-
Даны два двумерных вещественных массива одинаковых размеров.
а) создать третий массив такого же размера, каждый элемент которого равен сумме соответствующих элементов двух первых массивов.
б) создать третий массив такого же размера, каждый элемент которого равен 100, если соответствующие элементы двух первых массивов имеют одинаковый знак, и равен нулю в противном случае.
-
* Дан двухмерный массив размером nxn , заполненный целыми числами.
а) все его элементы, кратные трем, записать в одномерный массив.
б) все его положительные элементы записать в один одномерный массив, а остальные - в другой.
-
Дан двухмерный массив целых чисел.
а) сформировать одномерный массив, каждый элемент которого равен сумме четных положительных элементов соответствующего столбца двумерного массива.
б) сформировать одномерный массив, каждый элемент которого равен количеству нечетных отрицательных элементов соответствующего столбца двумерного массива.
в) сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов соответствующей строке двухмерного массива, кратных 3 или 7.
г) сформировать одномерный массив, каждый элемент которого равен количеству положительных элементов соответствующего столбца двухмерного массива, кратных 4 или 5.
-
* Дан двумерный массив из четного числа столбцов. Поменять местами первый со вторым, третий - с четвертым и т.д.
-
Дан двухмерный массив. а) удалить из него k-ую строку, s-ый столбец.