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

Лаб 6 -Углы и длинные числа - СФ

.pdf
Скачиваний:
1
Добавлен:
06.11.2022
Размер:
300 Кб
Скачать

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

образования ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И

РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

Основы ООП

Лабораторная работа №5 по дисциплине «Основы программирования» Отчет по лабораторной работе

Студент гр. ххххх

________ хххххх. 14.03.2022

Руководитель: Преподаватель КИБЭВС

_________ ________ ххххх

14.03.2022

Томск 2022

2

Содержание Введение……………………………………………………………………………………. 3 Теоретические сведения…………………………………………………………………… 4 Ход работы для задания №1………………………………………………………………. 5 Ход работы для задания №2………………………………………………………………. 7

Заключение………………………………………………………………………………… 9

Список использованной литературы……………………………………………………. 10

3

1 Введение

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

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

интерфейсов, конструкторов и деструкторов.

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

приведение к диапазону 0–360, увеличение и уменьшение угла на заданную величину,

получение синуса, сравнение углов.

Задание 2: Создать класс LongLong для работы с целыми числами из 64 бит. Число должно быть представлено двумя полями: long – старшая часть, unsigned long – младшая часть.

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

4

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

В объектно-ориентированном программировании (ООП) — класс это основной элемент, в рамках которого осуществляется конструирование программ. Класс содержит в себе данные и код, который управляет этими данными. Класс зачастую описывает объект реального мира.

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

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

private: доступ к типу или члену возможен только из кода в том же объекте class или

struct.

protected: доступ к типу или члену возможен только из кода в том же объекте class

либо в class, производном от этого class.

internal: доступ к типу или члену возможен из любого кода в той же сборке, но не из другой сборки.

protected internal: доступ к типу или члену возможен из любого кода в той сборке,

где он был объявлен, или из производного class в другой сборке.

private protected: доступ к типу или члену возможен только из его объявляющей сборки из кода в том же class либо в типе, производном от этого class.

5

3 Ход работы для задания №1

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

0-360, считают синус и увеличивают или уменьшают угол. А сама программа запрашивает пользователя ввести угол, а потом выбрать либо увеличить угол, либо уменьшить его.

На рисунке 3.1 представлен результат работы программы.

Ниже представлен сам код программы:

using System; namespace ConsoleApp6

{

class Program

{

class Angle

{

public double degrees1; public double degrees; public double radians; public double change;

public double InRadian()

{

radians = degrees * Math.PI / 180; return degrees * Math.PI / 180;

}

public double InArea()

{

while (degrees > 360) degrees -= 360;

Console.WriteLine($"В дипазоне: {degrees}"); return degrees;

}

public double GetSinus()

{

Console.WriteLine($"Sinus = {Math.Sin(InRadian())}"); Console.WriteLine($"В радианах {radians}");

return Math.Sin(InRadian());

}

public double IncreaseA()

{

degrees1 = degrees + change; Console.WriteLine($"Увеличенный угол: {degrees1}"); if (degrees > change)

Console.WriteLine("Прибавленный угол меньше"); else if (degrees < change)

Console.WriteLine("Прибавленный угол больше"); else Console.WriteLine("Углы равны");

return degrees1;

}

public double DecreaseA()

{

degrees1 = degrees - change; Console.WriteLine($"Уменьшенный угол: {degrees1}"); if (degrees > change)

Console.WriteLine("Прибавленный угол меньше"); else if (degrees < change)

Console.WriteLine("Прибавленный угол больше"); else Console.WriteLine("Углы равны");

return degrees1;

6

}

}

static void Main(string[] args)

{

Console.Write("Введите градусы "); Angle angle = new Angle();

angle.degrees = double.Parse(Console.ReadLine()); angle.InArea();

angle.GetSinus();

Console.WriteLine("Увеличить угол - 1 \nуменьшить угол - 2"); int choice = int.Parse(Console.ReadLine());

if (choice == 1)

{

Console.Write("На какую величину увеличить: "); angle.change = double.Parse(Console.ReadLine()); angle.IncreaseA();

}

else if (choice == 2)

{

Console.Write("На какую величину уменьшить: "); angle.change = double.Parse(Console.ReadLine()); angle.DecreaseA();

}

}

}

}

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

Данная программа работает корректно, без каких-либо проблем.

7

4 Ход работы для задания №2

Сначала программа создает класс LongLong. В нем создаются переменные типа long и string, а затем создает функции, которые сначала разделяют число на младшую и младшую части, а затем складывают эти части, вычитают большую из меньшей, делит большее на меньшее, умножают и сравнивают. А затем просит пользователя ввести число и вызывает все эти функции.

Результат работы программы представлен на рисунке 4.1.

Ниже представлен сам код программы:

using System; namespace ConsoleApp6

{

class Program

{

class LongLong

{

public string Flong; public long Long; public long Ulong;

public string Separate(string Flong)

{

int Lenght = Flong.Length;

Long = Convert.ToInt64(Math.Floor(Convert.ToInt64(Flong) / Math.Pow(10, Lenght/2)));

Ulong = Convert.ToInt64(Math.Floor(Convert.ToInt64(Flong) % Math.Pow(10, Lenght / 2)));

Console.WriteLine($"Числа равно: старшая часть {Long}, младшая часть

{Ulong}");

return Flong;

}

public long Plus(long Long, long Ulong)

{

Console.WriteLine($"Сложение равно: {Long + Ulong}"); return Long + Ulong;

}

public long Multiplication(long Long, long Ulong)

{

Console.WriteLine($"Умножение равно: {Long * Ulong}"); return Long + Ulong;

}

public long Compartion(long Long, long Ulong)

{

if (Long > Ulong)

Console.WriteLine($"Старшая часть > младшей"); else if (Long < Ulong)

Console.WriteLine($"Младшая часть > старшей");

else

Console.WriteLine($"Части равны"); return Long > Ulong ? Long : Ulong;

}

public double Division(long Long, long Ulong)

{

if (Long > Ulong)

{

Console.WriteLine($"Деление равно {Convert.ToDouble(Convert.ToDouble(Long) / Convert.ToDouble(Ulong))}");

return Convert.ToDouble(Convert.ToDouble(Long) / Convert.ToDouble(Ulong));

8

}

if (Long < Ulong)

{

Console.WriteLine($"Деление равно {Convert.ToDouble(Convert.ToDouble(Ulong) / Convert.ToDouble(Long))}");

return Convert.ToDouble(Convert.ToDouble(Ulong) / Convert.ToDouble(Long));

}

return Long > Ulong ? Convert.ToDouble(Long / Ulong) : Convert.ToDouble(Ulong / Long);

}

public long Minus(long Long, long Ulong)

{

if (Long > Ulong)

{

Console.WriteLine($"Вычитание равно {Convert.ToDouble(Long -

Ulong)}");

return Long - Ulong;

}

if (Long < Ulong)

{

Console.WriteLine($"Вычитание равно {Convert.ToDouble(Ulong -

Long)}");

return Ulong - Long;

}

return Long > Ulong ? Long - Ulong : Ulong - Long;

}

}

static void Main(string[] args)

{

Console.Write("Введите число: "); LongLong lng = new LongLong(); lng.Flong = Console.ReadLine(); lng.Separate(lng.Flong); lng.Plus(lng.Long, lng.Ulong); lng.Multiplication(lng.Long, lng.Ulong); lng.Compartion(lng.Long, lng.Ulong); lng.Division(lng.Long, lng.Ulong); lng.Minus(lng.Long, lng.Ulong);

}

}

}

Рисунок 4.1 - Работа программы 2

Данная программа работает корректно, без каких-либо проблем.

9

5Заключение

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

Были решены 2 задачи, в которых были применены классы.

Впервом задании был написан класс, в котором вычисляется угол в радианах,

приводится к диапазону 0-360, увеличение или уменьшение угла и сравнение углов. Данная программа использует класс, в котором используют переменные с модификатором public.

Во втором задании также нужно создать класс. В нем вычисляется сумма, разность,

деление, умножение и сравнение старшей и младшей частей числа. Причем вычитание и деление вычисляется как наибольшее из наименьшего.

10

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

1. ГОСТ 19.701-90 (ИСО 5807-85) Единая система программной документации (ЕСПД).

Схемы алгоритмов, программ, данных и систем. Обозначения условные и правила выполнения.

2. Документация по C#. [Электронный ресурс]. – Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/csharp (дата обращения: 15.02.2020)

3.Кнут Д.Э. Искусство программирования. – Т. 1: Основные алгоритмы. – 3-е изд.; пер. с

англ. – М.: ИД «Вильямс», 2016. – 720 с.

4.Харченко С.С. Основы программирования: учебно-методическое пособие. – Томск: В-

Спектр, 2020. – XX с.