Алгоритмы без использования условного оператора

Алгоритмы без использования условного оператора
1. В программе описан одномерный целочисленный массив A с индексами от 0 до 10. Ниже представлен фрагмент этой программы, в котором значения элементов массива сначала задаются, а затем меняются.
 
A[0] : = 1;
for i : = 1 to 10 do
A[i] : = 2+A[i-1];
for i : = 0 to 5 do
A[10-i] : = A[i]-1;
 
Чему будут равны элементы этого массива?
1) 1 3 5 7 9 10 8 6 4 2 0 2) 1 3 5 7 9 11 13 15 17 19 21 3) 1 3 5 7 9 11 9 7 5 3 1 4) 1 3 5 7 9 11 8 6 4 3 0
Решение.
Первый цикл, заполняем массив:
i=0: a[0]=1,
i=1: a[1]=3,
i=2: a[2]=5,
i=3: a[3]=7,
...
i=10: a[10]=21.
 
Второй цикл, меняем значения последних шести элементов:
i=0: a[10]=a[0]-1 = 0,
i=1: a[9]=a[1]-1 = 2,
...
i=5: a[5]=a[5]-1 = 10,
 
Поэтому в результате выполнения программы элементы массива будут равны: 1, 3, 5, 7, 9, 10, 8, 6, 4, 2, 0.
 
Правильный ответ указан под номером 1.

2. Значения элементов двух массивов А и В размером 1 х 100 задаются с помощью следующего фрагмента программы:
 
for i:=1 tо 100 do
A[i] := 50 – i;
for i:=1 tо 100 do
B[i] := A[i] + 49;
 
Сколько элементов массива В будут иметь отрицательные значения?
1) 1 2) 10 3) 50 4) 100
Решение.
Массив A:
i=1: a[1]=50-1=49,
i=2: a[2]=50-2=48,
i=3: a[3]=47,
...
i=50: a[50]=0
i=51: a[51]=-1
...
i=100: a[100]=-50.
 
Массив B:
i=1: b[1]=a[1]+49=49+49=98,
i=2: b[2]=a[2]+49=48+49=97,
...
i=99: b[99]=-49+49=0,
i=100: b[100]=-50+49=-1
 
В массиве B одно отрицательное значение.
 
Правильный ответ указан под номером 1.

3. Значения двух массивов A[1..100] и B[1..100] задаются с помощью следующего фрагмента программы:
 
for n:=1 to 100 do
A[n] := n - 10;
for n:=1 to 100 do
B[n] := A[n]*n;
 
Сколько элементов массива B будут иметь положительные значения?
1) 10 2) 50 3) 90 4) 100
Решение.
Массив A:
n=1: a[1]=1-10=-9,
n=2: a[2]=2-10=-8,
n=3: a[3]=-7,
...
n=9: a[9]=-1,
n=10: a[10]=0,
...
n=100: a[100]=90.
 
Элементы массива B имеют такой же знак, как и соответствующие элементы массива A, поскольку n принимает только положительные значения и B[n]=A[n]*n. В массиве A 100-10=90 положительных значений, следовательно и в B их тоже 90.
 
Правильный ответ указан под номером 3.

4. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:
 
for i:=0 to 10 do
A[i]:= i + 1;
for i:=1 to 10 do
A[i]:= A[i-1];
 
Как изменяются элементы этого массива?
1) все элементы, кроме последнего, сдвигаются на 1 элемент вправо 2) все элементы, кроме первого, сдвигаются на 1 элемент влево 3) все элементы окажутся равны 1 4) все элементы окажутся равны своим индексам
Решение.
Первый цикл, заполняем массив:
i=0: a[0]=1,
i=1: a[1]=2,
i=2: a[2]=3,
i=3: a[3]=4,
...
i=10: a[10]=11.
 
Второй цикл, изменяем значения всех элементов, кроме нулевого:
i=1: a[1]=a[0]=1,
i=2: a[2]=a[1]=1,
i=3: a[3]=a[2]=1
...
i=10: a[10]=a[9]=1.
 
Видно, что все элементы, стали равными единице
 
Правильный ответ указан под номером 3.

5. В программе описан одномерный целочисленный массив A с индексами от 0 до 10. Ниже представлен фрагмент этой программы, в котором значения элементов массива сначала задаются, а затем меняются.
 
for i:=0 to 10 do
A[i]:=2+i;
for i:=0 to 4 do begin
A[i]:=A[10-i]-1;
A[10-i]:=A[i]+3;
end;
 
Чему будут равны элементы этого массива?
1) 11 10 9 8 7 5 6 7 8 9 2) 11 10 9 8 7 7 5 6 7 8 9 3) 11 10 9 8 7 7 10 11 12 13 14 4) 11 10 9 8 7 10 11 12 13 14
Решение.
Задаем массив A[i]:=2 + i: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.
 
Меняем массив, идя от краев в центр, левый меняем на правый с вычетом 1, а потом правый на измененный левый плюс 3:
 
A[i]:= A[10-i] - 1: 12 - 1, 11 - 1, 10 - 1, 9 - 1, 8 - 1 = 11, 10, 9, 8, 7 - первые пять ячеек.
 
A[10 - i]:= A[i] + 3 = A[10-i] - 1 + 3 = A[10-i] + 2: 12 + 2, 11 + 2, 10 + 2, 9 + 2, 8 + 2 = 14, 13, 12, 11, 10 - вторые пять ячеек в обратном порядке (с номера 10 до номера 6).
 
Элемент A[5] остался неизменным: A[5] = 7.
 
В итоге: 11 10 9 8 7 7 10 11 12 13 14.
 
Правильный ответ указан под номером 3.

6. Дан фрагмент программы, обрабатывающей двухмерный массив A[1..5,1..4]:
 
k:=4;
for m:=1 to 4 do begin
k:=k+1;
for n:=1 to 5 do begin
k:=m-k;
A[n,m]:=n*n+m*m-2*k;
end;
end;
 
Чему будет равно значение A[3,1]?
1) 18 2) 19 3) 20 4) 21
Решение.
Найдем A[3,1]:
m=1, значит первый цикл пройдет только один раз и из него выйдет k:= k + 1 = 4 + 1 = 5.
 
Второй цикл пройдет 3 раза:
1. k:=m - k = 1 - 5 = -4;
2. k:=m - k = 1 - (-4) = 5;
3. k:=m - k = 1 - 5 = -4.
 
Теперь уже вычислим A[3,1]:=3*3 + 1*1 - 2*(-4)=9 + 1 + 8 = 18.
 
Правильный ответ указан под номером 1.

7. Значения двух массивов A и B с индексами от 1 до 100 задаются при помощи следующего фрагмента программы:
for i:=1 to n do
A[i]:=(i-75)*(i-75);
for i:=1 to n do
B[101-i]:=A[i];
 
Какой элемент массива B будет наибольшим?
1) B[1] 2) B[26] 3) B[75] 4) B[100]
Решение.
Итак, если рассмотреть массив A[i]:= (i - 75)2 как функцию у = (x - 75)2, то найдем максимальное значение на интервале [1, 100]: при i=1 A[1]:=(1 - 75)2=(-74)2;
 
По условию B[101 - 1]:=A[1] наибольшее, т. е. B[100]  наибольшее.
 
Правильный ответ указан под номером 4.

8. Значения двумерного массива задаются с помощью вложенного оператора цикла в представленном фрагменте программы:
 
for n:=1 to 5 do
for k:=1 to 5 do
B[n,k] := n + k;
 
Чему будет равно значение B[2,4]?
1) 9 2) 8 3) 7 4) 6
Решение.
Очевидно, что значение элемента B[2,4] = 2 + 4 = 6.
 
Правильный ответ указан под номером 4.

9. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:
 
for i:=0 to 10 do
A[i]:= i - 1;
for i:=1 to 10 do
A[i-1]:= A[i];
A[10] := 10;
 
Как изменяются элементы этого массива?
1) все элементы, кроме последнего, окажутся равны между собой 2) все элементы окажутся равны своим индексам 3) все элементы, кроме последнего, сдвигаются на один элемент вправо 4) все элементы, кроме последнего, уменьшаются на единицу
Решение.
Первый цикл, заполняем массив:
i=0: a[0] = -1,
i=1: a[1] = 0,
i=2: a[2] = 1,
...
i=10: a[10] = 9.
 
Второй цикл, изменяем значения массива:
i=1: a[0]=a[1] = 0,
i=2: a[1]=a[2] = 1,
i=3: a[2]=a[3] = 2,
...
i=10: a[9]=a[10] = 9.
 
a[10] = 10.
 
Поэтому в результате выполнени программы элементы массива будут равны: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, т. е. равны своим индексам.
 
Правильный ответ указан под номером 2.

10. Все элементы двумерного массива A размером 10х10 элементов первоначально были равны 0. Затем значения элементов меняются с помощью вложенного оператора цикла в представленном фрагменте программы:
 
for n : = 1 to 4 do
for k : = n to 4 do begin
A[n,k] : = A[n,k] + 1;
A[k,n] : = A[k,n] + 1;
end;
 
Сколько элементов массива в результате будут равны 1?
1) 0 2) 16 3) 12 4) 4
Решение.
Операция A[n,k] : = A[n,k] + 1 при заданных n и k увеличивает на 1 элементы первых четырёх строк и столбцов, имеющих номера начиная с номера строки до 4.
 
Операция A[k,n] : = A[k,n] + 1 при заданных n и k увеличивает на 1 элементы строк, имеющих номера начиная с номера столбца до 4.
 
Нарисуем изменяющийся фрагмент числовой таблицы:
 
1 + 1
1
1
1

1
1 + 1
1
1

1
1
1 + 1
1

1
1
1
1 + 1

 
Видим, что операции пересеклись на 4-х элементах, т. е. 12 элементов будут равны 1.
 
Правильный ответ указан под номером 3.