19. Обработка массивов и матриц

Одномерный целочисленный массив. В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 1, 2, 5, 8, 9, 3, 4, 0, 7, 6 соответственно, т.е. A[0] = 1, A[1] = 2 и т.д. Определите значение переменной j после выполнения следующего фрагмента программы (записанного ниже на пяти зыках программирования).

Бейсик

Visual Basic
12
3
4
5
6
7
j = 5 WHILE A(j) < A(j-1) t = A(j) A(j) = A(j-1) A(j-1) = t j = j - 1WEND

Python

Python
12
3
4
j = 5while A[j] < A[j-1]: A[j],A[j-1]=A[j-1],A[j] j -= 1

Алгоритмический язык

12
3
4
5
6
7
j := 5нц пока A[j] < A[j-1] t := A[j] A[j] := A[j-1] A[j-1] := t j := j - 1кц

Паскаль

Delphi/Pascal
12
3
4
5
6
7
8
j:= 5;while A[j] < A[j-1] do begin t := A[j]; A[j] := A[j-1]; A[j-1] := t; j := j - 1; end;

Си

C
12
3
4
5
6
7
8
j = 5;while (A[j] < A[j-1]){ t = A[j]; A[j] = A[j-1]; A[j-1] = t; j -= 1;}

Демонстрационный вариант Единый государственный экзамен ЕГЭ 2017 г. – задание №19

Решение:

Данный алгоритм меняет местами элементы с номером j и j-1 до тех пор, пока элемент A[j] не станет больше либо равен элементу A[j-1], при каждой такой перестановке j уменьшается на единицу.

A[0]=1                      A[3]=8                A[6]=4            A[9]=6

A[1]=2                      A[4]=9                A[7]=0

A[2]=5                      A[5]=3                A[8]=7

Сначала тройка (j=5, A[ j ]=A[5]=3) сравнивается с девяткой (A[ j-1 ]=A[4]=9), поскольку тройка меньше девятки они меняются местами (A[5]=9, A[4]=3), j=4. Аналогично тройка  (j=4, A[ j ]=A[4]=3) меняется местами с восьмёркой (A[3]=8), j=3 и пятёркой (A[2]=5), j=2. Затем тройка сравнивается с двойкой, поскольку тройка больше двух алгоритм завершает работу. Всего было 3 захода в цикл, следовательно, после исполнения данного фрагмента программы j станет равным двум.

1 2 5 8 9 3 4 0 7 6 j = 5 3 < 9
3 9 j = 4 3 < 8
3 8 j = 3 3 < 5
3 5 j = 2 3 < 2

Ответ: 2


Демонстрационный вариант Единый государственный экзамен ЕГЭ 2016 г. – задание №19

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 4, 7, 3, 8, 5, 0, 1, 2, 9, 6 соответственно, т.е. A[0] = 4, A[1] = 7 и т.д.

Определите значение переменной c после выполнения следую­щего фрагмента этой программы (записанного ниже на пяти языках программирования).

Бейсик

Visual Basic
12
3
4
5
6
7
8
9
c = 0 FOR i = 1 TO 9    IF A(i) < A(0) THEN        c = c + 1        t = A(i)        A(i) = A(0)        A(0) = t    ENDIF NEXT i

Python

Python
12
3
4
5
6
7
c = 0 for i in range(1,10):    if A[i] < A[0]:        c = c + 1        t = A[i]        A[i] = A[0]        A[0] = t

Алгоритмический язык

12
3
4
5
6
7
8
9
c := 0 нц для i от 1 до 9    если A[i] < A[0] то        c := c + 1        t := A[i]        A[i] := A[0]        A[0] := t    все
кц

Паскаль

Delphi/Pascal
12
3
4
5
6
7
8
9
c := 0; for i := 1 to 9 do    if A[i] < A[0] then    begin        c := c + 1;        t := A[i];        A[i] := A[0];        A[0] := t;    end;

Си

C
12
3
4
5
6
7
8
9
c = 0; for (i = 1;i < 10;i++)    if (A[i] < A[0])    {        c++;        t = A[i];        A[i] = A[0];        A[0] = t;    }

Ответ:

Решение:

Данный алгоритм меняет местами элементы A[0] и А[ i ] и увеличивает значение c на 1, если   А[ i ]< A[0].

A[0]=4                       A[3]= 8               A[6]=1           A[9]=6

A[1]=7                       A[4]= 5               A[7]=2

A[2]=3                       A[5]=0                A[8]=9

Сначала четверка (A[0]=4 ) сравнивается с семеркой ( i=1,А[ i ]= A[1]=7),

7!<4

Дальше четверка (A[0]=4 ) сравнивается с тройкой ( i=2,А[ i ]= A[2]=3),поскольку тройка меньше четверки они меняются местами (A[0]=3, A[2]=4), c=0+1=1.

Аналогично тройка сравнивается с A[3]= 8, A[4]= 5, A[5]=0 .

8!<3

5!<3

0<3  → 3 и 0 меняются местами (A[0]=0, A[5]=3), c=.1+1=2.

0-наименьшее число в массиве, c=2.

Ответ: 2


В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

Паскаль Си Python
for i:=0 to 10 do
A[i]:= i + 1;
for i:=10 downto 0 do
A[i]:= A[10-i];
 for (i = 0;i <= 10;i++)
A[i] = i+1;
for (i = 10;i >= 0;i–)
A[i] = A[10-i];
 for i in range(0,11):
A[i] = i+1
for i in range(10, -1, -1):
A[i] = A[10-i]

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 11 10 9 8 7 6 5 4 3 2 1

3) 11 10 9 8 7 6 7 8 9 10 11

4) 1 2 3 4 5 6 5 4 3 2 1

Решение:

0 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 1
1 2 3 4 5 6 7 8 9 2 1
1 2 3 4 5 6 7 8 3 2 1
1 2 3 4 5 6 7 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1

Ответ: 4


В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

Паскаль Си Python
for i:=0 to 10 do A[i]:=i;
for i:=0 to 10 do begin
A[10-i]:=A[i];
A[i]:=A[10-i];
end;
 for (i = 0;i <= 10;i++)
A[i] = i;
for (i = 0;i <= 10;i++){
A[10-i]=A[i];
A[i]=A[10-i];
}
 for i in range(0,11):
A[i] = i
for i in range(0,11):
A[10-i]=A[i]
A[i]=A[10-i]

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 0 1 2 3 4 5 6 7 8 9 10

3) 10 9 8 7 6 5 6 7 8 9 10

4) 0 1 2 3 4 5 4 3 2 1 0

Решение:

0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9 0
0 1 2 3 4 5 6 7 8 1 0
0 1 2 3 4 5 6 7 2 1 0
0 1 2 3 4 5 6 3 2 1 0
0 1 2 3 4 5 4 3 2 1 0
0 1 2 3 4 5 4 3 2 1 0

Ответ: 4


В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

Паскаль Си Python
for i:=0 to 10 do A[i]:=i*i;
k:=A[10];
for i:=0 to 9 do
A[i]:=A[i+1];
A[0]:=k;
 for (i = 0;i <= 10;i++)
A[i]=i*i;
k:=A[10];
for (i = 0;i <= 9;i++){
A[i]=A[i+1];
A[0]=k;
}
 for i in range(0,11):
A[i]=i*i
k=A[10]
for i in range(0,10):
A[i]=A[i+1]
A[0]=k

Чему будут равны элементы этого массива?

1) 100 0 1 4 9 16 25 36 49 64 81

2) 100 4 9 16 25 36 49 64 81 100 100

3) 1 4 9 16 25 36 49 64 81 100 100

4) 1 4 9  16 36 49 64 81 100 0

Решение:

0 1 2 3 4 5 6 7 8 9 10
0 1 4 9 16 25 36 49 64 81 100 k=100
1
4
9
16
25
36
49
64
81
1 4 9 16 25 36 49 64 81 100 100
100 4 9 16 25 36 49 64 81 100 100 A[0]=100

Ответ: 2


Значения двух массивов A и B с индексами от 1 до 100 задаются при помощи следующего фрагмента программы:

Паскаль Си Python
for i:=1 to n do
A[i]:=i*i;
for i:=1 to n do
B[i]:=A[i]-100;
 for (i = 1;i <= n;i++)
A[i]=i*i;
for (i = 1;i <= n;i++){
B[i]=A[i]-100;
}
 for i in range(0,n+1):
A[i]=i*i
for i in range(0,n+1):
B[i]=A[i]-100

Сколько положительных значений будет в  массиве B?

Решение:

A 1 2 3 10 11 12 100
A 1 4 9 100 121 144 10000
B -99 -96 -91 0 21 44 9900 B[i]:=A[i]-100;

100-10=90

Ответ: 90


Значения элементов двумерного массива А были равны 0. Затем значения некоторых элементов были изменены (см. представленный фрагмент программы:

Паскаль Си Python
n := 0;
for i:=1 tо 5 do
for j:=1 tо 6-i do begin
n := n + 1;
A[i,j] := n;
end;
 n = 0;
for (i = 1;i <= 5;i++)
for (j = 1;j <= 6-i;j++){
n = n + 1;
A[i][j] = n;
}
 n = 0
for i in range(1,6):
for j in range(1,6-i+1):
n = n + 1
A[i][j] = n

Какой элемент массива будет иметь в результате максимальное значение?

1) A[1,1]              2) A[1,5]              3) A[5,1]              4) A[5,5]

Решение:

A[1,1]=1
A[1,2]=2
A[1,3]=3
A[1,4]=4
A[1,5]=5
A[2,1]=6
A[2,2]=7
A[2,3]=8
A[2,4]=9
A[3,1]=10
A[3,2]=11
A[3,3]=12
A[4,1]=13
A[4,2]=14
A[5,1]=15

Ответ: 3


В программе описан одномерный целочисленный массив с индексами от 0 до 10. Ниже представлен фрагмент программы, обрабатывающей данный массив:

Паскаль Си Python
s:= 0;
n:= 10;
for i:=0 to n do begin
if і = n-i then s:=s+A[i]+A[i+1];
end;
s = 0;
n = 10;
for (i = 0;i <= n;i++)
if (і == n-i)
s=s+A[i]+A[i+1];
 s = 0
n = 10
for i in range(0,n+1):
if і == n-i:
s=s+A[i]+A[i+1];

В начале выполнения этого фрагмента в массиве находились числа 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, т. е. А[0]=0, А[1]=10 и т. д. Чему будет равно значение переменной s после выполнения данной программы?

Решение:

n:= 10;

if і = n-i then => і = 10-i = > i=5

s:=s+A[i]+A[i+1] = 0 + 50 + 60 = 110

Ответ: 110


В программе описан одномерный целочисленный массив с индексами от 0 до 10. Ниже представлен фрагмент программы, обрабатывающей данный массив:

Паскаль Си Python
n:= 10; s:= 0;
for i:=1 to n do begin
if A[i]-A[i-1] < i then
s:= s + i;
end;
 n = 10; s = 0;
for (i = 1;i <= n;i++)
if (A[i]-A[i-1] < i)
s = s + i;
 n = 10
s = 0
for i in range(0,n+1):
if A[i]-A[i-1] < i:
s = s + i

В начале выполнения этого фрагмента в массиве находились числа Фибоначчи: 1,1,2,3,5,8,13,21,34,55,89, т.е. A[0]=1, A[1]=1, A[2]=2 и т.д. Чему будет равно значение переменной s после выполнения данной программы?

Решение:

0 1 2 3 4 5 6 7 8 9 10
1 1 2 3 5 8 13 21 34 55 89
i 1 2 3 4 5 6 7 8 9 10
A[i]-A[i-1] < i 1-1<1 2-1<2 3-2<3 5-3<4 8-5<5 13-8<6
s 0 1 3 6 10 15 21

Ответ: 21


В программе описан одномерный целочисленный массив с индексами от 1 до 10. Ниже представлен фрагмент программы, обрабатывающей данный массив:

Паскаль Си Python
n := 10;
for i := 1 to n do begin
A[n+1-i] := 2*A[i];
end;
 n = 10
for (i = 1;i <= n;i++)
A[n+1-i] = 2*A[i];
 n = 10
for i in range(0,n+1):
A[n+1-i] = 2*A[i]

В начале выполнения этого фрагмента в массиве находились числа: 1,2,4,8,16,32,64,128,256,512, т.е. A[i]=2k-1, k=1, …10. Укажите значение из предложенного списка, которое после выполнения указанного фрагмента программы имеют два или более рассмотренных в этом фрагменте элемента массива. Если таких чисел несколько, укажите наименьшее из них.

Решение:

1 2 3 4 5 6 7 8 9 10
1 2 4 8 16 32 64 128 256 512 A[n+1-i] := 2*A[i]
2 A[10+1-1] := 2*1=A[10]=2
4 A[10+1-2] := 2*2=A[9]=4
8 A[10+1-3] := 2*4=A[8]=8
16 A[10+1-4] := 2*8=A[7]=16
32 A[10+1-5] := 2*16=A[6]=32
64 A[10+1-6] := 2*32=A[5]=64
32 A[10+1-7] := 2*16=A[4]=32
16 A[10+1-8] := 2*8=A[3]=16
8 A[10+1-9] := 2*4=A[2]=8
4 8 16 32 64 32 16 8 4 2 A[10+1-10] := 2*2=A[1]=4

Если таких чисел несколько, укажите наименьшее из них = 4

Ответ: 4


В программе описан одномерный целочисленный массив с индексами от 0 до 10. Ниже представлен записанный на разных языках программирования фрагмент одной и той же программы, обрабатывающей данный массив:

Паскаль Си Python
s:=0;
n:=10;
for i:=0 to n-1 do begin
s:=s+A[i]-A[i+1]
end;
 s=0;
n=10;
for (i = 0;i <= n-1;i++)
s=s+A[i]-A[i+1];
 s=0
n=10
for i in range(0,n):
s=s+A[i]-A[i+1]

В начале выполнения этого фрагмента в массиве находились двухзначные натуральные числа. Какое наибольшее значение может иметь переменная s после выполнения данной программы?

Решение:

0 1 2 3 4 5 6 7 8 9 10
99 10 10 10 10 10 10 10 10 10 10 s:=s+A[i]-A[i+1]

s=0+99-10=89

s=89+10-10=89…

Ответ: 89


В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 7; 5; 3; 4; 8; 8; 9; 7; 6; 2 соответственно, т.е. A[0] = 7; A[1] = 5 и т.д. Определите значение переменной c после выполнения следующего фрагмента программы:

Паскаль Си Python
c := 0;
for i := 1 to 9 do
if A[i-1] < A[i] then begin
t:= A[i];
A[i]:= A[i – 1];
A[i-1]:= t
end
else
c:= c + 1;
 c = 0;
for (i = 1;i <= 9;i++)
if (A[i-1] < A[i]){
t = A[i];
A[i] = A[i – 1];
A[i-1] = t;
}else
c = c + 1;
 c = 0
for i in range(1,10):
if A[i-1] < A[i]:
t = A[i]
A[i] = A[i – 1]
A[i-1] = t
else:
c = c + 1

Решение:

if A[i-1] < A[i] then begin
t:= A[i];
A[i]:= A[i – 1];
A[i-1]:= t

Если текущее число больше предыдущего, это меняет местами. Если нет, c увеличивается.

0 1 2 3 4 5 6 7 8 9
7 5 3 4 8 8 9 7 6 2
7 5 c=1
5 3 c=2
4 3
8 3
8 3
9 3
7 3
6 3
3 2 c=3

Ответ: 3


Ниже представлен фрагмент программы, обрабатывающей одномерный целочисленный массив с индексами от 0 до 10. Известно, что в начале выполнения этого фрагмента в массиве находилась возрастающая последовательность чисел, то есть A[0] < A[1] < … < A[10]. Какое наибольшее значение может иметь переменная s после выполнения данной программы?

Паскаль Си Python
s := 27;
n := 10;
for i:=0 to n-1 do begin
s:=s+A[i]-A[i+1]+2
end;
 s = 27;
n = 10;
for (i = 0;i <= n-1;i++)
s=s+A[i]-A[i+1]+2;
 s = 27
n = 10
for i in range(0,n):
s=s+A[i]-A[i+1]+2

Решение:

0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9 10

s:=s+A[i]-A[i+1]+2

чтобы сделать с самым большим, то разница должна быть минимальной.

s=27+0-1+2=28

Это повторяется 10 раз.

27+10=37

Ответ: 37