This commit is contained in:
nik
2025-09-30 14:26:54 +03:00
parent 8bd93df2ae
commit 8164e04835
633 changed files with 8 additions and 8 deletions

219
labs/lab2_done/report.typ Normal file
View File

@@ -0,0 +1,219 @@
#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\#, но требует доработки для повышения его надежности, читаемости и безопасности. Рекомендуется внести изменения, чтобы улучшить структуру и обработку ошибок, а также использовать более описательные имена для классов и переменных.