Вопрос задан 14.02.2025 в 16:26. Предмет Информатика. Спрашивает Миклис Яна.

Локатор ориентирован на одну из сторон света ("С" — север, "З" — запад, "Ю" — юг, "В" — восток) и может принимать три цифровые команды: 1 — поворот налево, –1 — поворот направо, 2 — поворот на 180 градусов. Дан символ C — исходная ориентация локатора и числа N1 и N2 — две посланные ему команды. Вывести ориентацию локатора после выполнения данных команд. Написать программу на языке Паскаль

Перейти к ответам

Ответы на вопрос

Отвечает Кружкова Мария.

Давайте подробно разберем задачу и напишем программу на языке Паскаль, которая решает её.

Задача

Имеется локатор, который изначально ориентирован в одну из сторон света: Север (С), Запад (З), Юг (Ю), Восток (В). Локатор может выполнять три типа команд:

  • 1 — повернуть налево (на 90 градусов против часовой стрелки);
  • -1 — повернуть направо (на 90 градусов по часовой стрелке);
  • 2 — развернуться на 180 градусов.

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

Алгоритм решения

  1. Зададим порядок сторон света как список: [С, В, Ю, З]. Это удобно, так как при поворотах налево и направо порядок вращения можно реализовать через индекс.
  2. При повороте налево (1) мы перемещаемся на один шаг влево по списку. При повороте направо (-1) — на один шаг вправо.
  3. Для поворота на 180 градусов (2) просто переходим к противоположной стороне света.
  4. Преобразуем команды и текущую ориентацию в индексы, чтобы удобно обрабатывать их.

Программа на языке Паскаль

pascal
program LocatorOrientation;

var initial: char; // Начальная ориентация N1, N2: integer; // Две команды directions: array[1..4] of char = ('С', 'В', 'Ю', 'З'); // Порядок сторон света currentIndex: integer; // Текущий индекс ориентации i: integer; // Счётчик для обработки команд commands: array[1..2] of integer; // Массив команд

begin // Ввод исходной ориентации и команд write('Введите начальную ориентацию (С, В, Ю, З): '); readln(initial); write('Введите две команды (1, -1, 2): '); readln(N1, N2);

// Инициализация текущей ориентации for i := 1 to 4 do if directions[i] = initial then currentIndex := i;

// Помещаем команды в массив для обработки commands[1] := N1; commands[2] := N2;

// Обработка каждой команды for i := 1 to 2 do begin case commands[i] of 1: currentIndex := ((currentIndex - 2 + 4) mod 4) + 1; // Поворот налево -1: currentIndex := (currentIndex mod 4) + 1; // Поворот направо 2: currentIndex := ((currentIndex - 1 + 2) mod 4) + 1; // Поворот на 180 end; end;

// Вывод результата writeln('Итоговая ориентация локатора: ', directions[currentIndex]); end.

Объяснение программы

  1. Инициализация массива directions: Стороны света упорядочены по кругу: Север — Восток — Юг — Запад. Это важно для расчётов поворотов.
  2. Начальная ориентация: Находим, какая сторона соответствует символу initial. Это делается перебором массива directions.
  3. Обработка команд: Каждая команда изменяет текущий индекс в массиве directions:
    • Поворот налево (1) сдвигает индекс на -1 с учётом цикличности.
    • Поворот направо (-1) сдвигает индекс на +1 с учётом цикличности.
    • Поворот на 180 градусов (2) сдвигает индекс на +2 или -2 в зависимости от положения.
  4. Вывод результата: По окончании всех команд выводится сторона света, соответствующая текущему индексу.

Пример выполнения

Ввод:

С 1 -1

Вывод:

Итоговая ориентация локатора: С

Ввод:

З 2 1

Вывод:

Итоговая ориентация локатора: Ю

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос