Библиотека cmath в C++

      Комментарии к записи Библиотека cmath в C++ отключены

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 мес. назад.

  • Автор
    Сообщения
  • #3661

    На прошлом уроке мы забили себе голову всякими модулями и бинарными операциями, поэтому сегодня тема будет полегче, а конкретнее функции для работы с вещественными числами.

    Для начала давайте подключим библиотеку cmath, т.е напишем:

    #include <cmath>
    Теперь мы можем писать наши функции, а компилятор ругаться не будет.
    Начнем с корней и степеней:

    sqrt

    Нахождение квадратного корня числа a. Вы любите комплексные числа? sqrt тоже, поэтому не задавайте ему отрицательные числа. Пример:

    int x1, y1, x2, y2;
    //координаты двух точек на плоскости
    
    int a, b;
    // катеты образованного точками треугольника
    
    double distance, number;
    //расстояние между A (x1, y1) и B (x2, y2), сумма квадратов катетов
    
    cin >> x1 >> y1 >> x2 >> y2;
    //ввод
    
    a = x1 - x2;
    b = y1 - y2;
    //находим длину катетов
    
    number = a*a + b*b;
    //складываем квадраты катетов
    
    distance = sqrt (number);
    //теперь, следуя теореме Пифагора, находим квадратный корень
    
    cout.precision (5);
    //задаем компилятору сколько знаков после плавающей точки нужно вывести
    
    cout << fixed << distance;
    //precision будет работать только если в начале cout-а вы напишите fixed

    Ну и картинка для лучшего понимания:

    Желательно чтобы в операции a=sqrt(b) обе переменные были вещественными, используя другие виды переменных возможно получить ошибку компиляции или неверное решение.

    pow(a,b)

    Ставит a в степень b. Опять таки лучше чтобы все хранилось в вещественном типе, кстати pow можно использовать как sqrt, приравняв b к 0,5. Пример:

    double a;
    //a - первый элемент геометрической последовательности
    
    double d;
    //чтобы получить n-ый по счету элемент последовательности 
    //нужно умножить (n-1)-ый элемент последовательности на d
    
    double n;
    //n - какой элемент геометрической последовательности нужно вывести
    
    double answer;
    //answer - наш ответ
    
    cin >> a >> d >> n;
    //ввод
    
    answer = a * pow (d, n - 1);
    //находим ответ
    
    cout.precision (5);
    cout << fixed << answer;
    //вывод

    Опять картинка:

    fmod(a,b)

    Возвращает a%b, разница с обычным модом в том, что этот предназначен специально для вещественных чисел. Пример:

    double a, b;
    
    cin >> a >> b;
    //создаем, затем вводим a и b
    
    cout.precision(5);
    
    cout << fixed << fmod (a, b);
    //выводим ответ

    Теперь тригонометрические функции, т.е косинусы, синусы, тангенсы и их арк-версии, ВНИМАНИЕ, в С++ используются не градусы а радианы. Универсальная формула:

    • cos(a) — возвращает cos угла, заданного в радианах;
    • sin(a) — возвращает cos угла, заданного в радианах;
    • tan(a) — возвращает cos угла, заданного в радианах;
    • acos(a) — возвращает угол в радианах из cos;
    • asin(a) — возвращает угол в радианах из sin;
    • atan(a) — возвращает угол в радианах из tan;

    Немного кода:

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main() {
      const double PI = 3.14;
      double degrees, radians;
    
      cin >> degrees;
      // cin >> radians;
    
      radians = (PI * degrees) / 180;
      // degrees = (radians * 180) / PI;
    
      cout.precision(5);
    
      cout << fixed << "Cos of angle " << degrees << " is equal to: " ;
      cout << fixed << cos(radians) << "\n";
    
      cout << fixed << "Sin of angle " << degrees << " is equal to: " ;
      cout << fixed << sin(radians) << "\n";
    
      cout << fixed << "Tan of angle " << degrees << " is equal to: " ;
      cout << fixed << tan(radians) << "\n";
    
      system ("pause");
    
      return 0;
    }

    Программе задается угол в градусах или радианах (для этого замените строку на комментарий под ней), и она выдает тригонометрические функции от этого угла.

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main() {
      const double PI = 3.14;
      double result, arc_cos_rad, arc_sin_rad, arc_tan_rad, arc_cos_deg, arc_sin_deg, arc_tan_deg;
    
      cin >> result;
    
      arc_cos_rad = acos (result);
      arc_sin_rad = asin (result);
      arc_tan_rad = atan (result);
    
      arc_cos_deg = (arc_cos_rad * 180) / PI;
      arc_sin_deg = (arc_sin_rad * 180) / PI;
      arc_tan_deg = (arc_tan_rad * 180) / PI;
    
      cout.precision(5);
    
      cout << fixed << "Arccos of trigonometric functions in radians: " << arc_cos_rad << "\n";
      cout << fixed << "Arcsin of trigonometric functions in radians: " << arc_sin_rad << "\n";
      cout << fixed << "Arctan of trigonometric functions in radians: " << arc_tan_rad << "\n";
    
      cout << fixed << "Arccos of trigonometric functions in degrees: " << arc_cos_deg << "\n";
      cout << fixed << "Arcsin of trigonometric functions in degrees: " << arc_sin_deg << "\n";
      cout << fixed << "Arctan of trigonometric functions in degrees: " << arc_tan_deg << "\n";
    
      system ("pause");
      return 0;
    }

    Программе задается тригонометрическая функция, и она выдает их арк-функции в радианах и градусах. Мне кажется, что комментарии к коду излишни, так как все должно быть понятно даже при беглом просмотре.

Для ответа в этой теме необходимо авторизоваться.