Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.02.2018
Сообщений: 9
1

Задача "Мусор"

20.02.2018, 12:51. Показов 726. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, подскажите пожалуйста как решается данная задача. Думаю уже несколько дней как её решить, но ничего не приходит на ум. Заранее благодарна за отклик!

Мусор, состоящий из маленьких прямолинейных палочек, был разбросан по картинке, которая была просто нарисована, и краска на ней еще не высохла. Специальную липкую бумагу можно использовать для удаления мусора. Однако она не позволяет удалять палку, когда она лежит под другой палкой. И, кроме того, липкую бумагу, можно использовать только один раз. Необходимо выяснить, можно ли удалить весь мусор, который лежит на картинке.

Дано количество разбросанных палочек и координаты обоих концов каждой палки. В одной точке можно пересечь не более двух палочек. Начало координатных осей расположено в центре изображения.

Ввод: первая строка ввода содержит количество тестов. Для каждого тестового примера первая строка содержит количество сегментов (n≤32767). Каждая следующая строка содержит четыре действительных числа – координату концов палочек x1, y1, x2, y2, которые разделены пробелами. Все данные в файле верны.

Вывод: для каждого тестового примера программа должна печатать в стандартный вывод в отдельной строке ДА – в случае, когда картинка будет очищена, и НЕТ – в противном случае.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2018, 12:51
Ответы с готовыми решениями:

Почему в текстовый файл записывает мусор
Не могу понять. Написала программу program my8; uses crt; var sum,i,n:integer; x:array...

Мусор и вирусы на виртуалке == мусор и вирусы на пк?
Здравствуйте. Скажите пожалуйста - на сколько фактически изолированы виртуалки (в частности VMWare)...

Мусор
#include <stdio.h> #include <conio.h> #define n 10 int main() { int a,b,i,q; ...

Мусор от mail.ru и Ко
Здравствуйте! Сегодня решила установить себе на компьютер новую операционную систему (старая ХР все...

5
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.02.2018, 13:29 2
Создайте тип отрезок
Pascal
1
2
3
type otr=record
             x1,y1,x2,y2:real;
            end;
Напишите функцию, определяющую пересечение двух отрезков. В интернете есть разные алгоритмы(сплошь математика).
Pascal
1
function peres(o1,o2:otr):boolean;
Создайте массив отрезков
Pascal
1
var a:array[1..32767] of otr;
Прочитайте его из входного потока
Pascal
1
2
read(n);
for i:=1 to n do read(a[i].x1,a[i].y1,a[i].x,a[i].y2);
Пройдитесь по массиву в целях поиска пересекающихся отрезков.
Pascal
1
2
3
4
5
6
7
8
9
10
k:=0;
i:=1;
while(i<n)and(k=0) do
 begin
  j:=i+1;
  while(j<=n)and(k=0) do
  if peres(a[i],a[j]) then k:=1;
  if k=0 then inc(i);
 end;
if k=0 then write('Да') else write('Нет');
1
0 / 0 / 0
Регистрация: 20.02.2018
Сообщений: 9
20.02.2018, 13:46  [ТС] 3
Puporev, ну в общем то, вот что у меня вышло, подскажите пожалуйста в чем ошибка?

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
27
28
29
program musor;
type otr=record
             x1,y1,x2,y2,x3,y3,x4,y4:real;
            end;
         
function peres(o1,o2:otr):boolean;
var
    k1, k2, k3, k4: real;
  begin
    k1 := (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);
    k2 := (x4 - x3) * (y2 - y3) - (y4 - y3) * (x2 - x3);
    k3 := (x2 - x1) * (y1 - y1) - (y2 - y1) * (x3 - x1);
    k4 := (x2 - x1) * (y2 - y1) - (y2 - y1) * (x4 - x1);
    peres := (k1 * k2 <= 0) and (k3 * k4 <= 0);
  end;
var a:array[1..32767] of otr;
read(n);
for i:=1 to n do read(a[i].x1,a[i].y1,a[i].x,a[i].y2);
k:=0;
i:=1;
while(i<n)and(k=0) do
 begin
  j:=i+1;
  while(j<=n)and(k=0) do
  if peres(a[i],a[j]) then k:=1;
  if k=0 then inc(i);
 end;
if k=0 then write('Да') else write('Нет');
end.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.02.2018, 14:01 4
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
27
28
29
30
31
32
33
34
35
36
37
program musor;
type otr=record
             x1,y1,x2,y2:real;
            end;
function peres(o1,o2:otr):boolean;
var k1, k2, k3, k4: real;
begin
//сменить
x1 - o1.x1  y1 - o1.y1 x2 - 01.x2  y2 - o1.y2
x3 - o2.x1  y3 - o2.y1 x4 - 02.x2  y4 - o2.y2
{
k1 := (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);
k2 := (x4 - x3) * (y2 - y3) - (y4 - y3) * (x2 - x3);
k3 := (x2 - x1) * (y1 - y1) - (y2 - y1) * (x3 - x1);
k4 := (x2 - x1) * (y2 - y1) - (y2 - y1) * (x4 - x1); }
peres := (k1 * k2 <= 0) and (k3 * k4 <= 0);
end;
var a:array[1..32767] of otr;
    t,n,i,j,k,p:integer;
begin
read(t);//читаем количество тестов
for j:=1 to t do
 begin
  read(n); //читаем количество отрезков в тесте
  for i:=1 to n do read(a[i].x1,a[i].y1,a[i].x2,a[i].y2);
  k:=0;
  i:=1;
  while(i<n)and(k=0) do
   begin
    p:=i+1;
    while(p<=n)and(k=0) do
    if peres(a[i],a[p]) then k:=1;
    if k=0 then inc(i);
   end;
  if k=0 then write('Да') else write('Нет');
 end;
end.
1
0 / 0 / 0
Регистрация: 20.02.2018
Сообщений: 9
20.02.2018, 14:34  [ТС] 5
Puporev, я сделала все так как Вы сказали, но у меня выдает ошибку времени выполнения. "Process killed, because it ran longer than 10 seconds. Is your code waiting for keyboard input which is not supplied?" Подскажите пожалуйста что не так?

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
27
28
29
30
31
32
33
program musor;
type otr=record
             x1,y1,x2,y2:real;
            end;
function peres(o1,o2:otr):boolean;
var k1, k2, k3, k4: real;
begin
k1 := (o2.x2 - o2.x1) * (o1.y1 - o2.y1) - (o2.y2 - o2.y1) * (o1.x1 - o2.x1);
k2 := (o2.x2 - o2.x1) * (o1.y2 - o2.y1) - (o2.y2 - o2.y1) * (o1.x2 - o2.x1);
k3 := (o1.x2 - o1.x1) * (o1.y1 - o1.y1) - (o1.y2 - o1.y1) * (o2.x1 - o1.x1);
k4 := (o1.x2 - o1.x1) * (o1.y2 - o1.y1) - (o1.y2 - o1.y1) * (o2.x2 - o1.x1); 
peres := (k1 * k2 <= 0) and (k3 * k4 <= 0);
end;
var a:array[1..32767] of otr;
    t,n,i,j,k,p:integer;
begin
read(t);//читаем количество тестов
for j:=1 to t do
 begin
  read(n); //читаем количество отрезков в тесте
  for i:=1 to n do read(a[i].x1,a[i].y1,a[i].x2,a[i].y2);
  k:=0;
  i:=1;
  while(i<n)and(k=0) do
   begin
    p:=i+1;
    while(p<=n)and(k=0) do
    if peres(a[i],a[p]) then k:=1;
    if k=0 then inc(i);
   end;
  if k=0 then write('Да') else write('Нет');
 end;
end.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.02.2018, 14:42 6
Я не буду разбираться с этой задачей и пытаться всунуть ее на какой-то проверочный сайт. Вам это нужно ну и делайте, я просто предложил схему ее решения.
0
20.02.2018, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2018, 14:42
Помогаю со студенческими работами здесь

Мусор в объекте
Во время вызовы init появляется огромная куча мусора вместо даных. Отладчик мне, честно говоря, не...

Мусор в строке
Всем привет, пишу свой первый интерпретатор (логический) и даже что-то получается, но вот есть...

Мусор в строках
Привет всем!!! Я пишу помехоустойчивый декодер Витерби. Имеется граф 4x32. struct graf { ...

Мусор в системе
c:\Windows\System32\0409 c:\Windows\System32\mn-MN c:\Windows\System32\mr-IN...

Мусор в массиве
Откуда берется мусор после строки temp = c; ? #include &lt;iostream&gt; char * append(char* arr,...

Мусор и оператор new
Создаю глобальный указатель на структуру, инициализирую некоторые поля после выделения оператором...

Мусор в консоли
Ищу подстроку в строке и забиваю её в массив, в итоге в последнем cout выводится не то, что нужно:...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru