1. Переводим число в двоичную систему 168.625₁₀ = 10101000.101₂ 2. Сдвигаем точку влево так, чтобы она отделяла в целой части только одну цифру и фиксируем величину сдвига, как двоичный порядок 10101000.101₂ = 1.0101000101₂×2⁷ 3. Отбрасываем целую часть, получая мантиссу 0101000101₂ 4. Прибавляем к порядку 127 7+127 = 134₁₀ = 10000110₂ 5. Приписываем к порядку его знак - 0 (сдвиг был влево), получая 010000110₂ 6. Приписываем справа мантиссу и дополняем её нулями справа до 32 разрядов 01000011001010001010000000000000₂ = 01000011 00101000 10100000 00000000₂ 7. Переводим результат в шестнадцатиричную систему счисления, заменяя каждые 4 двоичных цифры соответствующей шестнадцатиричной 01000011 00101000 10100000 00000000₂ = 43 28 A0 00₁₆
int main() { int N; char c; printf("Исходное направление робота (n,w,s,e): "); scanf("%c",&c); printf("Команда (0,1,-1,2,-2): "); scanf("%d",&N); while (N != 0){ switch (N) { case 1 : break; case -1: switch (c) { case 'n' : c = 's'; break; case 'w' : c = 'e'; break; case 's' : c = 'n'; break; case 'e' : c = 'w'; break; }; break; case 2 : switch (c) { case 'n' : c = 'e'; break; case 'w' : c = 'n'; break; case 's' : c = 'w'; break; case 'e' : c = 's'; break; }; break; case -2: switch (c) { case 'n' : c = 'w'; break; case 'w' : c = 's'; break; case 's' : c = 'e'; break; case 'e' : c = 'n'; break; }; break; } printf("c = %c\n", c); printf("Команда (0,1,-1,2,-2): "); scanf("%d",&N); } return 0; }
Пример: Исходное направление робота (n,w,s,e): n Команда (0,1,-1,2,-2): 2 c = e Команда (0,1,-1,2,-2): 1 c = e Команда (0,1,-1,2,-2): -2 c = n Команда (0,1,-1,2,-2): -1 c = s Команда (0,1,-1,2,-2): 0
168.625₁₀ = 10101000.101₂
2. Сдвигаем точку влево так, чтобы она отделяла в целой части только одну цифру и фиксируем величину сдвига, как двоичный порядок
10101000.101₂ = 1.0101000101₂×2⁷
3. Отбрасываем целую часть, получая мантиссу 0101000101₂
4. Прибавляем к порядку 127
7+127 = 134₁₀ = 10000110₂
5. Приписываем к порядку его знак - 0 (сдвиг был влево), получая
010000110₂
6. Приписываем справа мантиссу и дополняем её нулями справа до 32 разрядов
01000011001010001010000000000000₂ = 01000011 00101000 10100000 00000000₂
7. Переводим результат в шестнадцатиричную систему счисления, заменяя каждые 4 двоичных цифры соответствующей шестнадцатиричной
01000011 00101000 10100000 00000000₂ = 43 28 A0 00₁₆
int main()
{
int N;
char c;
printf("Исходное направление робота (n,w,s,e): ");
scanf("%c",&c);
printf("Команда (0,1,-1,2,-2): ");
scanf("%d",&N);
while (N != 0){
switch (N) {
case 1 : break;
case -1:
switch (c) {
case 'n' : c = 's'; break;
case 'w' : c = 'e'; break;
case 's' : c = 'n'; break;
case 'e' : c = 'w'; break;
};
break;
case 2 :
switch (c) {
case 'n' : c = 'e'; break;
case 'w' : c = 'n'; break;
case 's' : c = 'w'; break;
case 'e' : c = 's'; break;
};
break;
case -2:
switch (c) {
case 'n' : c = 'w'; break;
case 'w' : c = 's'; break;
case 's' : c = 'e'; break;
case 'e' : c = 'n'; break;
};
break;
}
printf("c = %c\n", c);
printf("Команда (0,1,-1,2,-2): ");
scanf("%d",&N);
}
return 0;
}
Пример:
Исходное направление робота (n,w,s,e): n
Команда (0,1,-1,2,-2): 2
c = e
Команда (0,1,-1,2,-2): 1
c = e
Команда (0,1,-1,2,-2): -2
c = n
Команда (0,1,-1,2,-2): -1
c = s
Команда (0,1,-1,2,-2): 0