§17 ГДЗ Семакин 10 класс (Информатика)
- Назовите последовательность действий при выполнении оператора присваивания.
- Сформулируйте правило соответствия типов для оператора присваивания. Какое существует исключение из этого правила?
- Если $$у$$ — вещественная переменная, а $$n$$ — целая, то какие из следующих операторов присваивания правильные, а какие — нет?
а) $$у:=n+1$$
б) $$n:=у-1$$
в) $$n:=4.0$$
г) $$у:=\operatorname{trunc}(у)$$
д) $$у:=n\mathbin{\operatorname{div}}2$$
е) $$у:=у\mathbin{\operatorname{div}}2$$
ж) $$n:=n/2$$
з) $$n:=\operatorname{sqr}(\operatorname{sqrt}(n))$$ - Напишите линейную программу, в результате выполнения которой целочисленные переменные $$х$$ и $$у$$ обменяются значениями. При этом нельзя использовать дополнительные переменные. Найдя такой алгоритм, определите, в чем его недостаток по сравнению с методом обмена через третью переменную. Можно ли его применять для вещественных чисел?
- Напишите оператор присваивания, в результате выполнения которого целочисленной переменной $$h$$ присвоится значение цифры, стоящей в разряде сотен в записи положительного целого числа $$k$$ (например, если $$k=28796$$, то $$h=7$$).
- Напишите линейную программу, в результате выполнения которой в целочисленной переменной $$S$$ получится перевернутое целое четырехзначное число $$k$$. Например, если $$k=1357$$, то $$S=7531$$.
- Напишите линейную программу перевода любого целого четырехзначного двоичного числа в десятичную систему счисления. Например, дано число в двоичной системе счисления: $$1101_2$$.
1. При выполнении оператора присваивания сначала вычисляется выражение, затем его значение записывается в переменную.
2. Тип переменной и тип выражения должны совпадать. Исключение: переменной вещественного типа можно присваивать значение целочисленного выражения.
3. Проверим каждый оператор:
- а) $$y := n + 1$$ — правильный, так как целое значение можно присвоить вещественной переменной;
- б) $$n := y — 1$$ — неправильный, так как вещественное значение нельзя присваивать целой переменной без преобразования;
- в) $$n := 4.0$$ — неправильный, так как справа вещественное число;
- г) $$y := trunc(y)$$ — правильный, результат функции $$trunc$$ целый, а целое можно присвоить вещественной переменной;
- д) $$y := n \ div \ 2$$ — правильный, результат $$div$$ целый;
- е) $$y := y \ div \ 2$$ — неправильный, оператор $$div$$ применяется только к целым числам;
- ж) $$n := n / 2$$ — неправильный, оператор $$/$$ даёт вещественный результат;
- з) $$n := sqr(\sqrt{n})$$ — неправильный, так как результат выражения может быть вещественным.
4. Обмен значениями без дополнительной переменной можно выполнить так:
x := x + y;
y := x — y;
x := x — y;
Недостаток этого способа: возможен выход за пределы диапазона целого типа при сложении. Для вещественных чисел алгоритм применять можно, но возможна небольшая потеря точности.
5. Цифра в разряде сотен находится так:
$$h := (k \bmod 1000) \ div \ 100$$
6. Для переворота четырёхзначного числа выделим его цифры и составим новое число в обратном порядке:
a := k div 1000;
b := (k mod 1000) div 100;
c := (k mod 100) div 10;
d := k mod 10;
S := d * 1000 + c * 100 + b * 10 + a;
7. Для перевода четырёхзначного двоичного числа в десятичную систему нужно сложить разряды с соответствующими степенями двойки:
$$k := (n \bmod 10) + ((n \ div \ 10) \bmod 10)\cdot 2 + ((n \ div \ 100) \bmod 10)\cdot 4 + ((n \ div \ 1000) \bmod 10)\cdot 8$$
Пример программы:
var
n, k: integer;
begin
writeln(‘Введите двоичное число’);
readln(n);
k := (n mod 10) + ((n div 10) mod 10) * 2 + ((n div 100) mod 10) * 4 + ((n div 1000) mod 10) * 8;
writeln(‘Десятичное число: ‘, k);
end.
Ответ
1) Сначала вычисляется выражение, затем его значение присваивается переменной.
2) Типы должны совпадать; исключение — вещественной переменной можно присваивать целое выражение.
3) Правильные: а, г, д. Неправильные: б, в, е, ж, з.
4) $$x := x + y; \ y := x — y; \ x := x — y$$. Недостаток — возможное переполнение; для вещественных чисел возможна потеря точности.
5) $$h := (k \bmod 1000) \ div \ 100$$.
6) $$S := d \cdot 1000 + c \cdot 100 + b \cdot 10 + a$$.
7) $$k := (n \bmod 10) + ((n \ div \ 10) \bmod 10)\cdot 2 + ((n \ div \ 100) \bmod 10)\cdot 4 + ((n \ div \ 1000) \bmod 10)\cdot 8$$.

