Лабараторная работа по теме "Функции (методы)"
Задача 1
using System;
internal class Program
{
/// <summary>
/// Вычисляет площадь треугольника по координатам его вершин.
/// </summary>
/// <param name="x1">Координата X первой вершины.</param>
/// <param name="y1">Координата Y первой вершины.</param>
/// <param name="x2">Координата X второй вершины.</param>
/// <param name="y2">Координата Y второй вершины.</param>
/// <param name="x3">Координата X третьей вершины.</param>
/// <param name="y3">Координата Y третьей вершины.</param>
/// <returns>Площадь треугольника.</returns>
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);
}
/// <summary>
/// Вычисляет наибольший общий делитель (НОД) двух целых чисел с использованием алгоритма Евклида.
/// </summary>
/// <param name="a">Первое целое число.</param>
/// <param name="b">Второе целое число.</param>
/// <returns>Наибольший общий делитель двух чисел.</returns>
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);
}
/// <summary>
/// Вычисляет наибольший общий делитель (НОД) двух целых чисел с использованием алгоритма Евклида.
/// </summary>
/// <param name="a">Первое целое число.</param>
/// <param name="b">Второе целое число.</param>
/// <returns>Наибольший общий делитель двух чисел.</returns>
static int num5(int a, int b)
{
while (b != 0)
{
int temp = b;
b = a % b;
a = temp;
}
return a;
}
/// <summary>
/// Вычисляет наименьшее общее кратное (НОК) двух целых чисел.
/// </summary>
/// <param name="a">Первое целое число.</param>
/// <param name="b">Второе целое число.</param>
/// <returns>Наименьшее общее кратное двух чисел.</returns>
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));
}
/// <summary>
/// Вычисляет сумму большего и меньшего из трех заданных чисел.
/// </summary>
/// <param name="firstnumber">Первое число.</param>
/// <param name="secondnumber">Второе число.</param>
/// <param name="thirdnumber">Третье число.</param>
/// <returns>Сумма большего и меньшего числа.</returns>
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));
}
/// <summary>
/// Находит второе по величине число в массиве целых чисел.
/// </summary>
/// <param name="A">Массив целых чисел.</param>
/// <returns>Второе по величине число в массиве.</returns>
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}");
}
}
}
}
}
/// <summary>
/// Метод для вычисления суммы квадратов цифр числа.
/// </summary>
/// <param name="number">Число, для которого нужно вычислить сумму квадратов цифр.</param>
/// <returns>Сумма квадратов цифр числа.</returns>
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;
/// <summary>
/// Обрабатываем каждый символ упакованной строки.
/// </summary>
while (i < packed.Length)
{
/// <summary>
/// Если текущий символ - цифра, то считываем количество повторений.
/// </summary>
if (char.IsDigit(packed[i]))
{
/// <summary>
/// Количество повторений.
/// </summary>
int count = 0;
while (i < packed.Length && char.IsDigit(packed[i]))
{
count = count * 10 + (packed[i] - '0');
i++;
}
/// <summary>
/// Если после цифры идет буква, то добавляем ее в результат нужное количество раз.
/// </summary>
if (i < packed.Length && char.IsUpper(packed[i]))
{
char letter = packed[i];
for (int j = 0; j < count; j++)
{
result += letter;
}
i++;
}
}
else
{
/// <summary>
/// Если текущий символ - буква, то просто добавляем ее в результат.
/// </summary>
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}");
}
/// <summary>
/// Метод для подсчета быков и коров.
/// </summary>
/// <param name="secret">Загаданное число.</param>
/// <param name="guess">Предложенное число.</param>
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