Procedure WriteDMS(r: real); var dd, s: real; d, m: integer;
begin dd := 180 * r / Pi; d := Trunc(dd); dd := 60 * (dd - d); m := Trunc(dd); s := 60 * (dd - m); Writeln('=', d, ' град ', m, ' мин ', s:0:2, ' сек') end;
var a, b, c, dd: real;
begin Write('Введите через пробел стороны треугольника a,b,c: '); Readln(a, b, c); Writeln('Значения углов треугольника'); Write('А'); dd := ArcCos((sqr(b) + sqr(c) - sqr(a)) / (2 * b * c)); WriteDMS(dd); Write('B'); dd := ArcCos((sqr(a) + sqr(c) - sqr(b)) / (2 * a * c)); WriteDMS(dd); Write('C'); dd := ArcCos((sqr(a) + sqr(b) - sqr(c)) / (2 * a * b)); WriteDMS(dd); end.
Тестовое решение: Введите через пробел стороны треугольника a,b,c: 5.8 3.2 4.9 Значения углов треугольника А=88 град 53 мин 7.58 сек B=33 град 28 мин 41.54 сек C=57 град 38 мин 10.88 сек
1. Восьмеричное число записываем двоичными триадами (с конца по 3 разряда), заменяя каждую 8-ю цифру двоичной триадой, потом записываем двоичными тетрадами (с конца по 4 разряда) и каждую тетраду заменяем 16-й цифрой. 754(8) = 111 101 100 (2) = 1 1110 1100 (2) = 1EC (16) ответ 3) 2. ответы даны в двоичной системе, в нее все и переводим. A = 9D(16) = 1001 1101(2); B = 237(8) = 10 011 111 (2) = 1001 1111(2) Неравенство записано словами как-то странно. Если подразумевалось A<C<B, то ответ 1001 1110, т.е. 2) А если A<C и A<B, то ответы 2), 3), 4), поэтому наверно все же условие было A<C<B. 3. Тут все так же. A = F7(16) = 1111 0111 (2); B = 371(8) = 11 111 001(2) - 1111 1001(2) Неравенству A<C<B удовлетворяет ответ 4) 4. Поскольку кроме "удобных" для сравнения систем по основанию 16,8,2 есть число в десятичной системе, переведем все числа в 16-ю - это наиболее быстро (минимум делений). 347(8) = 11 100 111(2)= 1110 0111(2)=E7(16); 1110 0101(2) = E5(16); 232(10)/16 = 14, остаток 8 -> 232(10) = E8(16) Сравниваем E6, E7, E5, E8: наименьшее E5, т.е. 11100101(2) 5. Аналогичное решение. 234(8) = 10 011 100(2) = 1001 1100(2) = 9C(16); 1001 1010(2) = 9A(16); 153(10)/16=9, остаток 9 -> 153(10) = 99(16) Сравниваем 9B, 9C, 9A, 99: наибольшее 9С, т.е. 234(8)
var
dd, s: real;
d, m: integer;
begin
dd := 180 * r / Pi;
d := Trunc(dd);
dd := 60 * (dd - d);
m := Trunc(dd);
s := 60 * (dd - m);
Writeln('=', d, ' град ', m, ' мин ', s:0:2, ' сек')
end;
var
a, b, c, dd: real;
begin
Write('Введите через пробел стороны треугольника a,b,c: ');
Readln(a, b, c);
Writeln('Значения углов треугольника');
Write('А');
dd := ArcCos((sqr(b) + sqr(c) - sqr(a)) / (2 * b * c));
WriteDMS(dd);
Write('B');
dd := ArcCos((sqr(a) + sqr(c) - sqr(b)) / (2 * a * c));
WriteDMS(dd);
Write('C');
dd := ArcCos((sqr(a) + sqr(b) - sqr(c)) / (2 * a * b));
WriteDMS(dd);
end.
Тестовое решение:
Введите через пробел стороны треугольника a,b,c: 5.8 3.2 4.9
Значения углов треугольника
А=88 град 53 мин 7.58 сек
B=33 град 28 мин 41.54 сек
C=57 град 38 мин 10.88 сек
754(8) = 111 101 100 (2) = 1 1110 1100 (2) = 1EC (16)
ответ 3)
2. ответы даны в двоичной системе, в нее все и переводим.
A = 9D(16) = 1001 1101(2); B = 237(8) = 10 011 111 (2) = 1001 1111(2)
Неравенство записано словами как-то странно.
Если подразумевалось A<C<B, то ответ 1001 1110, т.е. 2)
А если A<C и A<B, то ответы 2), 3), 4), поэтому наверно все же условие было A<C<B.
3. Тут все так же.
A = F7(16) = 1111 0111 (2); B = 371(8) = 11 111 001(2) - 1111 1001(2)
Неравенству A<C<B удовлетворяет ответ 4)
4. Поскольку кроме "удобных" для сравнения систем по основанию 16,8,2 есть число в десятичной системе, переведем все числа в 16-ю - это наиболее быстро (минимум делений).
347(8) = 11 100 111(2)= 1110 0111(2)=E7(16);
1110 0101(2) = E5(16);
232(10)/16 = 14, остаток 8 -> 232(10) = E8(16)
Сравниваем E6, E7, E5, E8: наименьшее E5, т.е. 11100101(2)
5. Аналогичное решение.
234(8) = 10 011 100(2) = 1001 1100(2) = 9C(16);
1001 1010(2) = 9A(16);
153(10)/16=9, остаток 9 -> 153(10) = 99(16)
Сравниваем 9B, 9C, 9A, 99: наибольшее 9С, т.е. 234(8)