KN_6_2013-2014 / НПП_6_з_2013 / НПП_6_з_2013 / Лаб_ раб_мас
.docЛабораторная работа
Тема. Работа с массивами.
Ход выполнения работы.
Создать Windows Forms приложение для решения задачи, для чего:
-
Сформировать значения элементов массива с использованием методов класса Random. Размерность массива задается с использованием элементов управления приложения.
-
Отобразить элементы сформированного входного массива в элементе управления DatagridView. Предусмотреть очистку элементов приложения для возможности формирования нового массива.
-
В приложении предусмотреть также отображение результатов решения задания. Для запуска выполнения заданий предусмотреть элементы управления(кнопка или переключатель и др.)
-
При создании приложения использовать создание методов, предусмотреть обработку исключительных ситуаций и др. эффективные для решения даной задачи средства платформы .NET.
Индивидуальные задания.
Часть 1.
-
Подсчитать среднее арифметическое нечетных элементов, расположенных выше главной диагонали.
-
Подсчитать среднее арифметическое четных элементов, расположенных ниже главной диагонали.
-
Подсчитать сумму элементов, расположенных на побочной диагонали.
-
Подсчитать среднее арифметическое ненулевых элементов, расположенных над побочной диагональю.
-
Подсчитать среднее арифметическое элементов, расположенных под побочной диагональю.
-
Поменять местами столбцы по правилу: первый с последним, второй с предпоследним и т.д.
-
Поменять местами две средних строки, если количество строк четное, и первую со средней строкой, если количество строк нечетное.
-
Поменять местами два средних столбца, если количество столбцов четное, и первый со средним столбцом, если количество столбцов нечетное.
-
Если количество строк в массиве четное, то поменять строки местами по правилу: первую строку со второй, третью – с четвертой и т.д. Если количество строк в массиве нечетное, то оставить массив без изменений.
-
Если количество столбцов в массиве четное, то поменять столбцы местами по правилу: первый столбец со вторым, третий – с четвертым и т.д. Если количество столбцов в массиве нечетное, то оставить массив без изменений.
-
Вычислить Аn, где n – натуральное число.
-
Подсчитать норму матрицы по формуле .
-
Подсчитать норму матрицы по формуле .
-
Вывести элементы матрицы в следующем порядке:
-
Выяснить, является ли матрица симметричной относительно главной диагонали.
-
Заполнить матрицу числами от 1 до n (где n=mk, а m – количесто строк, а k – количество столбцов прямоугольной матрицы) следующим образом:
-
Определить, есть ли в данном массиве строка, состоящая только из положительных элементов.
-
Определить, есть ли в данном массиве столбец, состоящий только из отрицательных элементов.
-
В каждой строке найти максимум и заменить его на противоположный элемент.
-
В каждом столбце найти минимум и заменить его нулем.
Часть 2.
-
Найти максимальный элемент в каждой строке и записать данные в новый массив.
-
Найти минимальный элемент в каждом столбце и записать данные в новый массив.
-
Четные столбцы таблицы заменить на вектор Х.
-
Нечетные строки таблицы заменить на вектор Х.
-
Вычислить А*Х, где А – двумерная матрица, X – вектор.
-
Для каждой строки подсчитать количество положительных элементов и записать данные в новый массив.
-
Для каждого столбца подсчитать сумму отрицательных элементов и записать данные в новый массив.
-
Для каждого столбца подсчитать сумму четных положительных элементов и записать данные в новый массив.
-
Для каждой строки подсчитать количество элементов, больших заданного числа, и записать данные в новый массив.
-
Для каждого столбца найти первый положительный элемент и записать данные в новый массив.
-
Для каждой строки найти последний четный элемент и записать данные в новый массив.
-
Для каждого столбца найти номер последнего нечетного элемента и записать данные в новый массив.
-
Для каждой строки найти номер первого отрицательного элемента и записать данные в новый массив.
-
Для каждой строки найти сумму элементов с номерами от k1 до k2 и записать данные в новый массив.
-
Для каждого столбца найти произведение элементов с номерами от k1 до k2 и записать данные в новый массив.
-
Для каждой строки подсчитать сумму элементов, не попадающих в заданный интервал, и записать данные в новый массив.
-
Подсчитать сумму элементов каждой строки и записать данные в новый массив. Найти максимальный элемент нового массива.
-
Подсчитать произведение элементов каждого столбца и записать данные в новый массив. Найти минимальный элемент нового массива.
-
Для каждой строки найти номер первой пары неравных элементов. Данные записать в новый массив.
-
Для каждого столбца найти номер первой пары одинаковых элементов. Данные записать в новый массив.
Теоретическая справка
Использование DatagridView
dataGridView2.ColumnCount = n;
dataGridView2.Columns[0].Name = "Column0";
dataGridView2.Rows.Add();
dataGridView2.Rows[i].HeaderCell.Value= "row" + i.ToString();
dataGridView2.Rows[j].Cells[j].Value = dd;
string dfh = dataGridView2.Rows[i].Cells[i].Value.ToString();
Класс Random и его функции
Умение генерировать случайные числа требуется во многих приложениях. Класс Random содержит все необходимые для этого средства. Класс Random имеет конструктор класса: для того, чтобы вызывать методы класса, нужно вначале создавать экземпляр класса. Этим Random отличается от класса Math, у которого все поля и методы – статические, что позволяет обойтись без создания экземпляров класса Math.
Как и всякий “настоящий” класс, класс Random является наследником класса Object, а, следовательно, имеет в своем составе и методы родителя. Рассмотрим только оригинальные методы класса Random со статусом public, необходимые для генерирования последовательностей случайных чисел. Начнем рассмотрение с конструктора класса. Он перегружен и имеет две реализации. Одна из них позволяет генерировать неповторяющиеся при каждом запуске серии случайных чисел. Начальный элемент такой серии строится на основе текущей даты и времени, что гарантирует уникальность серии. Этот конструктор вызывается без параметров. Он описан как public Random(). Другой конструктор с параметром – public Random (int) обеспечивает важную возможность генерирования повторяющейся серии случайных чисел. Параметр конструктора используется для построения начального элемента серии, поэтому при задании одного и того же значения параметра серия будет повторяться.
Перегруженный метод public int Next() при каждом вызове возвращает положительное целое, равномерно распределенное в некотором диапазоне. Диапазон задается параметрами метода. Три реализации метода отличаются набором параметров:
-
public int Next () – метод без параметров выдает целые положительные числа во всем положительном диапазоне типа int;
-
public int Next (int max) – выдает целые положительные числа в диапазоне [0,max];
-
public int Next (int min, int max) – выдает целые положительные числа в диапазоне [min,max].
Метод public double NextDouble () имеет одну реализацию. При каждом вызове этого метода выдается новое случайное число, равномерно распределенное в интервале [0-1).
Еще один полезный метод класса Random позволяет при одном обращении получать целую серию случайных чисел. Метод имеет параметр - массив, который и будет заполнен случайными числами. Метод описан как public void NextBytes (byte[] buffer). Так как параметр buffer представляет массив байтов, то, естественно, генерированные случайные числа находятся в диапазоне [0, 255].
пример работы со случайными числами
/// <summary>
/// Эксперименты с классом Random
/// </summary>
public void Rand()
{
const int initRnd = 77;
Random realRnd = new Random();
Random repeatRnd = new Random(initRnd);
// случайные числа в диапазоне [0,1)
Console.WriteLine("случайные числа в диапазоне[0,1)");
for(int i =1; i <= 5; i++)
{
Console.WriteLine("Число " + i + "= "
+ realRnd.NextDouble() );
}
// случайные числа в диапазоне[min,max]
int min = -100, max=-10;
Console.WriteLine(“случайные числа в диапазоне [" +
min +"," + max + "]“);
for(int i =1; i <= 5; i++)
{
Console.WriteLine(“Число ” + i + “= “
+ realRnd.Next(min,max) );
}
// случайный массив байтов
byte[] bar = new byte[10];
repeatRnd.NextBytes(bar);
Console.WriteLine(“Массив случайных чисел в диапазоне
[0, 255]“);
for(int i =0; i < 10; i++)
{
Console.WriteLine(“Число ” + i + “= ” +bar[i]);
}
}//Rand
Вначале создаются два объекта класса Random. У этих объектов разные конструкторы. Объект с именем realRnd позволяет генерировать неповторяющиеся серии случайных чисел. Объект repeatRnd дает возможность повторить при необходимости серию. Метод NextDouble создает серию случайных чисел в диапазоне [0, 1). Вызываемый в цикле метод Next с двумя параметрами создает серию случайных положительных целых, равномерно распределенных в диапазоне [-100, -10]. Метод NextBytes объекта repeatRnd позволяет получить при одном вызове массив случайных чисел из диапазона [0, 255]. Результаты вывода можно увидеть на рис. 7.2.
Рис. 7.2. Генерирование последовательностей случайных чисел в процедуре Rand