C/C++

Необходимо написать программу на C.

Даны координаты двух точек на плоскости. Если хотя бы одна из них лежит на какой-нибудь оси, то вывести сообщение об этом; если они обе находятся в одной четверти, то найти и вывести расстояние между ними; иначе найти точку, наиболее удаленную от центра координат.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
typedef struct {
double x;
double y;
} Point;
Point point(const char* name) {
Point p;
printf("%sx: ", name);
scanf_s("%lf", &p.x);
printf("%sy: ", name);
scanf_s("%lf", &p.y);
return p;
}
double length(Point* a, Point* b) {
return sqrt(pow(a->x - b->x, 2) + pow(a->y - b->y, 2));
}
_Bool is_axis(Point* a) {
return a->x == 0 || a->y == 0;
}
_Bool is_quadrant(Point* a, Point* b) {
if (is_axis(a) || is_axis(b)) return false;
auto ax = a->x < 0 ? -1 : 1;
auto bx = b->x < 0 ? -1 : 1;
auto ay = a->y < 0 ? -1 : 1;
auto by = b->y < 0 ? -1 : 1;
return (ax ^ bx) >= 0 && (ay ^ by) >= 0;
}
_Bool is_greater(Point* a, Point* b) {
Point o;
o.y = o.x = 0;
return length(&o, a) > length(&o, b);
}
void output(const char* msg, Point* p) {
printf("%s: { %.2lf, %.2lf }\n", msg, p->x, p->y);
}
int main(void) {
Point a = point("A");
Point b = point("B");
system("chcp 1251 > nul");
if (is_quadrant(&a, &b)) {
double len = length(&a, &b);
printf("Расстояние между точками: %.4lf\n", len);
} else {
if (!is_axis(&a) && !is_axis(&b)) {
if (is_greater(&a, &b)) output("A", &a);
else output("B", &b);
} else {
if (is_axis(&a)) puts("Точка A лежит на одной из осей");
if (is_axis(&b)) puts("Точка B лежит на одной из осей");
}
}
system("pause > nul");
return 0;
}
Эсхат Тульжанов
Эсхат Тульжанов
59 094
Лучший ответ
Кому необходимо?
каким уравнением описывается так называемая "ос"?
может это прямая? или отрезок?
что такое "четверть"?
и почему вопрос именно для СИшников?
рад бы помочь, но непонятно чего хотят.
попробую вслепую:
расстояние от ЦК можно вычислить как гипотенузу, квадрат которой равен сумме квадратов катетов, а катеты это координаты X и Y.
если координата точки удовлетворяет уравнению прямой, значит прямая проходит через эту точку.
если знаки координат каких-либо точек одинаковы, то точки расположились в одной четверти (если я правильно догадался что такое "четверть")
Bocha ...
Bocha ...
2 807
Владимир Панасенко Это все, что дано в задании. По данному заданию необходимо написать программу на языке C.
Владимир Панасенко Предмет "Основы программирования"
Bocha ... странный предмет.
я думал программистов учат, например, вектора прерываний программировать или таймеры в МК настраивать, а не задачки по геометрии решать.
по этому я наверное такого предмета не знаю и соответственно учебника такого у меня нет.
в чем собственно проблема?
не можете объявить переменные?
а может быть тяжело в конце каждой строки исполняемого кода точку с запятой ставить?
давайте так - вы, сударь, начинайте писа'ть, а я поправлю если что не так.