Proc5. Описать процедуру RectPS($$x_1$$, $$y_1$$, $$x_2$$, $$y_2$$, $$P$$, $$S$$), вычисляющую периметр $$P$$ и площадь $$S$$ прямоугольника со сторонами, параллельными осям координат, по координатам $$(x1, y1), (x2, y2)$$ его противоположных вершин ($$x1$$, $$y1$$, $$x2$$, $$y2$$ — входные, $$P$$ и $$S$$ — выходные параметры вещественного типа). С помощью этой процедуры найти периметры и площади трех прямоугольников с данными противоположными вершинами.
Формулы:
$$P=2*(a+b)$$
$$S=a*b $$
$$ a=|x_1-x_2| $$
$$ b=|y_1-y_2| $$
$$ P=2*(|x_1-x_2|+|y_1-y_2|) $$
$$ S=|x_1-x_2|*|y_1-y_2| $$
Решение от Дмитрия:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# include <iostream> # include <windows.h> # include <cmath> # include <iomanip> # include <fstream> using namespace std; void RectPS (double x1, double y1, double x2, double y2, double &P, double &S){ double height, width; // высота и ширина прямоугольника height = fabs (y1 - y2); // решил попробовать использовать функцию fabs, можно было и abs width = fabs (x1 - x2); P = 2 * (height + width); S = height * width; } int main () { SetConsoleCP(1251); SetConsoleOutputCP(1251); FILE *fp; double x1, y1, x2, y2; // координаты двух противоположных вершин double per, square; // периметр и площадь прямоугольника fp = fopen ("Proc5.txt", "r"); while (fscanf (fp, "%lf%lf%lf%lf", &x1, &y1, &x2, &y2) == 4){ cout << "Координаты прямоугольника : x1= " << x1 << " y1= " << y1 << " x2= " << x2 << " y2= " << y2 <<endl; RectPS (x1, y1, x2, y2, per, square); cout << "Периметр данного прямоугольника: " << per << endl; cout << "Площадь данного прямоугольника: " << square << endl; } fclose (fp); system ("pause"); return 0; } |
Файл Proc5.txt:
1 2 3 4 |
1 3 4 7 -1 6 9 3 0 0 5 5 3 4 7 |
Другие задачи из раздела Proc можно посмотреть здесь.
Комментарии: