§17 ГДЗ Семакин 10 класс (Информатика)
2. Сформулируйте правило соответствия типов для оператора присваивания. Какое существует исключение из этого правила?
3. Если у — вещественная переменная, аn — целая, то какие из следующих операторов присваивания правильные, а какие — нет?
а)у:=n+1
б)n:=у-1
в)n:=4.0
г) у: =trunc (у)
д)у:=n div 2
е)у:=у div 2
ж)n:=n/2
з) n: =sqr (sqrt (n))
4. Напишите линейную программу, в результате выполнения которой целочисленные переменные х и у обменяются значениями. При этом нельзя использовать дополнительные переменные. Найдя такой алгоритм, определите, в чем его недостаток по сравнению с методом обмена через третью переменную. Можно ли его применять для вещественных чисел?
5. Напишите оператор присваивания, в результате выполнения которого целочисленной переменной h присвоится значение цифры, стоящей в разряде сотен в записи положительного целого числа k (например, если k = 28 796, то h = 7).
6. Напишите линейную программу, в результате выполнения которой в целочисленной переменной S получится перевернутое целое четырехзначное число k. Например: если k = 1357, то S = 7531.
7. Напишите линейную программу перевода любого целого четырехзначного двоичного числа в десятичную систему счисления. Например, дано число в двоичной системе счисления: 11012. Перевод в десятичную систему выполняется так: 1*2^3 +1-2^2 + 0*2^1+1 = 13.
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$$.