Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.07.2017
Сообщений: 43

Вычисление площади односвязной прямоугольной фигуры по координатам ее вершин

11.09.2017, 22:25. Показов 5591. Ответов 42

Студворк — интернет-сервис помощи студентам
Написать программу, вычисляющую площадь односвязной прямоугольной фигуры, заданной перечислением пар целочисленных координат её вершин в произвольном порядке.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2017, 22:25
Ответы с готовыми решениями:

Найдите ошибку в задаче: Определить процедуру вычисления площади треугольника по координатам его вершин
Даны натуральное число n, действительные числа x1, y1, x2, y2,…, xn,yn. Найти площадь n-угольника,вершины которого при некотором...

Вычисление площади треугольника, заданного координатами своих вершин
Треугольник задан координатами своих вершин. Составить программу вычисления его площади

Вычисление площади произвольного многоугольника по координатам его вершин
Вычисление площади произвольного многоугольника по координатам его вершин.Кто смотжет сделать буду премного благодарен

42
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
12.09.2017, 04:52
Что такое "прямоугольная фигура"?
0
 Аватар для Skjame
86 / 45 / 11
Регистрация: 20.12.2010
Сообщений: 217
Записей в блоге: 1
12.09.2017, 14:05
Ну хоть что-нибудь накидали бы...
Кол-во вершин задаётся? От куда считываются пары?
И серьёзно, что такое прямоугольная односвязная фигура? есть там прямой угол или нет особо никак не поможет нам, односвязная многоугольная фигура, мб??

При условии, что порядок обхода координат будет осуществляться по часовой стрелке (т.е. после считывания данных, их ещё нужно отсортировать), то можно использовать следующий механизм

a - массив типа Point
n - Кол-во заданных точек

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//  typedef struct {
//     double x;
//     double y;
//  }Point;
 
 
  a[n].x = a[0].x;    a[n].y = a[0].y; // последняя вершина должна быть равна первой. это нужно учитывать выделяя память под массив (что их будет не n а n+1)
 
  double s = 0;
  for(int i =1; i < n + 1; i++ ){
      s += (a[i].x*a[i+1].y - a[i].y*a[i+1].x);
  }
  s= (s < 0 ? -s : s ) / 2; // берём [B]s[/B] по модулю
0
0 / 0 / 0
Регистрация: 24.07.2017
Сообщений: 43
12.09.2017, 14:20  [ТС]
Количество пар можно задать, пары координат вводятся в произвольном порядке. Грубо говоря, точки задаются в произвольном порядке.
0
 Аватар для Skjame
86 / 45 / 11
Регистрация: 20.12.2010
Сообщений: 217
Записей в блоге: 1
12.09.2017, 14:21
Цитата Сообщение от Skjame Посмотреть сообщение
for(int i =1;
опечатался. должно быть
C++
1
for(int i =0
0
0 / 0 / 0
Регистрация: 24.07.2017
Сообщений: 43
12.09.2017, 14:21  [ТС]
И, пожалуйста, пишите код на си, ибо вопрос из раздела СИ
0
 Аватар для Skjame
86 / 45 / 11
Регистрация: 20.12.2010
Сообщений: 217
Записей в блоге: 1
12.09.2017, 14:22
Цитата Сообщение от bob1957a Посмотреть сообщение
произвольном порядке.
ну так отсортировать нужно тогда
0
0 / 0 / 0
Регистрация: 24.07.2017
Сообщений: 43
12.09.2017, 14:22  [ТС]
Все её углы прямые
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
12.09.2017, 14:34
Цитата Сообщение от bob1957a Посмотреть сообщение
Все её углы прямые
А размерность пространства какова? Плоскость, объем, 4-, 5-, n-мерное?

Добавлено через 4 минуты
Skjame,
Для плоскости достаточно координат двух точек и еще одной из координат третьей точки, например, Ax, Ay, Bx, By, Cx
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
12.09.2017, 14:34
Выровнена по осям или как угодно повернута?
Если я правильно понял, это не слишком простая задача. У сторон получается только два направления: прямое и ортогональное. Нужно перемещаясь по точкам вдоль одного из направлений считать площадь прямоугольника отсекаемого прямой параллельной другому направлению, проходящей через текущую точку. Это что-то из так называемых алгоритмов "заметания" надо использовать.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
12.09.2017, 14:44
Цитата Сообщение от woldemas Посмотреть сообщение
не слишком простая задача
1) По (Ax;Ay)(Bx;By) получаем длину одной стороны,
2) По пересечению перпендикуляра к отрезку из точки B и Cx получаем Cy,
3) По (Bx;By)(Cx;Cy) получаем длину другой стороны,
4) Перемножив длины, получим площадь прямоугольника.

Что я пропустил?
Можно проще?
0
 Аватар для Skjame
86 / 45 / 11
Регистрация: 20.12.2010
Сообщений: 217
Записей в блоге: 1
12.09.2017, 14:45
bormant, для вычисления плоского многоугольника по координатам хватит 2х точек? Моё решения игнорирует пункт с прямыми углами, т.к. не существует такого понятия односвязная прямоугольная фигура. Сама фигура может существовать, но если бы я такое выдал на начерталке в универе, пошёл бы гулять с экзамена домой грустный...

bob1957a, а я думал на LISPе пишу. Что это по Вашему?

Добавлено через 1 минуту
bormant, координаты в случайном порядке задаются, нужно вначале ещё определить где Bx By
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
12.09.2017, 14:47
Цитата Сообщение от bormant Посмотреть сообщение
Что я пропустил?
Можно проще?
Я так полагаю это не прямоугольник а многоугольник исключительно с прямыми или 270 градусными углами, но я не знаю. Автор не может нормально сформулировать что-то такое "прямоугольная фигура".
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
12.09.2017, 14:49
Цитата Сообщение от Skjame Посмотреть сообщение
плоского многоугольника по координатам хватит 2х точек?
плоский многоугольник, все углы которого прямые... что-то мне это напоминает...
И не 2-х точек, а плюсом ордината или абсцисса третьей, но не та, перпендикуляр из которой на соответствующую ось совпадает с самой стороной AC
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
12.09.2017, 14:52
Цитата Сообщение от bormant Посмотреть сообщение
плоский многоугольник, все углы которого прямые
Но прямым углом, может быть внешний угол. Для прямоугольника, конечно, тут считать особо нечего.
Но заумное слово "односвязный" (т.е. без дырок) настораживает.

Так и бы написано было бы: вычислить площадь прямоугольника.
0
 Аватар для Skjame
86 / 45 / 11
Регистрация: 20.12.2010
Сообщений: 217
Записей в блоге: 1
12.09.2017, 14:53
один хрен для плоского моё решение работает))
но вообще пока ТС не отпишет в каком измерении мы работает бессмысленно предлагать что-то (да и оказывается я не на С написал решение О_О )
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
12.09.2017, 15:27
Цитата Сообщение от woldemas Посмотреть сообщение
написано было бы: вычислить площадь прямоугольника
1) с уточнением "без дырок"
2) есть осложняющий фактор -- указание вершин в произвольном порядке
В самом простом варианте можно вводить 3 точки, находить вершину прямого угла (координаты целые), затем считать площадь.
Правда входные данные нужно подбирать, хотя бы по треугольнику 3-4-5, чтобы получать именно целые координаты для прямоугольников с непараллельными осям сторонами.

Добавлено через 22 минуты
Примерно так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <math.h>
#include <stdio.h>
int sqr(int x) { return x*x; }
int main()
{
    int x[3], y[3], d[3];
    printf("ax ay bx by cx cy: ");
    for (int i=0; i<3; ++i) scanf(" %d %d", &x[i], &y[i]);
    for (int i=0; i<3; ++i) d[i]=sqr(x[i]-x[i+1])+sqr(y[i]-y[i+1]);
    if      (d[0]+d[1]==d[2]) printf("%.0f\n",sqrt(d[0]*d[1]));
    else if (d[1]+d[2]==d[0]) printf("%.0f\n",sqrt(d[1]*d[2]));
    else if (d[2]+d[0]==d[1]) printf("%.0f\n",sqrt(d[2]*d[0]));
    else printf("нет прямого угла\n");
    return 0;
}
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
12.09.2017, 18:34
Вот так правильно:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
int main()
{
    int n = 4;
    float x[n], y[n];
    for(int i = 0; i < n; i++) {
        printf("Введите координаты точки %d:\n", i);
        scanf("%f %f", &x[i], &y[i]);
    }
    // Векторы сторон на всякий случай в массив
    float dx[n - 1], dy[n - 1];
    for(int i = 1; i < n; i++) {
        dx[i - 1] = x[i] - x[0];
        dy[i - 1] = y[i] - y[0];
    }
    double square = abs(dx[0] * dy[1] - dy[0] * dx[1]);    
    printf("Площадь прямоугольника %f\n", square);
    return 0;
}
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
12.09.2017, 18:41
Или просто:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    int n = 4;
    float x[n], y[n];
    for(int i = 0; i < n; i++) {
        printf("Введите координаты точки %d:\n", i);
        scanf("%f %f", &x[i], &y[i]);
    }
    double square = abs((x[1] - x[0]) * (y[2] - y[0]) - (y[1] - y[0]) * (x[2] - x[0]));
    printf("Площадь прямоугольника %f\n", square);
    return 0;
}
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
12.09.2017, 18:41
Цитата Сообщение от woldemas Посмотреть сообщение
правильно
Не всегда. Прогон:
Code
1
2
0 4 4 3 0 3 0 0
4.00000
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2017, 18:41
Помогаю со студенческими работами здесь

Процедура: вычисление площади треугольника по координатам его вершин
Даны натуральное число n, действительные числа x1,y1, x2,y2, … , xn,yn. Найти площадь n-угольника вершины которого при некотором...

Вычисление площади треугольника по координатам трех его вершин
показывает ошибку, не знаю что не так. программа: Private Function pltrkoor(xl As Single, y1 As Single, x2 As Single, y2 As...

Площадь фигуры по координатам вершин
Даны натуральное число n, действительные числа x(1),y(1),x(2),y(2),...,x(n),y(n). Найти площадь n-угольника, вершины которого при...

Определение площади шестиугольника по заданным координатам вершин
Написать программу определения площади шестиугольника с заданными координатами его вершин (x1, y1), (x2, y2), (x3, y3), (x4, y4), (x5, y5),...

Нахождение площади треугольника по координатам его вершин
Помогите с написанием программы нахождения s треугольника, зная его координаты. Нужно использовать подпрограммы (в чем, собственно, и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru