С Новым годом! Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 02.07.2021
Сообщений: 12
1

Целые точки отрезка

02.08.2021, 14:40. Показов 6219. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется написать программу, которая вычислит, сколько всего точек с целочисленными координатами принадлежат отрезку.

Входные данные
Даны четыре целых числа – координаты концов отрезка (x1, y1) и (x2, y2). Каждая из координат не превышает по абсолютной величине значения 1000.

Выходные данные
Требуется вывести количество точек отрезка, имеющих целочисленные координаты.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2021, 14:40
Ответы с готовыми решениями:

Расстояние от точки до отрезка
Помогите пожалуйста решить Входные данные Шесть чисел – координаты точки и координаты концов...

Задаются 4 переменных (x1,y1) и (x2,y2)-это крайние точки отрезка.Нужно найти все целочисленные точки принадлежащие этому отрезку на графике
Доброго времени суток. Задаются 4 переменных (x1,y1) и (x2,y2)-это крайние точки отрезка.Нужно...

Расстояние от точки до отрезка
Дан отрезок в пространстве (x1,y1,z1) - (x2,y2,z2) и точка (x,y,z). Найдите расстояние от точки до...

Определить расположение точки относительно отрезка
Даны три точки А,В,С, лежащие на одной прямой. Определить расположение точки С относительно отрезка...

6
Модератор
10068 / 5409 / 3354
Регистрация: 17.08.2012
Сообщений: 16,567
03.08.2021, 03:26 2
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Для сдачи на проверочный сайт:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var
  x1, y1, x, y: integer;
begin
  readln(x1, y1, x, y);
  x := abs(x1 - x);
  y := abs(y1 - y);
  while (x <> 0) and (y <> 0) do
    if x > y then x := x mod y
    else y := y mod x;
  writeln(x + y + 1)
end.
2
0 / 0 / 0
Регистрация: 02.07.2021
Сообщений: 12
03.08.2021, 11:28  [ТС] 3
К сожалению решение не правильное,на проверочном чайте видало 1 из 36.
Смог найти другое решение, но оно тоже не верно . 15 из 36
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  n,x1,y1,x2,y2,k,i: integer;
  y: real;
begin
  read(x1,y1,x2,y2);
  writeln;
  i:=x1;
  while i<x2 do
  begin
    inc(i);
    y:=((i-x1)*(y2-y1))/(x2-x1)-y1;
    if frac(y)=0 then inc(k);
  end;
  write(k+1);
end.
0
1682 / 1095 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
05.08.2021, 23:15 4
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
while (x <> 0) and (y <> 0) do
А может быть or надо ? Пишу "может быть", потому что уже сонный, мог ерунду сказать.
0
3048 / 1668 / 656
Регистрация: 19.03.2019
Сообщений: 5,375
06.08.2021, 13:40 5
Цитата Сообщение от Новичок Посмотреть сообщение
А может быть or надо ? Пишу "может быть", потому что уже сонный, мог ерунду сказать.
нет.
там далее операции деления на y и на x - если одно из них будет нулевое - будет exception при делении на ноль.
0
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,698
Записей в блоге: 9
06.08.2021, 16:33 6
У меня чувство, что эта задача на нахождение НОД.

Добавлено через 56 секунд
А из НОД нахождение количества подобных треугольников с целочисленными координатами.

Добавлено через 32 минуты
Разобрался.

Cyborg Drone, именно такое решение и предложил, только я не сразу понял как НОД вычисляется.

Всё правильно, код рабочий.
0
Модератор
10068 / 5409 / 3354
Регистрация: 17.08.2012
Сообщений: 16,567
07.08.2021, 19:11 7
Был некоторое время занят.

nimfa2077, найденный Вами код - это неэффективное решение методом полного перебора. В этом коде есть алгоритмических ошибки:
  • Вовсе не обязательно должно быть x1 < x2, поэтому примерно в половине случаев цикл while не выполнится ни разу.
  • Если отрезок параллелен оси Y, то есть, если (x1 = x2) и (y1 ≠ y2), то результат будет неверным.
  • Не ошибка, но переменная n не используется.

Можно избавиться от вещественных операций. Поскольку y1 по условию целое, и поэтому дробная часть чисел (i-x1)*(y2-y1)/(x2-x1)-y1 и (i-x1)*(y2-y1)/(x2-x1) одна и та же, можно заменить первое число на второе, после чего заменить операцию / и функцию frac на операцию mod. Исправить можно так:
Pascal
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
var
  x1, y1, x2, y2, x, k: integer;
begin
  readln(x1, y1, x2, y2);
  if x1 = x2 then
    begin
      x := x1;
      x1 := y1;
      y1 := x;
      x := x2;
      x2 := y2;
      y2 := x
    end;
  if x1 > x2 then
    begin
      x := x1;
      x1 := x2;
      x2 := x;
      x := y1;
      y1 := y2;
      y2 := x
    end;
  for x := x1 + 1 to x2 do
    if (x - x1) * (y2 - y1) mod (x2 - x1) = 0 then inc(k);
  writeln(k + 1)
end.
1
07.08.2021, 19:11
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.08.2021, 19:11
Помогаю со студенческими работами здесь

Определить взаимное расположение на плоскости точки и отрезка
Определить взаимное расположение на плоскости (принадлежит, не принадлежит, если не принадлежит,...

Вывести длину каждого отрезка, если известны точки их построения
Дано целое число N(&gt;1) и две вещественные точки на числовой оси: A,B (A&lt;B). Отрезок разбит на N...

Определить, находятся ли все точки отрезка по одну сторону от плоскости
Написать программу определения факта нахождения всех точек отрезка по одну сторону от плоскости. ...

Найти длину отрезка по данным координатам, длина до 3 знаков после точки
Найдите длину отрезка, если заданы координаты начала и конца данного отрезка. Ввести одной строке...

Указать, каким четвертям координатной плоскости принадлежат точки заданного отрезка
Даны вещественные числа x1, y1, x2, y2. Указать, каким четвертям координатной плоскости принадлежат...

Даны два отрезка [a, b], [c, d] на прямой. Установить, имеют ли они общие точки или нет
Даны два отрезка , на прямой. Установить, имеют ли они общие точки или нет.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru