Вывести ориентацию локатора после выполнения заданных команд (Case) - C (СИ)
Формулировка задачи:
Помогите решить очень нужно, наперёд спасибо.(через case)
Локатор ориентирован на одну из сторон света («С» — север, «З» — запад,
«Ю» — юг, «В» — восток) и может принимать три цифровые команды поворота:
1 — поворот налево, -1 — поворот направо, 2 — поворот на 180°.
Дан символ C — исходная ориентация локатора и целые числа N1 и N2 — две
посланные команды. Вывести ориентацию локатора после выполнения этих команд.
Исходные данные
Исходная ориентация: C = 'В'
Команды:
N1 = 1 N2 = 1
Пример верного решения
Новая ориентация: 'З'
Решение задачи: «Вывести ориентацию локатора после выполнения заданных команд (Case)»
textual
Листинг программы
#include <stdio.h>
char direction(int value);
int rumb(int value, int dir);
int main()
{
char dir = 'E';
int value = 0, n1 = 1, n2 = 1;
value = rumb(value, n1);
value = rumb(value, n2);
dir = direction(value);
printf("%c\n", dir);
return 0;
}
int rumb(int value, int dir)
{
switch (dir)
{
case -1:
value += 90;
break;
case 1:
value -= 90;
break;
case 2:
value += 180;
}
if (value > 360) value %= 360;
else if (value < 0) value += 360;
return value;
}
char direction(int value)
{
switch(value)
{
case 270: return 'N'; // С
case 180: return 'W'; // В
case 90: return 'S'; // Ю
case 0: return 'E'; // З
}
}
Объяснение кода листинга программы
- Объединение, содержащее функции main(), rumb() и direction(), представлено в виде исходного кода на языке C.
- В функции main() определены переменные: dir (строка, представляющая направление локатора), value (целое число, представляющее значение угла), n1 (целое число, представляющее значение угла), n2 (целое число, представляющее значение угла).
- Значение переменной value обновляется вызовом функции rumb(), передавая в качестве аргументов текущее значение value и переменную n1.
- Значение переменной value обновляется вызовом функции rumb(), передавая в качестве аргументов текущее значение value и переменную n2.
- Переменная dir обновляется вызовом функции direction(), передавая в качестве аргумента текущее значение value.
- С помощью функции printf() выводится значение переменной dir.
- Функция main() возвращает 0, завершая работу программы.
- В функции rumb() определён оператор switch, который выбирает действие в зависимости от значения переменной dir.
- При значении dir равном -1 значение переменной value увеличивается на 90.
- При значении dir равном 1 значение переменной value уменьшается на 90.
- При значении dir равном 2 значение переменной value увеличивается на 180.
- Значение переменной value проверяется на выхождение за пределы от 0 до 360.
- Если значение переменной value больше 360, оно заменяется на остаток от деления на 360.
- Если значение переменной value меньше 0, оно заменяется на разность между 360 и остатком от деления на 360.
- Функция rumb() возвращает значение переменной value.
- В функции direction() определён оператор switch, который выбирает направление в зависимости от значения переменной value.
- При значении value равном 270 возвращается направление 'N'.
- При значении value равным 180 возвращается направление 'W'.
- При значении value равным 90 возвращается направление 'S'.
- При значении value равным 0 возвращается направление 'E'.