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

laba6

.pdf
Скачиваний:
12
Добавлен:
29.10.2021
Размер:
269.31 Кб
Скачать

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

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР) Кафедра безопасности информационных систем (БИС)

Отчет по лабораторной работе №6

по дисциплине «Основы программирования» Тема работы: Основы объектно-ориентированного программирования.

Студенты гр. 730-2

_______Подойницын К.В.

_______Астра Г.А.

_______Фатеев А.В. 07.06.2021

Принял Инженер научно-технического отдела ЦСП

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

07.06.2021

2021

Содержание Введение………………………………………………………..3

Теоретические сведения по теме лабораторной работы…….4

Ход работы……………………………………………………..5-11

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

Список использованных источников………………………….13

1 Введение

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

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

2 Теоретические сведения по теме лабораторной работы

Класс является основой для создания объектов. Если структура объединяет разнородные по типам переменные, то в классе определяются данные и код, который работает с этими данными. Объекты являются экземплярами класса. Методы и переменные, составляющие класс,

называются членами класса. При определении класса объявляются данные,

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

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

В классе могут быть определены несколько конструкторов. Все члены классов имеют уровень доступности или модификатор доступа. Он определяет возможность их использования из другого кода в вашей программе. При создании объекта класса происходит вызов соответствующего конструктора класса. Конструктор класса – метод для инициализации объекта при его создании. Он имеет то же имя, что и его класс. В конструкторах тип возвращаемого значения не указывается явно.

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

Свойство класса – это член, предоставляющий гибкий механизм для чтения,

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

3 Ход работы

Задание 1

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

умножение и деление, сравнение сумм.

Листинг исходного кода программы:

using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace laba6._1

{

class Program

{

static void Main(string[] args)

{

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; 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()

{

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

}

}

}

Рисунок 1 – скриншот работы программы

Программа работает корректно.

Задание 2

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

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

Листинг исходного кода программы:

using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace laba6._2

{

class Program

{

static void Main(string[] args)

{

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)

{

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)

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