### Лабараторная работа по теме "Функции (методы)"
### Задача 1
```
using System;
internal class Program
{
///
/// Вычисляет площадь треугольника по координатам его вершин.
///
/// Координата X первой вершины.
/// Координата Y первой вершины.
/// Координата X второй вершины.
/// Координата Y второй вершины.
/// Координата X третьей вершины.
/// Координата Y третьей вершины.
/// Площадь треугольника.
static void Main(string[] args)
{
Console.WriteLine("Введите координаты вершины A");
double x1 = double.Parse(Console.ReadLine());
double y1 = double.Parse(Console.ReadLine());
Console.WriteLine("Введите координаты вершины B");
double x2 = double.Parse(Console.ReadLine());
double y2 = double.Parse(Console.ReadLine());
Console.WriteLine("Введите координаты вершины C");
double x3 = double.Parse(Console.ReadLine());
double y3 = double.Parse(Console.ReadLine());
Console.WriteLine("Площадь треугольника = " + square(x1, y1, x2, y2, x3, y3));
Console.WriteLine();
}
static double square(double x1, double y1, double x2, double y2, double x3, double y3)
{
return Math.Abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2);
}
}
```
```
Введите координаты вершины A
10
5
Введите координаты вершины B
3
4
Введите координаты вершины C
5
3
Площадь треугольника = 7,5
```
### Задача 2
```
using System;
internal class Program
{
static void Main(string[] args)
{
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int c = int.Parse(Console.ReadLine());
int d = int.Parse(Console.ReadLine());
int sss = Divider(Divider(a, b), Divider(c, d));
Console.WriteLine("Наибольший общий делитель: " + sss);
}
///
/// Вычисляет наибольший общий делитель (НОД) двух целых чисел с использованием алгоритма Евклида.
///
/// Первое целое число.
/// Второе целое число.
/// Наибольший общий делитель двух чисел.
static int Divider(int a, int b)
{
while (b != 0)
{
int result = b;
b = a % b;
a = result;
}
return a;
}
}
```
```
10
5
15
25
Наибольший общий делитель:5
```
### Задача 3
```
using System;
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите первое число: ");
var num1 = int.Parse(Console.ReadLine());
Console.WriteLine("Введите второе число: ");
var num2 = int.Parse(Console.ReadLine());
Console.WriteLine("Введите третье число: ");
var num3 = int.Parse(Console.ReadLine());
int num4 = num4(num5(num1, num2), num3);
Console.WriteLine("Наименьшее общее кратное: " + num4);
}
///
/// Вычисляет наибольший общий делитель (НОД) двух целых чисел с использованием алгоритма Евклида.
///
/// Первое целое число.
/// Второе целое число.
/// Наибольший общий делитель двух чисел.
static int num5(int a, int b)
{
while (b != 0)
{
int temp = b;
b = a % b;
a = temp;
}
return a;
}
///
/// Вычисляет наименьшее общее кратное (НОК) двух целых чисел.
///
/// Первое целое число.
/// Второе целое число.
/// Наименьшее общее кратное двух чисел.
static int num4(int a, int b)
{
return (a / num5(a, b)) * b;
}
}
```
```
Введите первое число :
10
Введите второе число :
5
Введите третье число :
20
Наименьшее общее кратное: 5
```
### Задача 4
```
using System;
internal class Program
{
static void Main(string[] args)
{
double firstnumber = double.Parse(Console.ReadLine());
double secondnumber = double.Parse(Console.ReadLine());
double thirdnumber = double.Parse(Console.ReadLine());
Console.WriteLine("Сумма большего и меньшего числа = " + Sum(firstnumber, secondnumber, thirdnumber));
}
///
/// Вычисляет сумму большего и меньшего из трех заданных чисел.
///
/// Первое число.
/// Второе число.
/// Третье число.
/// Сумма большего и меньшего числа.
static double Sum(double firstnumber, double secondnumber, double thirdnumber)
{
double Maxvalue = Math.Max(Math.Max(firstnumber, secondnumber), thirdnumber);
double Minvalue = Math.Min(Math.Min(firstnumber, secondnumber), thirdnumber);
return Maxvalue + Minvalue;
}
}
```
```
10
5
3
Cумма большего и меньшего числа = 13
```
### Задача 5
```
using System;
using System.Linq;
internal class Program
{
static void Main(string[] args)
{
string nums = Console.ReadLine();
int[] A = nums.Split(' ').Select(int.Parse).ToArray();
Console.WriteLine("Второе по величине число = " + Res(A));
}
///
/// Находит второе по величине число в массиве целых чисел.
///
/// Массив целых чисел.
/// Второе по величине число в массиве.
static int Res(params int[] A)
{
Array.Sort(A);
return A[A.Length - 2];
}
}
```
```
10 13 5 7
Второе по величине число = 10
```
### Задача 6
```
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите год: ");
int year = int.Parse(Console.ReadLine());
for (int day = 1; day <= 31; day++)
{
for (int birthYear = 1900; birthYear < 2000; birthYear++)
{
int age = year - birthYear;
if (age >= 0)
{
int sumOfSquares = SumOfSquares(birthYear);
int squareOfDay = day * day;
if (sumOfSquares - squareOfDay == age)
{
Console.WriteLine($"День рождения: {day} декабря {birthYear} года, Возраст: {age}");
}
}
}
}
}
///
/// Метод для вычисления суммы квадратов цифр числа.
///
/// Число, для которого нужно вычислить сумму квадратов цифр.
/// Сумма квадратов цифр числа.
static int SumOfSquares(int number)
{
int sum = 0;
while (number > 0)
{
int digit = number % 10;
sum += digit * digit;
number /= 10;
}
return sum;
}
}
```
```
Введите год:
2002
День рождения: 2 декабря 1920 года, Возраст: 82
День рождения: 4 декабря 1923 года, Возраст: 79
День рождения: 5 декабря 1932 года, Возраст: 70
День рождения: 6 декабря 1907 года, Возраст: 95
День рождения: 6 декабря 1940 года, Возраст: 62
День рождения: 7 декабря 1935 года, Возраст: 67
День рождения: 9 декабря 1919 года, Возраст: 83
День рождения: 12 декабря 1984 года, Возраст: 18
День рождения: 14 декабря 1988 года, Возраст: 14
```
### Задание 7
```
internal class Program
{
static void Main()
{
Console.WriteLine("Введите упакованную строку:");
string packedString = Console.ReadLine();
string unpackedString = UnpackString(packedString);
Console.WriteLine("Восстановленная строка: " + unpackedString);
}
static string UnpackString(string packed)
{
string result = "";
int i = 0;
///
/// Обрабатываем каждый символ упакованной строки.
///
while (i < packed.Length)
{
///
/// Если текущий символ - цифра, то считываем количество повторений.
///
if (char.IsDigit(packed[i]))
{
///
/// Количество повторений.
///
int count = 0;
while (i < packed.Length && char.IsDigit(packed[i]))
{
count = count * 10 + (packed[i] - '0');
i++;
}
///
/// Если после цифры идет буква, то добавляем ее в результат нужное количество раз.
///
if (i < packed.Length && char.IsUpper(packed[i]))
{
char letter = packed[i];
for (int j = 0; j < count; j++)
{
result += letter;
}
i++;
}
}
else
{
///
/// Если текущий символ - буква, то просто добавляем ее в результат.
///
result += packed[i];
i++;
}
}
return result;
}
}
```
```
Введите упакованную строку:
4AB5C4D
Восстановленная строка: AAAABCCCCCDDDD
```
### Задание 8
```
internal class Program
{
static void Main()
{
Console.WriteLine("Введите загаданное число (четырехзначное, без повторяющихся цифр):");
string secretNumber = Console.ReadLine();
Console.WriteLine("Введите предложенное число (четырехзначное, без повторяющихся цифр):");
string guessedNumber = Console.ReadLine();
(int bulls, int cows) = GetBullsAndCows(secretNumber, guessedNumber);
Console.WriteLine($"Быки: {bulls}, Коровы: {cows}");
}
///
/// Метод для подсчета быков и коров.
///
/// Загаданное число.
/// Предложенное число.
static (int, int) GetBullsAndCows(string secret, string guess)
{
int bulls = 0;
int cows = 0;
int[] secretCount = new int[10];
int[] guessCount = new int[10];
for (int i = 0; i < 4; i++)
{
if (secret[i] == guess[i])
{
bulls++;
}
else
{
secretCount[secret[i] - '0']++;
guessCount[guess[i] - '0']++;
}
}
for (int i = 0; i < 10; i++)
{
cows += Math.Min(secretCount[i], guessCount[i]);
}
return (bulls, cows);
}
}
```
```
Введите загаданное число (четырехзначное, без повторяющихся цифр):
5671
Введите предложенное число (четырехзначное, без повторяющихся цифр):
7251
Быки: 1, Коровы: 2
```