- •Лабораторна робота № 1 Множення матриць
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Лабораторна робота № 2 Обробка двовимірного масиву
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Лабораторна робота № 3 Створення ієрархії об’єктів
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Лабораторна робота № 4 Застосування індексатора
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Лабораторна робота № 5 Делегати і події
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Лабораторна робота № 6 Структурний тип даних
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Лабораторна робота № 7 Перелічувальний тип даних
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Лабораторна робота № 8 Обробка файлу даних
- •1. Постановка задачі
- •2. Поради до написання програми
- •Постановка задачі.
- •4. Контрольні запитання
- •Література Основна
Номер, тема і мета лабораторної роботи.
Стислі теоретичні відомості.
Постановка задачі.
Текст програми відповідно до завдання з коментарями та результатами.
Висновки.
4. Контрольні запитання
Матриця.
Множення матриць.
Існування результату множення матриць.
Об’ява та ініціалізація масиву.
Клас Random.
Лабораторна робота № 2 Обробка двовимірного масиву
Мета роботи: навчитись складати методи створення двовимірного масиву, заповнення масиву даними, обчислення числових характеристик рядків і стовпців масиву і виведення масиву на екран.
1. Постановка задачі
Програма для
двовимірного
-масиву
цілих випадкових чисел з діапазону
за одним з нижче заданих алгоритмів
обчислює числові характеристики рядків
і стовпців масиву і виводить масив
і результати його обробки у вигляді
таблиці в компонент TextBox.
Результати обчислення рядків (масив
)
записуються в
-й
стовпець таблиці, а результати обчислення
стовпців (масив
) –
в -й рядок.
Таблиця 4.1
Варіанти завдань
№ |
Результат обчислення рядка |
Результат обчислення стовпця |
1 |
Сума парних чисел |
Середнє квадратичне значення |
2 |
Сума непарних чисел |
Добуток додатних чисел |
3 |
Середнє значення парних чисел |
Добуток від’ємних чисел |
4 |
Середнє значення непарних чисел |
Середній квадрат додатних чисел |
5 |
Кількість максимальних чисел |
Сума квадратів непарних чисел |
6 |
Кількість мінімальних чисел |
Кількість чисел менших одиниці |
7 |
Сума квадратів парних чисел |
Кількість мінімальних чисел |
8 |
Сума квадратів непарних чисел |
Кількість нулів в стовпці |
9 |
Середній квадрат парних чисел |
Кількість одиниць в стовпці |
10 |
Середній квадрат непарних чисел |
Кількість додатних чисел |
11 |
Середнє значення додатних чисел |
Кількість від’ємних чисел |
12 |
Середнє значення від’ємних чисел |
Мінімальне число стовпця |
13 |
Середній квадрат додатних чисел |
Максимальне число стовпця |
14 |
Середній квадрат від’ємних чисел |
Середнє значення парних чисел |
15 |
Добуток додатних чисел |
Середнє значення непарних чисел |
16 |
Добуток від’ємних чисел |
Сума парних чисел |
2. Поради до написання програми
Для ілюстрації
задачі обробки двовимірного масиву
створимо програму, яка для двовимірного
масиву
цілих чисел обчислює m-елементний масив
V1 середніх значень додатних чисел рядків
масиву W і n-елементний масив V2 суми чисел
стовпців масиву W. Масив V1 виводиться
на екран справа від масиву W, а масив V2
нижче від масиву W.
Вікно програми обробки двовимірного масиву приведене на рис. 2.1. В обробнику події натиснення радіо-кнопки для режиму ручного введення двовимірного масиву користувачем всього один оператор, який активізує поле введення:
private void radioButtonHand_Click(object sender, EventArgs e)
{
textBox1.Focus();
}
Більш цікавий для нас обробник події натиснення радіо-кнопки для режиму автоматичного введення двовимірного масиву з таким текстом:
private void radioButtonAuto_Click(object sender, EventArgs e)
{
//введення даних
InpData(out k, out L, out m, out n);
//замовлення пам’яті для масиву
int[,] W = new int[m, n];
//Заповнення масиву W випадковими числами
FillMasW(k, L, m, n, W);
//виведення масиву W
OutMasW(m, n, W);
}
Рис. 2.1. Вікно програми обробки двовимірного масиву
Для створення масиву треба занести його розміри m і n у відповідні компоненти NumericUpDown. У випадку ручного запису чисел в поле компонента TextBox границі інтервалу випадкових чисел можна ігнорувати, але при автоматичному занесенні масиву випадкових чисел величини a і b обмежують значення випадкових чисел. Обробник radioButtonAuto_Click викликає процедуру введення значень в змінні (поля класу Form1) k, L, m, n, створює (m,n)-масив W і викликає процедуру FillMasW для заповнення масиву випадковими числами з діапазону , після чого виводить числа масиву на екран процедурою OutMasW.
Текст методу FillMasW приведений нижче і він не потребує коментаря, за виключенням того, що об’явлена у вікні програми верхня границя L в операторі Next правомірно збільшена на одиницю:
private void FillMasW(int a,int b,int m, int n,int[,] W)
{
Random rnd = new Random ();
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
W[i,j] = rnd.Next(k, L+1);
}
Текст методу виведення створеного масиву на екран такий же як і в попередній лабораторній роботі:
private void OutMasW(int m, int n, int[,] W)
{
textBox1.Clear();
string st;
for (int i = 0; i < m; i++)
{
st = "";
for (int j = 0; j < n; j++)
st = st + Convert.ToString(W[i, j]) + " ";
textBox1.AppendText(string.Format("{0}\n", st));
}
}
Обробник події натиснення кнопки з надписом "Обробити масив" спочатку перевіряє наявність записів в полі введення масиву, потім уточнює розміри m і n записаної в полі введення таблиці, замовляє відповідний обсяг пам’яті для масиву W, заповнює методом FillMasWfromTab масив W числами з таблиці, далі розраховуються одновимірні масиви V1 і V2 і виводяться на екран. Текст обробника подамо в такій редакції:
private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("Не створений масив!"); return;
}
m = Convert.ToInt32(numericUpDown3.Value);
n = Convert.ToInt32(numericUpDown4.Value);
int[,] W = new int[m, n];
//Заповнення масиву W з таблицi
FillMasWfromTab(m, n, W);
//розрахунок і виведення масиву V1
double[] V1 = new double[m];
CalcV1(m, n, W, V1);
OutputV1(m, n, W, V1);
//розрахунок і виведення масиву V2
int[] V2 = new int[n];
CalcV2(m, n, W, V2);
OutputV2(V2);
}
Метод заповнення двовимірного масиву числами з таблиці виглядає так:
private void FillMasWfromTab( int m, int n, int[,] W)
{
string st;
for (int i = 0; i < m; i++)
{
st = textBox1.Lines[i];
string[] words = st.Split(' ');
for (int j = 0; j < n; j++)
W[i,j] = Convert.ToInt32(words[j]);
}
}
Тепер розглянемо метод розрахунку масиву V1 середніх значень додатних чисел рядків масиву W. Текст його такий:
public void CalcV1(int m, int n, int[,] W, double[] V1)
{
int S; int q;
for (int i = 0; i < m; i++)
{
S = 0; q = 0;
for (int j = 0; j < n; j++)
if (W[i, j] > 0)
{
S += W[i, j]; q += 1;
}
V1[i] =(double) S/q;
}
}
Аналіз методу CalcV1 не складає труднощів. Дещо складнішим виявився метод OutputV1, який має приписати числа масиву V1 з правої сторони масиву W. Методу прямого дописування до кожного рядка таблиці W в ListBox відповідного числа з масиву V1 не існує. Тому ми скопіюємо первинне зображення таблиці W в масив рядків типу string і сформуємо m нових рядків з дописаним до кожного первинного рядка числа масиву V1. Після очищення поля виведення замінимо первинну таблицю масивом нових рядків. Текст методу OutputV1 приведений в наступній редакції:
private void OutputV1(int m, double[] V1)
{
string[] masStr = new string[m];
for (int i = 0; i < m; i++)
masStr[i] = textBox1.Lines[i]
+ string.Format(" {0:f3} \n", V1[i]);
textBox1.Clear();
foreach(string st in masStr)
textBox1.AppendText(st);
}
Слід також звернути увагу на застосування форматного виведення дійсних чисел типу double в приведеній процедурі OutputV1.
Розраховує суму чисел в кожному стовпці масиву W і заповнює одновимірний масив V2 метод CalcV2 з таким текстом:
public void CalcV2(int m, int n, int[,] W, int[] V2)
{
int S;
for (int j = 0; j < n; j++)
{
S = 0;
for (int i = 0; i < m; i++) S += W[i, j];
V2[j] = S;
}
}
Виводиться масив V2 у вигляді ряка нижче від масиву W простим методом OutputV2 з таким текстом.
private void OutputV2(int[] V2)
{
string st= "";
for (int j = 0; j < V2.Length; j++)
st = st + Convert.ToString(V2[j] + " ");
textBox1.AppendText(st);
}
3. Зміст звіту
