Урок 2. C++ функции

На занятии объясняется тема «язык С++: функции». Также рассмотрены типы данных c++ (double, int и другие)

C++ пользовательские функции

Лабораторная работа 1

  1. Создать проект с функцией для вычисления Евклидова расстояния между двумя точками на плоскости.
  2. AB = √(x2-x1)2 + (y2-y1)2

  3. Реализовать тестирующую программу.

Подробно:
Создать функцию:

double distance ( double x1, double y1, double x2, double y2 )

которая вычисляет Евклидово расстояние между двумя точками на плоскости.
Параметры функции:
x1, y1, x2, y2 – вещественные координаты точек.
Возвращаемое значение:
расстояние между точками ( x1; y1 ), ( x2; y2 ).


Решение:

  1. Создайте пустой проект (см. урок 1). Главный файл назовите main.cpp, заголовочный файл — func1.h
  2. В заголовочный файл добавьте необходимую директиву для работы с математическими функциями:
  3. #include <iostream>
    #include <cmath>
     
    using namespace std;
  4. Далее добавьте описание функции и ее реализацию:
  5. ...
    double distance(double x1, double y1, double x2, double y2);
     
    double distance(double x1, double y1, double x2, double y2)
    {
    	return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    }
  6. Перейдите на вкладку с главным файлом (main.cpp). подключите заголовочный файл и создайте функцию main():
  7. #include <iostream>
    #include <cstdlib> // для system("pause");
    #include "func1.h"
     
    using namespace std;
     
    int main()
    {
        system("pause");
        return 0;
    }
  8. Инициализируйте 4 переменные вещественного типа для координат точек. Запросите их значения:
  9. ...
    int main()
    {
       double x1, y1, x2, y2;
       cout << "введите координаты точек: x1, y1, x2, y2" << endl;
       cin >> x1 >> y1 >> x2 >> y2;
       system("pause");
       return 0;
    }

    Для подключения кириллицы в начале функции main() вызовите функцию:

    ...
    int main()
    {
     setlocale(LC_ALL, "Russian"); 
    ...
  10. Вызовите функцию и выведите в консоль результат:
  11.  
    ...
    cout << distance( x1,  y1,  x2,  y2);

    Реализуйте тест:

  12. Необходимо проверить «неподходящие» координаты точек, т.е. проверка случаев:
  13. единичного отрезка,
  14. отрезка иррациональной длины,
  15. отрезка нулевой длины.
  16. Создайте заголовочный файл test.h (Обозреватель решений -> Заголовочные файлы -> Добавить -> Создать элемент -> Файл заголовка)
  17. Подключите заголовочный файл в код main.cpp, перед подключением добавьте директиву #define NDEBUG:
  18. ...
    #define NDEBUG
    #include "test.h"
    ...
     
  19. Добавьте в код заголовочного файла необходимую директиву для работы с функцией проверки (assert):
  20. ...
    #include <cassert>
    ...

    Функция assert анализирует аргумент, переданный ей. Если аргумент-выражение равен нулю (т.е. выражение ложно), сообщение записывается на стандартное устройство вывода ошибок и вызывается функция abort, работа программы прекращается.

  21. Также добавьте в код заголовочного файла необходимую директиву для работы с математическими функциями и другие директивы:
  22. ...
    #include <iostream>
    #include <cmath>
     
    using namespace std;
  23. Создайте описание функции, возвращающей логическое значение. Функция без параметров:
  24. ...
    bool test_distance();
  25. Поставьте курсор на код функции и дождитесь, чтобы слева появилось изображение лампочки. Щелкнув по нему, выберите «Копировать сигнатуру test_distance в буфер обмена».
  26. Спуститесь в коде на следующую строчку и вставьте фрагмент из буфера.
  27. Перед функцией добавьте в код константу для проверки точности сравнения вещественных чисел
  28. ...
    const double precision = 1E-16;
    ...
  29. В код реализации функции проверки добавьте объявление и инициализацию переменных:
  30. ...
    bool test_distance()
    {  
     
        double x1 = 0, y1 = 0;
        double x2 = 1, y2 = 0;
        double result = 1;
    ...
  31. Вставьте код проверки единичного отрезка:
  32. ...
    assert ( abs ( distance (x1,y1,x2,y2) - result) < precision);
    ...
  33. После выполнения проверки в конце функции необходимо возвратить истинное значение:
  34. ...
    return true;
    }
  35. Вся функция проверки:
  36. ...
    bool test_distance()
    {  
        double x1 = 0, y1 = 0;
        double x2 = 1, y2 = 0;
        double result = 1;
     
        // Тест 1 - единичный отрезок
        assert ( abs ( distance (x1,y1,x2,y2) - result) < precision);
     
        return true;
    }
    ...
  37. В файле исходного кода добавьте сначала вызов тестирующей функции, а затем основной функции:
  38. ...
    int main()
    {
        test_distance();
        double x1, y1, x2, y2;
        cout << "введите координаты точек: x1, y1, x2, y2" << endl;
        cin >> x1 >> y1 >> x2 >> y2;
        cout << distance( x1,  y1,  x2,  y2);
    ...

Задание 1:
Создать проект с функцией, вычисляющей квадрат числа.

Подробно:
Создать функцию:

double sqr ( double x );

которая вычисляет квадрат числа.

Параметры функции:
x – значения вычисления квадрата числа.

Возвращаемое значение: вещественное число — квадрат x.

Задание 2:
Создать функцию для вычисления площади треугольника, заданного тремя сторонами.
S = √r * (r - a)*(r - b)*(r - c)
где:
r — полупериметр
a, b, c — стороны

Подробно:

double square ( double a, double b, double c );
  • Параметры функции:
  • a, b, c – вещественные стороны треугольника

  • Возвращаемое значение:
  • площадь треугольника


    Лабораторная работа №2:
    Создать функцию для вычисления площади треугольника, заданного тремя точками.

    Указания:

  • Использовать формулу S = √r * (r - a)*(r - b)*(r - c)
  • где:
    r — полупериметр
    a, b, c — стороны

  • Для получения сторон использовать функцию, созданную в лабораторной работе №1 данного урока (double distance(…)).
  •  
    Подробно:

    double square ( double xa, double ya, double xb, double yb, double xc, double yc );
  • Параметры:
  • xa, ya, xb, yb, xc, yc – вещественные координаты точек A ( xa, ya ), B ( xb, yb ), C ( xc, yc ).

  • Возвращаемое значение:
  • площадь треугольника ABC.


    Выполнение:
    • Из Лабораторной работы №1 текущего урока имеем описание функции вычисления расстояния между двумя точками:
    • ...
      double distance(double x1, double y1, double x2, double y2);
       
      double distance(double x1, double y1, double x2, double y2)
      {
      	return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
      }
    • Добавим описание новой функции в заголовочный файл ниже реализации функции distance():
    • ...
      double square(double xa, double ya, double xb, double yb, double xc, double yc);
    • Поскольку координаты точек необходимо запрашивать (вводить с клавиатуры), то перейдем в главный файл (main.cpp), и добавим в код описание необходимых переменных и их ввод с клавиатуры:
    • ...
      double x1, x2, y1, y2, xa, ya, xb, yb, xc, yc;
      cin >> xa >> ya >> xb >> yb >> xc >> yc;
      ...
    • Поскольку для поиска площади треугольника используется формула, в которой явно задаются стороны треугольника, то необходимо получить значения этих сторон, используя реализованную раннее функцию distance() для поиска расстояния между точками. Инициализируем для значения сторон переменные ab, bc и ac. Добавим использование функции в код реализации функции square():
    • ...
      double square(double xa, double ya, double xb, double yb, double xc, double yc)
      {
      	double S, ab, bc, ac, r;
      	ab = distance(xa, ya, xb, yb);
      	bc = distance(xb, yb, xc, yc);
      	ac = distance(xa, ya, xc, yc);
      }
      ...
    • Вычислим полупериметр и площадь. Функция должна возвращать результирующее значение площади:
    • ...
      r = (ab + bc + ac) / 2;
      S = sqrt(r*(r - ab)*(r - bc)*(r - ac));
      return S;
      ...
    • Перейдем в файл main.cpp и вызовем функцию:
    • ...
      cout << square(xa, ya, xb, yb, xc, yc) << endl;
      ...
    Поделитесь уроком с коллегами и друзьями:

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

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

    *
    *

    Вставить формулу как
    Блок
    Строка
    Дополнительные настройки
    Цвет формулы
    Цвет текста
    #333333
    Используйте LaTeX для набора формулы
    Предпросмотр
    \({}\)
    Формула не набрана
    Вставить