МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Звіт
до лабораторної роботи №1
Реалізація простих консольних програм мовою C#
з курсу:
"ОПЕРАЦІЙНІ СИСТЕМИ"
Мета роботи: навчитися реалізувати прості консольні програми мовою С# у середовищі Visual Studio
Завдання:
Ввід значень кубічної матриці організувати з клавіатури у порядку зростання індексів: А 0,0,0; А 0,0,1; А 0,0,2; … А 0,1,0; …
Кубічна матриця має бути представлена типом масиву С# зі структурою, вказаною у варіанті завдання.
Сортування елементів матриці здійснюється у площинах, зазначених у варіанті завдання, за аналогією гри «15». Метод сортування також зазначений у варіанті завдання.
Для окремо зазначених площин кубічної матриці необхідно знайти значення додаткового вектора .
Сортування та пошук додаткового вектора організувати в окремих функціях.
Вивести на друк посортовані площини кубічної матриці та значення додаткового вектора.
A 4×3×5 → С# [ ][ , ] ;
горизонтальна площина – метод вибору – за зростанням;
вектор добутків синусів елементів фронтальних площин.
Список ідентифікаторів, констант, змінних, методів, використаних у програмі та їх пояснення:
RandNum – змінна для генератора псевдовипадкових чисел;
float [][,] ip – вхідний параметр функції;
float [] op – параметр, який функція повертає;
i,j,k,z – лічильники;
SinMultiple () - Функція обчислення вектора добутків синусів елементів фронтальних площин;
FillByRandom () - Функція ініціалізації елементів масиву псевдовипадковими значеннями;
Out () - Функція виводу горизонтальних площин тривимірного масиву на консоль;
MatrixToString () Функція перетворення тривимірного масиву у стрічку;
Sort () - Функція сортування;
StringToMatrix () - Функція перетворення стрічкового масиву у тривимірний;
Main() – головна функція;
(float) () – перетворення типу числа в тип з плаваючою комою;
Console.WriteLine("Початковий масив") – виведення в консоль;
RandNum.Next( , ) – генерування псевдовипадкового цілого значення із вказаного діапазону;
Текст програми:
using System;
using System.Collections.Generic;
using System.Text;
namespace Array
{
class Program
{
static System.Random RandNum = new System.Random(); //Виділення пам’яті для генератора псевдовипадкових чисел
//Функція обчислення вектора добутків синусів елементів фронтальних площин
static float [] SinMultiple (float [][,] ip)
{
float[] op = new float[4] {1,1,1,1};
for (int k = 0; k < 4; k++)
for (int i = 0; i < 3; i++)
for (int j = 0; j < 5; j++)
op[k] = (float) (op[k] * Math.Sin(ip[k][i,j]));
return (op);
}
//Функція ініціалізації елементів масиву псевдовипадковими значеннями
static void FillByRandom(float [][,] ip)
{
for (int k = 0; k < 4; k++)
for (int i = 0; i < 3; i++)
for (int j = 0; j < 5; j++)
ip[k][i, j] = (float)(RandNum.Next(100, 999)) / 10;
}
//Функція виводу горизонтальних площин тривимірного масиву на консоль
static void Out(float [][,] ip)
{
for (int i = 0; i < 3; i++)
{
for (int k = 0; k < 4; k++)
{
for (int j = 0; j < 5; j++)
Console.Write(ip[k][i, j] + "\t");
Console.WriteLine();
}
Console.WriteLine();
}
}
//Функція перетворення тривимірного масиву у стрічку
static float [][] MatrixToString(float[][,] ip)
{
int z;
float [][] op = new float [3][];
op [0] = new float [20];
op [1] = new float [20];
op [2] = new float [20];
for (int i = 0; i < 3; i++)
{
z=0;
for (int k = 0; k < 4; k++)
for (int j = 0; j < 5; j++)
{
op[i][z] = ip[k][i, j];
z++;
}
}
return (op);
}
//Функція сортування
static float [] Sort(float [] ip)
{
int k;
float x;
for (int i = 0; i < 19; i++)
{
k = i;
x = ip[i];
for (int j = i + 1; j < 20; j++)
{
if (ip[j] < x)
{
k = j;
x = ip[j];
}
}
ip[k] = ip[i];
ip[i] = x;
}
return (ip);
}
//Функція перетворення стрічкового масиву у тривимірний
static float [][,] StringToMatrix(float [][] ip)
{
int z;
float[][,] op = new float[4][,];
op [0] = new float[3,5];
op [1] = new float[3,5];
op [2] = new float[3,5];
op [3] = new float[3,5];
for (int i = 0; i < 3; i++)
{
z = 0;
for (int k = 0; k < 4; k++)
for (int j = 0; j < 5; j++)
{
op[k][i, j] = ip[i][z];
z++;
}
}
return (op);
}
static void Main()
{
float[][,] a = new float[4][,];
for (int i = 0; i < 4; i++)
a[i] = new float[3, 5];
float[][] tmp = new float[3][];
for (int i = 0; i < 3; i++)
tmp[i] = new float[20];
float[] sin = new float[4];
FillByRandom(a);
Console.WriteLine("Початковий масив");
Out(a);
tmp = MatrixToString(a);
for (int i=0; i<3; i++)
tmp[i] = Sort(tmp[i]);
a = StringToMatrix(tmp);
sin = SinMultiple(a);
Console.Write("Вектор добуткiв елементiв фронтальних площин");
Console.WriteLine();
for (int i = 0; i < 4; i++)
{
Console.Write("{0 :N8}",sin[i]);
Console.Write("\t");
}
Console.WriteLine(); Console.WriteLine();
Console.WriteLine("Вiдсортований масив");
Out(a);
Console.ReadKey(true);
}
}
}
Результат роботи програми:
Початковий масив
50,3 78,9 31,2 71,6 33,4
43,7 65 69,7 77,8 67,6
91,2 18,5 84,9 19,8 34
19,6 10,5 19,1 20,4 11,1
92,9 51,8 91,9 13,4 20,9
56,6 15,8 42 24,6 27,6
54,4 43,1 91,5 44 94,5
92,1 54,9 17 14,9 70,5
63,2 66,6 88,9 27,9 70,5
79,2 38,4 10,7 68,3 67,9
23,7 91,8 87,7 14,5 23,5
44,4 46,8 16,5 54 54
Вектор добутків синусів елементiв фронтальних площин
-0,00133710 -0,00000571 0,00001483 0,00000473
Вiдсортований масив
10,5 11,1 18,5 19,1 19,6
19,8 20,4 31,2 33,4 34
43,7 50,3 65 67,6 69,7
71,6 77,8 78,9 84,9 91,2
13,4 14,9 15,8 17 20,9
24,6 27,6 42 43,1 44
51,8 54,4 54,9 56,6 70,5
91,5 91,9 92,1 92,9 94,5
10,7 14,5 16,5 23,5 23,7
27,9 38,4 44,4 46,8 54
54 63,2 66,6 67,9 68,3
70,5 79,2 87,7 88,9 91,8