Нахождение кратчайшего сектора на окружности - VB

Формулировка задачи:

Есть окружность с 5-ю точками на ней. Точки обозначены хаотично с одинаковым расстоянием друг от друга. К примеру (по часовой стрелке): A, C, E, B, D. Задача определить кратчайший отрезок окружности от A к E, выбрав верное направление вращения. Ответ: A-C-E (по часовой стрелке), т.к. сектор A-D-B-E (против часовой) длиннее. Второй пример: Найти кратчайший отрезок от точки A до точки D. Ответ: A-D (против часовой стрелки), т.к. отрезок от A-C-E-B-D (по часовой) длиннее. Может есть компактный алгоритм, а то не хочется городить огород со словарями и коллекциями.

Код к задаче: «Нахождение кратчайшего сектора на окружности - VB»

textual
CLS
RANDOMIZE TIMER
DIM x(4) AS STRING
DIM y AS STRING
DIM x1 AS STRING
DIM x2 AS STRING
 
x1 = "A"
x2 = "D"
 
FOR i = 0 TO 4
   x(i) = CHR$(i + 65)
NEXT
 
FOR i = 0 TO 4
   j = INT(5 * RND)
   y = x(i)
   x(i) = x(j)
   x(j) = y
NEXT
 
FOR i = 0 TO 4
   PRINT x(i);
NEXT
PRINT
 
FOR i = 0 TO 4
   IF x(i) = x1 THEN i1 = i
   IF x(i) = x2 THEN i2 = i
NEXT
 
D = ABS(i1 - i2)
 
SELECT CASE D
   CASE 1
      IF i1 < i2 THEN
         PRINT "OTBET:"; x(i1); "-"; x(i2)
      ELSE
         PRINT "OTBET:"; x(i2); "-"; x(i1)
      END IF
   CASE 2
      IF i1 < i2 THEN
         PRINT "OTBET:"; x(i1); "-"; x(i1 + 1); "-"; x(i2)
      ELSE
         PRINT "OTBET:"; x(i2); "-"; x(i2 + 1); "-"; x(i1)
      END IF
   CASE 3
      IF i1 * i2 = 0 THEN
         PRINT "OTBET:"; x(0); "-"; x(4); "-"; x(3)
      ELSEIF i1 * i2 = 4 THEN
         PRINT "OTBET:"; x(4); "-"; x(0); "-"; x(1);
      END IF
   CASE 4
      IF i1 < i2 THEN
         PRINT "OTBET:"; x(i1); "-"; x(i2)
      ELSE
         PRINT "OTBET:"; x(i2); "-"; x(i1)
      END IF
END SELECT

8   голосов, оценка 3.625 из 5


СОХРАНИТЬ ССЫЛКУ