Перейти к содержимому

Линейные алгоритмы: задачи и разборы

Перед стартом: подключаем iostream, при работе с корнями — ещё и cmath.

#include <iostream>
#include <cmath>
using namespace std;

Задача 1. Прямоугольный параллелепипед

Дано: целые рёбра x, y, z.
Найти: периметры граней, их площади и полную площадь поверхности.

Вариант 1 (с промежуточными переменными)

int main() {
    int x, y, z;
    cout << "Зададим длины ребер параллелепипеда (x y z) -> ";
    cin >> x >> y >> z;

    int Pxy = 2 * (x + y);
    int Pxz = 2 * (x + z);
    int Pyz = 2 * (y + z);

    int Sxy = x * y;
    int Sxz = x * z;
    int Syz = y * z;

    int Sp = 2 * (Sxy + Sxz + Syz);

    cout << "Pxy = " << Pxy << "\nPxz = " << Pxz << "\nPyz = " << Pyz << '\n';
    cout << "Sxy = " << Sxy << "\nSxz = " << Sxz << "\nSyz = " << Syz << '\n';
    cout << "Полная площадь поверхности Sp = " << Sp << '\n';
    return 0;
}

Вариант 2 (без промежуточных переменных)

int main() {
    int x, y, z;
    cout << "Зададим длины ребер параллелепипеда (x y z) -> ";
    cin >> x >> y >> z;

    cout << "Pxy = " << 2 * (x + y) << '\n';
    cout << "Pxz = " << 2 * (x + z) << '\n';
    cout << "Pyz = " << 2 * (y + z) << '\n';

    cout << "Sxy = " << x * y << '\n';
    cout << "Sxz = " << x * z << '\n';
    cout << "Syz = " << y * z << '\n';

    cout << "Sp  = " << 2 * (x*y + x*z + y*z) << '\n';
    return 0;
}

Задача 2. Объём конуса по высоте и образующей

Дано: высота H и образующая l.
Найти: объём V=13πR2HV = \frac{1}{3}\pi R^2 HV=31​πR2H.
Сначала восстановим радиус по теореме Пифагора: R=l2−H2R = \sqrt{l^2 — H^2}R=l2−H2​ (конус прямой).

int main() {
    double H, l;
    const double pi = 3.14159265358979323846;
    cout << "H и l -> ";
    cin >> H >> l;

    if (l <= H) { 
        cout << "Ошибка: для прямого конуса l должна быть больше H.\n";
        return 0;
    }

    double R = sqrt(l*l - H*H);
    double V = (pi * R * R * H) / 3.0;

    cout << "R = " << R << "\nV = " << V << '\n';
    return 0;
}

Задача 3. Разложить трёхзначное число по разрядам

Дано: n (100…999).

int main() {
    int n; 
    cout << "n -> ";
    cin >> n;
    int a = n / 100;        // сотни
    int b = (n / 10) % 10;  // десятки
    int c = n % 10;         // единицы
    cout << "Сотни: " << a << ", десятки: " << b << ", единицы: " << c << '\n';
    return 0;
}

Задача 4. Площадь треугольника (формула Герона)

p=a+b+c2p = \frac{a+b+c}{2}p=2a+b+c​, S=p(p−a)(p−b)(p−c)S=\sqrt{p(p-a)(p-b)(p-c)}S=p(p−a)(p−b)(p−c)​.

int main() {
    double a, b, c;
    cout << "a b c -> ";
    cin >> a >> b >> c;
    if (a + b <= c || a + c <= b || b + c <= a) {
        cout << "Треугольник не существует.\n"; 
        return 0;
    }
    double p = (a + b + c) / 2.0;
    double S = sqrt(p * (p - a) * (p - b) * (p - c));
    cout << "S = " << S << '\n';
    return 0;
}

Задача 5. Для четырёхзначного числа

Вывести: (1) сумму тысяч и единиц; (2) произведение сотен и десятков.

int main() {
    int n; 
    cout << "n (1000..9999) -> ";
    cin >> n;
    int d1 = n / 1000;         // тысячи
    int d2 = (n / 100) % 10;   // сотни
    int d3 = (n / 10) % 10;    // десятки
    int d4 = n % 10;           // единицы

    cout << "Сумма (тыс + ед) = " << d1 + d4 << '\n';
    cout << "Произведение (сот * дес) = " << d2 * d3 << '\n';
    return 0;
}

Задача 6. Радиус окружности по длине

L=2πR⇒R=L2πL = 2\pi R \Rightarrow R = \dfrac{L}{2\pi}L=2πR⇒R=2πL​.

int main() {
    const double pi = 3.14; // по условию
    double L;
    cout << "L (метры) -> ";
    cin >> L;
    double R = L / (2.0 * pi);
    cout << "R = " << R << " м\n";
    return 0;
}

Задача 7. Вклад под 17% годовых

Дано: сумма X. Найти: сумму через год (без операций, только процент).
S=X⋅1,17S = X \cdot 1{,}17S=X⋅1,17.

int main() {
    double X;
    cout << "Сумма вклада X -> ";
    cin >> X;
    double S = X * 1.17; // простой процент за год
    cout << "Через год: " << S << " руб.\n";
    return 0;
}

Памятка по типам и операциям

  • В формулах с делением/корнями используйте double.
  • Для разрядов и остатков — int c операциями / и %.
  • Всегда проверяйте корректность входных данных (существование треугольника, l > H, диапазон числа и т. п.).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *