You are on page 1of 9

ЛАБОРАТОРНА РОБОТА № 4

Структури. Масиви структур. Передача параметрів у методи. Модифікатори


параметрів. Додаткові можливості класу Console

Мета: засвоїти принципи роботи зі структурами та масивами струк-тур; вивчити


особливості передачі параметрів за допомогою модифікаторів ref, out та params;
ознайомитись з додатковими можливостями класу Console.

Хід роботи:
Завдання 1: Оголосити структуру Airplane, яка представляє інформацію про
рейс літака і виконати зазначені до варіанту завдання.

Лістининг програми:
using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace First
{
struct Date{
public int Year;
public int Month;
public int Day;
public int Hours;
public int Minutes;
public double GetTimeInMinutes()
{
double res = Year * 365 * 24 * 60;
res += Month * 365 / 12 * 24 * 60;
res += Day * 24 * 60;
res += Hours * 60;
res += Minutes;
return res;
}
public Date(int [] arr, int i = 0)
{
Year = arr[i];
Month = arr[++i];
Day = arr[++i];
Hours = arr[++i];
Minutes = arr[++i];
}
}

struct Airplane
{
public string StartCity;
public string FinishCity;
public Date StartDate;
public Date FinishDate;
ЖДТУ.19.121.08.000 – Лр4
Змн. Арк. № докум. Підпис
public bool Дата
IsArrivingToday()
Розроб. {
Талавер О.В. Літ. Арк. Аркушів
Перевір. Левківський В.Л. 1 7
Звіт з
Керівник
Н. контр. лабораторної роботи ФІКТ Гр. ПI-60[2]
Зав. каф.
return StartDate.Day == FinishDate.Day;
}
public double GetTotalTime()
{
double result = (FinishDate.Year - StartDate.Year) * 365 * 24 * 60;
result += (FinishDate.Month - StartDate.Month) * 365 / 12 * 24 * 60;
result += (FinishDate.Day - StartDate.Day) * 24 * 60;
result += (FinishDate.Hours - StartDate.Hours) * 60;
result += FinishDate.Minutes - StartDate.Minutes;
return result;
}
public Airplane(string start, string finish, params int [] arr)
{
StartCity = start;
FinishCity = finish;
StartDate = new Date(arr);
FinishDate = new Date(arr, 5);
}

class Program
{

static void Main(string[] args)


{
InputEncoding = Encoding.Unicode;
OutputEncoding = Encoding.Unicode;
Title = "Лабораторна робота №4";
Console.BackgroundColor = ConsoleColor.White;
ForegroundColor = ConsoleColor.Black;
Airplane[] list = null;
int ch;
do
{
WriteLine("\nPress any button\n");
ReadKey();
Clear();
ShowMenu();
ch = GetValue();
switch (ch){
case 1:
list = ReadAirplaneArray();
break;
case 2:
if (list == null)
{
WriteLine("Firstly add some notes");
break;
}
PrintAirplanes(list);
break;
case 3:
if (list == null)
{
WriteLine("Firstly add some notes");
break;
}
WriteLine($"Enter number of trip(1 ; {list.Length})");
int num = GetValue() - 1;
PrintAirplane(list[num]);
break;
case 4:
list = SortAirplanesByDate(list);

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата
PrintAirplanes(list);
break;
case 5:
list = SortAirplanesByTotalTime(list);
PrintAirplanes(list);
break;
case 6:
int iMin, iMax;
GetAirplaneInfo(list, out iMax, out iMin);
break;
default:
WriteLine("Error, wrong number, try again");
break;
}
} while (true);
}

static void ShowMenu()


{
WriteLine("1- Create notes;\n" +
"2- Print all notes;\n" +
"3- Print note;\n" +
"4- Sort by start date;\n" +
"5- Sort by total time;\n" +
"6- Get info;\n");
}

readonly static string[] FieldNames =


{
"Start City",
"Finish City",
"Start Year",
"Start Month",
"Start Day",
"Start Hours",
"Start Minutes",
"Finish Year",
"Finish Month",
"Finish Day",
"Finish Hours",
"Finish Minutes",
};

static int GetValue()


{
int n;
bool isRight = false;
do
{
isRight = int.TryParse(ReadLine(), out n);
if (n <= 0)
isRight = false;
} while (!isRight);
return n;
}

static Airplane[] ReadAirplaneArray()


{
WriteLine("Enter count of elements: ");
int n = GetValue();
string start, finish;
int[] arg = new int[10];
Airplane[] arr = new Airplane[n];
for (int i = 0; i < n; i++)

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата
{
WriteLine("Enter {0}:", FieldNames[0]);
start = ReadLine();
WriteLine("Enter {0}:", FieldNames[1]);
finish = ReadLine();
for (int j = 0; j < arg.Length; j++)
{
WriteLine("Enter {0}:", FieldNames[j+2]);
arg[j] = GetValue();
}
arr[i] = new Airplane(start, finish, arg);
}
return arr;
}
static void PrintAirplane(Airplane elem)
{
WriteLine($" Start City: {elem.StartCity}\n Finish City:
{elem.FinishCity}\n" +
$" Start Year: {elem.StartDate.Year}\n Start Month:
{elem.StartDate.Month}\n" +
$" Start Day: {elem.StartDate.Day}\n Start Hours: {elem.StartDate.Hours}\n"
+
$" Start Minutes: {elem.StartDate.Minutes}\n Finish Year:
{elem.FinishDate.Year}\n" +
$" Finish Month: {elem.FinishDate.Month}\n Finish Day:
{elem.FinishDate.Day}\n" +
$" Finish Hours: {elem.FinishDate.Hours}\n Finish Minutes:
{elem.FinishDate.Minutes}\n");
}

static void PrintAirplanes(Airplane[] elems)


{
for (int i = 0; i < elems.Length; i++)
{
WriteLine($"-----Trip{i+1}-----\n");
PrintAirplane(elems[i]);
}
}

static void GetAirplaneInfo(Airplane[] elems, out int iMaxOut, out int iMinOut)
{
double min = double.MinValue, max = double.MaxValue;
int iMin = 0, iMax = 0;
for (int i = 0; i < elems.Length; i++)
{
double temp = elems[i].GetTotalTime();
if (temp > max)
{
max = temp;
iMax = i;
} else if (temp < min) {
min = temp;
iMin = i;
}
}
iMaxOut = iMax;
iMinOut = iMin;
WriteLine($"Max time: {max}\n");
PrintAirplane(elems[iMax]);
WriteLine($"Min time: {min}\n");
PrintAirplane(elems[iMin]);
}

static int CompByDate(Airplane a, Airplane b){

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата
double dateA = a.StartDate.GetTimeInMinutes();
double dateB = b.StartDate.GetTimeInMinutes();
if (dateA > dateB)
return 1;
else if (dateA < dateB)
return -1;
else
return 0;
}

static int CompByTime(Airplane a, Airplane b){


double dateA = a.GetTotalTime(), dateB = b.GetTotalTime();
if (dateA > dateB)
return 1;
else if (dateA < dateB)
return -1;
else
return 0;
}

static Airplane[] SortAirplanesByDate(Airplane[] elems)


{
Array.Sort(elems, CompByDate);
return elems;
}

static Airplane[] SortAirplanesByTotalTime(Airplane[] elems)


{
Array.Sort(elems, CompByTime);
return elems;
}
}
}

Рис. 1. Головне меню

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата
Рис. 2. Створення запису

Рис. 3. Виведення записів

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата
Рис. 4. Виведення одного запису

Рис. 5. Сортування за датою початку

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата
Рис. 6. Сортування за часом подорожі

Рис. 7. Виведення інформації про час подорожі

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата
Висновки: в ході виконання лабораторної роботи ми засвоїли принципи роботи
зі структурами та масивами струк-тур; вивчили особливості передачі параметрів
за допомогою модифікаторів ref, out та params; ознайомились з додатковими
можливостями класу Console.

Талавер О.В. Арк.


Левківській В. Л. ЖДТУ.19.121.08.000 – Лр4 6
Змн. Арк. № докум. Підпис Дата

You might also like