### Лабараторная работа по теме "Функции (методы)" ### Задача 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 ```