В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:
нц для i от 0 до 10
A[i]:= i – 1
кц
нц для i от 1 до 10
A[i-1]:= A[i]
кц
A[10] := 10
Как изменяются элементы этого массива?
1) все элементы, кроме последнего, окажутся равны между собой
2) все элементы окажутся равны своим индексам
3) все элементы, кроме последнего, сдвигаются на один элемент вправо
4) все элементы, кроме последнего, уменьшаются на единицу
2) Определите значение целочисленных переменных a и b после выполнения фрагмента программы:
a := 1819;
b := (a div 100)*10+9;
a := (10*b–a) mod 100;
3) Определите значение переменной s после выполнения следующего фрагмента программы:
n := 4;
s := 0;
цн пока n <= 8
s := s + 15;
n := n + 1
кц
4) Определите значение переменной с после выполнения следующего фрагмента программы:
a := 30;
b := 6;
a := a * 3 div b;
если a< b
то с:= 2*a - 10* b
иначе с:= 2*a + 10* b;
все
5) В таблице Ball хранятся отметки по контрольной работе (Ball[1] – отметка 1 ученика, Ball[2] – отметка 2 ученика и т.д.). Определите, что будет напечатано в результате работы следующего алгоритма. Объясните, что определяется в данном алгоритме.
алг
нач
цел k, c
целтаб Ball[1:10]
c:=0;
Ball[1]:=4; Ball[2]:=5; Ball[3]:=3; Ball[4]:=4;
Ball[5]:=2; Ball[6]:=5; Ball[7]:=4; Ball[8]:=3; Ball[9]:=4; Ball[10]:=5;
нц для k от 1 до 10
если Ball[k] >3
то c:=c+1;
все
кц
вывод c
кон
A=53₁₀,
B=653₈,
C=DA₁₆,
R=R₂
Эту задачу можно решать разными выбор зависит от умения решающего выполнять сложение в той или иной системе счисления. Но в любом варианте, сначала нужно представить А, В, С в какой-то одной системе счисления.
Посмотрим, как это будет выглядеть, если пользоваться привычной нам десятичной системой.
653₈ = 6·8²+5·8¹+3·8⁰ = 6·64+5·8+3 = 427
DA₁₆ = 13·16¹+10·16⁰ = 218
R₁₀ = 53+427+218 = 698
Переводим полученное число в двоичную систему, получая R₂:
698/2=349, остаток 0
349/2=174, остаток 1
174/2=87, остаток 0
87/2=43, остаток 1
43/2 =21, остаток 1
21/2=10, остаток 1
10/2=5, остаток 0
5/2=2, остаток 1
2/2=1, остаток 0
1/2=0, остаток 1
Выписываем остатки в обратном порядке: 1010111010.
Это и есть ответ.
А теперь допустим, что мы хорошо владеем восьмеричной системой счисления.
1) получим А₈
53/8=6, остаток 5
6/8=0, остаток 6
Выписываем остатки в обратном порядке: А₈=65
2) получим С₈, для чего перейдем сначала в двоичную систему
С₂=1101 1010 (просто заменяем каждую цифру четырьмя двоичными).
А теперь разобьем справа налево полученное значение по три разряда и каждую полученную триаду заменим восьмеричной цифрой.
11 011 010₂ = 332₈
3) Выполним сложение R₈=A₈+B₈+C₈
65 740
+653 +332
740 1272
Складывать в восьмеричной системе просто, если знать одну маленькую хитрость. 8 отличается от 10 на 2, поэтому и результат сложения в восьмеричной системе на 2 больше, чем в десятичной, если число превышает 7. Смотрим: 5+3=8, но это в десятичной, а в восьмеричной это на 2 больше, т.е. 10. Поэтому мы пишем 0 и +1 идет в следующий разряд. 6+5=11 и еще +1 от переноса, итого 12. Но в восьмеричной на 2 больше, т.е. 14. 4 пишем. +1 перенос. 6 и +1 от переноса - 7. Вот и получили 740.
4) Мы нашли R₈, переходим к R₂.
Заменяем каждую восьмеричную цифру тремя двоичными:
1272₈=1 010 111 010₂
Мы получили тот же ответ, что и в предыдущем расчета.
Так что - дело привычки. Второй вариант кажется "непосвященному" сложнее, но на самом деле в нем меньше арифметики и если нет под рукой калькулятора, то может оказаться и быстрее, и удобнее.
ответ: 1010111010
const
n = 6;
var
a:array[1..n,1..n] of integer;
i,j:integer;
t:integer;
begin
for i := 1 to n do
for j := 1 to n do
read(a[i,j]);
for j := 1 to n div 2 do
for i := 1 to n do
begin
t := a[i,j];
a[i,j] := a[i,n+1-j];
a[i,n+1-j] := t;
end;
for i := 1 to n do
begin
writeln;
for j := 1 to n do
write(a[i,j],' ');
end
end.
{2}
const
n = 6;
var
a:array[1..n,1..n] of integer;
i,j:integer;
t:integer;
begin
for i := 1 to n do
for j := 1 to n do
read(a[i,j]);
for i := 1 to n do
for j := i+1 to n do
begin
t := a[i,j];
a[i,j] := a[j,i];
a[j,i] := t;
end;
for i := 1 to n do
begin
writeln;
for j := 1 to n do
write(a[i,j],' ');
end
end.