Решение задач
1.1 Задача линейного алгоритма

Условие: Периметр прямоугольника 48 см. Длина в 3 раза больше ширины. Найдите стороны.

Таблица 1 - Таблица идентификаторов к задаче 1

Идентификатор

Тип

Описание

perimeter

double

Периметр прямоугольника (48 см) 

length

double

Длина прямоугольника (нужно найти)

width

double

Ширина прямоугольника (нужно найти)

Блок-схема:

Рисунок 1 – Блок-схема к задаче 1

Код программы:
using System;

namespace RectangleCalculator
{
   class Program
   {
       static void Main(string[] args)
       {
           // Ввод данных
           Console.WriteLine("Введите периметр прямоугольника (в см):");
           string perimeterString = Console.ReadLine();

           // Проверка ввода
           if (double.TryParse(perimeterString, out double perimeter))
           {
// Вычисление сторон
double width = perimeter / 8;
double length = 3 * width;

// Вывод результатов
Console.WriteLine("Длина прямоугольника: " + length + " см");
Console.WriteLine("Ширина прямоугольника: " + width + " см");
           }
           else
           {
               Console.WriteLine("Ошибка: Введено некорректное значение периметра.");
           }

           // Ожидание нажатия клавиши для завершения программы
           Console.ReadKey();
       }
   }

}

Результат:

Рисунок 2 – Вывод программы, если ввести число 48

1.2 Задача разветвляющегося алгоритма

Условие: Билет счастливчика

Проверьте, равна ли сумма первых трёх цифр шестизначного числа сумме последних трёх.

Таблица 2 - Таблица идентификаторов к задаче 2

Название

Тип

Описание

ticketNumber

string

Номер билета (шестизначное число)

firstThreeSum

int

Сумма первых трёх цифр   

lastThreeSum

int

Сумма последних трёх цифр   

isLucky

bool

Логическая переменная, показывающая, является ли билет счастливым (true) или нет (false)

Блок-схема:

Рисунок 3 – Блок-схема к задаче 2

using System;
using System.Linq;

namespace LuckyTicketChecker
{
   class Program
   {
       static void Main(string[] args)
       {
           // Ввод номера билета
           Console.WriteLine("Введите шестизначный номер билета:");
           string ticketNumber = Console.ReadLine();

           // Проверка корректностиввода
           if (ticketNumber.Length == 6 && ticketNumber.All(char.IsDigit))
           {
// Вычисление сумм
int firstThreeSum = (ticketNumber[0] - '0') + (ticketNumber[1] - '0') + (ticketNumber[2] - '0');
int lastThreeSum = (ticketNumber[3] - '0') + (ticketNumber[4] - '0') + (ticketNumber[5] - '0');

// Проверка на "счастливость"
bool isLucky = (firstThreeSum == lastThreeSum);

               // Вывод результата
               if (isLucky)
               {
Console.WriteLine("Билет счастливый!");
               }
               else
               {
Console.WriteLine("Билет несчастливый.");
               }
           }
           else
           {
Console.WriteLine("Некорректный номер билета. Введите шестизначное число.");
           }

           Console.ReadKey(); // Чтобы консоль не закрывалась сразу
       }
   }
}
Результат:

Рисунок 4 – Вывод программы, если ввести число 123033

Рисунок 5 – Вывод программы, если ввести число 123456


1.3 Задача циклического алгоритма

Условие: Инверсия последовательности

Выведите числа от N до 1 в обратном порядке.

Таблица 3 - Таблица идентификаторов к задаче 3

Название

Тип

Описание

N

int

Верхняя граница последовательности (введенное число)

i

int

Переменная цикла

Блок-схема:

Рисунок 6 – Блок-схема к задаче 3

Код программы:
using System;

namespace ReverseSequence
{
   class Program
   {
       static void Main(string[] args)
       {
           // Ввод числа N
           Console.WriteLine("Введите целое положительное число N:");
           string input = Console.ReadLine();

           // Обработка исключений и проверка ввода
           if (int.TryParse(input, out int N) && N > 0)
           {
               // Вывод чисел от N до 1 в обратном порядке
               for (int i = N; i >= 1; i--)
{
Console.WriteLine(i);
}
           }
           else
           {
Console.WriteLine("Ошибка: Введено некорректное значение. Введите целое положительное число.");
           }

           // Ожидание нажатия клавиши
           Console.ReadKey();
       }
   }
}
Результат:

Рисунок 7 – Вывод программы, если ввести цифру 5

Рисунок 8 – Вывод программы, если ввести некорректное значение

Рисунок 9 – Вывод программы, если ввести некорректное значение

1.4 Задача на проектирование классов

Условие: Класс "Банк"
Разработайте класс Bank для управления счетами клиентов. Добавьте методы для открытия, закрытия и пополнения счетов.

Таблица 4 - Таблица идентификаторов к задаче 4

Класс

Название

Тип

Описание

Bank

accounts

List<Account>

Список счетов в банке

nextAccountNumber

static int

Генерация уникальных номеров счетов

OpenAccount()

method

Открытие нового счета

CloseAccount()

method

Закрытие существующего счета

 

Deposit()

method

Пополнение счета

 

Withdraw()

method

Снятие средств со счета

 

nextClientId

static int

Генерация уникальных ID клиентов

 

OpenAccount(string name, string address)

method

Открытие нового счета с указанием информации о клиенте

Account

accountNumber

int

Номер счета

balance

decimal

Баланс счета

client

Client

Владелец счета

 

AccountNumber

property (int)

Получение номера счета

 

Balance

property (decimal)

Получение баланса счета

 

Client

property (Client)

Получение информации о клиенте, владельце счета

 

Deposit()

method

Пополнение баланса счета

 

Withdraw()

method

Снятие средств с баланса счета

Client

clientId

int

Уникальный идентификатор клиента

name

string

Имя клиента

address

string

Адрес клиента


Продолжение таблицы 4

Client

ClieanId

property (int)

Получение идентификатора клиента

 

Name

property (string)

Получение имени клиента

 

Address

property (string)

Получение адреса клиента

Program

Main()

method

Главный метод программы для взаимодействия с пользователем

Диаграмма классов:

Рисунок 10 – Диаграмма классов

Код программы:
using System;
using System.Collections.Generic;
using System.Linq;

namespace BankManagement
{
   class Client
   {
       private int clientId;
       private string name;
       private string address;

       public Client(int clientId, string name, string address)
       {
this.clientId = clientId;
this.name = name;
this.address = address;
       }

       public int ClientId { get { return clientId; } }
       public string Name { get { return name; } }
       public string Address { get { return address; } }
   }

   class Account
   {
       private int accountNumber;
       private decimal balance;
       private Client client;

       public Account(int accountNumber, Client client)
       {
this.accountNumber = accountNumber;
this.balance = 0;
this.client = client;
       }

       public int AccountNumber { get { return accountNumber; } }
       public decimal Balance { get { return balance; } }
       public Client Client { get { return client; } }

       public void Deposit(decimal amount)
       {
           if (amount > 0)
           {
balance += amount;
Console.WriteLine($"На счет {accountNumber} (владелец: {client.Name}) зачислено {amount:C}. Текущий баланс: {balance:C}");
           }
           else
           {
               Console.WriteLine("Сумма пополнения должна быть положительной.");
           }
       }

       public bool Withdraw(decimal amount)
       {
           if (amount > 0 && balance >= amount)
           {
balance -= amount;
Console.WriteLine($"Со счета {accountNumber} (владелец: {client.Name}) списано {amount:C}. Текущий баланс: {balance:C}");
               return true;
           }
           else
           {
Console.WriteLine("Недостаточно средств на счете или сумма списания некорректна.");
               return false;
           }
       }
   }

   class Bank
   {
       private List<Account> accounts = new List<Account>();
       private static int nextAccountNumber = 1000;
       private static int nextClientId = 1;

       public void OpenAccount(string name, string address)
       {
Client newClient = new Client(nextClientId++, name, address);
Account newAccount = new Account(nextAccountNumber++, newClient);
accounts.Add(newAccount);
Console.WriteLine($"Открыт новый счет с номером {newAccount.AccountNumber} для клиента {newClient.Name} (ID: {newClient.ClientId})");
       }

       public void CloseAccount(int accountNumber)
       {
Account accountToRemove = accounts.FirstOrDefault(a => a.AccountNumber == accountNumber);
           if (accountToRemove != null)
           {
accounts.Remove(accountToRemove);
Console.WriteLine($"Счет {accountNumber} (владелец: {accountToRemove.Client.Name}) успешно закрыт.");
           }
           else
           {
Console.WriteLine($"Счет с номером {accountNumber} не найден.");
           }
       }

       public void Deposit(int accountNumber, decimal amount)
       {
Account account = accounts.FirstOrDefault(a => a.AccountNumber == accountNumber);
           if (account != null)
           {
               account.Deposit(amount);
           }
           else
           {
Console.WriteLine($"Счет с номером {accountNumber} не найден.");
           }
       }

       public void Withdraw(int accountNumber, decimal amount)
       {
           Account account = accounts.FirstOrDefault(a => a.AccountNumber == accountNumber);
           if (account != null)
           {
account.Withdraw(amount);
           }
           else
           {
               Console.WriteLine($"Счет с номером {accountNumber} не найден.");
           }
       }
   }

   class Program
   {
       static void Main(string[] args)
       {
Console.OutputEncoding = System.Text.Encoding.UTF8;
           Bank bank = new Bank();

bank.OpenAccount("Иван Иванов", "ул. Ленина, 1"); // Открываем счет 1000 для Ивана
           bank.OpenAccount("Петр Петров", "ул. Мира, 2");// Открываем счет 1001 для Петра

           bank.Deposit(1000, 500);
           bank.Withdraw(1000, 200);
           bank.Withdraw(1000, 400); // Попытка снять больше, чем есть на счете

           bank.CloseAccount(1001);
           bank.CloseAccount(1002); // Попытка закрыть несуществующий счет

           Console.ReadKey();
       }
   }
}
Результат:

Рисунок 11 – Вывод программы

1.5 Задача с графическим интерфейсом

Условие: Социальная сеть
Разработайте приложение для социальной сети с графическим интерфейсом.

Таблица 5 - Таблица компонентов к задаче 5

Компонент/объект

Базовый класс

Свойства, которые изменяем

Назначение, методы, события

User

Object

Id, Name, Age, Email

Представляет пользователя социальной сети

Post

Object

Id, Content, AuthorId

Представляет пост пользователя

Диаграмма классов:

Рисунок 12 – Диаграмма классов к задаче 5

Код программы:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace УП_первая_неделя
{
   public partial class Form1 : Form
   {
       private List<User> users = new List<User>();

       public Form1()
       {
InitializeComponent();
           InitializeUI();
       }

       private void InitializeUI()
       {
           // Настройка элементовуправления
btnAddUser.Click += BtnAddUser_Click;
           btnAddPost.Click += BtnAddPost_Click;

           // Инициализация списка пользователей
           lstUsers.SelectedIndexChanged += LstUsers_SelectedIndexChanged;
       }

       private void BtnAddUser_Click(object sender, EventArgs e)
       {
           var user = new User
           {
Id = users.Count + 1,
Name = txtName.Text,
Age = int.Parse(txtAge.Text),
Email = txtEmail.Text
           };

users.Add(user);
lstUsers.Items.Add(user.Name);

txtName.Clear();
txtAge.Clear();
txtEmail.Clear();

MessageBox.Show("Пользовательдобавлен!");
       }

       private void LstUsers_SelectedIndexChanged(object sender, EventArgs e)
       {
           if (lstUsers.SelectedIndex >= 0)
           {
var selectedUser = users[lstUsers.SelectedIndex];
lstPosts.Items.Clear();
foreach (var post in selectedUser.GetPosts())
{
  lstPosts.Items.Add(post.Content);
}
           }
       }

       private void BtnAddPost_Click(object sender, EventArgs e)
       {
           if (lstUsers.SelectedIndex >= 0)
           {
var selectedUser = users[lstUsers.SelectedIndex];
selectedUser.AddPost(txtPostContent.Text);
txtPostContent.Clear();

MessageBox.Show("Пост добавлен!");
LstUsers_SelectedIndexChanged(sender, e); // Обновить список постов
           }
           else
           {
               MessageBox.Show("Сначала выберите пользователя.");
           }
       }
public class User
       {
public int Id { get; set; }
           public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
private List<Post> posts = new List<Post>();

public void AddPost(string content)
           {
var post = new Post { Id = posts.Count + 1, Content = content, AuthorId = this.Id };
posts.Add(post);
OnPostCreated?.Invoke(post);
           }

public List<Post> GetPosts()
           {
               return posts;
           }

public event Action<Post> OnPostCreated;
       }

       public class Post
       {
public int Id { get; set; }
public string Content { get; set; }
public int AuthorId { get; set; }

public void EditContent(string newContent)
           {
Content = newContent;
           }

public void Delete()
           {
               // Логика удаления поста
           }
       }
   }
}
Результат:

Рисунок 13 – Поле до начала и после добавления пользователя

Рисунок 14 – Поле добавления поста, если не выбрать пользователя

Рисунок 15 – Поле после добавления поста

Перейти в АИС
Made on
Tilda