Решаем задачи Абрамян на Паскале. Case11

Case11. Локатор ориентирован на одну из сторон света («С» — север, «З» — запад, «Ю» — юг, «В» — восток) и может принимать три цифровые команды поворота: 1 — поворот налево, –1 — поворот направо, 2 — поворот на $$180^o$$. Дан символ $$C$$ — исходная ориентация локатора и целые числа $$N_1$$ и $$N_2$$ — две посланные команды. Вывести ориентацию локатора после выполнения этих команд.

Решение:

* Обозначение были взяты английские обозначения сторон света, т.к. при вводе с консоли всё плохо с кирилицей. Север — N  Запад-W Юг-S Восток-E

Другие задачи из раздела Case можно посмотреть здесь.

Комментарии:

Комментарии 13

  • Ещё должен быть 0 (-1,-1), тогда локатор повернётся в изначальную сторону

  • Я прошу прощения, но как N1+N2 может = -3?

    • даа… в общем то ни как…
      Ещё убрал варианты с 0,4:C:=… так как они сводятся к тому, что ничего делать не надо… ну и не будем ничего делать.
      Ещё была ошибка при начальном положении ‘E’: тоже поправил…
      Как то у меня не заладилось с Локатором ссамого начала 🙂

  • Ну там только три варианта N1+N2: 0; 3; и 1.

  • N1 и N2 сами по себе могут принимать значения 1; -1; 2. А выражение N1+N2 может принимать значения 0; 3; 1.

  • Недосчитал, сори. Еще могут быть такие N1+N2: 1+1=2; -1+(-1)=-2; и 2+2=4. Итого такие случаи:
    a. 2; -2 на 180 градусов;
    b. 0; 4 на 360 градусов;
    c. 1 на 90 градусов влево;
    d. 3 на 90 градусов вправо.

  • Как то так получается

  • думал-думал, как обернуть внутренние кейсы в цикл, плюнул и сделал без кейсов =)

    • Блин прям взрыв мозга…
      l += l; это в итоге получается массив строковых значений? из 8 элементов ‘north’, ‘west’, ‘south’, ‘east’, ‘north’, ‘west’, ‘south’, ‘east’ ? и потом мы должны найти наше начальное положение? if c = l[i] then ?
      может тогда while (c <> l[i] or i=l.Count) i:=i+1;
      а поcле цикла:
      writeFormat(‘ориентация локатора: {0}’,l[i + abs(n1 + n2)]);
      извените меня торащит от PascalABC.NET меня глючит что это C почему то 🙂

      • Да, с while-ом оно как-то красивше будет =)

        А так то достаточно проверить первые четыре элемента списка (массива). Вторая часть повторяется, чтоб не было выхода за границы в l[i + abs(n1 + n2)]. Наверное можно было написать циклический список…
        Говорят это С# для школьников. На мехмате в ЮФУ на первом курсе преподавался. Сейчас вроде уже на C# перешли они там. Но для таких задачек просто великолепный язык.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *