
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
Национальный аэрокосмический университет им. Н.Е. Жуковского
“Харьковский авиационный институт”
Кафедра компьютерных систем и сетей
Титульный лист заполняется на украинском языке
Остальная часть отчета может быть как на украинском, так и на русЛабораторна робота № 3
Конструкторы. Перегрузка методов и операторов
По дисциплине «Обьектно-ориентированное программирование»
ХАІ.503.525аБУКВА_ГРУППЫ.140.050102,НОМЕР_ЗАЧЕТКИ 1305097
Выполнил студент гр. 525аБ Игнатов К.П.
(№ группы) (Ф.И.О.)
(підпис, дата)
Проверил Шостак А.В.
(науковий ступінь, вчене звання, посада)
Харьков
2014
Код программы.
/****************************************/
/* Лабораторная работа №3 */
/* Конструкторы. */
/* Перегрузка методов и операторов */
/* Задание 1 */
/* Выполнил студент гр.525а ИгнатовК.П.*/
/****************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double a, b, c;
int operation;
bool q;
RadiusVektor otvet = new RadiusVektor();
Console.WriteLine("Введите координаты первого вектора: ");
double[] vekt1 = Console.ReadLine().Split(' ').Select(u => Convert.ToDouble(u)).ToArray();
Console.WriteLine("Введите координаты второго вектора: ");
double[] vekt2 = Console.ReadLine().Split(' ').Select(u => Convert.ToDouble(u)).ToArray();
a = vekt1[0];
b = vekt1[1];
RadiusVektor RV1 = new RadiusVektor(a, b);
a = vekt2[0];
b = vekt2[1];
RadiusVektor RV2 = new RadiusVektor(a, b);
Console.WriteLine("Введитеоперацию: ");
Console.WriteLine("0 - '+'\n1 - '-'\n2 - '!='\n3 - '=='\n4 - '/'\n5 - '*'\n6 - '<'\n7 - '>'\n8 - '<='\n9 - '>='");
operation = Int32.Parse(Console.ReadLine());
switch (operation)
{
case 0: otvet = RV1 + RV2; Console.WriteLine("Ответ: " + otvet.ToString()); break;
case 1: otvet = RV1 - RV2; Console.WriteLine("Ответ: " + otvet.ToString()); break;
case 2: q = RV1 != RV2; Console.WriteLine("Ответ: " + q.ToString()); break;
case 3: q = RV1 == RV2; Console.WriteLine("Ответ: " + q.ToString()); break;
case 4: Console.WriteLine("Введите константу делитель: ");
c = Double.Parse(Console.ReadLine());
otvet = RV1 / c;
Console.WriteLine("Ответ: " + otvet.ToString()); break;
case 5: Console.WriteLine("Введите константу множитель: ");
c = Double.Parse(Console.ReadLine());
otvet = RV1 * c;
Console.WriteLine("Ответ: " + otvet.ToString()); break;
case 6: q = RV1 < RV2; Console.WriteLine("Ответ: " + q.ToString()); break;
case 7: q = RV1 > RV2; Console.WriteLine("Ответ: " + q.ToString()); break;
case 8: q = RV1 <= RV2; Console.WriteLine("Ответ: " + q.ToString()); break;
case 9: q = RV1 >= RV2; Console.WriteLine("Ответ: " + q.ToString()); break;
}
}
}
class RadiusVektor
{
private double X;
private double Y;
/// <summary>
/// конструктор без параметров
/// </summary>
public RadiusVektor()
{
X = 0;
Y = 0;
}
/// <summary>
/// конструктор
/// </summary>
/// <param name="a">Х</param>
/// <param name="b">Y</param>
public RadiusVektor(double a, double b)
{
X = a;
Y = b;
}
/// <summary>
/// перегрузка оператора +
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static RadiusVektor operator +(RadiusVektor obj1, RadiusVektor obj2)
{
RadiusVektor otvet = new RadiusVektor();
otvet.X = obj1.X + obj2.X;
otvet.Y = obj1.Y + obj2.Y;
return otvet;
}
/// <summary>
/// перегрузка оператора -
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static RadiusVektor operator -(RadiusVektor obj1, RadiusVektor obj2)
{
RadiusVektor otvet = new RadiusVektor();
otvet.X = obj1.X - obj2.X;
otvet.Y = obj1.Y - obj2.Y;
return otvet;
}
/// <summary>
/// перегрузка оператора !=
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static bool operator !=(RadiusVektor obj1, RadiusVektor obj2)
{
return obj1.Compare(obj2) != 0;
}
/// <summary>
/// перегрузка оператора ==
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static bool operator ==(RadiusVektor obj1, RadiusVektor obj2)
{
return obj1.Compare(obj2) == 0;
}
/// <summary>
/// перегрузка оператора /
/// </summary>
/// <param name="obj1">объект</param>
/// <param name="a">делитель</param>
/// <returns>результирующий объект</returns>
public static RadiusVektor operator /(RadiusVektor obj1, double a)
{
RadiusVektor otvet = new RadiusVektor();
otvet.X = obj1.X / a;
otvet.Y = obj1.Y / a;
return otvet;
}
/// <summary>
/// перегрузка оператора *
/// </summary>
/// <param name="obj1">объект</param>
/// <param name="a">множитель</param>
/// <returns>результирующий объект</returns>
public static RadiusVektor operator *(RadiusVektor obj1, double a)
{
RadiusVektor otvet = new RadiusVektor();
otvet.X = obj1.X * a;
otvet.Y = obj1.Y * a;
return otvet;
}
/// <summary>
/// перегрузка оператора <
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static bool operator <(RadiusVektor obj1, RadiusVektor obj2)
{
return obj1.Compare(obj2) < 0;
}
/// <summary>
/// перегрузка оператора >
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static bool operator >(RadiusVektor obj1, RadiusVektor obj2)
{
return obj1.Compare(obj2) > 0;
}
/// <summary>
/// перегрузка оператора <=
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static bool operator <=(RadiusVektor obj1, RadiusVektor obj2)
{
return obj1.Compare(obj2) <= 0;
}
/// <summary>
/// перегрузка оператора >=
/// </summary>
/// <param name="obj1">первый объект</param>
/// <param name="obj2">второй объект</param>
/// <returns>результирующий объект</returns>
public static bool operator >=(RadiusVektor obj1, RadiusVektor obj2)
{
return obj1.Compare(obj2) >= 0;
}
/// <summary>
///
/// </summary>
/// <param name="val">объект сравниваемый с текущим</param>
/// <returns>результат сравнения</returns>
public int Compare(RadiusVektor val)
{
double length1 = Math.Sqrt(this.X * this.X + this.Y * this.Y);
double length2 = Math.Sqrt(val.X * val.X + val.Y * val.Y);
if (length1 == length2)
return 0;
else if (length1 < length2)
return -1;
else return 1;
}
/// <summary>
/// переопределенный метод перевода объекта в строку
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "(" + this.X + ";" + this.Y + ")";
}
}
}