Алгоритмы

1. Подсчёт количества, накопление суммы и произведения

Для подсчёта количества элементов, удовлетворяющих условию, в каком-либо наборе* элементов необходимо, прежде всего, обнулить целевую переменную, затем в цикле (вложенных циклах) перебрать все элементы набора. Последовательно проверяя, удовлетворяет ли условию каждый элемент набора, увеличиваем на 1 целевую переменную в случае нахождения элемента, удовлетворяющего условию. После завершения цикла/циклов целевая переменная будет содержать количество элементов, удовлетворяющих условию.

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

При накоплении произведения элементов, удовлетворяющих условию, начальным значением является 1, а знак сложения заменяется знаком умножения.

2. Поиск максимального/минимального элемента и его номера

Для нахождения максимального/минимального элемента какого-либо набора присваиваем целевой переменной значение первого элемента набора. Затем для «одномерных» наборов можно начать цикл со второго элемента. Для многомерных массивов так делать нельзя, т.к. в этом случае будут пропущены некоторые элементы. В цикле/циклах сравниваем очередной элемент набора с целевой переменной. Если рассматриваемый элемент набора больше (при поиске максимального элемента) или меньше (при поиске минимального элемента) целевой переменной, то целевой переменной присваивается значение рассматриваемого элемента набора. После завершения цикла/циклов целевая переменная будет содержать значение максимального/минимального элемента набора.

При необходимости вместо элемента набора может быть подставлено любое выражение, зависящее от значения элемента набора или даже нескольких наборов.

При поиске номера максимального/минимального элемента возникает вторая целевая переменная – номер искомого элемента. До начала цикла этой переменной должна быть присвоена 1. В цикле переменная, хранящая номер, меняется вместе с переменной, хранящей значение максимального/минимального элемента. Если необходимо найти номер первого максимального/минимального элемента, то используется операция «больше»/«меньше». Если необходимо найти номер последнего максимального/минимального элемента, то используется операция «больше или равно»/«меньше или равно».

Для многомерных массивов необходимо найти два или более индексов – этот случай отличается от предыдущего только количеством переменных.

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

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

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

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

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

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

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

4. Формирование массива с известным количеством элементов

Пусть необходимо сформировать одномерный массив, каждый элемент которого соответствует одной строке или одному столбцу матрицы. В цикле организуем обработку строк/столбцов матрицы. Тело цикла должно состоять из двух частей:

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

5. Формирование массива с неизвестным количеством элементов

Пусть необходимо сформировать одномерный массив из элементов набора, удовлетворяющих некоторому условию. Количество этих элементов заранее не известно. В этом случае не существует возможности вычислить индекс элемента в формируемом массиве в зависимости от индекса/индексов элемента в обрабатываемом наборе. Поэтому в качестве индекса элемента формируемого массива используется специальная целевая переменная. Вначале ей присваивается значение 0 – в формируемом массиве нет элементов. Затем в цикле/циклах перебираем все элементы обрабатываемого набора, и при нахождении элемента, удовлетворяющего условию, заносим его в формируемый массив – для этого сначала увеличиваем на 1 целевую переменную (индекс элемента в формируемом массиве), а затем используем эту переменную как индекс нового элемента в формируемом массиве и присваиваем этому элементу значение найденного элемента обрабатываемого набора. В результате формируем массив и одновременно подсчитываем количество элементов в формируемом массиве.

6. Обработка элементов матрицы, лежащих выше/ниже главной диагонали

Для обработки элементов матрицы, лежащих выше/ниже главной диагонали не нужно использовать условные блоки – достаточно в циклах правильно указать диапазоны изменения номеров строк и столбцов матрицы. Пусть n – количество строк и столбцов матрицы, i и j – номер строки и столбца соответственно. Тогда для элементов, лежащих выше главной диагонали, используем i = 1, …, n – 1, j = i + 1, …, n. Для элементов, лежащих выше главной диагонали и на главной диагонали, используем i = 1, …, n , j = i, …, n. Для элементов, лежащих ниже главной диагонали, используем i = 2, …, n, j = 1, …, i – 1. И, наконец, для элементов, лежащих ниже главной диагонали и на главной диагонали, используем i = 1, …, n, j = 1, …, i.


* Под набором подразумевается любая совокупность однотипных элементов: одномерный массив, матрица, многомерный массив, множество, файл.