Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 10:32, лабораторная работа
Задание. В программах требуется описать базовый класс (возможно, абстрактный), в котором с помощью виртуальных методов ИЛИ И абстрактных свойств задается интерфейс ДЛЯ производных классов. Целью лабораторной работы является максимальное использование наследования, даже если для конкретной задачи оно не дает выигрыша в объеме программы. Во всех классах следует переопределить метод Equals, чтобы обеспечить сравнение значений.
Функция Главный должна содержать массив из элементов базового класса, заполненный ссылками на производные классы. В этой функции должно демонстрироваться использование всех разработанных элементов классов.
int lenght = Convert.ToInt32(Console.
series = new Pair[lenght];
Console.WriteLine("Вводите элементы: ");
int boof1, boof2;
int moneyCounter = 0, complexCounter = 0;
for (int i = 0; i < series.Length; i++)
{
Console.WriteLine("Хотите ввести деньгу или комплексное число? (д/к)");
string choice = Console.ReadLine();
Console.WriteLine(" * Число номер: " + (i+1));
Console.WriteLine("Введите первую цифру");
boof1 = Convert.ToInt32(Console.
Console.WriteLine("Введите вторую цифру");
boof2 = Convert.ToInt32(Console.
switch (choice)
{
case "д":
{
series[i] = new Money(boof1, boof2);
moneyCounter += 1;
} break;
case "к":
{
series[i] = new Complex(boof1, boof2);
complexCounter += 1;
} break;
}
}
Complex[] complexVector = new Complex[complexCounter];
Money[] moneyVector = new Money[moneyCounter];
complexCounter = 0;
moneyCounter = 0;
for (int i = 0; i < series.Length; i++)
{
switch (series[i].ToString())
{
case "Complex":
{
complexVector[complexCounter] = new Complex(series[i].X, series[i].Y);
complexCounter += 1;
} break;
case "Money":
{
moneyVector[moneyCounter] = new Money(series[i].X, series[i].Y);
moneyCounter += 1;
} break;
}
}
if (complexVector.Length != 0)
{
Console.WriteLine("Массив комплексных чисел:");
for (int i = 0; i < complexVector.Length; i++)
{
Console.Write(complexVector[i]
}
}
else
Console.WriteLine("Комплексных чисел в массиве нет!");
Console.WriteLine();
if (moneyVector.Length != 0)
{
Console.WriteLine("Массив денег:");
for (int i = 0; i < moneyVector.Length; i++)
{
Console.Write(moneyVector[i].
}
}
else
Console.WriteLine("Денег в массиве нет!");
Console.WriteLine("Для продолжения нажмите ENTER");
Console.ReadLine();
}
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("Привет!");
Console.WriteLine("Выберите пункт:");
Console.WriteLine("1 - для работы с деньгами");
Console.WriteLine("2 - для работы с комплексными числами");
Console.WriteLine("3 - для работы с массивом пар");
Console.WriteLine("0 - Выход");
string s = Console.ReadLine();
switch (s)
{
case "1":
{
Task1();
} break;
case "2":
{
Task2();
} break;
case "3":
{
Task3();
} break;
case "0":
{
return;
}
}
Console.Clear();
}
}
}
// Класс Pair
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab2
{
abstract class Pair
{
protected int x = 0;
protected int y = 0;
public abstract int X { get; set; }
public abstract int Y { get; set; }
abstract public string OutPut();
override abstract public string ToString();
}
}
//Класс Money
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab2
{
class Money:Pair,IComparable
{
public Money(int x, int y)
{
if (y > 100)
{
x += y / 100;
y = y % 100;
}
this.x = x;
this.y = y;
}
public override int X
{
get
{
return x;
}
set
{
this.x = value;
}
}
public override int Y
{
get
{
return y;
}
set
{
y = value;
if (y > 100)
{
x += y / 100;
y = y % 100;
}
}
}
public override string OutPut()
{
return Convert.ToString(x) + " Dollars " + Convert.ToString(y) + " Cents";
}
public override string ToString()
{
return "Money";
}
public override bool Equals(object obj)
{
Money moneyObj = obj as Money;
if ((this.X == moneyObj.X) && (this.Y == moneyObj.Y))
return true;
else
return false;
}
public int CompareTo(object obj)
{
if (obj == null)
return 1;
Money otherMoney = obj as Money;
if (this.X > otherMoney.X)
return 1;
else
if (this.X < otherMoney.X)
return -1;
else
if (this.Y > otherMoney.Y)
return 1;
else
if (this.Y == otherMoney.Y)
else
}
public static Money operator +(Money _1, Money _2)
{
return new Money(_1.X + _2.X, _1.Y + _2.Y);
}
public static Money operator *(Money _1, Money _2)
{
return new Money(_1.X * _2.X, _1.Y * _2.Y);
}
}
}
//Класс Complex
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lab2
{
class Complex:Pair,IComparable
{
public Complex(int x, int y)
{
this.x = x;
this.y = y;
}
public override int X
{
get
{
return x;
}
set
{
this.x = value;
}
}
public override int Y
{
get
{
return y;
}
set
{
this.y = value;
}
}
public override string OutPut()
{
return Convert.ToString(x) + " + i" + Convert.ToString(y);
}
public override string ToString()
{
return "Complex";
}
public override bool Equals(object obj)
{
Complex complexObj = obj as Complex;
if ((this.X == complexObj.X) && (this.Y == complexObj.Y))
return true;
else
return false;
}
public int CompareTo(object obj)
{
Complex complexObj = obj as Complex;
if ((this.X == complexObj.X) && (this.Y == complexObj.Y))
return 0;
else
if (Math.Sqrt(Math.Pow(this.X, 2) + Math.Pow(this.Y, 2)) > Math.Sqrt(Math.Pow(complexObj.
return 1;
else
return -1;
}
public static Complex operator + (Complex _1, Complex _2)
{
return new Complex(_1.X + _2.X, _1.Y + _2.Y);
}
public static Complex operator * (Complex _1, Complex _2)
{
return new Complex(_1.X * _2.X - _1.Y * _2.Y, _1.X * _2.Y + _2.X * _1.Y);
}
}
}