#set text(size: 1.3em) #show raw.where(block: false): box.with( fill: luma(240), inset: (x: 3pt, y: 0pt), outset: (y: 3pt), radius: 2pt, ) #show raw.where(block: true): block.with( fill: luma(240), inset: 10pt, radius: 4pt, ) // title #align(center)[Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики] \ \ \ #align(center)[Факультет инфокоммуникационных технологий] #align(center)[Направление подготовки 11.03.02] \ \ #align(center)[Лабораторная работа №2] #align(center)[Создание и использование размерных типов данных] \ \ \ //#align(center)[Вариант 19] \ \ \ \ \ \ \ #align(right)[Выполнил:] #align(right)[Дощенников Никита Андреевич] #align(right)[Группа: К3221] #align(right)[Проверил:] #align(right)[Иванов Сергей Евгеньевич] \ \ #align(center)[Санкт-Петербург] #align(center)[2025] #pagebreak() === Цель работы: Изучить размерные типы данных и приобрести навыки работы со структурными типами. === Упражнение 1. Создание перечисления. Я создал перечисление для представления различных типов банковских счетов и использовал его для создания двух переменных, которым присвоил значения `Checking` и `Deposit`. Затем я вывел значения этих переменных при помощи функции `Console.WriteLine()`. ```cs using System; public enum AccountType { Checking, Deposit } public class Enum { public static void Main(string[] args) { AccountType goldAccount; AccountType platinumAccount; goldAccount = AccountType.Checking; platinumAccount = AccountType.Deposit; Console.WriteLine("The Customer Account Type is {0}", goldAccount); Console.WriteLine("The Customer Account Type is {0}", platinumAccount); } } ``` Пример работы: #align(center)[#image("assets/1.png")] === Упражнение 2. Создание и использование структуры. Я создал структуру, которую можно использовать для представления банковских счетов. Для хранения номеров счетов (`long`), балансов счетов (`decimal`) и типов счетов (`AccountType`). Затем создал переменную типа структуры, заполнил ее данными и вывел результаты на консоль. ```cs using System; public enum AccountType { Checking, Deposit } public struct BankAccount { public long accNo; public decimal accBal; public AccountType accType; } public class Struct { public static void Main(string[] args) { BankAccount goldAccount; goldAccount.accType = AccountType.Checking; goldAccount.accBal = (decimal)3200.00; Console.Write("Enter account number: "); goldAccount.accNo = long.Parse(Console.ReadLine()); Console.WriteLine("*** Account Summary ***"); Console.WriteLine("Acct Number {0}", goldAccount.accNo); Console.WriteLine("Acct Type {0}", goldAccount.accType); Console.WriteLine("Acct Balance ${0}", goldAccount.accBal); } } ``` Пример работы: #align(center)[#image("assets/2.png")] === Упражнение 3. Реализация структуры Distance. Создал структуру Distance, определяющую длину в английской системе мер. ```cs using System; struct Distance { public int feet; public int inches; public void Print() { Console.WriteLine("{0}' - {1}''", feet, inches); } } public class Program { public static void Main(string[] args) { Distance d1, d2, d3; Console.Write("Input the first distance (feet): "); d1.feet = int.Parse(Console.ReadLine()); Console.Write("Input the first distance (inches): "); d1.inches = int.Parse(Console.ReadLine()); Console.Write("Input the second distance (feet): "); d2.feet = int.Parse(Console.ReadLine()); Console.Write("Input the second distance (inches): "); d2.inches = int.Parse(Console.ReadLine()); d3.feet = d1.feet + d2.feet; d3.inches = d1.inches + d2.inches; d3.feet += d3.inches % 12; d3.inches = d3.inches / 12; d3.Print(); } } ``` Пример работы: #align(center)[#image("assets/3.png")] === Выводы. В ходе выполнения лабораторной работе я изучил размерные типы данных и приобрел навыки работы со структурными типами. === Code Review. (by #link("https://zzzcode.ai/")[zzzcode.ai]) *Резюме* Код, представленный выше, демонстрирует использование перечислений, структур и базовых операций ввода-вывода в C\#. Однако, он содержит несколько недостатков, которые могут повлиять на его читаемость, производительность и безопасность. *Ошибка* В коде есть несколько потенциальных ошибок, связанных с обработкой ввода. Например, если пользователь введет некорректные данные (нечисловые значения), программа вызовет исключение. Рекомендуется использовать `TryParse` для безопасного парсинга. *Стиль кода* Стиль кода в целом соответствует стандартам C\#. Однако, использование имен классов Enum и Struct не является удачным, так как они могут вызвать путаницу с встроенными типами. Рекомендуется использовать более описательные имена, такие как `AccountEnum` и `BankAccountStruct`. *Структура кода* Код разбит на три отдельных класса, что хорошо для организации, но может быть улучшено. Например, можно объединить функциональность в один класс с методами, чтобы избежать дублирования кода. *Читаемость* Читаемость кода можно улучшить, добавив комментарии и более четкие имена переменных. Например, вместо `d1`, `d2`, `d3` можно использовать `firstDistance`, `secondDistance`, `resultDistance`. *Производительность* Производительность кода не вызывает серьезных проблем, однако, использование `Console.ReadLine()` в цикле может быть оптимизировано, если ввод данных будет обрабатываться в одном методе. *Масштабируемость* Код не очень масштабируемый, так как добавление новых типов счетов или новых единиц измерения потребует значительных изменений. Рекомендуется использовать более гибкие структуры данных, такие как классы или коллекции. *Безопасность* Безопасность кода может быть улучшена путем добавления обработки исключений и проверки ввода. Это поможет избежать сбоев программы при некорректном вводе данных. *Обработка ошибок* Обработка ошибок в текущем коде отсутствует. Рекомендуется добавить блоки *try-catch* для обработки возможных исключений, особенно при работе с вводом пользователя. *Заключение* Код демонстрирует базовые концепции C\#, но требует доработки для повышения его надежности, читаемости и безопасности. Рекомендуется внести изменения, чтобы улучшить структуру и обработку ошибок, а также использовать более описательные имена для классов и переменных.