
  
использование  из  в  производственном   проектировании,  начиная 
производственными  системами ,  проектированием   печатных  плат, 
проектированием  и  дизайном   архитектурных сооружений и т.д.  Одна из 
проблем ,  которая  появляется   при   этом  -   удаление невидимых линий при  
отрисовке  изображения на дисплее. Невидимые линии – это   линии, которые 
скрыты   другими частями изображения.  
Проблема 
Ваша задача помочь городскому архитектору  при   проектировании городских 
построек.  Программа,  написанная  Вами  должна  правильно  рисовать 
очертания строений в городе. Для  того  чтобы   проблема была   удобной для 
решения на компьютере ,  все   здания представляются   прямоугольниками , 
имеющими общее основание.  Таким образом ,  весь   город   представляется  
двухмерным из любой  точки   наблюдения.  Каждое   здание представлено 
тройкой  чисел (L
i
, H
i
, R
i
),  где L
i
 и R
i
 левая  и   правая  координата   здания 
соответственно, а H
i
 высота   строения. На рисунке   ниже  здания описываются  
следующими данными: (1,11,5), (2,6,7), (3,13,9), (12,7,16), (14,3,25), (19,18,22), 
(23,13,29), (24,4,28).  Очертания строений будут  описываться   следующей 
последовательностью : (1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0)  
Входные данные 
Входные данные представляют собой  последовательность  троек (L
i
, H
i
, R
i
для   каждого  здания. Все   координаты   зданий представляют собой целые числа  
не  большие,  чем  10000.  Исходные данные содержат  информацию как 
минимум  об одном  здании, максимум о 50-ти . Каждая тройка  чисел занимает 
одну строку  исходного  файла , все   числа   разделены  одним или   несколькими 
пробелами.  Тройки   чисел  отсортированы   по  левой  координате   по 
возрастанию, т.е . информация о зданиях, расположенных левее идет раньше.  
Выходные данные 
Результатом   работы   программы  должен  быть  вектор,  описывающий 
очертание зданий. В  этом  векторе  (V
1
,V
2
,....V
n
), V
i
 – с четными i описываются  
длины вертикальных линий.  V
i
 – с нечетными i представляют собой длины  
горизонтальных линии. Можно говорить, что  этот вектор представляет собой 
путь  пера  по экрану для   отрисовки .  Последней компонент вектора  должен 
быть  нулем .  
Пример исходных данных 
1 11 5 
  { 
  Функция получения координаты   перечения слов 
  Если   функция возвращает true, то  координаты  пересечения 
  слов st1 и  st2 будут находиться   в  i0, j0 
  } 
  function GetCross(var st1, st2 : string; var i0, j0 : integer) : boolean; 
  var i, j : integer; 
      b : boolean; 
  begin 
    {Сначала   считаем , что  пересечение не найдено} 
    i0 := 0; j0 := 0; 
    i := 1; b := true; 
    {Проверяем  все   возможные варианты } 
    while b and (i <= length(st1)) do begin 
      j := 1; 
      while b and (j <= length(st2)) do begin 
        if (st1[i] = st2[j]) then begin 
          {Если   вариант нашелся , запоминаем  его  координаты  и   сбрасываем 
флаг} 
          b := false; 
          i0 := i; j0 := j; 
        end; 
        inc(j); 
      end; 
      inc(i); 
    end; 
    GetCross := not b; 
  end; 
 
var 
  k, i, j, i1, i2, j1, j2, min, max : integer; 
  b : boolean;                   {флаг существования пересечения} 
  stw : array [1..4] of string;  {массив входных слов} 
 
25 
56