Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Labolatornaya_rabota_6_po_OP

.pdf
Скачиваний:
3
Добавлен:
27.11.2022
Размер:
798.69 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Факультет безопасности (ФБ)

Кафедра безопасности информационных систем (БИС)

ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАННИЯ Отчет по лабораторной работе №6

по дисциплине «Основы программирования»

Студент гр. 731-2

__________ А.С.Батаев

__________

Принял Инженер КИБЭВС

__________ __________ Д.Р. Уразаев

__________

Томск 2022

2

Оглавление

1

Введение.................................................................................................................

3

2

Ход работы.............................................................................................................

4

3

Заключение ..........................................................................................................

12

4

Список используемой литературы ....................................................................

13

3

1 Введение

Цель работы: Овладеть навыками работы с классами, использования механизмов инкапсуляции, наследования и полиморфизма.

Задание: составить консольное приложение для решения нижеприведенных задач согласно варианту, согласованному с преподавателем, вводя данные в ходе выполнения программы. Для выполнения предварительно ознакомьтесь с соответствующими разделами данного пособия.

Задание для каждого варианта звучит следующим образом: «В программе продемонстрировать функциональность разработанных классов». Все данные для заполнения полей необходимо вводить с клавиатуры. Обязательно использование абстрактных классов, интерфейсов, конструкторов и деструкторов.

4

2 Ход работы

2.1 Теоретические сведения

Класс является основой для создания объектов. Если структура объединяет разнородные по типам переменные, то в классе определяются данные и код, который работает с этими данными. Объекты являются экземплярами класса. Методы и переменные, составляющие класс, называются членами класса. При определении класса объявляются данные, которые он содержит, и код, работающий с этими данными. Данные содержатся в переменных экземпляра, которые определены классом, а код содержится в методах. В С# определены несколько специфических разновидностей членов класса. Это — переменные экземпляра, статические переменные, константы,

методы, конструкторы, деструкторы, индексаторы, события, операторы и свойства. Непосредственно инициализация переменных в объекте (переменных экземпляра) происходит в конструкторе. В классе могут быть определены несколько конструкторов.

2.2 Первое задание

Поставленная задача для варианта 3, выглядит так:

Создать класс EngMoney для работы с устаревшей денежной системой Великобритании. В ней использовались фунты, шиллинги и пенсы. При этом: 1

фунт = 20 шиллингов, 1 шиллинг =12 пенсов. Денежные суммы будут задаваться в фунтах, шиллингах и пенсах и результат выдаваться также в этих величинах. Должны быть реализованы: сложение и вычитание, умножение и деление, сравнение сумм. Создается код, выполняющий данный алгоритм действий. Он представлен ниже.

namespace laba6._1

{

class Program

{

static void Main(string[] args)

5

{

int a1, a2, a3, b1, b2, b3;

Console.WriteLine("Введите 1-ю сумму в порядке: Фунты, Шиллинги, Пенс"); a1 = int.Parse(Console.ReadLine());

a2 = int.Parse(Console.ReadLine());

a3 = int.Parse(Console.ReadLine());

Console.WriteLine("\nВведите 2-ю сумму в порядке: Фунты, Шиллинги, Пенс"); b1 = int.Parse(Console.ReadLine());

b2 = int.Parse(Console.ReadLine());

b3 = int.Parse(Console.ReadLine()); EngMoney a = new EngMoney(a1, a2, a3); EngMoney b = new EngMoney(b1, b2, b3);

Console.WriteLine($"Введенные данные:\n{a}\n{b}"); Console.WriteLine($"\nРезультаты:\nСложение: {a.Sum(b)}\nВычитание:{

a.Vch(b)}");

Console.WriteLine($"Умножение: {a.Umn(b)}\nДеление:{a.Del(b)}"); Console.WriteLine($"Сравнение: Сумма №{a.Srav(b)}\b\b\b больше");

}

}

class EngMoney

{

private int f; private int s; private int p; public int F

{

get { return f; } set { f = value; }

}

public int S

{

get { return s; } set { s = value; }

}

public int P

{

get { return p; } set { p = value; }

}

public EngMoney(int ff, int ss, int pp)

{

f = ff; s = ss; p = pp;

}

public EngMoney Sum(EngMoney secondsum)

{

int result_f = f + secondsum.F; int result_s = s + secondsum.S; int result_p = p + secondsum.P; while (result_p >= 12)

{

result_p -= 12; result_s++;

}

while (result_s >= 20)

{

result_s -= 20; result_f++;

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Vch(EngMoney secondsum)

{

int result_f = f - secondsum.F; int result_s = s - secondsum.S;

6

int result_p = p - secondsum.P; while (result_p < 0)

{

result_p += 12; result_s--;

}

while (result_s < 0)

{

result_s += 20; result_f--;

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Umn(EngMoney secondsum)

{

int psum1 = f * 240 + s * 12 + p;

int psum2 = secondsum.F * 240 + secondsum.S * 12 + secondsum.P; int result_p = psum1 * psum2;

int result_s = 0; int result_f = 0;

{

while (result_p >= 12)

{

result_p -= 12; result_s++;

}

while (result_s >= 20)

{

result_s -= 20; result_f++;

}

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Del(EngMoney secondsum)

{

int psum1 = s * 12 + f * 240 + p;

int psum2 = secondsum.F * 240 + secondsum.S * 12 + secondsum.P; int result_p = psum1 / psum2;

int result_s = 0; int result_f = 0; while (result_p >= 12)

{

result_p -= 12; result_s++;

}

while (result_s >= 20)

{

result_s -= 20; result_f++;

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Srav(EngMoney secondsum)

{

int result_com = 0;

int psum1 = f * 240 + s * 12 + p;

int psum2 = secondsum.F * 240 + secondsum.S * 12 + secondsum.P; if (psum1

> psum2)

result_com = 1;

else

result_com = 2;

return new EngMoney(result_com, 0, 0);

}

public override string ToString()

{

7

return $"{f} {s} {p}";

}

}

}

Проверка корректности написания при запуске и вводе переменных представлена на рисунке 2.1-2.2.

Рисунок 2.1 – Проверка корректности кода

8

Рисунок 2.2 – Проверка корректности кода

2.3 Вторая задача

Поставленная задача, Создать класс Fraction для работы с дробными числами. Число должно быть представлено двумя полями: целая часть – длинное целое со знаком, дробная часть – беззнаковое короткое целое.

Реализовать арифметические операции сложения, вычитания, умножения и операции сравнения

Создается код, выполняющий данный алгоритм действий. Он изображен ниже.

namespace laba6._2

{

class Program

{

static void Main(string[] args)

9

{

int a1, a2, b11, b22; string b1, b2;

Console.WriteLine("Введите первое число в порядке: целая часть, дробная

часть");

a1 = int.Parse(Console.ReadLine());

b1 = Console.ReadLine();

Console.WriteLine("Введите второе число в порядке: целая часть, дробная

часть");

a2 = int.Parse(Console.ReadLine());

b2 = Console.ReadLine();

for (int i = b1.Length; i < b2.Length; i++) b1 += '0'; for (int i = b2.Length; i < b1.Length; i++) b2 += '0'; b11 = int.Parse(b1);

b22 = int.Parse(b2);

Fraction Aa = new Fraction(a1, b11); Fraction Bb = new Fraction(a2, b22);

Console.WriteLine($"\nРезультаты:\nСложение: { Aa.Sum(Bb)}\nВычитание: { Aa.Vch(Bb)}");

Console.WriteLine($"Умножение: {Aa.Umn(Bb)}\b "); Console.WriteLine($"Сравнение: Число № {Aa.Srav(Bb)}\b больше");

}

}

class Fraction

{

private double a; private int b; public double A

{

get { return a; } set { a = value; }

}

public int B

{

get { return b; } set { b = value; }

}

public Fraction(double a, int b)

{

this.a = a; this.b = b;

}

public Fraction Sum(Fraction second)

{

double result_a = a + second.A; int result_b = b + second.B;

if (result_b > 10)

{

result_b -= 10; result_a++;

}

return new Fraction(result_a, result_b);

}

public Fraction Vch(Fraction second)

{

double result_a = a - second.A; int result_b = b - second.B;

if (result_b < 0)

{

result_b = result_b * (-1);

}

return new Fraction(result_a, result_b);

}

public Fraction Umn(Fraction second)

{

10

double m1 = int.Parse(Convert.ToString(a) + Convert.ToString(b)) / Math.Pow(10, Convert.ToString(b).Length);

double m2 = int.Parse(Convert.ToString(second.A) + Convert.ToString(second.B)) / Math.Pow(10,

Convert.ToString(second.B).Length); double result_a = m1 * m2;

return new Fraction(result_a, 0);

}

public Fraction Srav(Fraction second)

{

double result_srav; if (a > second.A) result_srav = 1;

else

if (a < second.A) result_srav = 2; else

if (b > second.b) result_srav = 1;

else

result_srav = 2;

return new Fraction(result_srav, 0);

}

public override string ToString()

{

return $"{a} {b}";

}

}

}

Проверка корректности написания при запуске представлена на рисунке 2.3-

2.4.

Рисунок 2.3 – Результат работы кода

Соседние файлы в предмете Основы программирования