Матрица егэ информатика


Пройти тестирование по этим заданиям
Вернуться к каталогу заданий

Версия для печати и копирования в MS Word

1

Значения элементов фрагмента двумерного массива A[1..100,1..100] задаются с помощью следующего фрагмента программы:

Бейсик Паскаль

FOR i= 1 TO 100

    FOR k=1 TO 100

    IF i > k THEN A(i,k) = i

    ELSE

        A(i,k) = -k

    NEXT k

NEXT i

for i:=1 to 100 do

    for k:=1 to 100 do

        if i > k then

        A[i,k] := i

    else A[i,k] := -k;

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

for (i=1;i<=100;i++) {

    for (k=1;k<=100;k++) {

        if (i > k) {

            A[i][k] = i;

        }

        else A[i][k] = -k;

    }

}

нц для i от 1 до 100

    нц для k от 1 до 100

        если i > k

        то A[i,k] := i

        иначе A[i,k] := -k

    кц

кц

Python

for i in range(1, 101):

    for k in range(1, 101):

        if i > k:

            A[i][k] = i

        else:

            A[i][k] = -k

Чему равна сумма элементов фрагмента массива после выполнения этого фрагмента программы?


2

Значения элементов двумерного массива A[1..100,1..100] задаются с помощью следующего фрагмента программы:

Бейсик Python

FOR i = 1 TO 100

    FOR k = 1 TO 100

        IF i = k THEN A(i,k)= 1

        ELSE A(i,k)= -1

    NEXT k

NEXT i

for i in range(1, 101):

    for k in range(1, 101):

        if i == k:

            A[i][k] = 1

        else:

            A[i][k] = -1

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

for i:= 1 to 100 do

    for k:=1 to 100 do

        if i = k then

            A[i,k] := 1

        else A[i,k] := -1;

нц для i от 1 до 100

    нц для k от 1 до 100

        если i = k то

            A[i,k] := 1

        иначе A[i,k] := -1

    все

    кц

кц

Си++

for (i = 1; i <= 100; i++) {

    for (k = 1; k <= 100; k++) {

        if (i == k)

            A[i][k] = 1;

        else

            A[i][k] = -1;

    }

}

Чему равна сумма элементов массива после выполнения этого фрагмента программы?


3

Дан фрагмент программы, обрабатывающей двухмерный массив A[1..5,1..4]:

Бейсик Python

k = 4

FOR m = 1 TO 4

    k = k + 1

    FOR n = 1 TO 5

        k = m — k

        A(n,m) = n*n+m*m-2*k

    NEXT n

NEXT m

k = 4

for m in range(1, 5):

   k += 1

   for n in range(1, 6):

      k=m-k

      A[n][m]=n*n+m*m-2*k

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

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;

k:=4

нц для m от 1 до 4

    k:=k+1

    нц для n от 1 до 5

        k:=m-k

        A[n,m]:=n*n+m*m-2*k

    кц

кц

Си++

k = 4;

for (m = 1; m <= 4; m++) {

    k = k + 1;

    for (n = 1; n <= 5; n++) {

        k=m-k;

        A[n][m]=n*n+m*m-2*k;

    }

}

Чему будет равно значение A[3,1]?


4

Элементы двумерного массива A размером 10×10 первоначально были равны 1. Затем значения некоторых из них меняют с помощью следующего фрагмента программы:

Бейсик Python

FOR n = 1 TO 4

    FOR k = 1 TO n+1

        A(n,k) = A(n,k) — 1

        A(n,k+1) = A(n,k) — 1

    NEXT k

NEXT n

for n in range(1, 5):

    for k in range(1, n+2):

        A[n][k]= A[n][k]-1

        A[n][k+1]= A[n][k]-1

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

for n:= 1 to 4 do

    for k:=1 to n+1 do begin

        A[n,k]:= A[n,k]-1;

        A[n,k+1]:= A[n,k]-1;

    end;

нц для n от 1 до 4

    нц для k от 1 до n+1

        A[n,k]:= A[n,k]-1

        A[n,k+1]:= A[n,k]-1

    кц

кц

Си++

for (n = 1; n <= 4; n++) {

    for (k = 1; k <= n+1; k++) {

        A[n][k]= A[n][k]-1;

        A[n][k+1]= A[n][k]-1;

    }

}

Сколько элементов массива в результате будут равны 0?


5

В программе описан двухмерный целочисленный массив A [1..6,1..6]. Ниже представлен фрагмент этой программы, в котором изменяются значения элементов массива.

Бейсик Python

FOR n = 1 TO 6

    FOR m = 1 TO 6

        A(n,m) = A(m,n)+2*n-m

    NEXT m

NEXT n

for n in range(6):

    for m in range(6):

        A[n][m] = A[m][n]+2*(n+1)-(m+1)

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

for n:= 1 to 6 do

    for m:=1 to 6 do begin

        A[n,m]:= A[m,n]+2*n-m;

    end;

нц для n от 1 до 6

    нц для m от 1 до 6

        A[n,m]:= A[m,n]+2*n-m

    кц

кц

Си++

for (n = 0; n < 6; n++) {

    for (m = 0; m < 6; m++) {

        A[n][m]= A[m][n]+2*(n+1)-(m+1);

    }

}

До выполнения данного фрагмента программы значение A[4,3] (для Python и C++ A[3][2]) было равно 10, а значение A[3,4] (для Python и C++ A[2][3]) было равно 15. Чему будет равно значение A[4,3] (для Python и C++ A[3][2]) после выполнения этого фрагмента программы?

Пройти тестирование по этим заданиям

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

Разбор заданий №
19 ЕГЭ (11 кл)

 

Проверяемые элементы содержания: Работа с массивами (заполнение, считывание, поиск, сортировка,
массовые операции и др.)

(повышенный
уровень, время – 5 мин)

 

Что нужно знать:

Массив
— группа переменных одного типа (элементов массива), имеющих общее имя

и
расположенных в оперативной памяти компьютера непосредственно друг за другом.
У

каждого элемента массива есть свой
уникальный номер (индекс).

Массив
— упорядоченный набор элементов, каждый из которых хранит одно значение,

идентифицируемое
с помощью одного или нескольких индексов. В простейшем случае

массив
имеет постоянную длину и хранит единицы данных одного и того же типа, а в

качестве индексов выступают целые числа.

Количество
используемых индексов массива может быть различным: массивы с одним

индексом
называют одномерными, с двумя — двумерными, и т. д. Одномерный массив — не

строго
соответствует вектору в математике; двумерный («строка», «столбец»)— матрице.

Чаще
всего применяются массивы с одним или двумя индексами; реже — с тремя; ещё

большее количество индексов —
встречается крайне редко.[1]

                      Для
обращения к элементу массива используют квадратные скобки, запись            A[i]

обозначает элемент массива A с номером
(индексом)  i

Матрица
(двухмерный массив) – это прямоугольная таблица однотипных элементов A[i, j] 

Информационные ресурсы:

1.    
Теория:
Одномерные массивы целых чисел;

2.    
Задания
для тренировки:
https://inf-ege.sdamgia.ru/?redir=1  

3.     Онлайн-тест
Константина Полякова для подготовки к ЕГЭ: 
B19
— Обработка массивов
 

Задание
№ 19
(ДЕМО ЕГЭ-2020 ФИПИ)

В программе
используется
одномерный целочисленный массив A
с индексами от 0 до

11. Значения элементов равны 20, 19, 17, 41, 23, 12,
24, 16, 4, 13, 6, 15 соответственно,

т.е. A[0] = 20, A[1] = 19 и т.д. Определите значение
переменной
s
после выполнения

следующего фрагмента этой программы (записанного
ниже на пяти языках

программирования).

Паскаль

Бейсик

С++

s
:= 0; n := 0; for i := 0 to 11 do     if A[i] <= A[n] then    
begin        s := s + i;        t := A[i];

       A[i] :=
A[n];        A[n] := t     end;

s = 0 n = 0

FOR i = 0 TO 11

   IF A(i) <= A(n) THEN      
s = s + i       t = A(i)       A(i) = A(n)

      A(n) = t

   END IF NEXT i

s
= 0; n = 0; for (int i = 0; i < 12; i++)     if (A[i] <= A[n]){        
s += i;         t = A[i];         A[i] = A[n];

        A[n] = t;

    }

Python

трассировочная
таблица

s = 0 n = 0 for i in
range(12):     if A[i] <= A[n]:

        s += i         t =
A[i]         A[i] = A[n]

        A[n] = t

i

A[i]
≤A[n] ?

s

n=0                        массив

0

20,
19
, 17, 41, 23, 12, 24, 16, 4,
13, 6, 15

0

20 ≤ 20  –

1

19 ≤ 20 +

1

19, 20, 17,
41, 23, 12, 24, 16, 4, 13, 6, 15

2

17 ≤ 19 +

3

17, 20, 19, 41, 23, 12,
24, 16, 4, 13, 6, 15

3

42 ≤ 17 –

4

23 ≤ 17 –

5

12 ≤ 17 +

8

12, 20, 19, 41, 23, 17, 24, 16,
4
, 13, 6, 15

6

24≤12 –

7

16≤12 –

8

4≤12 +

16

4, 20, 19, 41, 23,17, 24, 16,
12, 13, 6, 15

9

13≤4 –

10

6≤4 –

11

15≤4 –

16

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

s
:= 0 n := 0

нц
для i от
0
до 11

  
если A[i] <= A[n]
то      
s := s + i       t := A[i]       A[i] := A[n]

      A[n] := t

   все кц

анализ
программы

a.      дан
массив: 20, 19, 17, 41, 23, 12, 24, 16,
4,
13, 6, 15; 

b.     Если
текущий элемент меньше или равен нулевому, то они (переставляются) меняются
местами.

c.      Вычисляется
сумма номеров элементов меньших A[0], переставляемых в начало массива.

Ответ:
16

Задание
№ 19
(ДЕМО ЕГЭ-2019 ФИПИ)

В
программе используется
одномерный целочисленный массив A
с индексами от 0 до 9.

Значения элементов равны 2, 4, 3, 6, 3, 7, 8, 2, 9,
1 соответственно, т.е. A[0] = 2, A[1] =

4 и т.д. Определите значение
переменной
c
после выполнения следующего фрагмента

этой программы.

программа

Решение:

Pascal

Python

трассировочная
таблица

c := 0; for i := 1 to 9 do   if A[i-1] < A[i] then

 
begin     c := c + 1;     t := A[i];     A[i] := A[i-1];     A[i-1] := t;
end;

c = 0 for i in range(1,
10):   if A[i-1] < A[i]:

    c = c + 1

    A[i-1], A[i] = A[i], A[i-1]

i

A[i-1]
<A[i]

c

массив

0

2,
4, 3, 6, 3, 7, 8, 2, 9, 1

1

2 < 4 +

1

4,
2,
3, 6, 3, 7, 8, 2, 9, 1

2

2 < 3 +

2

4,
3,
2,
6, 3, 7, 8, 2, 9, 1

3

2 < 6 +

3

4,
3, 6,
2,
3, 7, 8, 2, 9, 1

4

2 < 3 +

4

4,
3, 6,
3,
2,
7, 8, 2, 9, 1

5

2 < 7 +

5

4,
3, 6,
3,
7,
2,
8, 2, 9, 1

6

2 < 7 +

6

4,
3, 6,
3,
7, 8,
2,
2,
9, 1

7

2 < 2  –

4,
3, 6,
3,
7, 8, 2,
2,
9, 1

8

2 < 9 +

7

4,
3, 6,
3,
7, 8, 2, 9,
2,
1

9

2 < 1  –

4,
3, 6,
3,
7, 8, 2, 9,
2,
1

7

анализ
программы

a.      дан
массив: 2, 4, 3, 6, 3, 7, 8, 2, 9, 1; 

b.      Если
предыдущий
элемент
меньше
текущего
то они (переставляются) меняются местами.

c.      Вычисляется
количество
перестановок
элементов массива.

Ответ:
7

Задание
№ 19
(ДЕМО ЕГЭ-2018 ФИПИ)

В
программе используется
одномерный целочисленный массив A
с индексами от 0 до 9.

Значения элементов равны 3, 0, 4, 6, 5, 1, 8, 2, 9,
7 соответственно, т.е. A[0] = 3, A[1] =

0 и т.д. Определите значение
переменной
c
после выполнения следующего фрагмента

этой программы.

программа

Решение

Pascal

Python

трассировочная
таблица

c := 0; for i := 1 to 9 do   if A[i-1] > A[i] then

 
begin     c := c + 1;     t := A[i];     A[i] := A[i-1];     A[i-1] := t;  
end;

c = 0 for i in
range(1,10):     if A[i-1] > A[i]:

        c = c + 1         t
= A[i]

        A[i] = A[i-1]

        A[i-1] = t

i

A[i-1]>A[i]

c

массив


0

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

1

3 > 0  +

1

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

2

3 > 4   –

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

3

 4 > 6   –

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

4

6 > 5  +

2

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

5

6 > 1  +

3

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

6

6 > 8  –

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

7

8 > 2  +

4

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

8

8 > 9  –

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

9

9 > 7  +

5

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

5

анализ
программы

a.       дан
массив: 3, 0, 4, 6, 5, 1, 8, 2, 9, 7; 

b.      Если
предыдущий
элемент
больше
текущего,
то они (переставляются) меняются местами.

c.       Вычисляется
количество
перестановок
элементов массива.

Ответ:
5

Разбор заданий № 19. СтатГрад.
Подготовка к ЕГЭ 20192

Вариант 1

В программе описан одномерный
целочисленный массив
A;
в представленном

фрагменте обрабатываются элементы массива с
индексами от 1 до 10. Перед началом

выполнения программы эти элементы массива имели
значения 0, 1, 2, 3, 4, 5, 4, 3, 2, 1

(т.е.
A[1] = 0; A[2] = 1; …; A[10] = 1).
Значение
какого из этих элементов массива будет

наибольшим
после выполнения фрагмента программы? В ответе укажите
индекс

элемента
– число от 1 до 10.

программа

Решение

Pascal

Python3

трассировочная
таблица

n := 10; d := 6; for j:=1 to d do begin   s := A[1];   for
i:=1 to n-1 do   begin

    A[i]
:= A[i+1];

 
end;   A[10] := s; end;

n
= 9 d = 6 for j in range(0,d):

 
s = A[0]   for i in range(0,n):

    A[i] =
A[i+1]

  A[9] = s

————————

Basic

n = 10 d = 6

FOR j = 1 TO d   s = A(1)

  FOR i = 1 TO n-1

    A(i) = A(i+1)

  NEXT i

  A(10) = s

NEXT j

j

i

s

массив

0

0

0 1 2 3 4 5
4 3 2 1

0

1

2

3

4

5

6

7

8

1
1 2 3 4 5 4 3 2 1

1
2 2 3 4 5 4 3 2 1

1
2 3 3 4 5 4 3 2 1

1
2 3 4 4 5 4 3 2 1

1
2 3 4 5 5 4 3 2 1

1
2 3 4 5 4 4 3 2 1

1
2 3 4 5 4 3 3 2 1

1
2 3 4 5 4 3 2 2 1

1
2 3 4 5 4 3 2 1 1

9

1 2 3 4 5 4 3 2 1 0

1

1

2 3 4 5 4 3 2 1 0 1

2

2

3 4 5 4 3 2 1 0 1 2

3

3

4 5 4 3 2 1 0 1 2 3

4

4

5 4 3 2 1 0 1 2 3 4

5

5

4 3 2 1 0 1 2 3 4 5

Наибольший
элемент массива – 5. На
Python индекс
наибольшего элемента массива равен 9, а на
Pascal
10.

анализ
программы

a.       дан
массив: 0, 1, 2, 3, 4, 5, 4, 3, 2, 1; 

b.      В
результате выполнения программы осуществляется сдвиг элементов массива влево,
крайний левый элемент переставляется вправо:

1.      внутренний
цикл по i реализует смещение элементов;

2.      внешний
цикл по j организует перестановку первого элемента в конец массива

c.       Индекс
наибольшего элемента массива равен 10.

Ответ:
10

2 
Информатика и ИКТ. Подготовка к ЕГЭ в 2019 году.
Диагностические работы.—М.: МЦНМО, 2019

3  На
Python элементы массива нумеруются с 0,
на
Pascal – с 1.
В этом задании максимальный индекс на
Python
– 9, на
Pascal – с 10.

Представлен вариант
отредактированного текста программы,
т.к. условие задачи на Python некорректно
(приведено с ошибками): 

n = 10 d = 6 for j in range(1,d+1):

    s = A[1]     for i in
range(1,n):

       
A[i] = A[i+1]

IndexError: list index out of range

   
A[10] = s

IndexError:
list assignment index out of range

Вариант 2

В программе описан одномерный
целочисленный массив
A;
в представленном

фрагменте обрабатываются элементы массива с
индексами от 1 до 10. Перед началом

выполнения программы эти элементы массива имели
значения 0, 1, 4, 9, 6, 5, 6, 8, 4, 1

(т.е.
A[1] = 0; A[2] = 1; …; A[10] = 1).
Значение
какого из этих элементов массива будет

наибольшим
после выполнения фрагмента программы? В ответе укажите
индекс

элемента
– число от 1 до 10.

Pascal

Python

Basic

n := 10; d := 6; for j:=1 to d do begin   s := A[1];   for
i:=1 to n-1 do begin

    A[i]
:= A[i+1];

 
end;   A[10] := s; end;

Исходный текст[2]:

n
= 10 d = 6 for j in range(1,d+1):

   
s = A[1];     for i in range(1,n):

        A[i] = A[i+1]

    A[10] = s

————————
Отредактированный текст:

n
= 10 d = 6 for j in range(1,d+1):

   
s = A[0]     for i in range(1, n):

        A[i-1] = A[i]

    A[n-1] = s

n = 10 d = 6

FOR j = 1 TO d   s = A(1)

  FOR i = 1 TO n-1

    A(i) = A(i+1)

  NEXT i

  A(10) = s

NEXT j

анализ
программы

1.                     
дан массив: 0, 1, 4, 9, 6, 5, 6, 8, 4, 1; 

2.                     
В результате выполнения программы осуществляется
сдвиг элементов массива влево, крайний левый элемент переставляется вправо:

a.      внутренний
цикл по i реализует смещение элементов;

b.     внешний
цикл по j организует перестановку первого элемента в конец массива.

3.                     
После выполнения программы первые шесть элементов
массива перейдут в конец, массив примет вид: 

6, 8, 4, 1, 0, 1, 4, 9, 6, 5. Наибольший
элемент массива – 9, его индекс – 8.

4.                     
(На Python индекс
наибольшего элемента массива равен 7, а на
Pascal

8).

5.                     
Индекс наибольшего элемента массива равен 8.

Ответ:
8

Вариант 3

Представленный
ниже фрагмент программы обрабатывает элементы одномерного

целочисленного
массива A с индексами от 0 до 9. Перед началом выполнения данного

фрагмента эти элементы массива имели значения 2, 3,
5, 8, 10, 7, 4, 6, 12, 15 

(т.е. A[0] = 2, A[1] = 3, …, A[9] = 15). 

Определите значение
переменной
s
после выполнения фрагмента этой программы.

Pascal

n := 9; s := 0;

for i:=1 to n do begin     if A[i-1] < A[i] then
begin         A[i] := A[i] + A[i-1];         s := s + A[i]

   
end end;

Python

n = 10 s = 0 for i in range(1,n):    
if A[i-1] < A[i]:

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

Basic

n = 9 s = 0

FOR i = 1 TO n

  IF A(i-1) < A(i) THEN

    A(i) = A(i) + A(i-1)

    s = s + A(i)

  END IF

NEXT i

анализ
программы

1.     Рассматриваются
элементы массива:
 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

2

3

5

8

10

7

4

6

12

15

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

3.     Преобразованный
массив:
 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

2

5

5

13

10

7

4

10

22

15

4.     s
= 5 + 13 + 10 + 22 = 50

Ответ:
50

Вариант 4

Представленный
ниже фрагмент программы обрабатывает элементы одномерного

целочисленного
массива A с индексами от 0 до 9. Перед началом выполнения данного

фрагмента эти элементы массива имели значения 7, 4,
9, 10, 2, 3, 5, 8, 13, 19 

(т.е. A[0] = 7, A[1] = 4, …, A[9] = 19). 

Определите значение
переменной
s
после выполнения фрагмента этой программы.

Pascal

n := 9; s := 0;

for i:=1 to n do begin     if A[i-1] < A[i] then
begin         A[i] := A[i] + A[i-1];         s := s + A[i]

   
end end;

Python

n = 10 s = 0 for i in range(1,n):     if
A[i-1] < A[i]:

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

Basic

n = 9 s = 0

FOR i = 1 TO n

  IF A(i-1) < A(i) THEN

    A(i) = A(i) + A(i-1)

    s = s + A(i)

  END IF

NEXT i

анализ программы
1.
Рассматриваются элементы массива:
 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

7

4

9

10

2

3

5

8

13

19

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

3.     Преобразованный
массив:
 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

7

4

13

10

2

5

5

13

13

32

4.     s
= 13 + 5 + 13 + 32 = 63

Ответ:
63

Вариант 5

Представленный
ниже фрагмент программы обрабатывает элементы одномерного

целочисленного
массива A с индексами от 0 до 9. Перед началом выполнения данного

фрагмента эти элементы массива имели значения 2, 3,
5, 3, 10, 7, 4, 6, 12, 9 

(т.е. A[0] = 2, A[1] = 3, …, A[9] = 9). 

Определите значение
переменной
s
после выполнения фрагмента этой программы.

Pascal

n := 9; s := 0;

for i:=1 to n do begin     if A[i-1] < A[i] then
begin         A[i] := A[i] — A[i-1];         s := s + A[i]

   
end end;

Python

n = 10 s = 0 for i in range(1,n):     if
A[i-1] < A[i]:

        A[i] = A[i] — A[i-1]         s = s + A[i]

Basic

n = 9 s = 0

FOR i = 1 TO n

  IF A(i-1) < A(i) THEN

    A(i) = A(i) — A(i-1)

    s = s + A(i)

  END IF

NEXT i

анализ
программы

1.     Рассматриваются
элементы массива:
 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

2

3

5

3

10

7

4

6

12

9

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

3.     Преобразованный
массив:
 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

2

1

4

3

7

7

4

2

10

9

4.     s
= 1 + 4 + 7 + 2 + 10 = 24

Ответ: 24
Вариант
6

Представленный
ниже фрагмент программы обрабатывает элементы одномерного

целочисленного
массива A с индексами от 0 до 9. Перед началом выполнения данного

фрагмента эти элементы массива имели значения 7, 4,
9, 10, 2, 3, 5, 3, 13, 10 

(т.е. A[0] = 7, A[1] = 4, …, A[9] = 10). 

Определите значение
переменной
s
после выполнения фрагмента этой программы.

Pascal

n := 9; s := 0;

for i:=1 to n do begin     if A[i-1] < A[i] then
begin         A[i] := A[i] — A[i-1];         s := s + A[i]

   
end end;

Python

n = 10 s = 0 for i in range(1,n):     if
A[i-1] < A[i]:

        A[i] = A[i] — A[i-1]         s = s + A[i]

Basic

n = 9 s = 0

FOR i = 1 TO n

  IF A(i-1) < A(i) THEN

    A(i) = A(i) — A(i-1)

    s = s + A(i)

  END IF

NEXT i

анализ
программы

1.       
Рассматриваются элементы массива: 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

7

4

9

10

2

3

5

3

13

10

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

3.       
Преобразованный массив: 

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

7

4

5

5

2

1

4

3

10

10

4.       
s = 5 + 5 + 1 + 4 + 10 = 25

Ответ:
25

Разбор заданий № 19. ЕГЭ
2020. Информатика. Ушаков Д.М. 10

тренировочных вариантов[3]

Вариант № 1

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов равны 4, 7, 6, 4, 2, 3, 5, 10, 7, 8
соответственно, т.е. A[0] = 4, A[1] = 7 и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы. 

Python

k = 0 for i in range
(10):     if A[i] % 2 != 0:

        k += A[i]

Pascal

k := 0;

for i
:= 0 to 9 do     if A[i] mod 2 <> 0 then         k := k + A[i];

Basic

k = 0

FOR i := 0 to 9

    IF A(i) MOD 2 <> 0 THEN

        k = k + A(i)

    END IF NEXT i

Анализ
программы:

a.      дан
массив: 4, 7, 6, 4, 2, 3, 5, 10, 7, 8; 

b.      В
результате выполнения данного фрагмента программы вычисляется сумма
нечётных
элементов массива:

1.      если
остаток от деления элемента массива на 2 не равен 0, то его значение
суммируется в переменной k:

2.      7
+ 3 + 5 + 7 = 22

Ответ:
22

Вариант № 2

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов равны 4; 5; 4; 7; 6; 3; 9; 11; 7; 8
соответственно, т.е. A[0] = 4, A[1] = 5 и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы. 

Python

k = 0 for i in range
(9):     if A[i] > A[i+1]:

        k += 1        
t = A[i]

        A[i] =A[i+1]

        A[i+1] = t

Pascal

k := 0;

for i
:= 0 to 8 do     if A[i] > A[i+1] THEN     begin         k := k +
1;         t := A[i];         A[i] :=A[i+1];         A[i+1] := t     end;

Basic

k = 0

FOR i := 0
to 8

    IF
A(i) > A(i+1) THEN

       
k = k + 1         t = A(i)         A(i) =A(i+1)

       
A(i+1) = t

   
END IF NEXT i

Анализ
программы:

a.      дан
массив: 4; 5; 4; 7; 6; 3; 9; 11; 7; 8; 

b.      В
результате выполнения данного фрагмента программы вычисляется
количество
перестановок
элементов массива, удовлетворяющих
заданному условию:

1.      если
текущий элемент больше предыдущего, то они меняются местами;

2.      значение
переменной k увеличивается на 1:

3.      всего
осуществляется 5 перестановок.

Ответ:
5

Вариант № 3

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов
равны 4; 5; 4; 7; 10; 8; 9; 11; 7; 8 соответственно, т.е. A[0] = 4, A[1] = 5
и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы. 

Python

k = 0 for i in range
(10):     if A[i] >= A[0]:

        k = k +
1         t = A[i]         A[i] =A[0]

        A[0] = t

Pascal

k := 0;

for i := 0 to 9 do     if A[i] >= A[0] THEN     begin

       
k := k + 1; t := A[i];         A[i] :=A[0]; A[0] := t     end;

Basic

k = 0

FOR i := 0 to 9

    IF A(i) >= A(0) THEN

        k = k + 1         t
= A(i)         A(i) =A(0)

        A(0) = t

    END IF NEXT i

Анализ
программы:

a.      дан
массив: 4; 5; 4; 7; 10; 8; 9; 11; 7; 8; 

b.     В
результате выполнения данного фрагмента программы вычисляется
количество
перестановок
элементов массива, удовлетворяющих
заданному условию:

1. если текущий элемент больше или равен
нулевому, то они меняются местами; 2. значение переменной k увеличивается на
1; 3. всего осуществляется 5 перестановок.

Ответ:
5

Вариант № 4

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов
равны 4; 5; 7; 7; 10; 8; 9; 11; 7; 6 соответственно, т.е. A[0] = 4, A[1] = 5
и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы. 

Python

k = 0 for i in range
(5):     if A[2*i] >= A[2*i+1]:

        k = k +
1         t = A[2*i]

        A[2*i] =A[2*i+1]

        A[2*i+1] = t

Pascal

k := 0;

for i := 0 to 4 do     if A[2*i] >= A[2*i+1] THEN    
begin         k := k + 1;  t := A[2*i];

       
A[2*i] :=A[2*i+1];         A[2*i+1] := t     end;

Basic

k = 0

FOR i := 0
to 4

    IF
A(2*i) >= A(2*i+1) THEN

       
k = k + 1         t = A(2*i)

       
A(2*i) =A(2*i+1)

       
A(2*i+1) = t

   
END IF NEXT i

Анализ
программы:

a.      дан
массив: 4; 5; 7; 7; 10; 8; 9; 11; 7; 6; 

b.     В
результате выполнения данного фрагмента программы вычисляется количество
перестановок
парных элементов массива,
удовлетворяющих заданному условию:

1.     если
значение элемента массива с номером 2*i
не
меньше
следующего, то они меняются
местами;

2.     значение
переменной k увеличивается на 1.

3.     всего
осуществляется 3 перестановки: 7 и 7; 10 и 8; 7 и 6.

Ответ:
3
Вариант № 5

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов
равны 4; 5; 4; 7; 10; 8; 9; 11; 7; 8 соответственно, т.е. A[0] = 4, A[1] = 5
и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы. 

Python

k = 0 for i in range
(9):     if A[i] < A[i+1]:

        t = A[i]         A[i]
=A[0]         A[0] = t         k = k + A[0]

Pascal

k := 0;

for i := 0 to 8 do     if A[i] < A[i+1] THEN     begin

       
t := A[i];         A[i] :=A[0];         A[0] := t;         k := k + A[0];    
end;

Basic

k = 0

FOR i := 0
to 8

   
IF A(i) < A(i+1) THEN         t = A(i)         A(i) =A(0)         A(0) = t
        k = k + A(0)

   
END IF NEXT i

Анализ
программы:

a.      дан
массив: 4; 5; 4; 7; 10; 8; 9; 11; 7; 8; 

b.     В
результате выполнения данного фрагмента программы осуществляется
поиск
и суммирование минимальных
элементов
массива, удовлетворяющих заданному условию:

1.     если
значение
текущего
элемента массива
меньше
следующего
, то текущий и нулевой элементы
меняются местами;

2.     в
переменной k суммируются найденные элементы:

 k = 4+4+7+8+9+7 = 39.

Ответ:
39

Вариант № 6

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов
равны 6; 5; 4; 7; 10; 6; 9; 11; 7; 8 соответственно, т.е. A[0] = 6, A[1] = 5
и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы, записанной на разных языках
программирования. 

Python

k = 0 min1 = A[0] for i in range
(1,10):     if A[i]  <= min1:         k = i

Pascal

k := 0; min1 := A[0]; for i := 1 to 9 do     if A[i] <=
min1 THEN

        k
:= i;

Basic

k
= 0 min1 = A(0)

FOR i := 1
to 9

    IF
A(i) <= min1 THEN

        k
= i

   
END IF NEXT i

Анализ
программы:

a.      дан
массив: 6; 5; 4; 7; 10; 6; 9; 11; 7; 8; 

b.     В
результате выполнения данного фрагмента программы осуществляется
поиск
индекса
элемента массива, значение которого
не
больше
A[0]: если значение текущего
элемента массива
не больше
заданного (A
0)
то в переменной k сохраняется индекс найденного элемента.

Ответ:
5
Вариант № 7

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов
равны 6; 5; 4; 7; 10; 6; 9; 11; 7; 8 соответственно, т.е. A[0] = 6, A[1] = 5
и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы, записанной на разных языках
программирования. 

Python

k = 0 m = A[1] for i in range
(1,10):     if A[i]  > m:         k = k + 1

Pascal

k :=
0; m := A[1]; for i := 1 to 9 do     if A[i] > m THEN         k := k + 1;

Basic

k
= 0 m = A(1)

FOR
i := 1 to 9     IF A(i) > m THEN         k = k + 1

   
END IF NEXT i

Анализ
программы:

a.      дан
массив: 6; 5; 4; 7; 10; 6; 9; 11; 7; 8; 

b.     В
результате выполнения данного фрагмента программы осуществляется подсчет
количества
элементов массива, значение которых
больше
A[1]:
​ 

1.     в
переменной m сохраняется значение A[1];

2.     рассматриваются
только элементы массива, начиная с A[1]; 

3.     если
значение
текущего
элемента массива больше

заданного (A
1)
то значение переменной k увеличивается на 1;

4.     т.к.
A[1] = 5, то элементов массива, значение которых
больше
5
всего
7;

k
= 7

Ответ:
7

Вариант № 8

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов
равны 6; 5; 4; 7; 10; 6; 9; 11; 7; 8 соответственно, т.е. A[0] = 6, A[1] = 5
и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы, записанной на разных языках
программирования. 

Python

k = 0 m = A[1] for i in
range (1,10):

    if A[i]  > m:         k = k + 1

Pascal

k :=
0; m := A[1]; for i := 1 to 9 do     if A[i] > m THEN         k := k + 1;

Basic

k
= 0 m = A(1)

FOR
i := 1 to 9     IF A(i) > m THEN         k = k + 1

   
END IF NEXT i

Анализ
программы:

c.      дан
массив: 6; 5; 4; 7; 10; 6; 9; 11; 7; 8; 

d.     В
результате выполнения данного фрагмента программы осуществляется подсчет
количества
элементов массива, значение которых
больше
A[1]:
​ 

1.     в
переменной m сохраняется значение A[1];

2.     рассматриваются
только элементы массива, начиная с A[1]; 

3.     если
значение
текущего
элемента массива больше

заданного (A
1)
то значение переменной k увеличивается на 1;

4.     т.к.
A[1] = 5, то элементов массива, значение которых
больше
5
всего
7;

k
= 7

Ответ:
7
Вариант № 9

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов равны 4; 5; 4; 7; 6; 3; 9; 11; 7; 8
соответственно, т.е. A[0] = 4, A[1] = 5 и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы, записанной на разных языках
программирования. 

Python

k = 0
m = A[0] for i in range (1,10):     if A[i]  > m:         m = A[i]        
k = k + 1

Pascal

k :=
0; m := A[0]; for i := 1 to 9 do     if A[i] > m THEN     begin         m
= A[i]; k := k + 1;     end;

Basic

k = 0 m = 0

FOR i := 1 to 9     IF A(i) > m THEN

       
m = A(i)

       
k = k + 1

    END
IF

NEXT i

Анализ
программы:

a.      дан
массив: 4; 5; 4; 7; 6; 3; 9; 11; 7; 8; 

b.     В
результате выполнения данного фрагмента программы осуществляется
подсчет
количества
элементов массива, значение которых
больше
заданного:

1.     в
переменной m сохраняется значение A[0];

2.     рассматриваются
элементы массива, начиная с A[1]; 

3.     если
значение
текущего
элемента массива больше
​  
m,
то
m
​​ присваивается значение этого элемента,
а значение переменной
k
увеличивается на 1;

4.     т.к.
A[0] = 4, то первый найденный элемент равен 5, m = 5 второй найденный элемент
массива больше заданного (5) равен 7, m = 7,  третий найденный элемент
массива – 9, m = 9, четвертый – 11. 

5.     k
= 4

Ответ:
4
Вариант № 10

В программе
используется
целочисленный массив A
с индексами от 0 до 9. Значения

элементов
равны 3; 5; 1; 7; 10; 6; 9; 11; 7; 8 соответственно, т.е. A[0] = 3, A[1] = 5
и т.д.

Определите значение
переменной
k
после выполнения следующего фрагмента

программы, записанной на разных языках
программирования. 

Python

k = 0
for i in range (10):     if A[i] % 2 == 0 and k == 0:         k = A[i]

Анализ
программы:

a.      дан
массив: 3; 5; 1; 7; 10; 6; 9; 11; 7; 8; 

b.     В
результате выполнения данного фрагмента программы осуществляется
поиск
первого
четного элемента массива:

1.     k
= 0;

2.     просматриваются
все элементы массива; 

3.     если
значение
текущего
элемента массива четное
, то
k
​​ присваивается значение этого элемента;

4.     т.к.
в дальнейшем k ≠ 0, то заданное условие поиска для оставшихся элементов будет

ЛОЖНО;

5.     первый
четный элемент массива равен 10. 

6.     k
= 10

Pascal

k := 0;

for i
:= 0 to 9 do     if (A[i] mod 2 = 0) and  (k=0) THEN         k = A[i]; 

Basic

k = 0

FOR i :=
0 to 9

  IF A(i) MOD 2 = 0 AND k=0 THEN       k = A(i)

  END
IF NEXT i

Ответ:
10

Рекомендации по выполнению:
Циклы:

«Задания этой линии можно решать двумя способами:
1) составить на черновике таблицу переменных, произвести пооператорное выполнение программы с записью изменяющихся значений в таблицу(трассировка);
2) определить количество итераций цикла и на основе этого вычислить результат.
Второй способ более быстрый, но он требует умения анализировать текст простой программы без её выполнения»

Типичные ошибки и рекомендации по их предотвращению:

«Экзаменуемый не учитывает последнюю итерацию цикла или, напротив, добавляет лишнюю. Это может быть связано с непониманием того, как обрабатывается условие цикла, или с ошибочной обработкой строгого неравенства как нестрогого или наоборот»

Массивы

«Рекомендуемый способ выполнения этого задания – трассировка»

Типичные ошибки и рекомендации по их предотвращению:

«Часто бывает, что при выполнении программы внутри итерации цикла изменяется значение не только текущего i-го элемента, но и следующего i+1-го, поэтому в следующей итерации текущий элемент будет иметь не то значение, что перед выполнением программы. Это нужно внимательно отслеживать, чтобы избежать ошибок. Кроме того, в определённых типах заданий может более сложно изменяться индекс текущего элемента, тут тоже требуется аккуратность и внимательность»

ФГБНУ «Федеральный институт педагогических измерений»

В 6 задании ЕГЭ используются алгоритмические структуры с циклами. Рассмотрим их на примере языка Паскаль.

  • Цикл for со счетчиком
  • Работа с одномерными массивами
  • Работа с двумерными массивами (матрицами)
    • Понятие главной диагонали матрицы: элементы матрицы главной диагонали имеют совпадающие номера строки и столбца:
    • главная диагональ матрицы
      т.е. формула элементов главной диагонали:

      i = j

      где i и j — счетчики циклов (А[i,j])

    • если у элементов матрицы номер строки меньше номера столбца (i  <  j), то они расположены выше главной диагонали:
    • элементы выше главной диагонали

    • если у элементов матрицы номер строки больше номера столбца (i  >  j), то они расположены ниже главной диагонали:
    • элементы ниже главной диагонали

    • побочная диагональ матрицы имеет формулу:
    • n = i + j — 1

      или

      j = n — i + 1

      где n — общее количество элементов квадратной матрицы, i и j — счетчики циклов строк и столбцов.

    Решение заданий 6 ЕГЭ по информатике для 2021

    Задание демонстрационного варианта 2022 года ФИПИ
    Плейлист видеоразборов задания на YouTube:


    6_1 new: Определите, при каком наименьшем введённом значении переменной s программа выведет число 256:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var k,n,p,l,s,x:integer;
    var s, n: integer;
    begin
      readln (s);
      n := 1;
      while s <=45 do begin
        s := s + 4;
        n := n * 2
      end;
      writeln(n)
    end.
    Бейсик:

    Python:

    s = int(input())
    n = 1
    while s <= 45:
      s = s + 4
      n = n * 2
    print( n )
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s,  n = 1;
    cin >> s;
    while( s <= 45 ) {
      s = s + 4;
      n = n * 2;
      }
    cout << n;
    }

    Типовые задания для тренировки

      
    📹 Видеорешение подобного 6 задания на Python:

    📹 здесь
    📹 Видеорешение на RuTube здесь
    ✍ Решение:

      ✎ Способ 1 (программный):
      Pascalabc.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      
      begin
        var s1 := 1;
        while true do // внешний цикл, бесконечный
        begin
          var s := s1;
          // --- код из условия задания --- //
          var n := 1;
          while s <= 45 do // внутренний цикл из задания
          begin
            s := s + 4;
            n := n * 2;
          end;
          // --- конец кода из условия задания --- //
          if n = 256 then // если найдено, то выводим соответствующее s
          begin 
              print(s1); 
              break;  // выход из бесконечного цикла 
          end;
          s1 := s1 + 1; // 
        end;
      end.

      Пояснение:

    • Поскольку в цикле s увеличивается, а по условию задания следует найти наименьшее значение s, то можно начать с s=1, постоянно увеличивая значение s на единицу во внешнем цикле.
    • Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная s меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s, увеличив его всего на 1. Используем переменную S1 для этих целей.
    • Бейсик:

      Python:

      s1 = 1
      while True:  # внешний цикл, бесконечный
          s = s1
          # --- код из условия задания --- 
          n = 1
          while s <= 45:
              s = s + 4
              n = n * 2
          # --- конец кода из условия задания --- 
          if n == 256:
              print(s1)
              break
          s1 += 1
      С++:

    Ответ: 14

    6_2 new: Определите, при каком наибольшем введённом значении переменной s программа выведет число 96:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var s, n: integer;
    begin
      readln (s);
      n := 3;
      while s <= 51 do begin
        s := s + 7;
        n := n * 2
      end;
      writeln(n)
    end.
    Бейсик:

    Python:

    s = int(input())
    n = 3
    while s <= 51:
      s = s + 7
      n = n * 2
    print( n )
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s,  n = 3;
    cin >> s;
    while( s <= 51 ) {
      s = s + 7;
      n = n * 2;
      }
    cout << n;
    }

    Типовые задания для тренировки

    📹 Видеорешение:

    📹 здесь
    📹 Видеорешение на RuTube здесь

    ✍ Решение:

      ✎ Способ 1 (программный):
      Pascalabc.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      
      begin
        var s1 := 50;
        while true do // внешний цикл, бесконечный
        begin
          var s := s1;
          // --- код из условия задания --- //
          var n := 3;
          while s <= 51 do // внутренний цикл из задания
          begin
            s := s + 7;
            n := n * 2;
          end;
          // --- конец кода из условия задания --- //
          if n = 96 then // если найдено, то выводим соответствующее s
          begin 
              print(s1); 
              break;  // выход из бесконечного цикла 
          end;
          s1 := s1 - 1; // 
        end;
      end.

      Пояснение:

    • Поскольку в цикле s увеличивается, и цикл работает пока s<=50, а по условию следует найти наибольшее значение s, то можно начать с s = 50, постоянно уменьшая значение s на единицу во внешнем цикле.
    • Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная s меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s, уменьшив его всего на 1. Используем переменную S1 для этих целей.
    • Бейсик:

      Python:

      s1 = 50
      while True:  # внешний цикл, бесконечный
          s = s1
          # --- код из условия задания --- 
          n = 3
          while s <= 51:
              s = s + 7
              n = n * 2
          # --- конец кода из условия задания --- 
          if n == 96:
              print(s1)
              break
          s1 -= 1
      С++:

    Ответ: 23

    6_3 new::

    Сколько существует различных значений d, оканчивающихся на 8, при вводе которых эта приведенная программа выведет число 50?

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var S, N, d: integer;
    begin
      readln(d);
      S := 15;
      N := 10;
      while S <= 2400 do begin
        S := S + d;
        N := N + 5;
      end;
      writeln(N);
    end.
    Бейсик:

    Python:

    d = int(input())
    S = 15
    N = 10
    while S <= 2400:
      S = S + d
      N = N + 5
    print(N)
    С++:

    Типовые задания для тренировки

    ✍ Решение:

      ✎ Способ 1 (программный):
      Pascalabc.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      
      begin
        var counter:=0;
        var d1:=1;
        while true do
        begin
          var d := d1;
          // из условия задачи 
          var s := 15;
          var n := 10;
          while s <= 2400 do
          begin
            s := s + d;
            n:=n + 5;
          end;
          // проверка условий: увеличение счетчика
          if (d mod 10 = 8) and (n = 50) then
          begin
            counter+=1;;
          end;
          d1 += 1;
          // выход из бесконечного цикла
          if d1 = 2400 then break;
        end;
      print (counter)
      end.
    • Вывод:
    • 4
      Бейсик:

      Python:

      counter = 0
      d1 = 1
      while True:
          s = 15
          n = 10    
          d = d1
          # --- код из условия задания --- 
          while s <= 2400:
              s = s + d
              n = n + 5
          if d%10==8 and n==50:
              counter+=1
          d1=d1+1
          if d1 == 2400:
              break
      print (counter)
      С++:

    Ответ: 4

    6_4 new:

    Определите наименьшее и наибольшее введённое значение переменной s, при котором программа выведет число 210. В ответ запишите оба числа в порядке убывания без пробелов и других разделителей

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var s, n: integer;
    begin
      readln(s);
      n := 600;
      while n > s do begin
        s := s + 3;
        n := n - 6
      end;
      writeln(n)
    end.
    Бейсик:

    Python:

    s = int(input())
    n = 600
    while n > s:
      s = s + 3
      n = n - 6
    print(n)
    С++:

    ✍ Решение:

      ✎ Способ 1 (программный):

      PascalAbc.NET:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
      begin
        var s_ := -100;
        while true do
        begin
          var n := 600;
          var s := s_;
          while n > s do
          begin
            s := s + 3;
            n := n - 6
          end;
          if n = 210 then
            print(s_); 
          s_ += 1;
        if s > 1000 then
          break;
        end;
      end.
    • Вывод:
    • 15 16 17 18 19 20 21 22 23
    • Записываем в порядке убывания:
    • 2315

      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      
      s_ = -100
      while True:  # внешний цикл, бесконечный
          s = s_
          n = 600
          # --- код из условия задания --- 
          while n > s:
              s = s + 3
              n = n - 6
          # --- конец кода из условия задания --- 
          if  n == 210:
              print(s_)
          s_ += 1
          if s > 1000:
              break

    Ответ: 2315

    6_5 new:

    Определите, при каком наибольшем положительном введённом значении переменной s программа выведет трёхзначное число.

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var s, n: integer;
    begin
      readln (s);
      n := 200;
      while s div n >= 2 do
      begin
        s := s + 5;
        n := n + 5
      end;
      writeln(s)
    end.
    Бейсик:

    Python:

    s = int(input())
    n = 200
    while s // n >= 2:
       s = s + 5
       n = n + 5
    print(s)
    С++:

    ✍ Решение:

      ✎ Способ 1 (программный):

      PascalAbc.NET:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
      begin
        var s_ := 1000;
        while true do
        begin
          var n := 200;
          var s := s_;
          while s div n >= 2 do
          begin
            s := s + 5;
            n := n + 5
          end;
          if (s > 99) and (s<1000) then
          begin
            print(s_); break; 
          end;
          s_ -= 1;
        end;
      end.

      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      
      s_ = 1000
      while True:  # внешний цикл, бесконечный
          s = s_
          n = 200
          # --- код из условия задания --- 
          while s // n >=2:
              s = s + 5
              n = n + 5
          # --- конец кода из условия задания --- 
          if  99 < s < 1000:
              print(s_)
              break
          s_ -= 1

    Ответ: 699


    6_6 new:

    Получив на вход некоторое натуральное число X, этот алгоритм печатает одно число. Сколько существует чисел Х, для которых алгоритм напечатает число на отрезке [2;500]?

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var x, s, n: integer;
    begin
      readln(x);
      s := 6 * (x div 15);
      n := 1;
      while s < 300 do begin
        s := s + 18;
        n := n * 2
      end;
      writeln(n)
    end.
    Бейсик:

    Python:

    x = int(input())
    s = 6 * (x // 15)
    n = 1
    while s < 300:
      s = s + 18
      n = n * 2
    print(n)
    С++:

    ✍ Решение:

      ✎ Способ 1 (программный):

      PascalAbc.NET:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      
      begin
        var x := 1;
        var count := 0;
        while true do
        begin
          var s := 6 * (x div 15);
          var n := 1;
          while s < 300 do 
          begin
            s := s + 18;
            n := n * 2
          end;
          if (n >= 2) and (n <= 500) then
            count += 1;
          x += 1;
          if x > 1000 then
            break;
        end;
        print(count)
      end.

      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      
      x = 1
      count = 0
      while True:  # внешний цикл, бесконечный
          s = 6 * (x // 15)
          n = 1
          while s <300:
              s = s + 18
              n = n * 2
          # --- конец кода из условия задания --- 
          if  1 < n < 501:
              count+=1
          x += 1
          if x > 1000:
              break
      print (count)

    Ответ: 360


    Решения подобных заданий прошлых лет

    Алгоритмы с циклами:

    Определить, какое число пропущено

    6_14:

    Сопоставьте формулу:

    и программу, предназначенную для расчета по данной формуле. Программа написана правильно, а в формуле допущена ошибка.

    Определите, где и какое число в формуле пропущено?

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    var k,n,p,l,s,x:integer;
    begin
      writeln('введите n='); readln(n);
      writeln('введите x='); readln(x);
      s:=0;
      p:=1;
      l:=x;
      For k:=1 to n do 
        begin
          p:=p * k;
          s:=s + 3*l/p;
          l:=l*x;
        end;
      writeln('S=',S:5:2);
    end.
    Бейсик:

    INPUT "введите n=", n
    INPUT "введите x=", x
    s=0: p=1
    l=x
    FOR k:=1 to n  
          p = p * k: s = s + 3*l/p
          l = l*x
    NEXT k
    PRINT "S=",S
    END
    Python:

    n = int(input('введите n='))
    x = int(input('введите x='))
    s=0
    p=1
    l=x
    For k in range (1,n+1): 
          p*= k
          s+=3*l/p
          l*=x
    print('S=',S)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int k,n,p,s,x;
    printf("введите n="); scanf("%d",&n);
    printf("введите x="); scanf("%d",&x);
    l=x;
    for (k=1,s=0,p=1;k<=n;k++) {
      p*=k;
      s+=3*l/p;
      l*=x;
    }
    printf("s=%d",s);
    }

    ✍ Решение:

    • Рассмотрим формулу:

    • Фактически она обозначает: сумма xk/ k! для всех k, начиная от 1 до n.

    • Рассмотрим алгоритм программы:
    • Основные действия происходят в цикле, в котором k изменяется от 1 до n (n вводится в начале программы):
    • For k:=1 to n do
    • В следующей строке кода происходит вычисление факториала числа k (в первой итерации цикла 1!, во второй итерации 2! и т.д.):
    • p:=p * k;
    • Следующее выражение служит для подсчета x в степени k (переменной l в начале программы присваивается значение введенного x):
    • l:=l*x;
    • Основная же формула сумматора заключена в строке:
    • s:=s + 3*l/p;
    • Видим, что в исходной заданной формуле в числителе отсутствует число 3.
    • Т.е. исходная формула должна была выглядеть так:

    Ответ: 3


    Простые задания с двумя линейными непересекающимися функциями

    6_3:

    Определите, что будет напечатано в результате работы следующего фрагмента программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var k,s:integer;
    begin
      s:=512;
      k:=0;
      while s < 2048 do
        begin
          s:=s + 64;
          k:=k + 1;
         end;
      write(k);
    end.
    Бейсик:

    DIM S, K AS INTEGER
    S = 512
    K = 0
    WHILE S < 2048
      S = S + 64
      K = K + 1
    WEND
    PRINT K
    Python:

    s = 512
    k = 0
    while s < 2048:
      s = s + 64
      k = k + 1
    print(k)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 512, k = 0;
    while (s < 2048) {
      s = s + 64;
      k = k + 1;
    }
    cout << k << endl;
    return 0;
    }

      
    Подобные задания для тренировки

    ✍ Решение:

    Рассмотрим алгоритм программы:

    • В цикле k увеличивается на единицу (k — счетчик). Соответственно, k будет равно количеству итераций (повторов) цикла. После завершения работы цикла значение k выводится на экран, т.е. это и есть результат работы программы.
    • В цикле s увеличивается на 64. Для простоты расчетов возьмем начальное s не 512, а 0. Тогда условие цикла поменяется на s < 1536 (2048 — 512 = 1536):
    s:=0;
    k:=0;
    while s < 1536 do
       begin
       ...
    
    • Цикл будет выполняться пока s<1536, а s увеличивается на 64, отсюда следует что итераций цикла (шагов) будет:
    1536 / 64 = 24
    • Соответственно, k = 24.

    Результат: 24

    Для более детального разбора предлагаем посмотреть видео решения (теоретическое) данного 6 задания ЕГЭ по информатике:

    📹 здесь
    📹 Видеорешение на RuTube здесь (теоретическое решение)


    6_2:

    Определите, что будет напечатано в результате выполнения программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var s, i: integer;
    begin
    i := 1;
    s := 105;
    while s > 5 do
    begin
      s := s - 2;
      i := i + 1
    end;
    writeln(i)
    end.
    Бейсик:

    DIM S, I AS INTEGER
    I = 1
    S = 105
    WHILE S > 5
      S = S - 2
      I = I + 1
    WEND
    PRINT I
    Python:

    i = 1
    s = 105
    while s > 5:
      s = s - 2
      i = i + 1
    print(i)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 105, i = 1;
    while (s > 5) {
      s = s - 2;
      i = i + 1;
    }
    cout << i << endl;
    return 0;
    }

    ✍ Решение:

    • Рассмотрим алгоритм. Цикл зависит от переменной s, которая уменьшается каждую итерацию цикла на 2.
    • В цикле также присутствует счетчик — переменная i, которая увеличится на единицу ровно столько раз, сколько итераций (проходов) цикла. Т.е. в результате выполнения программы распечатается значение, равное количеству итераций цикла.
    • Поскольку условие цикла зависит от s, нам необходимо посчитать, сколько раз сможет s уменьшиться на 2 в цикле. Для удобства подсчета изменим условие цикла на while s > 0; так как мы s уменьшили на 5, соответственно, изменим и 4-ю строку на s:=100 (105-5):
    ...
    s := 100;
    while s > 0 do
    begin
    ...
    
    • Для того чтобы посчитать, сколько раз выполнится цикл, необходимо 100 разделить на 2, т.к. s каждый шаг цикла уменьшается на 2:
      100 / 2 = 50 -> количество итераций цикла
      
    • В 3-й строке видим, что начальным значением i является 1, т.е. в первую итерацию цикла i = 2. Значит, нам необходимо к результату (50) прибавить 1.
    • 50 + 1 = 51
    • Это значение и будет выведено на экран.

    Результат: 51


    6_1: 6 (8) задание. Демоверсия ЕГЭ 2018 информатика:

    Запишите число, которое будет напечатано в результате выполнения следующей программы.
    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var s, n: integer;
    begin
    s := 260;
    n := 0;
    while s > 0 do
    begin
      s := s - 15;
      n := n + 2
    end;
    writeln(n)
    end.
    Бейсик:

    DIM S, N AS INTEGER
    S = 260
    N = 0
    WHILE S > 0
      S = S - 15
      N = N + 2
    WEND
    PRINT N
    Python:

    s = 260
    n = 0
    while s > 0:
      s = s - 15
      n = n + 2
    print(n)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 260, n = 0;
    while (s > 0) {
      s = s - 15;
      n = n + 2;
    }
    cout << n << endl;
    return 0;
    }

      
    Подобные задания для тренировки

    ✍ Решение:

      Рассмотрим алгоритм:

    • Цикл зависит от значения переменной s, которая изначально равна 260. В цикле переменная s постоянно меняет свое значение, уменьшаясь на 15.
    • Цикл завершит свою работу когда s <= 0. Значит, необходимо посчитать сколько чисел 15 «войдет» в число 260, иными словами:
    260 / 15 ~ 17,333...
    • Эта цифра должна соответствовать количеству шагов (итераций) цикла. Так как условие цикла строгое — s > 0, то увеличим полученное число на единицу:
    17 + 1 = 18 итераций цикла
    
    Проверим:
    17 * 15 = 255  (< 260)
    18 * 15 = 270 (> 260)
    
    • Проверим на более простом примере. Допустим, изначально s=32. Два прохождения цикла даст нам s = 32/15 = 2,133... Число 2 больше 0, соответственно, цикл будет работать еще третий раз.
    • В результате работы программа распечатывает значение переменной n (искомый результат). В цикле переменная n, изначально равная 0, увеличивается на 2. Так как цикл включает 18 итераций, то имеем:
    n = 18 * 2 = 36

    Результат: 36

    Подробное решение данного 6 (8) задания из демоверсии ЕГЭ 2018 года смотрите на видео:

    📹 здесь
    📹 Видеорешение на RuTube здесь (теоретическое решение)


    6_4:

    Определите, что будет напечатано в результате выполнения следующего фрагмента программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var k,s: integer;
    begin
      k:=1024;
      s:=50;
      while s > 30 do
      begin
        s:= s - 4;
        k:= k div 2;
      end;
      write(k)
    end.
    Бейсик:

    DIM S, K AS INTEGER
    S = 50
    K = 1024
    WHILE S > 30
      S = S - 4
      K = K  2
    WEND
    PRINT K
    Python:

    s = 50
    k = 1024
    while s > 30:
      s = s - 4
      k = k // 2
    print(k)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 50, k = 1024;
    while (s > 30) {
      s = s - 4;
      k = k / 2;
    }
    cout << k << endl;
    return 0;
    }

    ✍ Решение:

    Результат: 32

    Подробное решение смотрите на видео:

    📹 здесь
    📹 Видеорешение на RuTube здесь (теоретическое решение)


    6_5:

    Определите значение переменной c после выполнения следующего фрагмента программы. Ответ запишите в виде целого числа.

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    
    a:=-5;
    c:=1024;
    while a<>0 do
    begin
      c:=c div 2;
      a:=a + 1
    end;
    Бейсик:

    A = -5
    C = 1024
    WHILE A <> 0
      C = C  2
      A = A + 1
    WEND
    Python:

    a = -5
    c = 1024
    while a != 0:
      c = c // 2
      a = a + 1
    С++:

    int a = -5, c = 1024;
    while (a != 0) {
      c = c / 2;
      a = a + 1;
    }

    ✍ Решение:

    Результат: 32

    Смотрите видеоразбор задания:

    📹 здесь
    📹 Видеорешение на RuTube здесь (теоретическое решение)


    6_12:

    Определите, что будет напечатано в результате работы следующего фрагмента программы.

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var n, s: integer;
    begin
    n := 1;
    s := 0;
    while s <= 365 do begin
      s := s + 36;
      n := n * 2
    end;
    write(n)
    end.
    Бейсик:

    N = 1
    S = 0
    WHILE S <= 365
      S = S + 36
      N = N * 2
    WEND
    PRINT N
    Python:

    n = 1
    s = 0
    while s <= 365:
      s = s + 36
      n = n * 2
    print(n)
    С++:

    using namespace std;
    int main() {
    int n = 1, s = 0;
    while (s <= 365) {
      s = s + 36;
      n = n * 2;
    }
    cout << n << endl;
    return 0;
    }

    ✍ Решение:

    • с каждым шагом цикла значение s увеличивается на 36, пока не станет больше 365; а значение n увеличивается в 2 раза, так что n=2k, где k – это число итераций цикла;
    • поскольку s увеличивается на 36, конечное значение s должно быть равно 0+36*k , достигается при k=11 (и s=36*11=396);
    • тогда n = 2k = 211 = 2048.
    • Результат: 2048


    Сумма или разность двух линейных функций (while s — n или while s + n)

    6_7:

    Запишите число, которое будет напечатано в результате выполнения следующей программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var s, n: integer;
    begin
    s := 522;
    n := 400;
    while s - n > 0 do
      begin
      s := s - 20;
      n := n - 15
      end;
    write(s)
    end.
    Бейсик:

    DIM S, N AS INTEGER
    S = 522
    N = 400
    WHILE S - N > 0
      S = S - 20
      N = N - 15
    WEND
    PRINT S
    Python:

    s = 522
    n = 400
    while s - n > 0:
      s = s - 20
      n = n - 15
    print(s)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 522, n = 400;
    while (s - n > 0) {
      s = s - 20;
      n = n - 15;
    }
    cout << s << endl;
    return 0;
    }

      
    Подобные задания для тренировки

    ✍ Решение:

    • В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
    • № шага условие цикла s n
      1 522-400=122
      122 > 0
      522-20=502 400-15=385
      2 502-385=117
      117 > 0
      502-20=482 385-15=370
      3 482-370=112
      112 > 0
    • Видим, что в условии разница между значениями составляет 5:
    • 122 - 117 = 5
      117 - 112 = 5
      ...
      
    • Таким образом, чтобы определить количество итераций (шагов) цикла, необходимо значение условия цикла, полученное в первой итерации, разделить на 5:
    • 122 / 5 = 24,4
      
      24 * 5 = 120 (120 + 2 = 122)
      

      Это значит, что на 24-й итерации цикла переменные s и n получили такие значения, после которых условие еще осталось истинным: 2 > 0. На 25-м шаге выполняется это условие:

      № шага условие цикла s n
      25 2 > 0 s-20=… n-15=…
    • В конце выполнения 25-й итерации, получаем условие для 26-й итерации:
    • 25 * 5 = 125 (125 - 3 = 122)
      
      № шага условие цикла s n
      25 2 > 0 s-20=… n-15=…
      26 3 < 0 не выполняется не выполняется
    • Значит, всего в цикле присутствует 25 итераций, в каждой из которых s уменьшается на 20. Посчитаем, на сколько уменьшится значение s в общем:
    • 25 * 20 = 500 (за 25 итераций)
      
      522 - 500 = 22 (вычитаем из исходных данных)
      

    Результат: 22

    Предлагаем посмотреть видео решения задания:

    📹 здесь
    📹 Видеорешение на RuTube здесь (теоретическое решение)


    6_13:

    Запишите число, которое будет выведено в результате работы программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var s, n: integer;
    begin
      s := 10;
      n := 55;
      while n > s do begin
        s := s + 1;
        n := n - 1
      end;
      writeln(n)
    end.
    Бейсик:

    DIM S, N AS INTEGER
    S = 10
    N = 55
    WHILE N > S
      S = S + 1
      N = N - 1
    WEND
    PRINT N
    Python:

    s = 10
    n = 55
    while n > s:
      s = s + 1
      n = n - 1
    print(n)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 10, n = 55;
    while (n > s) {
      s = s + 1;
      n = n - 1;
    }
    cout << n << endl;
    return 0;
    }

    ✍ Решение:

    • Для условия цикла — перенесем влево:
    • n - s > 0
    • Согласно начальным значениям, имеем:
    • 55 - 10 = 45
    • Запишем, как будет изменяться условие цикла в каждой итерации (в каждом шаге):
    • n - 1 > s + 1 =>
      n - s - 2 > 0
      
    • Т.е. условие цикла будет истинным пока возможно вычитать 2. Сколько раз можно вычесть два из 45?
    • для 22 итераций:
      2 * 22 = 44
      в условии цикла имеем 45 > 44, т.е. условие еще истинно
      для 23 итераций:
      2 * 23 = 46
      в условии цикла имеем 45 > 46 - условие ложно, т.е. цикл прекращает работу
    • Соответственно, получили 23 итерации цикла.
    • Изначально n = 55. С каждой итерацией выполнялось n-1. Посчитаем n:
    • n = 55 - 23 = 32

    Результат: 32

    Поиск наименьшего/наибольшего целого введенного числа d

    ЕГЭ 6.8:

    При каком наименьшем целом введенном числе d после выполнения программы будет напечатано число 192?

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    var k,s,d: integer;
    begin
      readln (d);
      s:=0;
      k:=0;
      while k < 200 do
      begin
        s:=s + 64;
        k:=k + d;
      end;
      write(s);
    end.
    Бейсик:

    DIM S, K, D AS INTEGER
    INPUT D
    S = 0
    K = 0
    WHILE K < 200
      S = S + 64
      K = K + D
    WEND
    PRINT S
    Python:

    d = int (input ())
    s = 0
    k = 0
    while k < 200:
      s = s + 64
      k = k + d
    print(s)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 0, k = 0;
    int d;
    cin >> d;
    while (k < 200) {
      s = s + 64;
      k = k + d;
    }
    cout << s << endl;
    return 0;
    }

      
    Подобные задания для тренировки

    ✍ Решение:

    Рассмотрим алгоритм программы:

    • Цикл зависит от переменной k, которая каждую итерацию цикла увеличивается на значение d (вводимое). Цикл закончит «работу», когда k сравняется с 200 или превысит его (k >= 200).
    • Результатом программы является вывод значения переменной s. В цикле s увеличивается на 64.
    • Так как по заданию необходимо, чтобы вывелось число 192, то число повторов цикла определим так:
    64 * x = 192
    число повторов: x = 192 / 64 = 3  
    
    • Так как в цикле k увеличивается на значение d, а повторов цикла 3 (при этом цикл завершается при k>=200), составим уравнение:
    3 * d = 200 
    d = 200/3 ~ 66,66
    
    • Поскольку число получилось нецелое, то проверим и 66 и 67. Если мы возьмем 66, то:
    66 + 66 + 66  = 198  (< 200)

    т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.

    • Для 67:
    67 + 67 + 67 = 201 (>200)
    • Данное число 67 нас устраивает, оно наименьшее из возможных, что и требуется по заданию.

    Результат: 67

    Разбор задания смотрите на видео:

    📹 здесь


    6_9:

      

    Запишите через запятую наименьшее и наибольшее значение числа d, которое нужно ввести, чтобы после выполнения программы было напечатано 153?

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var n, s, d: integer;
    begin
      readln(d);
      n := 33;
      s := 4;
      while s <= 1725 do begin
        s := s + d;
        n := n + 8
      end;
      write(n)
    end.
    Бейсик:

    DIM S, N, D AS INTEGER
    INPUT D
    N = 33
    S = 4
    WHILE S <= 1725
      S = S + D
      N = N + 8
    WEND
    PRINT N
    Python:

    d = int (input ())
    n = 33
    s = 4
    while s <= 1725:
      s = s + d
      n = n + 8
    print(n)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 4, n = 33;
    int d;
    cin >> d;
    while (s <= 1725) {
      s = s + d;
      n = n + 8;
    }
    cout << n << endl;
    return 0;
    }

    ✍ Решение:

    Разберем листинг программы:

    • Цикл программы зависит от значения переменной s, которая в цикле постоянно увеличивается на значение d (d вводится пользователем в начале программы).
    • Кроме того, в цикле переменная n увеличивается на 8. Значение переменной n выводится на экран в конце программы, т.е. по заданию n к концу программы должно n = 153.
    • Необходимо определить количество итераций цикла (прохождений). Так как начальное значение n = 33, а в конце оно должно стать 153, в цикле увеличиваясь на 8, то сколько раз 8 «поместится» в 120 (153 — 33)? :
    120 / 8 = 15 раз (количество итераций цикла)
    • Как мы определили, цикл зависит от s, которая в начале программы s = 4. Для простоты работы примем, что s = 0, тогда изменим и условие цикла: вместо s <= 1725 сделаем s <= 1721 (1725-1721)
    ...
     s := 0;
     while s <= 1721 do begin
    ...
    
    • Найдем d. Так как цикл выполняется 15 раз, то необходимо найти такое целое число, которое при умножении на 15 возвращало бы число большее 1721:
    1721 / 15 = 114,733 - не целое, не подходит
    1722 / 15 = 114,8 - не целое, не подходит
    ...
    берем кратное 5:
    1725 / 15 = 115 - целое, подходит!
    
    • 115 — это наименьшее d при котором n станет равным 153 (за 15 шагов цикла).
    • Найдем наибольшее d. Для этого надо найти такое число, которое соответствует неравенствам:
    14 * d <= 1721 при этом: 15 * d > 1721
    
    • Найдем:
    14 * 122 = 1708 (<=1721) 15 * 122 = 1830 (>1721)
    
    • Наибольшее d=122

    Результат: 115, 122

    Смотрите видео данного 6 задания ЕГЭ:

    📹 здесь


    Усложненные задания с двумя линейными функциями

    6_6:

    Запишите число, которое будет напечатано в результате выполнения следующей программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var s, n: integer;
    begin
      s := 0;
      n := 0;
      while 2*s*s < 123 do begin
        s := s + 1;
        n := n + 2
      end;
      writeln(n)
    end.
    Бейсик:

    DIM S, N AS INTEGER
    S = 0
    N = 0
    WHILE 2*S*S < 123
      S = S + 1
      N = N + 2
    WEND
    PRINT N
    Python:

    s = 0
    n = 0
    while 2*s*s < 123:
      s = s + 1
      n = n + 2
    print(n)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 0, n = 0;
    while (2*s*s < 123) {
      s = s + 1;
      n = n + 2;
    }
    cout << n << endl;
    return 0;
    }

      
    Подобные задания для тренировки

    ✍ Решение:

    Разберем листинг программы:

    • В цикле переменная s постоянно увеличивается на единицу (работает как счетчик), а переменная n в цикле увеличивается на 2.
    • В результате работы программы на экран выводится значение n.
    • Цикл зависит от s, причем работа цикла завершится когда 2 * s2 >= 123.
    • Необходимо определить количество прохождений цикла (итераций цикла): для этого определим такое наименьшее возможное s, чтобы 2 * s2 >= 123:
    1 шаг: s = 2*12=2
    2 шаг: s = 2*22=8
    3 шаг: s = 2*32=18
    ...
    7 шаг: s = 2*72=98 (меньше 123, т.е. цикл еще работает)
    8 шаг: s = 2*82=128 (больше 123, цикл не работает! )
    

    Либо просто нужно было бы найти такое наименьшее возможное четное число >= 123, которое при делении на 2 возвращало бы вычисляемый корень числа:

    s=124/2 = √62 - не подходит!
    s=126/2 = √63 - не подходит!
    s=128/2 = √64 = 8 - подходит!
    
    • Таким образом, программа выполнит 8 итераций цикла.
    • Определим n, которая увеличивается каждый шаг цикла на 2, значит:
    n = 2 * 8 = 16

    Результат: 16

    Видео данного задания ЕГЭ доступно здесь:

    📹 здесь


    Арифметическая и геометрическая прогрессия

    6_10:

    Определите, что будет напечатано в результате работы следующего фрагмента программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var k, s: integer;
    begin
      s:=3;
      k:=1;
      while k < 25 do begin
        s:=s + k;
        k:=k + 2;
      end;
      write(s);
    end.
    Бейсик:

    DIM S, K AS INTEGER
    S = 3
    K = 1
    WHILE K < 25
      S = S + K
      K = K + 2
    WEND
    PRINT S
    Python:

    s = 3
    k = 1
    while k < 25:
      s = s + k
      k = k + 2
    print(s)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int s = 3, k = 1;
    while (k < 25) {
      s = s + k;
      k = k + 2;
    }
    cout << s << endl;
    return 0;
    }

    ✍ Решение:

    Разберем листинг программы:

    • Результатом программы является вывод значения s.
    • В цикле s меняется, увеличиваясь на k, при начальном значении s = 3.
    • Цикл зависит от k. Выполнение цикла завершится при k >= 25. Начальное значение k = 1.
    • В цикле k постоянно увеличивается на 2 -> значит, можно найти количество итераций цикла.
    • Количество итераций цикла равно:
    n = 25 / 2 ~ 12 
    

    (т.к. k изначально равнялось 1, то в последнее, 12-е прохождение цикла, k = 25; условие цикла ложно)

    • В s накапливается сумма арифметической прогрессии, последовательность элементов которой удобней начать с 0 (а не с 3, как в программе). Поэтому представим, что в начале программы s = 0. Но при этом не забудем, что в конце необходимо будет к результату прибавить 3!
    s:=0;
    k:=1;
    while k < 25 do begin
     ...
    
    • Тогда арифметическая прогрессия будет выглядеть:
    1 + 3 + 5 + 7 ... 
    количество членов прогрессии - 12, т.к. 12 итераций цикла
    
    • Существует формула вычисления суммы арифметической прогрессии:

    s = ((2 * a1 + d * (n — 1)) / 2) * n

    где a1 — первый член прогрессии,
    d — разность,
    n — количество членов прогрессии (в нашем случае — кол-во итераций цикла)

    • Подставим значения в формулу:
    (2 * 1 + 2 * 11) / 2 * 12 = 144
    
    • Не забудем, что мы к результату должны прибавить 3:
    144+3 = 147
    
    • Это и есть значение s, которое выводится в результате работы программы.

    Результат: 147

    Решение данного задания ЕГЭ по информатике видео:

    📹 здесь


    6_11: Государственный выпускной экзамен ГВЭ 2019 (информатика ГВЭ ФИПИ, № 15):

    Запишите число, которое будет напечатано в результате выполнения программы:

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var n, s: integer;
    begin
    n := 1;
    s := 0;
    while n <= 1000 do
      begin
      s := s + n;
      n := n * 2
      end;
    write(s)
    end.
    Бейсик:

    DIM N, S AS INTEGER
    N = 1
    S = 0
    WHILE N <= 1000
      S = S + N
      N = N * 2
    WEND
    PRINT S
    Python:

    n = 1
    s = 0
    while n <= 1000:
      s = s + n
      n = n * 2
    print(s)
    С++:

    #include <iostream>
    using namespace std;
    int main() {
    int n = 1, s = 0;
    while (n <= 1000) {
      s = s + n;
      n = n * 2;
    }
    cout << s << endl;
    return 0;
    }

    ✍ Решение:

      Рассмотрим алгоритм:

    • Условие цикла зависит от переменной n, которая изменяется в цикле согласно получению степеней двойки:
    • 1  2  4  8  16  32  64  128  256  512  1024
      
    • Когда переменная n принимает значение 1024 (11-й шаг цикла), условие цикла становится ложным и цикл перестает работать. На экран выводится значение s.
    • Переменная s — это сумма элементов геометрической прогрессии, т.к. в ней аккумулируются значения n (числовой ряд, представляющий собой геометрическую прогрессию).
    • Вспомним формулы суммы геометрической прогрессии:
    • 1.

      [ S_{n} = frac {b_1-b_{n}*q}{1-q} ]

      2.

      [ S_{n} = b_{1} * frac {1-q^n}{1-q} ]

    • В нашем случае знаменатель q = 2, первый элемент прогрессии b1 = 1. Обратим внимание, что на последнем шаге к сумме добавляется значение 512, т.е. n = 10, а bn = 512. Только после этого n еще раз увеличивается в 2 раза и становится = 1024.
    • Вычислим s по формуле, подставив необходимые значения:
    • [ S_{n} = frac {1-512*2}{1-2} =1023 ]

    • Проверим по второй формуле:
    • [ S_{n} = 1 * frac {1-2^{10}}{1-2}=1023 ]

    • Так как в результате на экран выводится s, то ответ 1023.

    Результат: 1023


    Алгоритмы с массивами:

    Наибольшее или наименьшее значение переменной s (сумматор)

    6_15: Досрочный экзамен 2020 г., вариант 1:

    В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов массива A[i] приведены в таблице.

    i 0 1 2 3 4 5 6 7 8 9 10 11
    A[i] 14 13 15 8 4 12 30 21 22 16 5 9

    Определите значение переменной s после выполнения следующего фрагмента этой программы

    Язык программирования Паскаль:

    s := 0;
    n := 1;
    for i := 0 to 11 do
     if A[i] > A[n] then
      s := s + A[i] + i
     else
      A[n] := A[i];
    Бейсик:

    s = 0
    n = 1
    FOR i = 0 TO 11
     IF A(i) > A(n) THEN
       s = s + A(i) + i
     ELSE
       A(n) = A(i)
     END IF
    NEXT i
    Python:

    s = 0
    n = 1
    for i in range(0, 12):
     if A[i] > A[n]:
       s += A[i] + i
     else:
       A[n] = A[i]
    С++:

    s = 0;
    n = 1;
    for (int i = 0; i < 12; i++)
    {
     if (A[i] > A[n])
       s += A[i] + i;
     else
       A[n] = A[i];
    }

    ✍ Решение:

    Видео подробного решения:
    📹 здесь

    6_16:

    В программе описан одномерный целочисленный массив А с индексами от 0 до 10.

    Язык программирования Паскаль:

    s:=0;
    n:=10;
    for i:=0 to n-1 do begin
      s:= s + A[i] + A[i+1]
    end;

    В начале выполнения этого фрагмента в массиве находились двухзначные четные натуральные числа.

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

    ✍ Решение:

    Рассмотрим алгоритм фрагмента программы:

    • Цикл выполняется 10 раз: от 0 до 9 (т.к. n-1).
    • В цикле повторяется операция, суммирующая два подряд идущих элемента массива, — текущего и следующего:
    • A[i] + A[i+1]
    • Данная сумма накапливается в переменной s, значение которой требуется узнать в задаче.
    • Поскольку по заданию необходимо найти наибольшее значение переменной s, и по заданию элементы массива — двухзначные четные натуральные числа, то представим, что все элементы равны самому большому двухзначному четному числу — 98. Это будет оптимальным вариантом.
    • В первый проход цикла получим:
    • s = 0 + 98 + 98 = 196
    • Полученная сумма будет каждый проход цикла увеличиваться на то же самое число (196):
    • s = 196 + 98 + 98
    • Так как проходов (итераций) цикла 10, то получим:
    • 196 * 10 = 1960

    Результат: 1960

    Детальный разбор задания 6 ЕГЭ по информатике предлагаем посмотреть в видеоуроке:

    📹 здесь

    6_17:

    В программе описан одномерный целочисленный массив А с индексами от 0 до 10.

    Язык программирования Паскаль:

    s:=1;
    n:=10;
    for i:=1 to 5 do begin
      s:= s * A[i] * A[n-i+1]
    end;

    В начале выполнения этого фрагмента в массиве находились однозначные четные натуральные числа.

      
    Какое наименьшее значение может иметь переменная s после выполнения данной программы?

    ✍ Решение:

    Рассмотрим алгоритм фрагмента программы:

    • Цикл выполняется 5 раз: от 1 до 5.
    • В цикле повторяется операция произведения двух элементов массива:
    • A[i] * A[n-i+1]
    • Определим, какие элементы перемножаются, подставив для n и i конкретные значения:
    • 1 шаг: A[1]*A[10]
      2 шаг: A[2]*A[9]
      3 шаг: A[3]*A[8]
      4 шаг: A[4]*A[7]
      5 шаг: A[5]*A[6]
      
    • Результат каждой операции умножения накапливается в переменной s, значение которой и требуется найти.
    • Поскольку в s накапливается произведение элементов массива, а по заданию элементы — однозначные четные натуральные числа, то представим, что в массиве все элементы равны самому малому однозначному четному числу — 2. Это будет оптимальным вариантом, т.к. по заданию, необходимо определить наименьшее значение.
    • В первый проход цикла получим:
    • s = 1 * 2 * 2 = 4
    • Полученное произведение будет каждый проход цикла перемножаться на предыдущее значение (4 — в первом шаге, 16 — во втором шаге и т.п.):
    • s = 4 * 2 * 2 = 16
      ...
      
    • Так как проходов цикла 5, то получим:
    • 45 = 1024

    Результат: 1024

    Если что-то осталось непонятным, предлагаем посмотреть разбор задания 6 ЕГЭ по информатике в видеоуроке:

    📹 здесь


    Перестановка в массиве. Определить значение переменной

    6_18: 6 (19) задание. Демоверсия ЕГЭ 2018 информатика:

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

    Определите значение переменной c после выполнения следующего фрагмента этой программы:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    c := 0;
    for i := 1 to 9 do
     if A[i-1] > A[i] then
     begin
       c := c + 1;
       t := A[i];
       A[i] := A[i-1];
       A[i-1] := t;
     end;

    ✍ Решение:

    Результат: 5

    Подробное решение 19 задания демоверсии ЕГЭ 2018 года смотрите на видео:

    📹 здесь


    6_19:

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

    Определите значение переменной c после выполнения следующего фрагмента этой программы:

    1
    2
    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] := 2*t;
     end;

    ✍ Решение:

    • Рассмотрим изменение всех переменных и элементов массива для каждой итерации (прохода) цикла:
    • 1 2 3 4 5 6 7 8 9
      i 1 2 3 4 5 6 7 8 9
      if 3>4
      true
      4>6
      false
      7>6
      true
      2>14
      false
      9>14
      false
      1>14
      false
      2>14
      false
      3>14
      false
      0>14
      false
      c 1 2
      t 3 7
      A[i] 1 6
      A[0] 6 14

    Результат: 2

    📹 Видео здесь


    6_20:

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

    Определите значение переменной j после выполнения следующего фрагмента этой программы:

    1
    2
    3
    4
    5
    6
    7
    8
    
    j:=9;
    while A[j] + A[j-1] > 4 do
     begin
      t:=A[j];
      A[j]:=A[j-1];
      A[j-1]:=t;
      j:=j-1;
     end;

    ✍ Решение:
     

    • В задании используется цикл while — с предусловием. Такой цикл выполняется пока условие истинно.
    • В условии цикла сумма каждого элемента массива с предыдущим, начиная с девятого (j=9), сравнивается с числом 4: если сумма элементов больше 4 то цикл выполняется.
    • Для первой итерации цикла имеем:
      while A[9] + A[8] > 4 do
      ...
      
    • Как только встретится сумма элементов, которая меньше либо равна четырем, цикл прекратит свою работу.
    • В цикле происходит обмен значений двух элементов массива, сумма которых рассматривается в условии цикла (через переменную t). Кроме того, происходит уменьшение счетчика цикла, чтобы осуществился переход к следующему элементу массива (j:=j-1).
    • Таким образом, надо узнать сумму элементов, начиная с элементов A[9]+A[8], затем A[8]+A[7] и т.д.:
    • A[9]+A[8] = 3+6 > 4 - да, значит обмен: A[9]=6 A[8]=3, j=8
      A[8]+A[7] = 3+9 > 4 - да, значит обмен: A[8]=9 A[7]=3, j=7
      A[7]+A[6] = 3+8 > 4 - да, значит обмен: A[7]=8 A[6]=3, j=6
      A[6]+A[5] = 3+1 > 4 - нет, цикл прекращает свою работу
      
    • Последнее значение счетчика j было равно 6.

    Результат: 6


    6_21: Разбор досрочного ЕГЭ по информатике 2019:

    В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов равны 20, 19, 33, 21, 42, 13, 12, 24, 4, 22, 6, 10, т.е. A[0]=20, A[1]=19 и т.д.

    Определите значение переменной s после выполнения следующего фрагмента этой программы:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      n := 1;
      s := 1;
      for i := 1 to 11 do
        if A[i] < A[n] then begin
          s := s * i;
          t := A[i];
          A[i] := A[n];
          A[n] := t;
        end;

    ✍ Решение:
     

    Смотрите подробный разбор на видео:
    📹 здесь


    6_22:

    В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 21, 16, 7, 12, 18, 3, 8, 13, 11, 17, т.е. A[0]=21, A[1]=16 и т.д.

    Определите значение переменной s после выполнения следующего фрагмента этой программы:
    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    s := 0;
    n := 4;
    for i:=0 to 9 do
      if A[i] <= A[n] then begin
        s := s + A[i];
        t := A[i];
        A[i] := A[n];
        A[n] := t;
        n := i mod 3;
      end;
    writeln(s);
    Бейсик:

    s=0: n=4
    FOR k=1 to 10  
        IF A(i) <= A(n) THEN
          s = s + A(i)
          t = A(i)
          A(i) = A(n)
          A(n) = t
          n = i MOD 3
        END IF
    NEXT k
    PRINT S
    END
    Python:

    s = 0
    n = 4
    for i in range(10):
      if A[i] <= A[n]:
        s = s + A[i]
        t = A[i]
        A[i] = A[n]
        A[n] = t
        n = i % 3
    print(s)
    С++:

    s = 0;
    n = 4;
    for (i=0; i<=9; i++)
      if (A[i]<=A[n])
        {
        s+=A[i];
        t=A[i];
        A[i]=A[n];
        A[n]=t;
        n=i%3;
        }
    cout << s;

      
    Типовые задания для тренировки

    ✍ Решение:

    • Рассмотрим алгоритм. Построим трассировочную таблицу, каждая строка которой — очередная итерация цикла.
    • i <= ? 0 1 2 3 4 5 6 7 8 9 s n
      21 16 7 12 18 3 8 13 11 17 0 4
      0 21<=18
      нет
      21 18
      1 16<=18
      да
      16
      18
      18
      16
      16 1 mod 3 = 1
      2 7<=18
      да
      18
      7
      7
      18
      16+7=23 2 mod 3 = 2
      3 12<=18
      да
      18
      12
      12
      18
      23+12=35 3 mod 3 = 0
      4 16<=21
      да
      21
      16
      16
      21
      35+16=51 4 mod 3 = 1
      5 3<=7
      да
      7
      3
      3
      7
      51+3=54 5 mod 3 = 2
      6 8<=12
      да
      12
      8
      8
      12
      54+8=62 6 mod 3 = 0
      7 13<=16
      да
      16
      13
      13
      16
      62+13=75 7 mod 3 = 1
      8 нет 3 11
      9 нет 13 17
    • При последнем изменении s стало равным 75.

    Ответ: 75

    📹 здесь


    6_23:

    В результате выполнения программы напечатано число 6.

      
    Какое наибольшее значение может иметь переменная S после выполнения программы?

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    var k, m, S, N: integer; 
        Dat: array[1..100] of integer; 
    begin 
      N:= 5; 
      m := 0; S := 0; 
      for k := 1 to N do      
        readln(Dat[k]); 
      for k := 1 to N do begin
        S := S + 2 * Dat[k];
        if  Dat[k]>m then
          begin
            m := Dat[k]
          end
      end; 
      writeln(m) 
    end.
    Бейсик:

    N=5
    m=0
    S=0
    FOR k=1 to N
       INPUT Dat(k) 
    NEXT k 
    FOR k=1 to N
        S = S + 2 * Dat(k)
        IF Dat(k) > m THEN
          m = Dat(k)
        END IF
    NEXT k
    PRINT m
    END
    Python:

    Dat = [0]*100
    N = 5
    m = S = 0
    for k in range(0, N):
        Dat[k] = int(input())
    for k in range(0, N):
        S += 2 * Dat[k]
        if Dat[k] > m:
            m = Dat[k]
    print(m)
    С++:

    #include <iostream> 
    using namespace std; 
     
    int main() {     
    int Dat[100];
    int N = 5;
    int k, m = 0, S = 0;
    for(k=0; k<N; k++)
       cin >> Dat[k];
    for(k=0; k<N; k++) {
       S += 2 * Dat[k];
       if (Dat[k]>m)
           m = Dat[k];
       }
    cout << m;
    return 0;
    }

    ✍ Решение:

      Рассмотрим алгоритм.

    • В конце программы видим, что на экран выводится значение переменной m. То есть после выполнения всего алгоритма m станет равным 5. Запомним это.
    • Изначально переменная N равна значению 5:
    • В первом цикле формируются значения для пяти элементов массива:
    •   for k := 1 to N do      
          readln(Dat[k]);
    • Во втором цикле видим условие, в котором каждый из пяти элементов массива будет сравниваться с m. Если элемент больше m, то в m сохранится значение этого элемента:
    •    if  Dat[k]>m then
            begin
              m := Dat[k]
            end
    • Исходя из первого нашего пункта имеем, что наибольшее значение из пяти элементов массива — это значение 6. Так как в результате m = 6.
    • В цикле помимо условия находится сумматор, который суммирует 2 * Dat[k]. В задании необходимо определить наибольшее значение S, значит, выгодно, чтобы элементы массивов имели максимальное возможное значение.
    • Предположим, что все пять элементов массива равны 6. Тогда m после прохождения цикла останется равной 6. То есть результат будет верным.
    • Посчитаем S в цикле:
    • S := 0 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 = 12 * 5 = 60

    Ответ: 60

    Смотрите видеоразбор задания:
    📹 здесь


    Автор материалов — Лада Борисовна Есакова.

    Массив – это тип или структура данных в виде набора компонентов (элементов массива), расположенных в памяти непосредственно друг за другом. При этом доступ к отдельным элементам массива осуществляется с помощью индексации, то есть ссылки на массив с указанием номера (индекса) нужного элемента. Размерность массива — это количество индексов, необходимое для однозначного доступа к элементу массива

    Одномерный массив представляет собой пронумерованную последовательность элементов одного и того же типа, имеющих общее имя. Для обращения к элементу массива используют имя и порядковый номер элемента в квадратных скобках: A[i].

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

    Одномерные массивы

    Пример 1.

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

     Бей­сик

    Пас­каль

    FOR i=0 TO 10

    A(i)=i-1

    NEXT i

    FOR i=1 TO 10

    A(i-1)=A(i)

    NEXT i

    A(10)=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;

    Си

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

    for (i = 0; i <= 10; i++)

    A[i]=i-1;

    for (i = 1; i <= 10; i++)

    A[i-1]=A[i];

    A[10]=10;

    нц для i от 0 до 10

    A[i]:=i-1

    кц

    нц для i от 1 до 10

    A[i-1]:=A[i]

    кц

    A[10]:=10

    Как из­ме­нят­ся эле­мен­ты этого мас­си­ва после вы­пол­не­ния фраг­мен­та про­грам­мы?

    1) все эле­мен­ты, кроме по­след­не­го, ока­жут­ся равны между собой

    2) все эле­мен­ты ока­жут­ся равны своим ин­дек­сам

    3) все эле­мен­ты, кроме по­след­не­го, будут сдви­ну­ты на один эле­мент впра­во

    4) все эле­мен­ты, кроме по­след­не­го, умень­шат­ся на еди­ни­цу

    Решение:

    Выполним последовательно все действия, описанные в программе. После первого цикла массив примет вид:

    Индекс 0 1 2 3 4 5 6 7 8 9 10
    Значение -1 0 1 2 3 4 5 6 7 8 9

    Вто­рой цикл сдви­га­ет эле­мен­ты массива на один влево:

    i=1, A[0]:=A[1] = 0

    i=2, A[1]:=A[2] = 1,

    i=10, A[9]:=A[10] = 9.

    А затем десятому элементу присваивается значение 10: A[10]:=10:

     Индекс 0 1 2 3 4 5 6 7 8 9 10
    Значение 0 1 2 3 4 5 6 7 8 9 10

    Пра­виль­ный ответ ука­зан под но­ме­ром 2.

    Ответ: 2

    Пример 2.

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

    соответственно, т.е. A[0] = 4, A[1] = 7 и т.д.

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

    Решение:

    Если i-й эле­мент мас­си­ва мень­ше нулевого, то про­грам­ма ме­ня­ет их ме­ста­ми и уве­ли­чи­ва­ет зна­че­ние пе­ре­мен­ной c на 1.

     Индекс 0 1 2 3 4 5 6 7 8 9
    Значение 4 7 3 8 5 0 1 2 9 6

    Первый раз условие «i-й эле­мент мас­си­ва мень­ше нулевого» выполнится при i=2. Массив примет вид:

     Индекс 0 1 2 3 4 5 6 7 8 9
    Значение 3 7 4 8 5 0 1 2 9 6

    А переменная с примет значение 1.

    Второй раз условие «i-й эле­мент мас­си­ва мень­ше нулевого» выполнится при i=5. Массив примет вид:

     Индекс 0 1 2 3 4 5 6 7 8 9
    Значение 0 7 4 8 5 3 1 2 9 6

    А переменная с примет значение 2.

    Больше условие «i-й эле­мент мас­си­ва мень­ше нулевого» не выполнится ни разу. Значит, с = 2.

    Ответ: 2

    Пример 3.

    В про­грам­ме опи­са­ны од­но­мер­ный це­ло­чис­лен­ный мас­сив А с ин­дек­са­ми от 0 до 10 и це­ло­чис­лен­ные пе­ре­мен­ные i и t. Ниже пред­став­лен фраг­мент этой про­грам­мы, за­пи­сан­ный на раз­ных язы­ках про­грам­ми­ро­ва­ния.

     Бей­сик

    Пас­каль

    FOR i = 0 TO 10

    A(i) = i

    NEXT i

    t = A(10)

    FOR i = 9 TO 0 STEP -1

    A(i+1) = A(i)

    NEXT i

    A(0) = t

    for i := 0 to 10 do

    A[i] := i;

    t := A[10]

    for i := 9 downto 0 do

    A[i+1] := A[i];

    A[0] := t;

    Си

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

    for (i = 0; i <= 10; i++)

    A[i] = i;

    t = A[10];

    for (i = 9; i >= 0; i—)

    A[i+1] = A[i];

    A[0] = t;

    нц для i от 0 до 10

    A[i] := i

    кц

    t := A[10]

    нц для i от 9 до 0 шаг -1

    A[i+1] := A[i]

    кц

    A[0] := t

    Чему ока­жут­ся равны эле­мен­ты этого мас­си­ва после вы­пол­не­ния фраг­мен­та про­грам­мы?

    1) 10 0 0 0 0 0 0 0 0 0 0

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

    3) 10 10 10 10 10 10 10 10 10 10 10

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

    Решение:

    Выполним последовательно все действия, описанные в программе. После первого цикла массив примет вид:

    Индекс 0 1 2 3 4 5 6 7 8 9 10
    Значение 0 1 2 3 4 5 6 7 8 9 10

    Вто­рой цикл работает в обратном порядке, от 9 до 0:

    i = 9: A[10] := A[9] = 9,

    i = 8: A[9] := A[8] = 8,

    i = 1: A[2] := A[1] = 1

    i = 0: A[1] := A[0]  =  0,

    А затем нулевому элементу присваивается значение 10 (A[0] := 10):

     Индекс 0 1 2 3 4 5 6 7 8 9 10
    Значение 10 0 1 2 3 4 5 6 7 8 9

    Пра­виль­ный ответ ука­зан под но­ме­ром 4.

    Ответ: 4

    Двумерные массивы

    Пример 4.

    Значения элементов двумерного массива A размером 5×5 задаются с помощью вложенного цикла в представленном фрагменте программы:

    for i:=1 tо 5 do

      for j:=1 tо 5 do begin

        A[i,j] := i*j;

      end;

    Сколько элементов массива будут иметь значения больше 10?

    Решение:

    Выполним последовательно все действия, описанные в программе:

    i=1 (Заполняем первую строку матрицы)

    j=1, A[1,1]:= 1*1 =1

    j=2, A[1,2]:= 1*2 =2

    j=3, A[1,3]:= 1*3 =3

    j=4, A[1,4]:= 1*4 =4

    j=5, A[1,5]:= 1*5 =5

      1 2 3 4 5
    1 1 2 3 4 5
    2          
    3          
    4          
    5          

    i=2 (Заполняем вторую строку матрицы)

    j=1, A[2,1]:= 2*1 =2

    j=2, A[2,2]:= 2*2 =4

    j=3, A[2,3]:= 2*3 =6

    j=4, A[2,4]:= 2*4 =8

    j=5, A[2,5]:= 2*5 =10

      1 2 3 4 5
    1 1 2 3 4 5
    2 2 4 5 8 10
    3          
    4          
    5          

    …..

    i=5 (Заполняем пятую строку матрицы)

    j=1, A[5,1]:= 5*1 =5

    j=2, A[5,2]:= 5*2 =10

    j=3, A[5,3]:= 5*3 =15

    j=4, A[5,4]:= 5*4 =20

    j=5, A[5,5]:= 5*5 =25

    Значение элементов матрицы равно произведению номеров его строки и столбца

      1 2 3 4 5
    1 1 2 3 4 5
    2 2 4 5 8 10
    3 3 6 9 12 15
    4 4 8 12 16 20
    5 5 10 15 20 25

    Значение больше 10 имеют 8 элементов матрицы.

    Ответ:8

    Благодарим за то, что пользуйтесь нашими материалами.
    Информация на странице «Задача №19. Работа с массивами.» подготовлена нашими редакторами специально, чтобы помочь вам в освоении предмета и подготовке к ЕГЭ и ОГЭ.
    Чтобы успешно сдать нужные и поступить в высшее учебное заведение или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
    Также вы можете воспользоваться другими статьями из данного раздела.

    Публикация обновлена:
    08.03.2023

    Матрица — это двумерный массив, каждый элемент которого имеет два индекса: номер строки и номер столбца, поэтому для работы с элементами матрицы необходимо использовать два цикла. Если значениями параметра первого цикла будут номера строк матрицы, то значениями параметрами второго — столбцы (или наоборот). Обработка матрицы заключается в том, что вначале поочередно рассматриваются элементы первой строки (столбца), затем второй и т.д. до последней.

    Перед тем, как приступить к изучению алгоритмов обработки матриц, давайте рассмотрим, как описываются матрицы в C++. Двумерный массив можно объявить так:

    тип имя_переменной [n] [m];

    Здесь тип определяет тип элементов массива, имя_переменной — имя матрицы, n — количество строк, m — количество столбцов. Строки нумеруются от 0 до n-1, столбцы от 0 до m-1.

    Например int h[10] [15];

    Выше матрица целых чисел h, состоящая из 10 строк и 15 столбцов (строки нумеруются от 0 до 9, столбцы от 0 до 14).

    Для обращения к элементу матрицы необходимо указать ее имя и в квадратных скобках номер строки, затем номер столбца. Например, h[2] [5].

    Ввод-вывод матриц

    Матрицы, как и одномерные массивы, нужно вводить (выводить) поэлементно. Блок-схема ввода элементов матрицы A[n] [m] изображена ниже:

    Ввод элементов матрицы

    Код программы на Visual C++ вода-вывода матрицы будет иметь примерно такой вид:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

    #include «stdafx.h»
    #include <iostream>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, «RUS»);
    int i,j,N,M,a[20][20];
    cout<<«N=»; //ввод количества строк
    cin>>N;
    cout<<«M=»; //ввод количества столбцов
    cin>>M;
    cout<<«Input matrix A n«;
    //цикл по переменной i, в которой перебираем строки матрицы
    for (i=0; i<N; i++)
    //цикл по переменной j, в котором перебираем элементы внутри строки
    for (j=0; j<M; j++)
    cin>>a[i][j]; //ввод очередного элемента матрицы
    cout<<«matrix A n«;
    for (i=0; i<N; i++)
    {
    //цикл по переменной i, в котором перебираем строки матрицы
    for (j=0; j<M; j++)
    cout<<a[i][j]<<«t«; //вывод очередного элемента матрицы
    cout<<endl; //переход на новую строку после вывода всех элементов строки
    }
    system(«pause»);
    return 0;
    }

    Теперь, давайте рассмотрим некоторые свойства матриц:

    • если номер строки элемента совпадает с номером столбца  (i = j), это означает , что элемент лежит на главной диагонали матрицы;
    • если номер строки превышает номер столбца (i > j), то элемент находиться ниже главной диагонали;
    • если номер столбца больше номера строки (i < j), то элемент находиться выше главной диагонали;
    • элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству i+j+1=n;
    • неравенство i+j+1<n характерно для элемента, находящегося выше побочной диагонали;
    • соответственно, элементу, лежащему ниже побочной диагонали, соответствует выражение i+j+1>n.

    Примеры задач обработки матриц

    Задача 1

    Найти сумму элементов матрицы, лежащих выше главной диагонали

    def

    Алгоритм решения данной задачи можно построить следующим образом: обнулить ячейку для накапливания суммы (переменная S). Затем с помощью двух циклов просмотреть каждый элемент матрицы, суммировать элементы при условии, что элемент находиться выше главной диагонали. Текст решения задачи:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    #include «stdafx.h»
    #include <iostream>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, «RUS»);
    int S, i, j, N, M, a[20][20];
    cout<<«N=»; cin>>N;
    cout<<«M=»; cin>>M;
    cout<<«Введите матрицу А n«;
    for (i=0; i<N; i++)
    for (j=0; j<M; j++)
    cin>>a[i][j];
    for (S=i=0; i<N; i++)
    for (j=0; j<M; j++)
    //если элемент лежит выше главной диагонали, то наращиваем сумму
    if (j>i) S+=a[i][j];
    cout<<«S=»<<S<<endl;
    system(«pause»);
    return 0;
    }

    Задача 2

    Проверить, является ли заданная квадратная матрица единичной. Единичной называют матрицу, у которой элементы главной диагонали — единицы, а все остальные — нули. Например:

    Единицы на главной диагонали

    Решать задачу будем так. Предположим, что матрица единичная и попытаемся доказать обратное. Если окажется, что хотя бы один диагональный элемент не равен единице или любой из элементов вне диагонали не равен нулю, то матрица единичной не является. Воспользовавшись логическими операциями языка C++, все эти условия можно соединить в одно и составить программу:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    #include «stdafx.h»
    #include <iostream>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, «RUS»);
    int pr, i, j, N, a[20][20];
    cout<<«N=»; cin>>N;
    cout<<«Введите матрицу А n«;
    for (i=0; i<N; i++)
    for (j=0; j<N; j++)
    cin>>a[i][j];
    //предположим, что матрица единичная, и присвоем переменной pr значение 1
    //если значение этой переменной при выходе из цикла не измениться,
    //это будет означать, что матрица действительно единичная
    for (pr=1, i=0; i<N; i++)
    for (j=0; j<N; j++)
    if (((i==j) && (a[i][j]!=1)) || ((i!=j) && (a[i][j]!=0)))
    //если элемент лежит на главной диагонали и не равен единице или
    //элемент лежит вне главной диагонали и не равен нулю, то
    {
    //переменной pr присвоить значение 0, это будет означать, что
    //матрица единичной не является, и выйти из цикла.
    pr=0;
    break;
    }
    //проверка значения переменной pr и вывод соответствующего сообщения
    if (pr) cout<<«Single matrix»<<endl;
    else cout<<«No single matrix»<<endl;
    system(«pause»);
    return 0;
    }

    Задача 3

    Преобразовать исходную матрицу так, чтобы нулевой элемент каждый строки был заменен среднем арифметическим элементом этой строки.

    Для решения задачи необходимо найти в каждой строке сумму элементов, которую разделить на их количество. Полученный результат записать в нулевой элемент соответствующей строки.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    #include «stdafx.h»
    #include <iostream>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, «RUS»);
    int i, j, N, M;
    double S, a[20][20];
    cout<<«N=»; cin>>N;
    cout<<«M=»; cin>>M;
    cout<<«Введите матрицу А n«;
    for (i=0; i<N; i++)
    for (j=0; j<M; j++)
    cin>>a[i][j];
    for (i=0; i<N; a[i][0]=S/M, i++)
    //цикл по i завершается записью среднего значения в нулевой элемент
    //строки и наращиванием i
    for (S=j=0; j<M; j++)
    //вычисление суммы жлементов строки
    S+=a[i][j];
    cout<<«выход матрицы A»<<endl;
    for (i=0; i<N; cout<<endl, i++)
    for (j=0; j<M; j++)
    cout<<a[i][j]<<endl;
    system(«pause»);
    return 0;
    }

    11.05.2013

    В файле содержится вся необходимая теория для подготовки к ЕГЭ по информатике для задания A12.

    Изучив предложенный материал, вы обретёте знания и навык для решения этого типа заданий A12.

    СКАЧАТЬ A12 в формате DOC

    Сохранить ссылку:

    Комментарии (0)
    Добавить комментарий

    Добавить комментарий

    Комментарии без регистрации. Несодержательные сообщения удаляются.

    Имя (обязательное)

    E-Mail

    Подписаться на уведомления о новых комментариях

    Отправить

    Понравилась статья? Поделить с друзьями:

    Новое и интересное на сайте:

  • Матренин двор решу егэ литература
  • Матренин двор пример для сочинения
  • Матренин двор праведник сочинение
  • Матренин двор задания егэ литература
  • Матренин двор аргументы к сочинению егэ

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии