Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МВ до ЛР КТтаП (ч.2) 1-1 ДрукУМК.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
681.98 Кб
Скачать
  1. Номер, тема і мета лабораторної роботи.

  2. Стислі теоретичні відомості.

  3. Постановка задачі.

  4. Текст програми відповідно до завдання з коментарями та результатами.

  5. Висновки.

4. Контрольні запитання

  1. Матриця.

  2. Множення матриць.

  3. Існування результату множення матриць.

  4. Об’ява та ініціалізація масиву.

  5. Клас 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. Зміст звіту