МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


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


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Рекомендации по программированию





МАССИВЫ

 

Цель работы: подробно изучить приемы работы с массивами.

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

Элементы массива имеют одно и то же имя, а различаются порядковым номером (индексом). Это позволяет компактно записывать множество операций с помощью циклов.

Массив относится к ссылочным типам данных, то есть располагается в динамической области памяти, поэтому создание массива начинается с выделения памяти под его элементы. Элементами массива могут быть величины как значимых, так и ссылочных типов (в том числе массивы). Массив значимых типов хранит значения, массив ссылочных типов – ссылки на элементы. Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимих типов и null – для ссылочных.

На рисунке 1 представлен массив, состоящий из пяти элементов любого значимого типа, например int или double, а рисунок 2 иллюстрирует организацию массива из элементов ссылочного типа.

Рисунок 1 – Простые переменные и массив из элементов значимого типа

Рисунок 2 – Массив из элементов ссылочного типа

 

Вот, например, как выглядят операторы создания массива из 10 целых чисел и массива из 100 строк:

int [] w = new int [10];

string[] z = new string[100];

 

В первом операторе описан массив w типа int[].Операция new выделяет память под 10 целых элементов, и они заполняются нулями.

Во втором операторе описан массив z типа string[].Операция new выделяет память под 100 ссылок на строки, и эти ссылки заполняются значением null.

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

Количество элементов в массиве (размерность) не является частью его типа, это количество задается при выделении памяти и не может быть изменено впоследствии. Размерность может задаваться не только константой, но и выражением.

Результат вычисления этого выражения должен быть неотрицательным, а его тип должен иметь неявное преобразование к int, uint, long или ulong.

Элементы массива нумеруются с нуля, поэтому максимальный номер элемента всегда на единицу меньше размерности (например, в описанном выше массиве w элементы имеют индексы от 0 до 9). Для обращения к элементу массива после имени массива указывается номер элемента в квадратных скобках, например:

w[4]

z[i]

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

Массивы одного типа можно присваивать друг другу. При этом происходит присваивание ссылок, а не элементов, как и для любого другого объекта ссылочного типа, например:

int [] а = new int[10];

int [] b = а; // b и а указывают на один и тот же массив

Все массивы в С# имеют общий базовый класс Array, определенный в пространстве имен System. В нем есть несколько полезных методов, упрощающих работу с массивами, например методы получения размерности, сортировки и поиска.

ПРИМЕЧАНИЕ

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

В С# существуют три разновидности массивов: одномерные, прямоугольные и ступенчатые (не выровненные).

Одномерные массивы

Одномерные массивы используются в программах чаще всего. Варианты описания массива:

тип[] имя;

тип[] имя = new тип [ размерность ];

тип[] имя = { список инициализаторов };

тип[] имя = new тип [] { список инициализаторов };

тип[] имя = new тип [ размерность ] { список инициализаторов };

ВНИМАНИЕ

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

Примеры описаний (один пример для каждого варианта описания):

int[] a; // 1 элементов нет

int[] b = new int[4]; // 2 элементы равны 0

int[] c = { 61, 2, 5, -9 }; // 3 new подразумевается

int[] d = new int[] { 61, 2, 5, -9 }; // 4 размерность вычисляется

int[] e = new int[4] { 61, 2, 5, -9 }; // 5 избыточное описание

 

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

В более общем виде: можно преобразовать массив, состоящий из элементов некоторого класса а, в массив, состоящий из элементов типа, являющегося базовым для а.

В каждом из остальных массивов по четыре элемента целого типа. Как видно из операторов 3-5, массив при описании можно инициализировать. Если при этом не задана размерность (оператор 3), количество элементов вычисляется по количеству инициализирующих значений. Для полей объектов и локальных переменных можно опускать операцию new, она будет выполнена по умолчанию (оператор 2). Если присутствует и размерность, и список инициализаторов, размерность должна быть константой (оператор 4).

ПРИМЕЧАНИЕ

Если количество инициализирующих значений не совпадает с размерностью, возникает ошибка компиляции.

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

Листинг 1 –Работа с одномерным массивом

Результат работы программы:

 

Обратите внимание на то, что для вывода массива требуется организовать цикл.

Прямоугольные массивы

Прямоугольный массив имеет более одного измерения. Чаще всего в программах используются двумерные массивы. Варианты описания двумерного массива:

тип[,] имя;

тип[,] имя = new тип [ разм_1, разм_2 ];

тип[,] имя = { список_инициализаторов };

тип[,] имя = new тип [,] { список_инициализаторов };

тип[,] имя = new тип [ разм_1, разм_2 ] { список_инициализаторов };

 

Примеры описаний (один пример для каждого варианта описания):

int[,] a; // 1 элементов нет

int[,] b = new int[2, 3]; // 2 элементы равны 0

int[,] c = {{1, 2, 3}, {4, 5, 6}}; // 3 new подразумевается

int[,] c = new int[,] {{1, 2, 3}, {4, 5, 6}}; // 4 размерность вычисляется

int[,] d = new int[2,3] {{1, 2, 3}, {4, 5, 6}}; // 5 избыточное описание

 

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

a[1, 4] b[i, j] b[j, i]

 

ВНИМАНИЕ

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

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

Рисунок 3 – Матрица из т строк и п столбцов

 

Для нахождения среднего арифметического элементов массива требуется найти их общую сумму, после чего разделить ее на количество элементов. Порядок перебора элементов массива (по строкам или по столбцам) роли не играет. Нахождение количества положительных элементов каждой строки требует просмотра матрицы по строкам. Схема алгоритма приведена на рисунке 4, программа – в листинге 2.

Рисунок 4 – Структурная схема алгоритма для листинга 2

 

Листинг 2.Работа с двумерным массивом

Результат работы программы:

ПРИМЕЧАНИЕ

Для суммирования элементов описана переменная sum вещественного типа. Если описать ее как целую, при делении на количество элементов будет отброшена дробная часть.

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

Ступенчатые массивы

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

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

Рисунок 5 – Ступенчатый массив

 

Описание ступенчатого массива:

тип[][] имя;

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

int[][] а = new int [3] []; // выделение памяти под ссылки на три строки

а[0] = new int [5]; // выделение памяти под 0-ю строку (5 элементов)

а[1] = new int [3]; // выделение памяти под 1-ю строку (3 элемента)

a[2] = new int [4]; // выделение памяти под 2-ю строку (4 элемента)

Здесь а[0], а[1] и а[2] – это отдельные массивы, к которым можно обращаться по имени. Другой способ выделения памяти:

int[] [] а = { new int[5], new int[3], new int[4] };

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

а[1][2] a[i][j] a[j][i]

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

Класс System.Array

Все массивы в С# построены на основе базового класса Array, который содержит полезные для программиста свойства и методы, часть из которых перечислены в таблице 1.

Таблица 1 – Основные элементы класса Array

Элемент Вид Описание
Length Свойство Количество элементов массива (по всем размерностям)
BinarySearch Статический метод Двоичный поиск в отсортированном массиве
Clear Статический метод Присваивание элементам массива значений по умолчанию
Copy Статический метод Копирование заданного диапазона элементов одного массива в другой массив
GetValue Метод Получение значения элемента массива
IndexOf Статический метод Поиск первого вхождения элемента в одномерный массив
Reverse Статический метод Изменение порядка следования элементов на обратный
Sort Статический метод Упорядочивание элементов одномерного массива

 

Свойство Length позволяет реализовывать алгоритмы, которые будут работать с массивами различной длины или, например, со ступенчатым массивом. Использование этого свойства вместо явного задания размерности исключает возможность выхода индекса за границы массива. В листинге 3 продемонстрировано применение элементов класса Array при работе с одномерным массивом.

Листинг 3.Использование методов класса Array с одномерным массивом

Методы Sort, IndexOf и BinarySearch являются статическими, поэтому к ним обращаються через имя класса, а не экземпляра, и передают в них имя массива.

Двоичный поиск можно применять только для упорядоченных массивов. Он выполняется гораздо быстрее, чем линейный поиск, реализованный в методе IndexOf. В листинге поиск элемента, имеющего значение 18, выполняется обойми этими способами. В классе Class1 описан вспомогательный статический метод PrintArray, предназначенный для вывода массива на экран. В него передаются два параметра: строка заголовка header и массив. Количество элементов массива определяется внутри метода с помощью свойства Length. Таким образом, этот метод можно использовать для вывода любого целочисленного одномерного массива.

 

ПРИМЕЧАНИЕ

Рассмотренные методы имеют по несколько версий (в этом случае употребляется термин ≪перегруженные методы≫), что позволяет выполнять поиск, сортировку и копирование как в массиве целиком, как и в его указанном диапазоне.

 

Результат работы программы:

 

Для того чтобы применять метод PrintArray к массивам, состоящим из элементов другого типа, можно описать его второй параметр как Array. Правда, при этом значение элемента массива придется получать с помощью метода Get Value, поскольку доступ по индексу для класса Array не предусмотрен. Обобщенный метод вызова массива выглядит так:

public static void PrintArray(string header, Array a)

{

Console.WriteLine(header);

for (int i = 0; i < a.Length; ++i)

Console.Write("\t" + a.GetValue(i));

Console.WriteLine();

}

В листинге 4 продемонстрировано применение элементов класса Array при работе со ступенчатым массивом.

Листинг 4.Использование методов класса Array со ступенчатым массивом

Обратите внимание на то, как внутри цикла по строкам определяется длина каждого массива.

Результат работы программы:

 

Оператор foreach

Оператор foreach применяется для перебора элементов в специальным образом организованной группе данных. Массив является именно такой группой. Удобство этого вида цикла заключается в том, что нам не требуется определять количество элементов в группе и выполнять их перебор по индексу: мы просто указываем на необходимость перебрать все элементы группы. Синтаксис оператора:

foreach ( тип имя in выражение ) тело_цикла

 

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

Например, пусть задан массив:

int[] a = { 24, 50, 18, 3, 16, -7, 9, -1 };

 

Вывод этого массива на экран с помощью оператора foreach выглядит следующим образом:

foreach ( int x in a ) Console.WriteLine( x );

 

Этот оператор выполняется так: на каждом проходе цикла очередной элемент массива присваивается переменной х и с ней производятся действия, записанные в теле цикла.

Ступенчатый массив из листинга 4 вывести на экран с помощью оператора foreach немного сложнее, чем одномерный, но все же проще, чем с помощью цикла for:

 

foreach (int[] х in a)

{

foreach (int у in х) Console.Write("\t" + у);

Console.WriteLine();

}

 

Результат работы программы:

 

В листинге 5 решается та же задача, что и в листинге 1, но с использованием цикла foreach. Обратите внимание на то, насколько понятнее стала программа.

Листинг 5.Работа с одномерным массивом с использованием цикла foreach

Результат работы программы:

 

А вот как можно переписать метод вывода массива из листинга 3:

public static void PrintArray(string header, Array a)

{

Console.WriteLine(header);

foreach (object x in a) Console.Write("\t" + x);

Console.WriteLine();

}

Такая запись становится возможной потому, что любой объект может быть неявно преобразован к типу его базового класса, а тип object, как вы помните, является корневым классом всей иерархии.

ВНИМАНИЕ

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

 

Массивы объектов

При создании массива, состоящего из элементов ссылочного типа, память выделяется только под ссылки на элементы, а сами элементы необходимо разместить в хипе явным образом. В качестве примера создадим массив из объектов некоторого класса Monster:

Результат работы программы:

 

В программе для получения случайных значений использован стандартный класс Random. В операторе 1выделяется пять ячеек памяти под ссылки на экземпляры класса Monster, и эти ссылки заполняются значением null. В цикле 2 создаются пять объектов: операция new выделяет память в хипе необходимого для хранения полей объекта объема, а конструктор объекта заносит в эти поля соответствующие значения (выполняется версия конструктора с тремя параметрами). Цикл 3 демонстрирует удобство применения оператора foreach для работы с массивом.

Рекомендации по программированию

Используйте для хранения данных массив, если количество однотипных элементов, которые требуется обработать в вашей программе, известно или, по крайней мере, известно максимальное количество таких элементов. В последнем случае память под массив выделяется ≪по максимуму≫, а фактическое количество элементов хранится в отдельной переменной, которая вычисляется в программе.

При работе с массивом нужно обязательно предусматривать обработку исключения IndexOutOfRangeException, если индекс для обращения к массиву вычисляется в программе по формулам, а не задается с помощью констант или счетчиков циклов for.

СОВЕТ

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

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

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

Индивидуальные задания:

 

І. Одномерные массивы

Вариант 1

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

• сумму отрицательных элементов массива;

• произведение элементов массива, расположенных между максимальным и минимальным элементами.

Упорядочить элементы массива по возрастанию.

Вариант 2

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

• сумму положительных элементов массива;

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

Упорядочить элементы массива по убыванию.

Вариант 3

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

• произведение элементов массива с четными номерами;

• сумму элементов массива, расположенных между первым и последним нулевыми элементами.

Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом – все отрицательные (элементы, равные нулю, считать положительными).

Вариант 4

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

• сумму элементов массива с нечетными номерами;

• сумму элементов массива, расположенных между первым и последним отрицательными элементами.

Сжать массив, удалив из него все элементы, модуль которых не превышает единицу.

Освободившиеся в конце массива элементы заполнить нулями.

Вариант 5

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

• максимальный элемент массива;

• сумму элементов массива, расположенных до последнего положительного элемента.

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а, b]. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 6

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

• минимальный элемент массива;

• сумму элементов массива, расположенных между первым и последним положительными элементами.

Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом – все остальные.

Вариант 7

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

• номер максимального элемента массива;

• произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

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

Вариант 8

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

• номер минимального элемента массива;

• сумму элементов массива, расположенных между первым и вторым отрицательными элементами.

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

Вариант 9

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

• максимальный по модулю элемент массива;

• сумму элементов массива, расположенных между первым и вторым положительными элементами.

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

Вариант 10

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

• минимальный по модулю элемент массива;

• сумму модулей элементов массива, расположенных после первого элемента, равного нулю.

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

Вариант 11

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

• номер минимального по модулю элемента массива;

• сумму модулей элементов массива, расположенных после первого отрицательного элемента.

Сжать массив, удалив из него все элементы, величина которых находится в интервале [а, b]. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 12

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

• номер максимального по модулю элемента массива;

• сумму элементов массива, расположенных после первого положительного элемента.

Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [а, b], а потом – все остальные.

Вариант 13

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

• количество элементов массива, лежащих в диапазоне от А до В;

• сумму элементов массива, расположенных после максимального элемента.

Упорядочить элементы массива по убыванию модулей.

Вариант 14

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

• количество элементов массива, равных нулю;

• сумму элементов массива, расположенных после минимального элемента.

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

Вариант 15

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

• количество элементов массива, больших С;

• произведение элементов массива, расположенных после максимального по модулю элемента.

Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом – все положительные (элементы, равные нулю, считать положительными).

Вариант 16

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

• количество отрицательных элементов массива;

• сумму модулей элементов массива, расположенных после минимального по модулю элемента.

Заменить все отрицательные элементы массива их квадратами и упорядочить элементы массива по возрастанию.

Вариант 17

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

• количество положительных элементов массива;

• сумму элементов массива, расположенных после последнего элемента, равного нулю.

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

Вариант 18

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

• количество элементов массива, меньших С;

• сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.

Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом – все остальные.

Вариант 19

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

• произведение отрицательных элементов массива;

• сумму положительных элементов массива, расположенных до максимального элемента.

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

Вариант 20

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

• произведение положительных элементов массива;

• сумму элементов массива, расположенных до минимального элемента.

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

 

ІІ. Двумерные массивы

Вариант 1

Дана целочисленная прямоугольная матрица. Определить:

• количество строк, не содержащих ни одного нулевого элемента;

• максимальное из чисел, встречающихся в заданной матрице более одного раза.

Вариант 2

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

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

Вариант 3

Дана целочисленная прямоугольная матрица. Определить:

• количество столбцов, содержащих хотя бы один нулевой элемент;

• номер строки, в которой находится самая длинная серия одинаковых элементов.

Вариант 4

Дана целочисленная квадратная матрица. Определить:

• произведение элементов в тех строках, которые не содержат отрицательных элементов;

• максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

Вариант 5

Дана целочисленная квадратная матрица. Определить:

• сумму элементов в тех столбцах, которые не содержат отрицательных элементов;

• минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.

Вариант 6

Дана целочисленная прямоугольная матрица. Определить:

• сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;

• номера строк и столбцов всех седловых точек матрицы.

ПРИМЕЧАНИЕ

Седловой точкой (седловым элементом) матрицы называют элемент матрицы , удовлетворяющий условиям ; , то есть элемент матрицы, который одновременно является минимальным элементом в соответствующей строке матрицы и максимальным элементом в соответствующем столбце матрицы, или, что то же самое, элемент матрицы, который одновременно является максимальным элементом в соответствующем столбце матрицы и минимальным элементом в соответствующей строке матрицы.

Вариант 7

Для заданной матрицы размером 8×8 найти такие k, при которых k-я строка матрицы совпадает с k-м столбцом.

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

Вариант 8

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

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

Вариант 9

Соседями элемента Aij в матрице назовем элементы Аkl, где i - 1 < k < i + 1, j - 1 < l<j + 1. Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы.

Построить результат сглаживания заданной вещественной матрицы размером 10×10.

В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали.

Вариант 10

Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей (определение соседних элементов см. в варианте 9). Подсчитать количество локальных минимумов заданной матрицы размером 10×10.

Найти сумму модулей элементов, расположенных выше главной диагонали.

Вариант 11

Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду.

Найти количество строк, среднее арифметическое элементов которых меньше заданной величины.

Вариант 12

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями.

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

Вариант 13

Осуществить циклический сдвиг элементов прямоугольной матрицы на п элементов вправо или вниз (в зависимости от введенного режима), п может быть больше количества элементов в строке или столбце.

Вариант 14

Осуществить циклический сдвиг элементов квадратной матрицы размером М×N вправо на k элементов таким образом: элементы первой строки сдвигаются в последний столбец сверху вниз, из него – в последнюю строку справа налево, из нее – в первый столбец снизу вверх, из него – в первую строку; для остальных элементов – аналогично.

Вариант 15

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

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

Вариант 16

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

Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.

Вариант 17

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

Найти номер первой из строк, не содержащих ни одного положительного элемента.

Вариант 18

Дана целочисленная прямоугольная матрица. Определить:

• количество строк, содержащих хотя бы один нулевой элемент;

• номер столбца, в котором находится самая длинная серия одинаковых элементов.

Вариант 19

Дана целочисленная квадратная матрица. Определить:

• сумму элементов в тех строках, которые не содержат отрицательных элементов;

• минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

Вариант 20

Дана целочисленная прямоугольная матрица. Определить:

• количество отрицательных элементов в тех строках, которые содержат хотя бы один нулевой элемент;

• номера строк и столбцов всех седловых точек матрицы.

ПРИМЕЧАНИЕ

Седловой точкой (седловым элементом) матрицы называют элемент матрицы , удовлетворяющий условиям ; , то есть элемент матрицы, который одновременно является минимальным элементом в соответствующей строке матрицы и максимальным элементом в соответствующем столбце матрицы, или, что то же самое, элемент матрицы, который одновременно является максимальным элементом в соответствующем столбце матрицы и минимальным элементом в соответствующей строке матрицы.





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.