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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

Дніпропетровський національний університет залізничного транспорту імені академіка В. Лазаряна

Кафедра «Автоматика, телемеханіка та зв’язок»

Комп’ютерні технології та програмування

Методичні вказівки до виконання лабораторних робіт у 2‑му семестрі 1‑го курсу

Укладачі:

В. В. Безруков

Р. В. Рибалка

Л. С. Тимошенко

Дніпропетровськ – 2012

ЗМІСТ

Лабораторна робота № 1 Множення матриць 3

Лабораторна робота № 2 Обробка двовимірного масиву 5

Лабораторна робота № 3 Створення ієрархії об’єктів 9

Лабораторна робота № 4 Застосування індексатора 12

Лабораторна робота № 5 Делегати і події 14

Лабораторна робота № 6 Структурний тип даних 16

Лабораторна робота № 7 Перелічувальний тип даних 17

Лабораторна робота № 8 Обробка файлу даних 19

Література 23

Лабораторна робота № 1 Множення матриць

Мета роботи: навчитись створювати, заповнювати числами, виконувати математичні операції з двовимірними масивами і виводити їх на екран.

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

Знайомство з двовимірними масивами значно розширює область програмування задач. Це, зокрема, задачі на операції з матрицями. Однією з них є задача множення матриць. Результатом множення матриці на матрицю буде матриця . Правило множення матриць таке: елементи результуючої матриці обчислюються за формулою

,

де  – номер рядка матриць і  ;  – номер стовпця матриці і  .

2. Поради до написання програми

Вікно програми показане на рис. 1.1. Вікно має три компонента NumericUpDown для завдання розміру матриць, три поля текстових редакторів для виведення матриць на екран і дві кнопки для очищення кожного полів для матриць і  з метою ручного або автоматичного оновлення цих матриць, а також кнопку з надписом «Обчислити» і кнопку з надписом «Вихід». Якщо при незмінному розмірі матриці поле для матриці (або ) заповнене числами то ці числа новими не замінюються при натисненні кнопки «Обчислити».

Рис. 1.1. Вікно програми «Множення матриць»

Величини m, k, n об’явимо полями класу Form1: int m, k, n; Виведення початкових (за замовченням) значень величин m, k, n виконає метод-конструктор форми:

public Form1()

{

InitializeComponent();

numericUpDown1.Value = 7;

numericUpDown2.Value = 8;

numericUpDown3.Value = 7;

}

Основний керуючий метод-процедура цієї програми button1_Click викликає метод введення даних InpSizeMatrix і створює (резервує пам’ять) масиви , , . Якщо якесь з полів для матриць або порожне, то відповідне поле методом FillTabA або FillTabВ заповнюється цілими випадковими числами. Методи FillMatrixAFromTab і FillMatrixBFromTab заповнюють матриці і числами з таблиць, розміщених у відповідних полях редагування. Метод Dobutok виконує множення матриць, отримуючи добуток у вигляді матриці , яка методом OutResult виводиться на екран.

Керуючий метод процедура btnCalcClick має такий текст:

private void button1_Click(object sender, EventArgs e)

{

//визначення розміру матриць

InpSizeMatrix(out m, out k, out n);

//замовлення пам’яті для масивів

int[,] A = new int[m,k];

int[,] B = new int[k,n];

int[,] C = new int[m,n];

//заповнення таблиць А і В цілими випадковими числами

if (textBox1.Text == "") FillTabA(m, k);

if (textBox2.Text == "") FillTabB(k, n);

//Заповнення матриць А і В з таблиць А і В

FillMatrixAFromTab(m, k, A);

//OutMatrixA(m, k, A);

FillMatrixBFromTab(k, n, B);

//множення матриць

Dobutok(m,k,n,A,B,C);

//виведення результатуючої матриці С

OutResult(m,n,C);

//активізація редактора чисел

numericUpDown1.Focus();

}

Нижче приведені тексти усіх виконуючих методів, які викликаються є основним керуючим методом програми:

private void FillTabA(int m, int k)

{

textBox1.Clear();

string st;

Random rnd = new Random();

for (int i = 0; i < m; i++)

{

st = "";

for (int j = 0; j < k; j++)

st = st + Convert.ToString(rnd.Next(10)+ " ");

textBox1.AppendText(string.Format("{0}\n", st));

}

}

private void FillTabB(int k, int n)

{

textBox2.Clear();

string st;

Random rnd = new Random();

for (int i = 0; i < k; i++)

{

st = "";

for (int j = 0; j < n; j++)

st = st + Convert.ToString(rnd.Next(10)+ " ");

textBox2.AppendText(string.Format("{0}\n", st));

}

}

private void InpSizeMatrix(out int m, out int k, out int n)

{

m = Convert.ToInt32(numericUpDown1.Value);

k = Convert.ToInt32(numericUpDown2.Value);

n = Convert.ToInt32(numericUpDown3.Value);

}

private void FillMatrixAFromTab(int m, int k, int[,] A)

{

string st;

for (int i = 0; i < m; i++)

{

st = textBox1.Lines[i];

string[] words = st.Split(' ');

for (int j = 0; j < k; j++ )

A[i, j] = Convert.ToInt32(words[j]);

}

}

private void FillMatrixBFromTab(int k, int n, int[,] B)

{

string st;

for (int i = 0; i < k; i++)

{

st = textBox2.Lines[i];

string[] words = st.Split(' ');

for (int j = 0; j < n; j++)

B[i, j] = Convert.ToInt32(words[j]);

}

}

private void Dobutok(int m, int k, int n, int[,] A, int[,] B, int[,] C)

{

int S;

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

{

S = 0;

for (int q = 0; q < k; q++)

S = S+A[i,q]*B[q,j];

C[i,j] = S;

}

}

private void OutResult(int m, int n, int[,] C)

{

textBox3.Clear();

string st;

for (int i = 0; i < m; i++)

{

st = "";

for (int j = 0; j < n; j++)

st = st + Convert.ToString(C[i, j] + " ");

textBox3.AppendText(string.Format("{0}\n", st));

}

}

private void buttonClearA_Click(object sender, EventArgs e)

{

textBox1.Clear();

textBox3.Clear();

}

private void buttonBClearB_Click(object sender, EventArgs e)

{

textBox2.Clear();

textBox3.Clear();

}

3. Зміст звіту