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 можно посмотреть здесь.
Комментарии: