Примеры линейных алгоритмов

Готовые решения типовых задач с пошаговыми объяснениями

📝 Простейшие линейные алгоритмы

Обмен значений двух переменных

using System;

class Program
{
    static void Main()
    {
        // Исходные значения
        int a = 10;
        int b = 20;
        
        Console.WriteLine($"До обмена: a = {a}, b = {b}");
        
        // Обмен через третью переменную
        int temp = a;  // temp = 10
        a = b;         // a = 20
        b = temp;      // b = 10
        
        Console.WriteLine($"После обмена: a = {a}, b = {b}");
    }
}
До обмена: a = 10, b = 20
После обмена: a = 20, b = 10

Вычисление выражения

using System;

class Program
{
    static void Main()
    {
        double x = 5;
        double y = 3;
        
        // Вычисление: (x² + y²) / (x - y)
        double numerator = Math.Pow(x, 2) + Math.Pow(y, 2);
        double denominator = x - y;
        double result = numerator / denominator;
        
        Console.WriteLine($"x = {x}, y = {y}");
        Console.WriteLine($"x² = {Math.Pow(x, 2)}");
        Console.WriteLine($"y² = {Math.Pow(y, 2)}");
        Console.WriteLine($"x² + y² = {numerator}");
        Console.WriteLine($"x - y = {denominator}");
        Console.WriteLine($"Результат = {result}");
    }
}
x = 5, y = 3
x² = 25
y² = 9
x² + y² = 34
x - y = 2
Результат = 17

🔢 Математические вычисления

Решение линейного уравнения ax + b = 0

using System;

class Program
{
    static void Main()
    {
        Console.Write("Введите коэффициент a: ");
        double a = Convert.ToDouble(Console.ReadLine());
        
        Console.Write("Введите коэффициент b: ");
        double b = Convert.ToDouble(Console.ReadLine());
        
        // Решение: x = -b/a (при a ≠ 0)
        if (a != 0)
        {
            double x = -b / a;
            Console.WriteLine($"\nУравнение: {a}x + {b} = 0");
            Console.WriteLine($"Решение: x = {x}");
            
            // Проверка
            double check = a * x + b;
            Console.WriteLine($"Проверка: {a} * {x} + {b} = {check}");
        }
        else
        {
            Console.WriteLine("a = 0, уравнение не является линейным");
        }
    }
}
Введите коэффициент a: 2
Введите коэффициент b: -6
Уравнение: 2x + -6 = 0
Решение: x = 3
Проверка: 2 * 3 + -6 = 0

Формула корней квадратного уравнения (дискриминант)

using System;

class Program
{
    static void Main()
    {
        // ax² + bx + c = 0
        double a = 1, b = -5, c = 6;
        
        Console.WriteLine($"Уравнение: {a}x² + {b}x + {c} = 0");
        
        // Вычисление дискриминанта
        double D = Math.Pow(b, 2) - 4 * a * c;
        Console.WriteLine($"Дискриминант D = b² - 4ac = {D}");
        
        // Корни уравнения (при D ≥ 0)
        double sqrtD = Math.Sqrt(Math.Abs(D));
        double x1 = (-b + sqrtD) / (2 * a);
        double x2 = (-b - sqrtD) / (2 * a);
        
        Console.WriteLine($"x₁ = ({-b} + √{D}) / {2*a} = {x1}");
        Console.WriteLine($"x₂ = ({-b} - √{D}) / {2*a} = {x2}");
    }
}
Уравнение: 1x² + -5x + 6 = 0
Дискриминант D = b² - 4ac = 1
x₁ = (5 + √1) / 2 = 3
x₂ = (5 - √1) / 2 = 2

📐 Геометрические задачи

Вычисление параметров круга

using System;

class Program
{
    static void Main()
    {
        const double PI = Math.PI;
        
        Console.Write("Введите радиус круга: ");
        double radius = Convert.ToDouble(Console.ReadLine());
        
        // Вычисления
        double diameter = 2 * radius;
        double circumference = 2 * PI * radius;
        double area = PI * Math.Pow(radius, 2);
        
        // Вывод результатов
        Console.WriteLine($"\n📐 Параметры круга с радиусом {radius}:");
        Console.WriteLine($"• Диаметр: {diameter:F2}");
        Console.WriteLine($"• Длина окружности: {circumference:F2}");
        Console.WriteLine($"• Площадь: {area:F2}");
        
        // Дополнительно: площадь сектора (45°)
        double sectorAngle = 45;
        double sectorArea = (sectorAngle / 360) * area;
        Console.WriteLine($"• Площадь сектора 45°: {sectorArea:F2}");
    }
}
Введите радиус круга: 5
📐 Параметры круга с радиусом 5:
• Диаметр: 10.00
• Длина окружности: 31.42
• Площадь: 78.54
• Площадь сектора 45°: 9.82

Расчет параметров треугольника

using System;

class Program
{
    static void Main()
    {
        // Стороны треугольника
        double a = 3, b = 4, c = 5;
        
        Console.WriteLine($"Стороны треугольника: a={a}, b={b}, c={c}");
        
        // Периметр
        double perimeter = a + b + c;
        
        // Полупериметр
        double p = perimeter / 2;
        
        // Площадь по формуле Герона
        double area = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
        
        // Радиус вписанной окружности
        double inRadius = area / p;
        
        // Радиус описанной окружности
        double outRadius = (a * b * c) / (4 * area);
        
        Console.WriteLine($"Периметр: {perimeter}");
        Console.WriteLine($"Площадь: {area:F2}");
        Console.WriteLine($"Радиус вписанной окружности: {inRadius:F2}");
        Console.WriteLine($"Радиус описанной окружности: {outRadius:F2}");
    }
}
Стороны треугольника: a=3, b=4, c=5
Периметр: 12
Площадь: 6.00
Радиус вписанной окружности: 1.00
Радиус описанной окружности: 2.50

💰 Финансовые расчеты

Расчет простых процентов

using System;

class Program
{
    static void Main()
    {
        // Исходные данные
        double principal = 10000;  // Начальная сумма
        double rate = 12;          // Процентная ставка (годовая)
        double years = 2.5;        // Срок (лет)
        
        Console.WriteLine("=== РАСЧЕТ ПРОСТЫХ ПРОЦЕНТОВ ===");
        Console.WriteLine($"Начальная сумма: {principal:C}");
        Console.WriteLine($"Процентная ставка: {rate}% годовых");
        Console.WriteLine($"Срок: {years} лет");
        
        // Расчет простых процентов
        double interest = principal * (rate / 100) * years;
        double totalAmount = principal + interest;
        
        // Помесячный доход
        double monthlyInterest = interest / (years * 12);
        
        Console.WriteLine($"\nНачисленные проценты: {interest:C}");
        Console.WriteLine($"Итоговая сумма: {totalAmount:C}");
        Console.WriteLine($"Доход в месяц: {monthlyInterest:C}");
        Console.WriteLine($"Прибыльность: {(interest/principal)*100:F2}%");
    }
}
=== РАСЧЕТ ПРОСТЫХ ПРОЦЕНТОВ ===
Начальная сумма: 10 000,00 ₽
Процентная ставка: 12% годовых
Срок: 2.5 лет
Начисленные проценты: 3 000,00 ₽
Итоговая сумма: 13 000,00 ₽
Доход в месяц: 100,00 ₽
Прибыльность: 30.00%

Расчет сложных процентов

using System;

class Program
{
    static void Main()
    {
        // Исходные данные
        double principal = 10000;  // Начальная сумма
        double rate = 12;          // Годовая ставка %
        double years = 3;          // Срок
        double n = 12;             // Частота начисления (месячная)
        
        Console.WriteLine("=== СЛОЖНЫЕ ПРОЦЕНТЫ ===");
        Console.WriteLine($"Вклад: {principal:C}");
        Console.WriteLine($"Ставка: {rate}% годовых");
        Console.WriteLine($"Срок: {years} лет");
        Console.WriteLine($"Капитализация: ежемесячная");
        
        // Формула сложных процентов
        // A = P(1 + r/n)^(nt)
        double monthlyRate = rate / 100 / n;
        double periods = n * years;
        double amount = principal * Math.Pow(1 + monthlyRate, periods);
        
        double totalInterest = amount - principal;
        double effectiveRate = (amount / principal - 1) * 100;
        
        Console.WriteLine($"\nИтоговая сумма: {amount:C}");
        Console.WriteLine($"Начислено процентов: {totalInterest:C}");
        Console.WriteLine($"Эффективная ставка: {effectiveRate:F2}%");
    }
}
=== СЛОЖНЫЕ ПРОЦЕНТЫ ===
Вклад: 10 000,00 ₽
Ставка: 12% годовых
Срок: 3 лет
Капитализация: ежемесячная
Итоговая сумма: 14 307,69 ₽
Начислено процентов: 4 307,69 ₽
Эффективная ставка: 43.08%

🔬 Физические формулы

Кинематика: движение тела

using System;

class Program
{
    static void Main()
    {
        // Свободное падение
        double h = 45;        // высота (м)
        double g = 9.81;      // ускорение свободного падения
        double v0 = 0;        // начальная скорость
        
        Console.WriteLine("=== СВОБОДНОЕ ПАДЕНИЕ ===");
        Console.WriteLine($"Высота: {h} м");
        Console.WriteLine($"g = {g} м/с²");
        
        // Время падения: t = √(2h/g)
        double time = Math.Sqrt(2 * h / g);
        
        // Конечная скорость: v = gt
        double velocity = g * time;
        
        // Средняя скорость
        double avgVelocity = (v0 + velocity) / 2;
        
        // Кинетическая энергия (m = 1 кг)
        double mass = 1;
        double kineticEnergy = mass * Math.Pow(velocity, 2) / 2;
        
        Console.WriteLine($"\nВремя падения: {time:F2} с");
        Console.WriteLine($"Конечная скорость: {velocity:F2} м/с");
        Console.WriteLine($"Средняя скорость: {avgVelocity:F2} м/с");
        Console.WriteLine($"Кинетическая энергия (m=1кг): {kineticEnergy:F2} Дж");
    }
}
=== СВОБОДНОЕ ПАДЕНИЕ ===
Высота: 45 м
g = 9.81 м/с²
Время падения: 3.03 с
Конечная скорость: 29.71 м/с
Средняя скорость: 14.86 м/с
Кинетическая энергия (m=1кг): 441.45 Дж

Электричество: закон Ома

using System;

class Program
{
    static void Main()
    {
        // Параметры цепи
        double voltage = 220;    // Напряжение (В)
        double resistance = 50;  // Сопротивление (Ом)
        
        Console.WriteLine("=== ЗАКОН ОМА ===");
        Console.WriteLine($"Напряжение U = {voltage} В");
        Console.WriteLine($"Сопротивление R = {resistance} Ом");
        
        // Сила тока: I = U/R
        double current = voltage / resistance;
        
        // Мощность: P = U*I = U²/R = I²*R
        double power = voltage * current;
        double power2 = Math.Pow(voltage, 2) / resistance;
        double power3 = Math.Pow(current, 2) * resistance;
        
        // Энергия за час работы
        double time = 1; // час
        double energy = power * time; // Вт·ч
        double energyKWh = energy / 1000; // кВт·ч
        
        Console.WriteLine($"\nСила тока I = {current:F3} А");
        Console.WriteLine($"Мощность P = {power:F2} Вт");
        Console.WriteLine($"Проверка P = U²/R = {power2:F2} Вт");
        Console.WriteLine($"Проверка P = I²R = {power3:F2} Вт");
        Console.WriteLine($"Энергия за час: {energyKWh:F3} кВт·ч");
    }
}
=== ЗАКОН ОМА ===
Напряжение U = 220 В
Сопротивление R = 50 Ом
Сила тока I = 4.400 А
Мощность P = 968.00 Вт
Проверка P = U²/R = 968.00 Вт
Проверка P = I²R = 968.00 Вт
Энергия за час: 0.968 кВт·ч

📊 Статистические расчеты

Основные статистические показатели

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // Набор данных
        double[] data = { 15, 20, 35, 40, 50 };
        
        Console.WriteLine("Данные: " + string.Join(", ", data));
        
        // Количество элементов
        int n = data.Length;
        
        // Сумма
        double sum = data.Sum();
        
        // Среднее арифметическое
        double mean = sum / n;
        
        // Медиана (средний элемент)
        Array.Sort(data);
        double median = data[n / 2];
        
        // Размах (разница между max и min)
        double range = data.Max() - data.Min();
        
        // Дисперсия
        double variance = 0;
        foreach (double x in data)
        {
            variance += Math.Pow(x - mean, 2);
        }
        variance = variance / n;
        
        // Стандартное отклонение
        double stdDev = Math.Sqrt(variance);
        
        Console.WriteLine($"\n📊 Статистические показатели:");
        Console.WriteLine($"Количество: {n}");
        Console.WriteLine($"Сумма: {sum}");
        Console.WriteLine($"Среднее: {mean}");
        Console.WriteLine($"Медиана: {median}");
        Console.WriteLine($"Размах: {range}");
        Console.WriteLine($"Дисперсия: {variance:F2}");
        Console.WriteLine($"Стандартное отклонение: {stdDev:F2}");
    }
}
Данные: 15, 20, 35, 40, 50
📊 Статистические показатели:
Количество: 5
Сумма: 160
Среднее: 32
Медиана: 35
Размах: 35
Дисперсия: 194.00
Стандартное отклонение: 13.93

Прогнозирование (линейная экстраполяция)

using System;

class Program
{
    static void Main()
    {
        // Данные за два периода
        double y1 = 100;  // Значение в момент времени 1
        double y2 = 120;  // Значение в момент времени 2
        double t1 = 1;
        double t2 = 2;
        
        Console.WriteLine("=== ЛИНЕЙНЫЙ ПРОГНОЗ ===");
        Console.WriteLine($"Период {t1}: значение = {y1}");
        Console.WriteLine($"Период {t2}: значение = {y2}");
        
        // Скорость изменения (наклон)
        double slope = (y2 - y1) / (t2 - t1);
        
        // Прогноз на период 3
        double t3 = 3;
        double y3 = y2 + slope * (t3 - t2);
        
        // Прогноз на период 5
        double t5 = 5;
        double y5 = y2 + slope * (t5 - t2);
        
        // Процент роста
        double growthRate = (slope / y1) * 100;
        
        Console.WriteLine($"\nТемп изменения: {slope} ед/период");
        Console.WriteLine($"Темп роста: {growthRate:F1}%");
        Console.WriteLine($"\nПрогноз на период {t3}: {y3}");
        Console.WriteLine($"Прогноз на период {t5}: {y5}");
    }
}
=== ЛИНЕЙНЫЙ ПРОГНОЗ ===
Период 1: значение = 100
Период 2: значение = 120
Темп изменения: 20 ед/период
Темп роста: 20.0%
Прогноз на период 3: 140
Прогноз на период 5: 180

🎯 Комплексная программа - Анализатор чисел

Полный анализ введенного числа

using System;

namespace NumberAnalyzer
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Анализатор чисел - Линейный алгоритм";
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("╔══════════════════════════════════╗");
            Console.WriteLine("║     АНАЛИЗАТОР ЧИСЕЛ             ║");
            Console.WriteLine("╚══════════════════════════════════╝");
            Console.ResetColor();
            
            // Ввод числа
            Console.Write("\nВведите число для анализа: ");
            double number = Convert.ToDouble(Console.ReadLine());
            
            // === МАТЕМАТИЧЕСКИЙ АНАЛИЗ ===
            Console.WriteLine("\n📊 МАТЕМАТИЧЕСКИЙ АНАЛИЗ");
            Console.WriteLine("─────────────────────────");
            
            // Основные свойства
            double absolute = Math.Abs(number);
            double squared = Math.Pow(number, 2);
            double cubed = Math.Pow(number, 3);
            double squareRoot = Math.Sqrt(absolute);
            double reciprocal = 1 / number;
            
            Console.WriteLine($"Исходное число: {number}");
            Console.WriteLine($"Модуль: {absolute}");
            Console.WriteLine($"Квадрат: {squared}");
            Console.WriteLine($"Куб: {cubed}");
            Console.WriteLine($"Корень квадратный: {squareRoot:F4}");
            Console.WriteLine($"Обратное число: {reciprocal:F6}");
            
            // === ТРИГОНОМЕТРИЯ (в радианах) ===
            Console.WriteLine("\n📐 ТРИГОНОМЕТРИЧЕСКИЕ ФУНКЦИИ");
            Console.WriteLine("─────────────────────────────");
            
            double radians = number * Math.PI / 180; // если число - градусы
            double sinValue = Math.Sin(radians);
            double cosValue = Math.Cos(radians);
            double tanValue = Math.Tan(radians);
            
            Console.WriteLine($"Угол в градусах: {number}°");
            Console.WriteLine($"Угол в радианах: {radians:F4}");
            Console.WriteLine($"Синус: {sinValue:F4}");
            Console.WriteLine($"Косинус: {cosValue:F4}");
            Console.WriteLine($"Тангенс: {tanValue:F4}");
            
            // === ЛОГАРИФМЫ ===
            if (number > 0)
            {
                Console.WriteLine("\n📈 ЛОГАРИФМЫ");
                Console.WriteLine("─────────────");
                
                double naturalLog = Math.Log(number);
                double log10 = Math.Log10(number);
                double log2 = Math.Log(number, 2);
                
                Console.WriteLine($"Натуральный логарифм (ln): {naturalLog:F4}");
                Console.WriteLine($"Десятичный логарифм (lg): {log10:F4}");
                Console.WriteLine($"Двоичный логарифм (log₂): {log2:F4}");
            }
            
            // === ОКРУГЛЕНИЯ ===
            Console.WriteLine("\n🎯 ОКРУГЛЕНИЯ");
            Console.WriteLine("──────────────");
            
            double floor = Math.Floor(number);
            double ceiling = Math.Ceiling(number);
            double rounded = Math.Round(number);
            double truncated = Math.Truncate(number);
            
            Console.WriteLine($"Округление вниз (floor): {floor}");
            Console.WriteLine($"Округление вверх (ceiling): {ceiling}");
            Console.WriteLine($"Округление математическое: {rounded}");
            Console.WriteLine($"Отбрасывание дробной части: {truncated}");
            
            // === ПРЕДСТАВЛЕНИЕ В РАЗНЫХ СИСТЕМАХ ===
            int intPart = (int)Math.Truncate(absolute);
            if (intPart <= int.MaxValue && intPart >= 0)
            {
                Console.WriteLine("\n💻 СИСТЕМЫ СЧИСЛЕНИЯ");
                Console.WriteLine("────────────────────");
                
                string binary = Convert.ToString(intPart, 2);
                string octal = Convert.ToString(intPart, 8);
                string hex = Convert.ToString(intPart, 16).ToUpper();
                
                Console.WriteLine($"Десятичное: {intPart}");
                Console.WriteLine($"Двоичное: {binary}");
                Console.WriteLine($"Восьмеричное: {octal}");
                Console.WriteLine($"Шестнадцатеричное: {hex}");
            }
            
            // === ПРОЦЕНТЫ ===
            Console.WriteLine("\n💰 ПРОЦЕНТНЫЕ РАСЧЕТЫ");
            Console.WriteLine("─────────────────────");
            
            double percent10 = number * 0.1;
            double percent25 = number * 0.25;
            double percent50 = number * 0.5;
            double percent200 = number * 2;
            
            Console.WriteLine($"10% от числа: {percent10:F2}");
            Console.WriteLine($"25% от числа: {percent25:F2}");
            Console.WriteLine($"50% от числа: {percent50:F2}");
            Console.WriteLine($"200% от числа: {percent200:F2}");
            
            // === ИТОГОВАЯ СТАТИСТИКА ===
            Console.WriteLine("\n📊 ИТОГОВАЯ СТАТИСТИКА");
            Console.WriteLine("──────────────────────");
            
            int digitsBeforeDecimal = intPart.ToString().Length;
            string sign = number >= 0 ? "положительное" : "отрицательное";
            string parity = intPart % 2 == 0 ? "четное" : "нечетное";
            
            Console.WriteLine($"Знак числа: {sign}");
            Console.WriteLine($"Четность целой части: {parity}");
            Console.WriteLine($"Количество цифр в целой части: {digitsBeforeDecimal}");
            
            Console.WriteLine("\n✅ Анализ завершен!");
            Console.WriteLine("Нажмите любую клавишу для выхода...");
            Console.ReadKey();
        }
    }
}
╔══════════════════════════════════╗
║ АНАЛИЗАТОР ЧИСЕЛ ║
╚══════════════════════════════════╝
Введите число для анализа: 45
📊 МАТЕМАТИЧЕСКИЙ АНАЛИЗ
─────────────────────────
Исходное число: 45
Модуль: 45
Квадрат: 2025
Куб: 91125
Корень квадратный: 6.7082
Обратное число: 0.022222
📐 ТРИГОНОМЕТРИЧЕСКИЕ ФУНКЦИИ
─────────────────────────────
Угол в градусах: 45°
Угол в радианах: 0.7854
Синус: 0.7071
Косинус: 0.7071
Тангенс: 1.0000
✅ Анализ завершен!