Лаб 6 -Углы и длинные числа - СФ
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего
образования ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И
РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)
Основы ООП
Лабораторная работа №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 с.