Files
oop/labs/lab2_done/report.typ
2025-09-30 14:26:54 +03:00

220 lines
9.2 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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