Решу егэ блок схемы

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

1

Задания Д25 C2 № 9209

Дан массив, содержащий неотрицательные целые числа. Если сумма всех элементов массива чётная, нужно вывести количество чётных (по значению) элементов массива, если нечётная – количество нечётных.

Например, для массива из 6 элементов, равных соответственно 2, 6, 12, 17, 3, 8, ответом будет 4 – количество чётных элементов, так как общая сумма всех элементов чётна.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже.

Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

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

CONST N=2000

DIM A(N) AS INTEGER

DIM I, K AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

END

const

N=2000;

var

a: array [1..N] of integer;

i, k: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

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

алг

нач

    цел N=2000 | Изменять значение
этой переменной нельзя

    целтаб a[1:N]

    цел i, k

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

        ввод a[i]

    кц

    …

кон

// допускается также использовать

// целочисленные переменные i, k

a = []

N=2000 //менять значение N нельзя

for i in range(0, N):

    a.append(int(input()))

Си++

#include <iostream>

using namespace std;

#define N 2000

int main(){

    int a[N];

    int i, k;

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

        cin >> a[i];

    …

    return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах.

Загрузка решений доступна для зарегистрировавшихся пользователей


2

Задания Д25 C2 № 9317

Дан массив, содержащий неотрицательные целые числа. Если сумма всех элементов массива чётная, нужно вывести количество нечётных (по значению) элементов массива, если нечётная – количество чётных.

Например, для массива из 6 элементов, равных соответственно 2, 6, 12, 17, 3, 8, ответом будет 2 – количество нечётных элементов, так как общая сумма всех элементов чётна.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

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

CONST N=2000

DIM A(N) AS INTEGER

DIM I, K AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

END

const

N=2000;

var

a: array [1..N] of integer;

i, k: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

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

алг

нач

    цел N=2000 | Изменять значение
этой переменной нельзя

    целтаб a[1:N]

    цел i, k

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

        ввод a[i]

    кц

    …

кон

# допускается также использовать

# целочисленные переменные i, k

a = []

n=2000 #менять значение n нельзя

for i in range(0, n):

    a.append(int(input()))

Си++

#include <iostream>

using namespace std;

#define N 2000

int main(){

    int a[N];

    int i, k;

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

        cin >> a[i];

    …

    return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах.

Загрузка решений доступна для зарегистрировавшихся пользователей


3

Задания Д25 C2 № 9811

Дан массив, содержащий 2015 неотрицательных целых чисел. Ямой называется не крайний элемент массива, который меньше обоих своих соседей. Необходимо найти в массиве самую глубокую яму, то есть яму, значение которой минимально. Если в массиве нет ни одной ямы, ответ считается равным 0.

Например, в массиве из шести элементов, равных соответственно 4, 9, 2, 17, 3, 8, есть две ямы – 2 и 3, самая глубокая яма – 2.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

Бейсик Python

CONST N=2015

DIM A(N) AS INTEGER

DIM I, J, K AS INTEGER

FOR I = 1 TO N

   INPUT A(I)

NEXT I

END

//допускается также использо-

// вание целочисленных

// переменных j, k

a = []

n = 2015 // менять значение n

нельзя

for i in range(0, n):

a.append(int(input()))

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

const

N=2015;

var

a: array [1..N] of integer;

i, j, k: integer;

begin

for i:=1 to N do

readln(a[i]);

end.

алг

нач

цел N=2015| Изменять значение этой переменной нельзя

целтаб a[1:N]

цел i, j, k

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

ввод a[i]

кц

кон

Си++

#include <iostream>

using namespace std;

#define N 2015

int main(){

int a[N];

int i, j, k;

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

cin >> a[i];

return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Загрузка решений доступна для зарегистрировавшихся пользователей


4

Задания Д25 C2 № 2914

Опишите на русском языке или на одном из языков программирования алгоритм вычисления разности между средним арифметическим максимального и минимального значений элементов заданного целочисленного массива из 30 элементов и средним арифметическим всех элементов этого массива.

Исходные данные объявлены так, как показано ниже.

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

N=30

DIM A(N) AS INTEGER

DIM I, MIN, MAX, SUM AS INTEGER

DIM SRED1,SRED2 AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

uses crt;

const n=30;

type massiv=array[1..n] of integer;

var a:massiv;

min,max,i,sum:integer;

sred1,sred2:real;

Begin

for i:=1 to n do

begin

write(‘a[‘,i,’]= ‘);readln(a[i]);

end;

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int min,max,i,sum;

float sred1,sred2;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел min,max,i,sum

вещ sred1,sred2

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

ввод a[i]

кц

кон

Русский (естественный) язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные min,max,i,sum.

Объявляем вещественную переменную sred1,sred2.

В цикле от 1 до 30 вводим элементы

массива A с 1-го по 30-й.

Python

# допускается также

# использовать

# целочисленные переменные min,max,i,sum

# и вещественные переменные sred1,sred2

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

Загрузка решений доступна для зарегистрировавшихся пользователей


5

Задания Д25 C2 № 2909

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

Исходные данные объявлены так, как показано ниже.

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

N=30

DIM A(N) AS INTEGER

DIM I, S AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, s: integer;

begin

for i:=1 to N do readln(a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int i, s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, s

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

ввод a[i]

кц

кон

Русский (естественный) язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, S.

В цикле от 1 до 30 вводим элементы

массива A с 1-го по 30-й.

Python

# допускается также

# использовать

# целочисленную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

Загрузка решений доступна для зарегистрировавшихся пользователей


6

Задания Д25 C2 № 2901

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Русский (естественный) язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы

массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

В качестве ответа необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Загрузка решений доступна для зарегистрировавшихся пользователей


7

Задания Д25 C2 № 2921

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков  программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

end.

Си++ Естественный язык

#include <iostream>

using namespace std;

#define N 30

int main(void)

{int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учетом синтаксиса и особенностей используемого вами языка программирования.

Загрузка решений доступна для зарегистрировавшихся пользователей


8

Задания Д25 C2 № 2925

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от -1000 до 1000. Опишите на русском или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое тех элементов массива, которые по своему значению меньше последнего элемента этого массива. Гарантируется, что в исходном массиве есть хотя бы один такой элемент. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Русский (естественный) язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы

массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать переменные, аналогичные переменным, используемые в алгоритме, записанном на естественном языке, с учетом синтаксиса и особенностей используемого вами языка программирования.

Загрузка решений доступна для зарегистрировавшихся пользователей


9

Задания Д25 C2 № 2912

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Русский (естественный) язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы

массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок─схемы. В этом случае вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учетом синтаксиса и особенностей используемого вами языка программирования.

Загрузка решений доступна для зарегистрировавшихся пользователей


10

Задания Д25 C2 № 3622

Дан целочисленный массив из 40 элементов. Элементы массива могут принимать произвольные значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит сумму элементов самой длинной возрастающей последовательности подряд идущих элементов массива.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N = 40

DIM A(N) AS INTEGER

DIM I, L, LMAX, S, SMAX AS INTEGER

FOR I = 1 TO N

INPUT A (I)

NEXT I

END

const

N = 40;

var

a: array [1..N] of integer;

i, l, lmax, s, smax:

integer;

begin

for i : = 1 to N do

readln(a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 40

int main(void)

{int a [N]; int

i, l, lmax, s, smax;

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

cin >> a[i];

}

алг

нач

цел N = 40

целтаб а[1:N]

цел i, L, Lmax, S, Smax

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

ввод a[i]

кц

кон

Естественный язык

Объявляем массив А из 40 элементов.

Объявляем целочисленные переменные I, L, Lmax, S, Smax.

В цикле от 1 до 40 вводим элементы массива А с 1-го по 40-й.

Python

# допускается также

# использовать четыре

# целочисленные переменные l, lmax, s, smax

a = []

n = 40

for i in range(0, n):

a.append(int(input()))

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка програм-мирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Загрузка решений доступна для зарегистрировавшихся пользователей


11

Задания Д25 C2 № 3638

Опишите на русском языке или одном из языков программирования алгоритм подсчета среднего значения отрицательных элементов в целочисленном массиве из 30 элементов в предположении, что в нем есть хотя бы один отрицательный элемент.

Загрузка решений доступна для зарегистрировавшихся пользователей


12

Задания Д25 C2 № 3790

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Русский (естественный) язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы

массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

В качестве ответа необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Загрузка решений доступна для зарегистрировавшихся пользователей


13

Задания Д25 C2 № 5289

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Элемент массива называется хорошим, если это двузначное число, причём цифра в разряде десятков больше, чем цифра в разряде единиц. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести сумму всех хороших элементов массива.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, J, S AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, j, s: integer;

begin

for i:=l to N do

readln(a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(){

int a[N];

int i, j, s;

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

cin >> a[i];

алг

нач

цел N=30

целтаб а[1:N]

цел i, j, s

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

ввод а[i]

кц

кон

Python

# допускается также

# использовать две

# целочисленные переменные j, s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


14

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от −20 до 20  — сведения о температуре за каждый день ноября. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести среднюю температуру среди дней, когда были заморозки (температура опускалась ниже 0 °C). Гарантируется, что хотя бы в один день ноября была отрицательная температура.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do read (a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Естественный язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

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

программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.

Загрузка решений доступна для зарегистрировавшихся пользователей


15

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 1 до 5 и содержат годовые оценки по информатике учащихся выпускного класса. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести средний балл среди «хорошистов» и «отличников» (тех, кто получил итоговую отметку «4» или «5»). Гарантируется, что в классе есть хотя бы один «хорошист» или «отличник». Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do read (a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Естественный язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

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

программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.

Загрузка решений доступна для зарегистрировавшихся пользователей


16

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 150 до 200  — рост учащихся выпускного класса. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести средний рост среди учащихся класса, входящих в школьную баскетбольную команду (в команду входят все учащиеся, чей рост больше 180 сантиметров). Гарантируется, что в классе учится хотя бы один член баскетбольной команды. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do read (a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Естественный язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

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

программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.

Загрузка решений доступна для зарегистрировавшихся пользователей


17

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 100 и содержат итоговые баллы участников олимпиады по информатике. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет подсчитать и вывести средний балл среди участников, ставших призёрами олимпиады (призёрами олимпиады стали школьники, набравшие более 50 баллов). Гарантируется, что хотя бы один участник олимпиады стал её призёром. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

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

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

a: array [1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do read (a[i]);

end.

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

#include <iostream>

using namespace std;

#define N 30

int main(void)

{int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

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

ввод a[i]

кц

кон

Естественный язык

Объявляем массив A из 30 элементов.

Объявляем целочисленные переменные I, X, Y.

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

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

программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае Вы должны использовать переменные, аналогичные переменным, используемым в алгоритме, записанном на естественном языке, с учётом синтаксиса и особенностей используемого Вами языка программирования.

Загрузка решений доступна для зарегистрировавшихся пользователей


18

Задания Д25 C2 № 6200

Дан массив, содержащий 2014 неотрицательных целых чисел, не превышающих 10 000. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести сумму всех содержащихся в массиве трёхзначных чисел, десятичная запись которых оканчивается на 9, но не на 99. Если подходящих чисел в массиве нет, программа должна вывести число –1. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

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

const N=2014;

var a : array [1..N] of integer;

i, j, s: integer;

begin

for i:=1 to N do

readln(a[i]);

end.

N=2014

DIM A(N) AS INTEGER

DIM I, J, S AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

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

#include <iostream>

using namespace std;

#define N 2014

int main()

{

int a[N];

int i, j, s;

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

cin >> a[i];

}

алг

нач

цел N=2014

целтаб a[1:N]

цел i, j, s

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

ввод a[i]

кц

кон

Python

# допускается также

# использовать две

# целочисленные переменные j, s

a = []

n = 2014

for i in range(0, n):

a.append(int(input()))

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


19

Задания Д25 C2 № 10301

Дан массив, содержащий 2016 неотрицательных целых чисел. Необходимо найти в этом массиве количество таких элементов, которые равны среднему арифметическому двух элементов, расположенных сразу после него. Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, есть три таких элемента, они расположены на первом, втором и четвёртом месте и равны 2, 3 и 5.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.

Бейсик Python

CONST N=2016

DIM A(N) AS INTEGER

DIM I, K AS INTEGER

FOR I = 1 TO N

  INPUT A(I)

NEXT I

END

# допускается также использо-

# вание целочисленной

# переменной k

a = []

N = 2016

for i in range(0, N):

  a.append(int(input()))

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

const

  N=2016;

var

  a: array [1..N] of integer;

  i, k: integer;

begin

  for i:=1 to N do

    readln(a[i]);

  …

end.

алг

нач

  цел N=2016

  целтаб a[1:N]

  цел i, k

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

    ввод a[i]

  кц

кон

Си++

#include <iostream>

using namespace std;

#define N 2016

int main(){

  int a[N];

  int i, k;

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

    cin >> a[i];

  …

  return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


20

Задания Д25 C2 № 10328

Дан массив, содержащий 2016 неотрицательных целых чисел. Необходимо найти в этом массиве количество таких элементов, которые равны среднему арифметическому двух элементов, расположенных непосредственно перед ним. Например, в массиве из 6 элементов, равных соответственно 4, 6, 5, 1, 3, 2, есть три таких элемента, они расположены на третьем, пятом и шестом месте и равны 5, 3 и 2.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.

Бейсик Python

CONST N=2016

DIM A(N) AS INTEGER

DIM I, K AS INTEGER

FOR I = 1 TO N

  INPUT A(I)

NEXT I

END

# допускается также использо-

# вание целочисленной

# переменной k

a = []

N = 2016

for i in range(0, N):

  a.append(int(input()))

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

const

  N=2016;

var

  a: array [1..N] of integer;

  i, k: integer;

begin

  for i:=1 to N do

    readln(a[i]);

  …

end.

алг

нач

  цел N=2016

  целтаб a[1:N]

  цел i, k

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

    ввод a[i]

  кц

кон

Си

#include <iostream>

using namespace std;

#define N 2016

int main(){

  int a[N];

  int i, k;

  for (i=0; i    cin >> a[i];

  …

  return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


21

Задания Д25 C2 № 10399

Дан массив, содержащий 2016 целых чисел. Необходимо найти и вывести сумму тех элементов этого массива, чётность которых совпадает с чётностью максимального элемента.

Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, максимальный элемент чётный (6), значит, ответом будет сумма чётных элементов этого массива 2 + 6 + 4 = 12.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.

Бейсик Python

CONST N=2016

DIM A(N) AS INTEGER

DIM I, M, S, P AS INTEGER

FOR I = 1 TO N

  INPUT A(I)

NEXT I

END

# допускается также использо-

# вание целочисленной

# переменной m, s, p

a = []

N = 2016

for i in range(0, N):

  a.append(int(input()))

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

const

  N=2016;

var

  a: array [1..N] of integer;

  i, m, s, p: integer;

begin

  for i:=1 to N do

    readln(a[i]);

  …

end.

алг

нач

  цел N=2016

  целтаб a[1:N]

  цел i, m, s, p

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

    ввод a[i]

  кц

кон

Си++

#include <iostream>

using namespace std;

#define N 2016

int main(){

  int a[N];

  int i, m, s, p;

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

    cin >> a[i];

  …

  return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


22

Задания Д25 C2 № 10426

Дан массив, содержащий 2016 целых чисел. Необходимо найти и вывести сумму тех элементов этого массива, чётность которых не совпадает с чётностью минимального элемента.

Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, минимальный элемент нечётный (1), значит, ответом будет сумма чётных элементов этого массива 2 + 6 + 4 = 12.

Если элементов нужной чётности в массиве нет, сумма считается равной нулю. Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.

Бейсик Python

CONST N=2016

DIM A(N) AS INTEGER

DIM I, M, S, P AS INTEGER

FOR I = 1 TO N

  INPUT A(I)

NEXT I

END

# допускается также использо-

# вание целочисленной

# переменной m, s, p

a = []

N = 2016

for i in range(0, N):

  a.append(int(input()))

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

const

  N=2016;

var

  a: array [1..N] of integer;

  i, m, s, p: integer;

begin

  for i:=1 to N do

    readln(a[i]);

  …

end.

алг

нач

  цел N=2016

  целтаб a[1:N]

  цел i, m, s, p

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

    ввод a[i]

  кц

кон

Си++

#include <iostream>

using namespace std;

#define N 2016

int main(){

  int a[N];

  int i, m, s, p;

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

    cin >> a[i];

  …

  return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


23

Задания Д25 C2 № 13636

Дан массив, содержащий 2017 положительных целых чисел, не превышающих 10000. Необходимо найти и вывести сумму таких элементов этого массива, шестнадцатеричная запись которых содержит ровно три знака, причём последний из них – буква от A до F. Например, для массива из 4 элементов, содержащего числа 522, 4095, 296, 205, ответ будет равен 4617: в шестнадцатеричной системе эти числа записываются как 20A, FFF, 128, CD; первые два подходят, в третьем – последняя цифра не записывается буквой, в четвёртом – меньше трёх знаков. Если таких чисел в массиве нет, сумма считается равной 0. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

Бейсик Python

CONST N=2017

DIM A(N) AS INTEGER

DIM I, M, K AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

# допускается также использо-

# вание целочисленных

# переменных m, k

a = []

N = 2017

for i in range(0, N):

    a.append(int(input()))

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

const

    N=2017;

var

    a: array [1..N] of integer;

    i, m, k: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

алг

нач

    цел N=2017

    целтаб a[1:N]

    цел i, m, k

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

        ввод a[i]

    кц

    …

кон

Си++

#include <iostream>

using namespace std;

#define N 2017

int main(){

    int a[N];

    int i, m, k;

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

        cin >> a[i];

    …

    return 0;

}

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

Загрузка решений доступна для зарегистрировавшихся пользователей


24

Дан массив, содержащий 2018 положительных целых чисел, не превышающих 30 000. Необходимо определить, сколько в этом массиве элементов, десятичная и восьмеричная запись которых содержит одинаковое количество цифр.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

Бейсик Python

CONST N=2018

DIM A(N) AS INTEGER

DIM B, I, K, L, M AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

# кроме уже указанных

# допускается использование

# целочисленных переменных

# k, b, l, m

a = []

N = 2018

for i in range(0, N):

    a.append(int(input()))

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

const

    N=2018;

var

    a: array [1..N] of integer;

    b, i, k, l, m: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

алг

нач

    цел N=2018

    целтаб a[1:N]

    цел b, i, k, l, m

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

        ввод a[i]

    кц

    …

кон

Си++

#include <iostream>

using namespace std;

const int N=2018;

int main(){

    int a[N];

    int b, i, k, l, m;

    for (i=0; i        cin >> a[i];

    …

    return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


25

Задания Д25 C2 № 14786

Дан массив, содержащий 2018 положительных целых чисел, не превышающих 30 000. Необходимо определить, сколько в этом массиве элементов, десятичная и шестнадцатеричная запись которых содержит одинаковое количество цифр.

Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже.

Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

Бейсик Python

CONST N=2018

DIM A(N) AS INTEGER

DIM B, I, K, L, M AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

# кроме уже указанных

# допускается использование

# целочисленных переменных

# k, b, l, m

a = []

N = 2018

for i in range(0, N):

    a.append(int(input()))

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

const

    N=2018;

var

    a: array [1..N] of integer;

    b, i, k, l, m: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

алг

нач

    цел N=2018

    целтаб a[1:N]

    цел b, i, k, l, m

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

        ввод a[i]

    кц

    …

кон

Си++

#include <iostream>

using namespace std;

const int N=2018;

int main(){

    int a[N];

    int b, i, k, l, m;

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

        cin >> a[i];

    …

    return 0;

}

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Загрузка решений доступна для зарегистрировавшихся пользователей


26

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит сумму элементов массива, меньших 200 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденной сумме. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов:

204

115

27

20

305

4

программа должна вывести следующий массив:

204

135

27

135

305

4

Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

Бейсик Python

CONST N AS INTEGER = 30

DIM A (1 TO N) AS LONG

DIM I, J, K AS LONG

FOR I = 1 TO N

     INPUT A(I)

NEXT I

END

# допускается также

# использовать две

# целочисленные

# переменные j, k

a = []

n = 30

for i in range(0, n):

     a.append(int(input()))

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

const n = 30;

var

    a: array [1..n] of longint;

     i, j, k: longint;

begin

    for i := 1 to n do

        readln(a[i]);

     …

end.

алг

нач

    цел N = 30

    целтаб а[1:N]

    цел i, j, k

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

        ввод a[i]

    кц

    …

кон

Си++

#include <iostream>

using namespace std;

const int n = 30;

int main() {

    int a[n];

    int i, j, k;

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

        std::cin >> a[i];

    …

     return 0;

}

качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).

Загрузка решений доступна для зарегистрировавшихся пользователей

Завершить тестирование, свериться с ответами, увидеть решения.

На уроке рассмотрено решение 25 задания ЕГЭ по информатике: дается подробное объяснение и разбор заданий демонстрационных вариантов и досрочных экзаменов

Содержание:

  • Объяснение задания 25 ЕГЭ по информатике
    • Алгоритмизация и программирование
  • Решение 25 заданий ЕГЭ по информатике
    • Делители числа
    • Простые числа
  • Задания прошлых лет для тренировки (до 2021)
    • Задачи с поэлементной обработкой массива
    • Задачи на обработку элементов массива с последующей заменой
    • Задачи на обработку пар элементов массива (два подряд идущих)
    • Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)
    • Задачи на поиск максимума, минимума элементов массива и другие
  • Решение 25 заданий ЕГЭ по информатике: более сложные задания

25-е задание: «Программная обработка целочисленной информации»

Уровень сложности

— высокий,

Требуется использование специализированного программного обеспечения

— да,

Максимальный балл

— 2,

Примерное время выполнения

— 20 минут.

  
Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки целочисленной информации

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

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

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

  • «в цикле происходит выход за границу массива;
  • не инициализируется или неверно инициализируется искомое значение;
  • исходный массив не изменяется;
  • изменяются не все требуемые элементы (например, только первый или последний из них);
  • отсутствует вывод ответа, или ответ выводится не полностью (например, только один элемент массива ввиду пропущенного цикла вывода элементов или операторных скобок);
  • используется переменная, не объявленная в разделе описания переменных;
  • не указано или неверно указано условие завершения цикла»
  • «Часто бывает, что увлекшись написанием решения, экзаменуемый совершает ошибки в простых ситуациях: организация ввода-вывода, описание и инициализация переменных, обработка массива (выход за границу) и т.д. Эти ошибки могут стоить Вам нескольких баллов, старайтесь их не допускать»

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

    Алгоритмизация и программирование

    Для решения задания требуется вспомнить темы:

    • Одномерные массивы.
    • Двумерные массивы.

    Решение 25 заданий ЕГЭ по информатике

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


    Делители числа

    25_7:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [126849; 126871], числа, имеющие ровно 4 различных делителя.
    Выведите эти четыре делителя для каждого найденного числа в порядке возрастания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      
      begin
        var divCount := 4;
        for var n := 126849 to 126871 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to n do
            if n mod d = 0 then begin
              divs.Add(d);      
              if divs.Count > divCount then break;
            end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      
      for n in range(126849,126871+1):
            divs = [] # чистим список делителей
            for d in range(1,n+1): #
              if n % d == 0:
                divs = divs + [d] # добавляем делитель в список
                if len(divs) > 4: break
            if len(divs) == 4:
              print(*divs)
      С++:

      ✎ Решение (оптимизированный вариант):

    • Будем использовать оптимизированный вариант программы, подходящий для «медленных» компьютеров. Для этого перебор делителей для числа n будем выполнять от 2 до √n, округлив его до ближайшего целого числа (не включая точный квадратный корень, если он существует):
    • вместо диапазона делителей [1; число]
      использовать диапазон [1; округл(√n)]
      
    • При переборе делителей будем определять: если делитель – это точный квадратный корень(n), то в список делителей добавлять будем только сам делитель, если нет – то добавляем пару делителей (делитель и n // делитель):
    • Пример:
      число 8 = 2 * 4
      Достаточно рассмотреть цикл от 2 до округл(√8) (=2)
      если 8 делится на 2 и 8/2 не равно 2, то делители: 2 и 4 (8/2)
      
      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
      
      begin
        var divCount := 4;
        for var n := 126849 to 126871 do
        begin
          var divs := new List<integer>;
          var d := 1;
          while d * d <= n do  // можно цикл for var d := 1 to round(sqrt(n)) do
          begin
            if n mod d = 0 then begin
              divs.Add(d);      
              if d * d <> n then 
                divs.Add(n div d);
              if divs.Count > divCount then break;
            end;
            d := d+1;
          end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
      # import math # для квадратного корня числа (sqrt)
      divCount = 4  # нужное количество делителей
      for n in range(126849,126871 + 1):
        divs = [] # чистим список делителей
        d = 1
        #  вместо while можно цикл for d in range(1,round(math.sqrt(n))):
        while d*d <= n: # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
            if d != n//d: # если делитель - не точный квадратный корень n
              divs.append(n//d)
            if len(divs) > divCount: break
          d+=1
        if len(divs) == divCount:
          divs.sort()
          print(divs)
      С++:

      ✎ Решение: Генерация списка делителей.
      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(126849, 126871+1):
        divs = [d for d in range(1, n+1) if n % d == 0] 
        if len(divs) == 4:
          print( *divs )
      С++:

    Ответ:

    1 3 42283 126849
    1 47 2699 126853
    1 5 25373 126865
    1 293 433 126869
    

    25_8:

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

    ✍ Решение:

      ✎ Решение (оптимизированный вариант):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      
      begin
        var divCount := 6;
        for var n := 164700 to 164752 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to round(sqrt(n)) do
            if n mod d = 0 then begin
              divs.Add(d);      
              if d * d <> n then 
                divs.Add(n div d);
              if divs.Count > divCount then break;
            end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      
      import math # для квадратного корня sqrt
      divCount = 6  # нужное количество делителей
      for n in range(164700, 164752 + 1):
        divs = [] # чистим список делителей
        for d in range(1,round(math.sqrt(n))): # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
            if d != n//d:
              divs.append(n//d)
            if len(divs) > divCount: break
        if len(divs) == divCount:
          divs.sort()
          print(divs)
      С++:

      ✎ Решение: Генерация списка делителей.
      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(164700, 164752+1):
          divs = [d for d in range(1, n+1) if n % d == 0] 
          if len(divs) == 6:
              print( *divs )
      С++:

    Ответ:

    1 2 4 41177 82354 164708
    1 3 9 18301 54903 164709
    1 2 4 41179 82358 164716
    1 2 4 41183 82366 164732
    

    25_9:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190230], числа, имеющие ровно 4 различных делителя.
    Выведите эти четыре делителя для каждого найденного числа в порядке убывания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      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 divs := new integer[4];
        for var n := 190201 to 190230 do
        begin
          var i := 0; // для индекса массива
          for var d := 1 to n do
          begin
            if n mod d = 0 then 
            begin
              if i < 4 then
                divs[i] := d;
              inc(i);
            end;
            if i > 4 then 
              break; 
          end;
          if i = 4 then begin
            println(divs.Reverse())
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      for n in range(190201,190230+1):
            divs = [] # чистим список делителей
            for d in range(1,n+1): #
              if n % d == 0:
                divs = divs + [d] # добавляем делитель в список
                if len(divs) > 4: break
            if len(divs) == 4:
              divs.reverse()
              print(*divs)
      С++:

      ✎ Решение (оптимизированный вариант):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      
      begin
        var divCount := 4;
        for var n := 190201 to 190230 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to round(sqrt(n)) do
            if n mod d = 0 then begin
              divs.Add(d);      
              if d * d <> n then 
                divs.Add(n div d);
              if divs.Count > divCount then break;
            end;
          if divs.Count = divCount then
          begin
            divs.Sort();
            divs.Reverse();
            Println(divs);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      
      import math # для квадратного корня sqrt
      divCount = 4  # нужное количество делителей
      for n in range(190201, 190230 + 1):
        divs = [] # чистим список делителей
        for d in range(1,round(math.sqrt(n))): # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
            if d != n//d:
              divs.append(n//d)
            if len(divs) > divCount: break
        if len(divs) == divCount:
          divs.sort()
          divs.reverse()
          print(divs)
      С++:

      ✎ Решение: Генерация списка делителей.
      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(190201, 190230+1):
          divs = [d for d in range(1, n+1) if n % d == 0] 
          if len(divs) == 4:
              divs.reverse() # реверсируем (по убыванию)
              print( *divs )
      С++:

    Ответ:

    190201 17291 11 1
    190202 95101 2 1
    190214 95107 2 1
    190219 853 223 1
    190222 95111 2 1
    190223 17293 11 1
    190227 63409 3 1
    190229 14633 13 1
    

    Видеоразбор задания:

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


    25_10:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201; 190280], числа, имеющие ровно 4 различных ЧЁТНЫХ делителя.
    Выведите эти четыре делителя для каждого найденного числа в порядке убывания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      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 divs := new integer[4];
        for var n := 190201 to 190280 do
        begin
          var i := 0; // для индекса массива
          for var d := 1 to n do
          begin
            if (n mod d = 0) and (d mod 2 = 0) then 
            begin
              if i < 4 then
                divs[i] := d;
              inc(i);
            end;
            if i > 4 then 
              break; 
          end;
          if i = 4 then begin
            println(divs.Reverse())
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      for n in range(190201,190280+1):
            divs = [] # чистим список делителей
            for d in range(1,n+1): #
              if n % d == 0 and d%2==0:
                divs = divs + [d] # добавляем делитель в список
                if len(divs) > 4: break
            if len(divs) == 4:
              divs.reverse()
              print(*divs)
      С++:

      ✎ Решение: Генерация списка делителей.

      Общая идея:

    • Для каждого числа указанного диапазона генерируем список делителей.
    • Если длина списка равна четырем, выводим его.
    • PascalABC.net:

      Python:

      for n in range(190201, 190280+1):
          divs = [d for d in range(1, n+1) if n % d == 0 and d % 2 == 0] 
          if len(divs) == 4:
              divs.reverse()
              print( *divs )
      С++:

    Ответ:

    190226 838 454 2
    190234 17294 22 2
    190238 2606 146 2
    190252 95126 4 2
    190258 758 502 2
    190274 27182 14 2
    190276 95138 4 2
    

    25_11:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [394441; 394505], числа, имеющие максимальное количество различных делителей. Если таких чисел несколько, то найдите минимальное из них.
    Выведите количество делителей найденного числа и два наибольших делителя в порядке убывания.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      
      begin
        var max := 0;
        var divsMax := new List<integer>; 
        for var n := 394441 to 394505 do
        begin
          var divs := new List<integer>; 
          for var d := 1 to n do
            if n mod d = 0 then 
              divs.Add(d);      
          if divs.Count > max then 
          begin
            max := divs.Count;
            divsMax := divs;
          end;
        end;
        divsMax.Reverse();
        print(max, divsMax[0], divsMax[1])
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
      maxim = 0  # нужное количество делителей
      divsMax = []
      for n in range(394441, 394505 + 1):
        divs = [] # чистим список делителей
        for d in range(1,n+1): # перебор делителей
          if n % d == 0:
            divs.append(d) # добавляем делитель в список
        if len(divs) > maxim: 
          maxim = len(divs)
          divsMax = divs
      divsMax.reverse()
      print(maxim,divsMax[0],divsMax[1])
      С++:

      ✎ Решение (Генерация списка делителей):

      PascalABC.net:

      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      maxim=0
      divsmax=[]
      for n in range(394441, 394505+1):
          divs = [d for d in range(1, n+1) if n % d == 0] 
          if len(divs) > maxim:
              maxim = len(divs)
              divsmax = divs # сохраняем делители для числа с макс кол-вом дел-ей
      divsmax.reverse()
      print(maxim, divsmax[0], divsmax[1])
      С++:

    Ответ: 48 394450 197225

    Видео

    Простые числа

    25_12:

    Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [3532000; 3532160], простые числа.
    Выведите все найденные простые числа в порядке убывания, слева от каждого числа выведите его номер по порядку.

    ✍ Решение:

      ✎ Решение (неоптимизированный вариант, метод полного перебора):

      PascalABC.net:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      
      begin
        var count := 0;
        for var n := 3532160 downto 3532000 do // цикл с конца 
        begin
          var flag := true; 
          for var d := 2 to n - 1 do // перебор делителей, начиная с двух до n-1
          begin
            if n mod d = 0 then begin // есть делитель помимо единицы и самого n
              flag := false; // число не простое     
              break;
            end;
          end;
          if flag = true then // если число простое
          begin
            inc(count);
            Println(count, n);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      count = 0
      for n in range(3532160, 3532000-1, -1): # цикл с конца и с шагом (-1) 
        flag = True
        for d in range(2, n): # перебор делителей, начиная с двух
          if n % d == 0: # есть делитель помимо единицы и самого n
            flag = False # число не простое
            break
        if flag == True: # число простое
          count+=1
          print(count , n)
      С++:

      ✎ Решение (оптимизированный вариант):

      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 count := 0;
        for var n := 3532160 downto 3532000 do // цикл с конца 
        begin
          var flag := true; 
          var d := 2;
          while d * d <= n - 1 do // перебор делителей, начиная с двух
          begin
            if n mod d = 0 then begin // есть делитель помимо единицы и самого n
              flag := false;  // число не простое    
              break;
            end;
            d := d + 1;
          end;
          if flag = true then // если число простое
          begin
            inc(count);
            Println(count, n);
          end;
        end;
      end.
      Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
      count = 0
      for n in range(3532160, 3532000-1, -1): # цикл с конца и с шагом (-1) 
            flag = True
            d = 2
            while d*d <= n-1: # перебор делителей, начиная с двух
                  if n % d == 0: # есть делитель помимо единицы и самого n
                        flag = False # число не простое
                        break
                  d+=1
            if flag == True: # число простое
                  count+=1
                  print(count , n)
      С++:

    Ответ:

    1  3532147
    2  3532121
    3  3532103
    4  3532091
    5  3532049
    6  3532033
    7  3532021
    8  3532019
    9  3532007
    

    Задания прошлых лет для тренировки (до 2021)

    Задачи с поэлементной обработкой массива

    25_1: ЕГЭ по информатике 2017 года (один из вариантов со слов выпускника):

    Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива НЕ кратных 3.

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.

    1
    2
    3
    4
    5
    6
    7
    8
    
    const N = 20;
    var i,j,k:integer;
    a:array [1..N] of integer; 
    begin
    for i:=1 to N do 
      readln(a[i]);end.

    ✍ Решение:

    Рассмотрим заданный фрагмент решения:

    • в цикле со счетчиком i запрашиваются значения элементов массива, т.е. формируется массив;
    • из постановки задания видим, что необходимо найти количество чего-то, это значит, что нужно использовать переменную счетчик;
    • объявлены три целочисленных переменных: i, j, k; переменная i использована в первом цикле, значит для счетчика можно взять переменную k;
    • счетчик всегда нужно обнулять, поэтому следующим оператором будет:
    • определим, количество чего нам необходимо считать: количество элементов массива не кратных 3. Кратность можно определить через остаток от деления: если значение элемента массива при делении на 3 в остатке не возвращает 0, значит элемент не кратен трем;
    • остаток при делении в паскале — оператор mod. Поскольку необходимо просмотреть каждый элемент массива, то это нужно делать в цикле for;
    • переменная i уже использована в первом цикле for, значит, для очередного цикла возьмем неиспользованную переменную j:
    • for j:=1 to N do
        if a[j] mod 3 <> 0 then
    • если условие истинно (т.е. нашелся элемент массива, не кратный трем), то увеличиваем счетчик:
    • после цикла остается вывести значение счетчика, т.е. вывести количество элементов массива не кратных 3:

    Результат:

    k:=0;
    for j:=1 to N do
      if a[j] mod 3 <> 0 then
        inc(k);
    writeln(k);

    Смотрите видео с подробным объяснением и разбором данного 25 задания:

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


    Задачи на обработку элементов массива с последующей заменой

    25_3: Решение 25 задания ЕГЭ по информатике Демоверсия 2018:

    Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести измененный массив, каждый элемент массива выводится с новой строчки.

    Например, для массива из шести элементов: 4 115 7 195 25 106
    программа должна вывести числа 4 2 7 2 25 106

    Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    const
    N = 30;
    var
    a: array [1..N] of longint;
    i, j, k: longint;
    begin
    	for i := 1 to N do
    		readln(a[i]);
    	...
    end.

    В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

    Похожие задания для тренировки

    ✍ Решение:

      Решение на языке Паскаль:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      k := 0;
      for i := 1 to N do
      	if (a[i] > 100) and (a[i] mod 5 = 0) then
      		k:=k+1;
      for i := 1 to N do begin
      	if (a[i] > 100) and (a[i] mod 5 = 0) then
      		a[i] := k;
      writeln(a[i])
      end

    25_6:

    Дан массив, содержащий неотрицательные целые числа. Необходимо вывести:

  • максимальный чётный элемент, если количество чётных элементов не меньше, чем нечётных;
  • максимальный нечётный элемент, если количество нечётных эле-ментов больше, чем чётных.
  • Например, для массива из шести элементов: 4 6 12 17 3 8
    ответом будет 12 — наибольшее чётное число, поскольку чётных чисел в этом массиве больше

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    Python:

    1
    2
    3
    4
    5
    6
    
    # допускается также использовать
    # целочисленные переменные j, k, m
    a = []
    n = 2000 // менять значение n нельзя
    for i in range(0, n):
      a.append(int(input()))

    ✍ Решение:

      Решение на языке Python:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      
      a = []
      n = 2000 // менять значение n нельзя
      for i in range(0, n):
          a.append(int(input()))
      j = 0 
      k = 0 
      m = 0 
      for i in range(0, n):
      	if a[i]%2 == 0:
      		j+=1
      	else:
      		k+=1
      if k>j:
      	j = 0
      	for i in range(0, n):
      		if a[i]>j and a[i] % 2 != 0:
      			j = a[i]
      	print(j)
      else:
      	for i in range(0, n):
      		if a[i]>m and a[i] % 2 == 0:
      			m = a[i]
      	print(m)

    Задачи на обработку пар элементов массива (два подряд идущих)

    25_4:

    Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых одно из чисел двузначное. В данной задаче под парой подразумевается два подряд идущих элемента массива.

    Например, для массива из семи элементов: 13; 323; 12; 33; 117 — ответ: 4.

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    const
      N = 40;
    var
      a: array [1..N] of integer;
      i, j, k: integer;
    begin
      for i := 1 to N do 
        readln(a[i]);
      ...
    end.

    ✍ Решение:
     

      1
      2
      3
      4
      5
      
      k := 0;
      for i := 1 to N - 1 do
       if ((a[i] < 100) and (a[i] > 9)) or ((a[i + l] < 100) and (a[i + 1] > 9)) then 
            inc(k);
      writeln(k);

    25_5:

    Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от -10 000 до 10 000 включительно. Опишите алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых сумма элементов делится на 2, но не делится на 4. В данной задаче под парой подразумевается два подряд идущих элемента массива.

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    Python:

    1
    2
    3
    4
    5
    6
    7
    
    #  допускается также использовать
    #  две целочисленные переменные
    #  j и k
    a = []
    n = 20
    for i in range(0, n):
      a.append(int(input()))

    ✍ Решение:

      Проанализируем данный фрагмент кода на языке Python:

    • В первой строчке кода объявляется список а. Дальше, идет объявление переменной n = 20, она отвечает за размер массива.
    • При решении такого рода задач, необходимо помнить, что массив в Python — это список и это динамический тип данных. Кроме того, нумерация элементов массива начинается с 0.

    • Ниже мы видим инициализацию списка а. Мы должны дописать код дальнейшей программы, который последует после заполнения списка пользователем.
    • Итак, по условию мы должны находить пары элементов, сумма которых делится на 2, но не делится на 4, причем парами считаются соседние элементы, например: a[0] и a[1], a[1] и a[2].
    • Мы можем узнать, делится ли данный элемент на число, если остаток от деления на него равен 0, и не делится — в противном случае. Тогда сумма соседних элементов при делении на 2 должна давать остаток 0, а при делении на 4 наоборот — отличный от 0.
    • Введем цикл, который будет перебирать все элементы массива, считать сумму соседей и проверять истинность условия.
    • for i in range(0, n-1):
          j = a[i] + a[i+1]
          if j%2 == 0 and j%4 != 0:

      Так как мы рассматриваем элемент a[i + 1], значит, цикл должен работать до n — 1, чтобы не выйти за границы диапазона массива.

    • Когда мы определились с условием, за счетчик возьмем переменную k, которую допустимо брать исходя из комментариев к программе.
    • ...
       if j%2 == 0 and j%4 != 0:
              k+=1
    • Мы добавили допустимую переменную j, чтобы условный оператор выглядел компактнее.
    • Однако задача еще не решена. Во-первых, мы должны до цикла инициализировать счетчик k = 0. Так как иначе Python выдаст ошибку.
    • Дело в том, что мы пытаемся присвоить переменной k его же значение, но на 1 больше, но интерпретатор «не встречал» раньше переменной k, из-за чего возникает ошибка.

    • Кроме того, добавим вывод результата после цикла.
    • Таким образом, правильный вариант с учетом доработок:
    • a = []
      n = 20
      for i in range(0, n):
        a.append(int(input()))
      k = 0
      for i in range(0, n - 1):
          j = a[i] + a[i + 1]
          if j%2 == 0 and j%4 != 0:
              k += 1
      print(k)

    Задачи на обработку трёх подряд идущих элементов массива (тройки элементов массива)

    25_2:

    Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество троек элементов массива, состоящих из равных между собой чисел. В данной задаче под тройкой подразумевается три подряд идущих элемента массива.

    Например, для массива из семи элементов: 2; 2; 2; 4; 4; 4; 4 — ответ: 3.

    Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    const
      N=40;
    var
      a: array[1..N] of integer;
      i, j, k:integer;
    begin
      for i:=1 to N do
        readln(a[i]);
      ...
    end.

    ✍ Решение:

    • из постановки задания видим, что необходимо искать количество чего-то, это значит, что нужно использовать переменную счетчик; возьмем для нее объявленную переменную k;
    • счетчик всегда нужно сначала обнулять, поэтому следующим оператором будет:
    • определим, количество чего нам необходимо считать: количество троек элементов массива, состоящих из равных между собой чисел. Т.е. необходимо сравнивать между собой каждые три подряд идущих элемента массива, например так:
    • if (a[i]=a[i+1]) and (a[i]=a[i+2]) then
          inc(k);
    • inc(k) — оператор, увеличивающий счетчик k на единицу;
    • условие необходимо выполнять в цикле, так как нужно проверить все элементы массива; цикл со счетчиком необходимо организовать от 1 до N-2, в противном случае индексы элементов a[i+2] выйдут за границы диапазона массива (например, при i = 40, получим … a[40+2], а 42-го элемента массива не существует, поэтому цикл надо делать до i = 38, т.е. N-2).

    Результат:

    for i:=1 to N-2 do
        if (a[i]=a[i+1]) and (a[i]=a[i+2]) then
          inc(k);
    writeln(k);

    Более подробное объяснение предлагаем посмотреть на видео:

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


    Задачи на поиск максимума, минимума элементов массива и другие

    В решение заданий демо-версии используется язык программирования Python.

    Задание 1. Анализ информационных моделей

    На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

    Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта D в пункт В и из пункта F в пункт A. В ответе запишите целое число.

    На графе расставим веса вершин.
    Мы видим, что вершина В уникальна, имеет вес 2 и связана с двумя «тройками по весу».
    Из таблицы видим, В это 4, далее видим, что «тройки по весу» это вершины 2 и 7. 
    7 вершина связана кроме В, еще с двумя «тройками по весу», значит D это 7, а F это 2. 

    Далее 2 и 7 вершины ведут нас к 5, значит А это 5, оставшаяся «тройка» это вершина Е под номером 6.
    Рассуждая дальше видим, что С это 1, G это 2.

    Сумма дорог BD + AF = 53 + 5 = 58

     

    Ответ: 58 

    Задание 2.  Построение таблиц истинности логических выражений

    Миша заполнял таблицу истинности логической функции F 

    F= ¬(y → x) v (z→ w) v ¬z , но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z. 

    Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z. В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно. 

    Пример. Функция задана выражением ¬x v y, зависящим от двух переменных, а фрагмент таблицы имеет следующий вид. В этом случае первому столбцу соответствует переменная y, а второму столбцу – переменная x. В ответе следует написать yx. 

    ¬(y → x) v (z→ w) v ¬z=0. Следовательно y → x =1, z→ w=0,  z=1. Значит третий столбец z. z→ w=0, значит w=0, и это может быть только 4 столбец. y → x =1, следовательно из второй строки мы видим, что первый столбец может быть только у, а второй х.

    y  x  z w
    0 0 1 0
    0 1 1 0
    1 1 1 0

    Решение на Python

      Ответ: YXZW 

    Задание выполняется с использованием прилагаемых файлов

    Задание 3.  Базы данных. Файловая система 

    В прикрепленном файле приведён фрагмент базы данных «Продукты» о поставках товаров в магазины районов города. База данных состоит из трёх таблиц. Таблица «Движение товаров» содержит записи о поставках товаров в
    магазины в течение первой декады июня 2021 г., а также информацию о проданных товарах. Поле Тип операции содержит значение Поступление или Продажа, а в соответствующее поле Количество упаковок, шт. занесена информация о том, сколько упаковок товара поступило в магазин или было продано в течение дня.

    На рисунке приведена схема указанной базы данных.

    Используя информацию из приведённой базы данных, определите общий вес
    (в кг) крахмала картофельного, поступившего в магазины Заречного района
    за период с 1 по 8 июня включительно. В ответе запишите только число.

    На третьем листе книги применим фильтр по району и получим ID четырех магазинов. 

    На втором листе применим фильтр по товару и получим ID товара.

    На первом листе применим фильтры по ID товара и ID магазинов и типу операции. Все даты попадают в интервал от 1 до 8 июня. Получим:

    Поступило в продажу 710 упаковок. В упаковке 0,5 кг. Получим 355 кг.

    Ответ: 355 

    Задание 4.  Кодирование и декодирование информации

    По каналу связи передаются сообщения, содержащие только буквы из набора: А, З, К, Н, Ч. Для передачи используется двоичный код,удовлетворяющий прямому условию Фано, согласно которому никакое кодовое слово не является началом другого кодового слова. Это условие обеспечивает возможность однозначной расшифровки закодированных сообщений.

    Кодовые слова для некоторых букв известны: Н – 1111, З – 110. Для трёх оставшихся букв А, К и Ч кодовые слова неизвестны. Какое количество двоичных знаков потребуется для кодирования слова КАЗАЧКА, если известно, что оно закодировано минимально возможным количеством двоичных знаков?

     

    Ответ: 14

    Задание 5.  Анализ и построение алгоритмов для исполнителей

    На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему
    новое число R следующим образом.

    1. Строится двоичная запись числа N.
    2. Далее эта запись обрабатывается по следующему правилу:
    а) если сумма цифр в двоичной записи числа чётная, то к этой записи справа дописывается 0, а затем два левых разряда заменяются на 10;
    б) если сумма цифр в двоичной записи числа нечётная, то к этой записи справа дописывается 1, а затем два левых разряда заменяются на 11. 

    Полученная таким образом запись является двоичной записью искомого числа R.Например, для исходного числа 610 = 1102 результатом является число
    10002 = 810, а для исходного числа 410 = 1002 результатом является число 11012 = 1310.
    Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 40. В ответе запишите это число в десятичной системе счисления.

    Минимальное R, большее 40, это 41.
    В результате выполнения алгоритма число R должно либо начинаться на 10 и оканчиваться 0, либо начинаться на 11 и оканчиваться 1.
    Из чисел, больших 41, это 42, 44, 46, 49, и т.д.
    Мы должны найти минимальное N, из которого данное число получено.
    Поскольку первые цифры заменялись, то мы видим, что данные числа могли быть получены из чисел 29, 30, 23, 16. 
    Из которых 16 минимальное, и меньше уже быть не может.

    ИЛИ программное решение

    Ответ: 16

     

    Задание 6.  Определение результатов работы простейших алгоритмов

    Исполнитель Черепаха действует на плоскости с декартовой системой координат.
    В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды:
    Вперёд n (где n–целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.
    Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз. 

    Черепахе был дан для исполнения следующий алгоритм:
    Повтори 7 [Вперёд 10 Направо 120].
    Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.


      ИЛИ

    Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует 5 команд: Поднять хвост, означающая переход к перемещению без рисования; Опустить хвост, означающая переход в режим рисования; Вперёд n (где n– целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Назад n (где n– целое число), вызывающая передвижение в противоположном голове направлении; Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке, Налево m (где m– целое число), вызывающая изменение направления движения на m градусов против часовой стрелки. 

    Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.

    Черепахе был дан для исполнения следующий алгоритм:
    Повтори 2 [Вперёд 10 Направо 90 Вперёд 20 Направо 90]
    Поднять хвост
    Вперёд 3 Направо 90 Вперёд 5 Налево 90
    Опустить хвост
    Повтори 2 [Вперёд 70 Направо 90 Вперёд 80 Направо 90]

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

    Сначала нужно построить фигуру. 
    Это можно сделать к примеру, на тетрадном листе, при помощи библиотеки Turtle или в Excel.

     

    Далее мы находим уравнения прямых, которыми ограничена фигура и решаем
    систему уравнений программно.

    ИЛИ
    Фигуру можно построить программно или к примеру, в Excel.
    Далее анализируем и считаем точки.

    Ответ: 1 задание  — 38, 2 задание — 128

    Задание 7.  Кодирование и декодирование информации. Передача информации

    Музыкальный фрагмент был записан в формате моно, оцифрован и сохранён в виде файла без использования сжатия данных. Размер полученного файла – 28 Мбайт. Затем тот же музыкальный фрагмент был записан повторно в формате стерео (двухканальная запись) и оцифрован с разрешением в 3,5 раза выше и частотой дискретизации в 2 раза меньше, чем в первый раз. Сжатие данных не производилось. Укажите размер полученного при повторной записи файла в Мбайт. В ответе запишите только целое число, единицу измерения писать не нужно.

    I = ν ⋅ i ⋅ t ⋅ k, где ν — частота дискретизации (Гц),

     i — разрешение (бит), t — время (с), k — количество дорожек (1 -моно, 2- стерео, 4 — квадро)

    I1 = ν ⋅ i ⋅ t 
    I2 = ν/2 ⋅ 3,5 ⋅ i ⋅ t ⋅ 2 = 3,5 ⋅ I1

    I2 = 3,5 · 28 = 98 

     Ответ: 98

    Задание 8. Перебор слов и системы счисления

    Определите количество пятизначных чисел, записанных в восьмеричной системе счисления, в записи которых только одна цифра 6, при этом никакая нечётная цифра не стоит рядом с цифрой 6.

    * * * * * — пятизначное число
    В восьмеричной системе счисления в алфавите 8 цифр: 0..7.
    Первая цифра 0 быть не может.
    Цифра 6 — одна, при этом стоит рядом только с четными цифрами — 0, 2 или 4.
    Получим:

    6 * * * * — вариантов 3 ⋅ 7 ⋅ 7 ⋅ 7 = 1029
    * 6 * * * — вариантов 2 ⋅ 3 ⋅ 7 ⋅ 7 = 294
    * * 6 * * — вариантов 6 ⋅ 3 ⋅ 3 ⋅ 7 = 378
    * * * 6 * — вариантов 6 ⋅ 7 ⋅ 3 ⋅ 3 = 378
    * * * * 6 — вариантов 6 ⋅ 7 ⋅ 7 ⋅ 3 = 882

    Ответ: 2961

    Задание выполняется с использованием прилагаемых файлов

    Задание 9. Работа с таблицами

    Файл с данными

    Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
    – в строке только одно число повторяется дважды;
    – среднее арифметическое неповторяющихся чисел строки не больше суммы повторяющихся чисел.
    В ответе запишите только число.

    Для решения этой задачи понадобится 10 вспомогательных столбцов. Сначала мы посчитаем количество повторяющихся чисел в каждой строке.

    Затем сумму каждой строки диапазона H:M. Если повторений нет, то эта сумма равна 6.

      Далее мы найдем среднее арифметическое неповторяющихся значений.

    Затем найдем сумму повторяющихся значений.

    Затем проверим соблюдение двух условий. И подсчитаем количество строк, в которых соблюдаются оба условия.

    Ответ: 2241

    Задание выполняется с использованием прилагаемых файлов

    Задание 10. Поиск символов в текстовом редакторе

    Файл с данными

    Текст произведения Льва Николаевича Толстого «Севастопольские рассказы» представлен в виде файлов различных форматов. Откройте один из файлов и определите, сколько раз встречается в тексте отдельное слово «теперь» со строчной буквы. Другие формы этого слова учитывать не следует.
    В ответе запишите только число.

    В текстовом редакторе используем инструмент найти (по умолчанию он не учитывает регистр, в расширенном поиске есть кнопка больше, где можно проверить настройки). Ищем слово целиком. Ставим галочку учитывать регистр. Слово теперь со строчной буквы встречается 45 раз.

    Ответ: 45

    Задание 11. Вычисление количества информации

    При регистрации в компьютерной системе каждому объекту присваивается идентификатор, состоящий из 250 символов и содержащий только десятичные цифры и символы из 1650-символьного специального алфавита. В базе данных для хранения каждого идентификатора отведено одинаковое и минимально возможное целое число байт. При этом используется посимвольное кодирование идентификаторов, все символы кодируются одинаковым и минимально возможным количеством бит. Определите объём памяти (в Кбайт), необходимый для хранения 65 536 идентификаторов. В ответе запишите только целое число – количество Кбайт.

     

    I = K · i,    N = 2 i

    ID : ****….**** – всего 250 различных символов в наборе

    N = 10 + 1650 = 1660,  1024<1660<2048, 2048 = 211, значит  для кодирования одного символа нужно 11 бит.

    IID = 250 · 11 = 2750 бит = 343,75 байт ≈ 344 байт – отводится на идентификатор целое число байт

    I65536 = 65536 ⋅ 344 = 22544384 байта = 22016 Кбайт– всего

    Ответ: 22016

    Задание 12. Выполнение алгоритмов для исполнителей

    Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.

    А) заменить (v, w). Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. 
    Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150.
    Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

    Б) нашлось (v). Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.

     Цикл
        ПОКА условие
            последовательность команд
        КОНЕЦ ПОКА

    выполняется, пока условие истинно.

    В конструкции

        ЕСЛИ условие
            ТО команда 1
        КОНЕЦ ЕСЛИ

    выполняется команда 1 (если условие истинно).

    В конструкции

        ЕСЛИ условие
            ТО команда 1
            ИНАЧЕ команда 2
        КОНЕЦ ЕСЛИ

    выполняется команда 1 (если условие истинно) или команда 2 (если условие ложно).

    Дана программа для Редактора:
    НАЧАЛО
         ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
              ЕСЛИ нашлось (>1)
                  ТО заменить (>1, 22>)
              КОНЕЦ ЕСЛИ
              ЕСЛИ нашлось (>2)
                  ТО заменить (>2, 2>)
              КОНЕЦ ЕСЛИ
              ЕСЛИ нашлось (>0)
                  ТО заменить (>0, 1>)
              КОНЕЦ ЕСЛИ
         КОНЕЦ ПОКА
    КОНЕЦ
    На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем содержащая 39 цифр «0», n цифр «1» и 39 цифр «2», расположенных в произвольном порядке. Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.

    def pr(n): #функция определяет простое ли число
        for i in range(2,int(n**0.5)+1):
            if (n%i) == 0:
                return False
        return True   

    for n in range(100): #перебираем n
        s=’>’ + 39*’0′ + n*’1′ + 39*’2′
        while ‘>1’ in s or ‘>2’ in s or ‘>0’ in s:
            if ‘>1’ in s:
                s=s.replace(‘>1′,’22>’,1)

            if ‘>2’ in s:
                s=s.replace(‘>2′,’2>’,1)

            if ‘>0’ in s:
                s=s.replace(‘>0′,’1>’,1)

        sum_s = 0
        for i in s[:-1]: #считаем сумму цифр в строке
            sum_s += int(i)
        if pr(sum_s): #проверяем на простоту
            print(n)
            break

    Ответ: 5

    Задание 13. Поиск путей в графе

    На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, И, К, Л. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.
    Определите количество различных путей ненулевой длины, которые начинаются и заканчиваются в городе Е, не содержат этот город в качестве промежуточного пункта и проходят через промежуточные города не более одного раза.

    Начнем подсчет из вершины Е налево через В и возвращаемся в Е через Л.

     

    Ответ: 21

    Задание 14. Кодирование чисел. Системы счисления

    Операнды арифметического выражения записаны в системе счисления с основанием 15. 
    123
    x515 + 1x23315
    В записи чисел переменной x обозначена неизвестная цифра из алфавита 15-ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 14. Для найденного значения x вычислите частное от деления значения арифметического выражения на 14 и укажите его в ответе в десятичной системе счисления. Основание системы счисления в ответе указывать не нужно.

    for x in range(15):
        s1=’123’+ str(x) +’5′
        s2=’1’+ str(x) +’233′
        n= int(s1,15)+ int(s2,15)

        if n%14 == 0:
            print(n//14)
            break

    Ответ: 8767

    Задание 15. Преобразование логических выражений

    На числовой прямой даны два отрезка: D = [17; 58] и C = [29; 80]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
    (x ∈ D) → ((¬(x ∈ C) & ¬(x ∈ A)) → ¬(x ∈ D)) истинно (т.е. принимает значение 1) при любом значении переменной х.

      def deli(n,m):
        if n%m == 0:
            return True

    for A in range(1,1000):
        Ok = True
        for x in range(1,10000):
            Ok*=( (not(deli(x,2)) or (not(deli(x,3)))) or ((x+A)>=100) )

        if Ok:
            print(A)
            break

    Ответ: 94

    Задание 16. Рекурсивные алгоритмы

    Алгоритм вычисления значения функции F(n), где n – натуральное число,
    задан следующими соотношениями:
    F(n) = 1 при n = 1;
    F(n) = n × F(n — 1), если n > 1.
    Чему равно значение выражения
    F(2023) / F(2020)?

    F(2023) = 2023! = 2023 ⋅ 2022!

    F(2023)/F(2020) = (2023 ⋅ 2022 ⋅ 2021 ⋅ 2020!)/2020! = 2023 ⋅ 2022 ⋅ 2021 =

    = 8266912626

    Ответ: 8266912626

    Задание выполняется с использованием прилагаемых файлов

    Задание 17. Проверка на делимость

    Файл с данными

    В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых
    только одно число оканчивается на 3, а сумма квадратов элементов пары не меньше квадрата максимального элемента последовательности, оканчивающегося на 3. В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

     f= open(’17.txt’)
    p=[int(i) for i in f]
    f.close()

    k = 0
    PP = 0
    M3 = 0

    for i in p:
        if (abs(i))%10 == 3:
            M3 = max(i, M3)

    for i in range(1,len(p)): #Осторожно, скобки!
        if ( ((abs(p[i-1])%10 == 3) + ((abs(p[i])% 10 == 3)) ==1 ) and ((p[i-1]**2 + p[i]**2) >= M3**2) ):
            k+=1
            PP = max(PP, p[i-1]**2 + p[i]**2)

    print(k,PP)

    Ответ: 180  190360573

    Задание выполняется с использованием прилагаемых файлов

    Задание 18. Робот-сборщик монет

    Файл с данными

    Квадрат разлинован на N×N клеток (1 < N < 17). Исполнитель Робот может перемещаться по клеткам, выполняя за одно перемещение одну из двух команд: вправо или вниз. По команде вправо Робот перемещается в соседнюю правую клетку, по команде вниз — в соседнюю нижнюю. При попытке выхода за границу квадрата Робот разрушается. Перед каждым запуском Робота в каждой клетке квадрата лежит монета достоинством от 1 до 100. Посетив клетку, Робот забирает монету с собой; это также относится к начальной и конечной клетке маршрута Робота.

    Откройте файл. Определите максимальную и минимальную денежную сумму, которую может собрать Робот, пройдя из левой верхней клетки в правую нижнюю. В ответ запишите два числа друг за другом без разделительных знаков — сначала максимальную сумму, затем минимальную.

    Исходные данные представляют собой электронную таблицу размером N×N, каждая ячейка которой соответствует клетке квадрата.Пример входных данных: 

    1 8 8 4
    10 1 1 3
    1 3 12 2
    2 3 5 6

    Для указанных входных данных ответом должна быть пара чисел 41 и 22.

    Сначала скопируем таблицу рядом, начиная со столбца АА, можно уменьшить ширину столбца до 4-5. Ячейка АА1=А1. Ячейка АВ1 = АА1+В1, протягиваем ее до АТ1. Ячейка АА2 = АА1 + А2, протягиваем ее до АА20. Далее ячейка АВ2 = В2+МАКС(АА2;АВ1), протягиваем ее на весь оставшийся диапазон, копируем только значения, не трогая стен. 

     

    Справа от стен формулы повторяют крайний левый рял, столбец АА, снизу от стен формулы копируют верхнюю строку 1.

    Далее делаем замену всех формул МАКС на МИН.

    Ответ: 1099 1026

    Задание 19. Выигрышная стратегия. Задание 1

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

    Игра завершается в тот момент, когда количество камней в куче становится не менее 129. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 129 или больше камней.

    В начальный момент в куче было S камней, 1 ≤ S ≤ 128. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

    При значениях S < 64 у Пети есть возможность сделать такой ход, что Ваня не сможет выиграть своим первым ходом. При значении S = 64 Петя своим первым ходом может получить 65 или 128 камней в куче. Во всех случаях Ваня увеличивает количество камней в куче в два раза и выигрывает своим первым ходом.

    Ответ: 64

    Задание 20. Выигрышная стратегия. Задание 2

     Для игры, описанной в задании 19, найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причем одновременно выполняются два условия:

    • Петя не может выиграть за один ход;
    • Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.

    Найденные значения запишите в порядке возрастания.

     Значение S должно быть меньше 64, поскольку иначе Ваня сможет выиграть своим первым ходом.

     

    Ответ: 32    63

    Задание 21. Выигрышная стратегия. Задание 3

    Для игры, описанной в задании 19, найдите значение S, при котором одновременно выполняются два условия:

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

    Если найдено несколько значений S, в ответе запишите минимальное из них.

     

     

    Ответ: 62

    Задание 22. Многопроцессорные системы 

    В файле содержится информация о совокупности N вычислительных процессов, которые могут выполняться параллельно или последовательно. Будем говорить, что процесс B зависит от процесса A, если для выполнения процесса B необходимы результаты выполнения процесса A. В этом случае процессы могут выполняться только последовательно.
    Информация о процессах представлена в файле в виде таблицы. В первой строке таблицы указан идентификатор процесса (ID), во второй строке таблицы – время его выполнения в миллисекундах, в третьей строке перечислены с разделителем «;» ID процессов, от которых зависит данный процесс. Если процесс является независимым, то в таблице указано значение 0.
    Типовой пример организации данных в файле:

    Определите минимальное время, через которое завершится выполнение всей совокупности процессов, при условии, что все независимые друг от друга процессы могут выполняться параллельно.
    Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.

    В независимых процессах время считается от 0,
    в зависимых прибавляется к времени процесса, от которого зависит.

     

    Ответ: 17

    Задание 23. Анализ программы с циклами и условными операторами

    Исполнитель преобразует число на экране.
    У исполнителя есть две команды, которые обозначены латинскими буквами:
    A. Прибавить 1
    B. Умножить на 2
    Программа для исполнителя – это последовательность команд. Сколько существует программ, для которых при исходном числе 1 результатом является число 35, при этом траектория вычислений содержит число 10 и не содержит 17?
    Траектория вычислений программы – это последовательность результатов
    выполнения всех команд программы.
    Например, для программы ABA при
    исходном числе 7 траектория будет состоять из чисел 8, 16, 17.

    def f(x, y):
        if x == y:
            return 1
        if x > y or x == 17:
            return 0
        else:
            return f(x + 1, y) + f (2 * x, y)

    print (f(1,10) * f(10, 35))

    Ответ: 98

    Задание выполняется с использованием прилагаемых файлов

    Задание 24. Анализ программы с циклами и условными операторами

    Файл с данными

    Текстовый файл состоит из символов A, C, D, F и O. Определите максимальное количество идущих подряд пар символов вида согласная + гласная
    в прилагаемом файле. Для выполнения этого задания следует написать программу.

    f=open(’24.txt’) 
    p= f.readline()
    f.close()

    PP = [‘CA’, ‘CO’, ‘DA’, ‘DO’, ‘FA’, ‘FO’]
    M=k=0

    for i in range(1, len(p), 2):
        x = p[i-1] + p[i]
        if x in PP:
            k += 1
        else:
            k = 0    
        M=max(M,k)
    print(M)

    Ответ: 95

    Задание 25. Анализ программы с циклами и условными операторами

    Назовём маской числа последовательность цифр, в которой также могут
    встречаться следующие символы:
    – символ «?» означает ровно одну произвольную цифру;
    – символ «*» означает любую последовательность цифр произвольной длины;
    в том числе «*» может задавать и пустую последовательность.

    Например, маске 123*4?5 соответствуют числа 123405 и 12300405. 

    Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 1?2139*4, делящиеся на 2023 без остатка.
    В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 2023. Количество строк в таблице для ответа избыточно.

    Самый простой способ использовать библиотеку fnmatch.
    Функция fnmatch() проверяет, соответствует ли строка шаблонной строке, возвращая True или False

    или так полным перебором:

    y = {»,’0′,’00’,’000′}
    for x in y:
        for j in range(10):
            s = ‘1’ + str(j) + ‘2139’ + x + ‘4’
            if int(s) % 2023 == 0:
                print (s, int(s)//2023)

    for x in range (1000):
        for j in range(10):
            s = ‘1’ + str(j) + ‘2139’ + str(x) + ‘4’
            if int(s) % 2023 == 0:
                print (s, int(s)//2023

    Ответ: 162139404 80148
    1321399324 653188
    1421396214 702618
    1521393104 752048

    Задание выполняется с использованием прилагаемых файлов

    Задание 26. Анализ программы с циклами и условными операторами

    В магазине для упаковки подарков есть N кубических коробок. Самой интересной считается упаковка подарка по принципу матрёшки – подарок упаковывается в одну из коробок, та в свою очередь в другую коробку и т.д.
    Одну коробку можно поместить в другую, если длина её стороны хотя бы на 3 единицы меньше длины стороны другой коробки. Определите наибольшее количество коробок, которое можно использовать для упаковки одного подарка, и максимально возможную длину стороны самой маленькой коробки, где будет находиться подарок. Размер подарка позволяет поместить его в самую маленькую коробку.
    Входные данные
    В первой строке входного файла находится число N – количество коробок в магазине (натуральное число, не превышающее 10 000). В следующих N строках находятся значения длин сторон коробок (все числа натуральные, не превышающие 10 000), каждое – в отдельной строке.
    Запишите в ответе два целых числа: сначала наибольшее количество коробок, которое можно использовать для упаковки одного подарка, затем максимально возможную длину стороны самой маленькой коробки в таком наборе.
    Типовой пример организации данных во входном файле
    5
    43
    40
    32
    40
    30
    Пример входного файла приведён для пяти коробок и случая, когда минимальная допустимая разница между длинами сторон коробок, подходящих для упаковки «матрёшкой», составляет 3 единицы. При таких исходных данных условию задачи удовлетворяют наборы коробок с длинами сторон 30, 40 и 43 или 32, 40 и 43 соответственно, т.е. количество коробок равно 3, а длина стороны самой маленькой коробки равна 32.
    Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.

    Задание выполняется с использованием прилагаемых файлов

    Задание 27. Анализ программы с циклами и условными операторами

    У медицинской компании есть N пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. Пробирки перевозят в специальных транспортировочных контейнерах вместимостью не более 36 штук. Каждый транспортировочный контейнер упаковывается в пункте приёма и вскрывается только в лаборатории.
    Стоимость перевозки биоматериалов равна произведению расстояния от пункта до лаборатории на количество контейнеров с пробирками. Общая стоимость перевозки за день равна сумме стоимостей перевозок из каждого пункта в лабораторию. Лабораторию расположили в одном из пунктов приёма биоматериалов таким образом, что общая стоимость доставки биоматериалов из всех пунктов минимальна.
    Определите минимальную общую стоимость доставки биоматериалов из всех пунктов приёма в лабораторию.
    Входные данные

    Файл А
    Файл В

    Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число N (1 ≤ N ≤ 10 000 000) – количество пунктов приёма биоматериалов. В каждой из следующих N строк находится два числа: номер пункта и количество пробирок в этом пункте (все числа натуральные, количество пробирок в каждом пункте не превышает 1000). Пункты перечислены в порядке их расположения вдоль дороги, начиная от нулевой отметки.
    В ответе укажите два числа: сначала значение искомой величины для файла
    А, затем – для файла B.
    Типовой пример организации данных во входном файле
    6
    1 100
    2 200
    5 4
    7 3
    8 2
    10 190
    При таких исходных данных и вместимости транспортировочного контейнера, составляющей 96 пробирок, компании выгодно открыть лабораторию в пункте 2. В этом случае сумма транспортных затрат составит: 1 ∙ 2 + 3 ∙ 1 + 5 ∙ 1 + 6 ∙ 1 + 8 ∙ 2.

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

    Ответ: 51063 5634689219329 

    Сегодня посмотрим одно из самых интересных заданий из ЕГЭ по информатике 2023. Будем решать 24 задание. В этом задании нужно работать с файлами.

    Все решения задач из задания 24 ЕГЭ по информатике 2023 будут приведены на языке программирования Python (Питон).

    Поехали!

    Задача (Самая простая)

    Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальное количество идущих подряд символов B. Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.

    Решение:

    Решим данную задачу на языке Python.

    f=open('24_1.txt')
    s=f.read()
    k=0
    kmax=0
    
    for i in range(0, len(s)):
        if s[i]=='B':
            k=k+1
            kmax=max(k, kmax)
        else:
            k=0
    
    print(kmax)
        
    

    С помощью команды open() подвязываемся к файлу. Чтобы не прописывать полный путь, файл должен лежать в той же папке, что и программа.

    С помощью команды .read() зачитываем в переменную s всё содержимое файла.

    Переменная k — это текущий счётчик символов «B». Задача переменной kmax сохранить максимальное значение k.

    С помощью цикла for перебираем все символы из строки s. Переменная i пробегается по номерам всех симолов. Счёт символов начинается в строке с нуля. В начале берём нулевой символ, потом первый и т.д. Конструкция for i in range(0, len(s)) позволяет пройтись по всем символам строки до конца.

    Если нам встретился нужный символ «B», то мы счётчик прибавляем на 1. Это значит, что мы подсчитываем текущую цепочку. Если будет стоять 3 символа «B» подряд, значит, счёт k покажет значение 3. Как только встретится дургой символ, то это означает, что цепочка прервалась и счётчик переводится в первоначальное положение 0.

    При любом увеличении счётчика происходит анализ этого счётчика на максимальность. Функция max выбирает максимальное значение из старого значения kmax и нового показания счётчика k. Если счётчику k удалось победить kmax, то его значение будет считаться максимальным на данный момент времени.

    В ответ идёт значение kmax. Это и есть длина максимальной цепочки. В этой задачке ответ получается 11.

    Ответ: 11

    Закрепим это простое задание из ЕГЭ по информатике 2023.

    Задача (Простая, закрепление)

    Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых нет символа Z. Для выполнения этого задания следует написать программу.

    Решение:

    Решение похоже на предыдущее.

    f=open('24_2.txt')
    s=f.read()
    k=0
    kmax=0
    
    for i in range(0, len(s)):
        if s[i]!='Z':
            k=k+1
            kmax=max(k, kmax)
        else:
            k=0
    
    print(kmax)
        
    

    Если нет символов «Z», то подсчитываем, иначе сбрасываем.

    Задача (Обращаемся к соседу)

    Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, расположенных в алфавитном порядке (возможно с повторением симолов). Для выполнения этого задания следует написать программу.

    Решение:

    f=open('24_2.txt')
    s=f.read()
    k=1
    kmax=0
    
    for i in range(0, len(s)-1):
        if s[i]<=s[i+1]:
            k=k+1
            kmax=max(k, kmax)
        else:
            k=1
    
    print(kmax)
        
    

    В ответе получается 15. Символы можно сравнивать между собой с помощью знаков «>» или меньше «<» ( а так же «>=» или «<=»), причём это сравнение происходит в алфавитном порядке. Например, символ «B» будет больше, чем «A» и т.п. Теперь нам нужно уже обратится к соседу, уже важна связь между соседними символами. Раз мы обращаемся к следующему символу, то должны пробегать до len(s)-1, иначе куда мы будем обращаться, когда дойдём до последнего символа?

    В самом начале цепочки мы анализируем два символа, а к счётчику прибавляем всего лишь 1. Чтобы это учесть, в начале счётчику (переменной k) присваиваем 1. Затем, по мере продвижения по цепочке, мы добавляем в наш анализ 1 новый символ, и к счётчику добавляется одна 1. Дальше уже таких проблем нет.

    Раз мы присвоили в переменную k единицу, то и сбрасывать в ветке else мы тоже должны на 1. Эти значения обычно взаимосвязаны.

    Если мы обращаемся к соседнему символу, как правило, счётчик и сброс устанавливаются в 1. Это не стопроцентная истина, но иметь ввиду это нужно.

    Ответ: 15

    Задача (Обращаемся к соседу, закрепление)

    Текстовый файл состоит не более чем из 106 символов арабских цифр (0, 1, …,9). Определите максимальное количество идущих подряд цифр, среди которых каждые две соседние различны. Для выполнения этого задания следует написать программу.

    Решение:

    f=open('24_3.txt')
    s=f.read()
    k=1
    kmax=0
    
    for i in range(0, len(s)-1):
        if s[i]!=s[i+1]:
            k=k+1
            kmax=max(k, kmax)
        else:
            k=1
    
    print(kmax)
        
    

    Если соседи различны, мы подсчитываем, иначе сбрасываем.

    Ответ: 120

    Задача (Обращаемся к соседу, ещё сложнее)

    Текстовый файл состоит не более чем из 106 символов арабских цифр (0, 1, …,9). Определите максимальное количество идущих подряд нечётных цифр, расположенных в неубывающем порядке. Для выполнения этого задания следует написать программу.

    Решение:

    f=open('24_3.txt')
    s=f.read()
    k=1
    kmax=0
    
    for i in range(0, len(s)-1):
        if s[i]<=s[i+1] and s[i] in '13579' and s[i+1] in '13579' :
            k=k+1
            kmax=max(k, kmax)
        else:
            k=1
    
    print(kmax) 
    

    Здесь опять можно применить знаки сравнения прям к символам. Удобно проверить принадлежность к нечётным цифрам конструкцией s[i] in ‘13579’. Нечётной цифрой должна быть как текущая, так и следующая.

    Ответ: 8

    Решим ещё одну тренировочную задачу из ЕГЭ по информатике 2023.

    Задача (Обращаемся к соседу, ещё сложнее, закрепление)

    Текстовый файл состоит не более чем из 106 символов 1, 2, 3, A, B, С. Определите максимальное количество идущих подряд символов, среди которых никакие две буквы и никакие две цифры не стоят рядом. Для выполнения этого задания следует написать программу.

    Решение:

    f=open('24_4.txt')
    s=f.read()
    k=1
    kmax=0
    
    for i in range(0, len(s)-1):
        if (s[i] in '123' and s[i+1] in 'ABC') or (s[i] in 'ABC' and s[i+1] in '123') :
            k=k+1
            kmax=max(k, kmax)
        else:
            k=1
    
    print(kmax) 
    

    В этой задаче цифры и буквы должны чередоваться. Если у нас цифра, то следующая должны быть буква, или наоборот, если у нас буква, то следующая должна быть цифра. В этих двух случаях прибавляем к счётчику 1.

    Ответ: 20

    Задача (Исключаем строку из 2-х символов, демо 2022)

    Текстовый файл состоит из символов P, Q, R и S.

    Определите максимальное количество идущих подряд символов
    в прилагаемом файле, среди которых нет идущих подряд символов P.
    Для выполнения этого задания следует написать программу.

    Решение:

    Напишем решение на языке Python.

    f=open('24_5.txt')
    s=f.read()
    k=1
    kmax=0
    
    for i in range(0, len(s)-1):
        if s[i]=='P' and s[i+1]=='P':
            k=1
        else:
            k=k+1
            kmax = max(k, kmax)
    
    print(kmax)
    

    Подсчитываем символы, пока не встретилась комбинация двух P подряд. Как только встретилась данная комбинация, сбрасываем счётчик на 1. Здесь мы сбрасываем счётчик на значение 1, чтобы учесть один символ, которые находится в самой комбинации PP. И в начале мы тоже устанавливаем счётчик в значение 1 по этой же причине.

    ЕГЭ по информатике демоверсия 2022 - задание 24 решение

    Мы проходим в цикле for до длины строки минус один. Значение 1 в счётчике при сбросе и в начале программы так же компенсирует и тот момент, что мы не подсчитываем последний символ!

    При изменении счётчика, сохраняем максимальное значение в переменной mx

    Если бы у нас была вместо PP другая комбинация, состоящая к примеру из 5 символов, то мы бы тогда в начале и при сбросе писали в счётчик значение 5-1=4.

    Здесь тоже работает негласное правило, обращаемся к соседу, значит, счётчик устанавливаем в 1.

    В этой задаче получается ответ 188.

    Ответ: 188

    Задача (Исключаем подстроку из 3-х символов)

    Текстовый файл состоит из символов арабских цифр(0, 1, …,9).

    Определите максимальное количество идущих подряд символов
    в прилагаемом файле, среди которых нет трёх символов 0, стоящих рядом.
    Для выполнения этого задания следует написать программу.

    Решение:

    Напишем решение на языке Python.

    f=open('24_6.txt')
    s=f.read()
    k=2
    kmax=0
    
    for i in range(0, len(s)-2):
        if s[i]=='0' and s[i+1]=='0' and s[i+2]=='0':
            k=2
        else:
            k=k+1
            kmax = max(k, kmax)
    
    print(kmax)
    

    Чтобы понять это решение, нужно посмотреть предыдущую задачу. Мы здесь обращаемся к двум соседям, значит, счётчик устанавливаем в 2. Так же проходим в цикле до len(s)-2. Нежелательная строка может состоять не только из одинаковых символов. Может быть строка «XYYZ», к примеру.

    Ответ: 7684

    Задача (Не более одного символа Z)

    Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых символ Z встречается не более одного раза.

    Решение:

    В нашей цепочке один раз можно встретиь символ Z, а два раза уже нельзя. Здесь мы применим функцию .split(). Как работает эта фнкция? Напишем тестовую программу.

    s='sadqttqtreq'
    a=s.split('q')
    print(a)
    

    Результат данной программы будет следующим:

    [‘sad’, ‘tt’, ‘tre’, »]

    Команда split «разрезает» строку по символу «q». В результате мы получаем массив с кусочками этой строки.

    Решение нашей задачи.

    f=open('24_7.txt')
    s=f.read()
    a=s.split('Z')
    k=0
    kmax=0
    
    for i in range(0, len(a)-1):
      k = len(a[i]) + 1 + len(a[i+1])
      kmax = max(k, kmax)
    
    print(kmax)
    

    Разрезаем нашу строку по символу «Z». Пробегаемся уже по массиву a. Цепочка-кандидат это текущий кусочек (a[i]), символ Z (1) и следующий кусочек (a[i+1]).

    Каждого кандитата проверяем сразу на максимальность.

    Ответ: 43

    Задача (Не более двух символов Z)

    Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых символ Z встречается не более двух раз.

    Решение:

    Решение аналогично предыдущему.

    f=open('24_7.txt')
    s=f.read()
    a=s.split('Z')
    k=0
    kmax=0
    
    for i in range(0, len(a)-2):
      k = len(a[i]) + 1 + len(a[i+1]) + 1 + len(a[i+2])
      kmax = max(k, kmax)
    
    print(kmax)
    

    Ответ: 50

    Задача (Звенья)

    Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки символов, состоящей из повторяющихся фрагментов XYZ. Цепочка должна начинаться с символа X и заканчиваться символом Z. Например, для строки ZZZXYZXYZXZZZ длина цепочки равна 6: XYZ+XYZ

    Решение:

    Если мы подсчитаем количество идущих подряд звеньев XYZ, то, можно сказать, дело сделано.

    f=open('24_8.txt')
    s=f.read()
    s=s.replace('XYZ', '1')
    k=0
    kmax=0
    
    for i in range(0, len(s)):
        if s[i]=='1':
            k=k+1
            kmax=max(k, kmax)
        else:
            k=0
    
    print(kmax*3)
    

    Мы с помощью команды replace заменили звенья на «1» (на символ, которого точно нет в файле). Теперь задача свелась к самой простой, которую мы рассматривали в начале статьи. Нужно просто подсчитать количество идущих поряд единиц.

    В ответе нас просили указать количество символов, а не звеньев, поэтому переменную kmax умножаем на 3.

    Ответ: 66

    Задача (Звенья, закрепление)

    Текстовый файл состоит не более, чем из 106 символов из набора A, B, С. Найдите максимальное количество идущих пар символов AC или AB. Искомая подстрока может включать только пары AB, только пары AC или содержать одновременно как пары AC, так и пары AB.

    Решение:

    f=open('24_9.txt')
    s=f.read()
    s=s.replace('AB', '1')
    s=s.replace('AC', '1')
    k=0
    kmax=0
    
    for i in range(0, len(s)):
        if s[i]=='1':
            k=k+1
            kmax=max(k, kmax)
        else:
            k=0
    
    print(kmax)
    

    Здесь нам подходит звено, как и AB, так и AC. В ответе нужно указать количество пар, поэтому не на что умножать переменную kmax не нужно.

    Ответ: 19

    Задача (Звенья, основная волна 20.06.22)

    Текстовый файл состоит из символов A, B, C, D и O. Определите максимальное количество идущих подряд пар символов вида согласная + гласная в прилагаемом файле. Для выполенения этого задания следует написать программу.

    Решение:

    f=open('24_10.txt')
    s=f.read()
    s=s.replace('BA', '1')
    s=s.replace('CA', '1')
    s=s.replace('DA', '1')
    s=s.replace('BO', '1')
    s=s.replace('CO', '1')
    s=s.replace('DO', '1')
    k=0
    kmax=0
    
    for i in range(0, len(s)):
        if s[i]=='1':
            k=k+1
            kmax=max(k, kmax)
        else:
            k=0
    
    print(kmax)
    

    Ответ: 174

    Задача (Звенья, последнее звено неполное)

    Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ… (составленной из фрагментов XYZ, последний фрагмент может быть неполным). Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.

    Решение:

    Т.к. последнее звено может быть неполным, здесь удобно применить другой алгоритм.

    Пусть в начале показания счётчика равно нулю. Если мы находим нужный нам символ в нужной последовательности, то прибавляем к счётчику 1. Если последовательность сбивается, то ставим счётчик в ноль.

    На рисунке представлен данный алгоритм. В нижней строке указано показание счётчика в момент анализа символа.

    ЕГЭ по информатике 2021 - задание 24 (Цепочка символов)

    На данном рисунке максимальная длина цепочки нужных символов равна 9.

    Видим, что для символа X, когда он находится на своём месте, остаток от деления значения счётчика на 3 равен 0.

    Для символа Y, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 1.

    Для символа Z, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 2.

    Мы смотрим остаток от деления на 3, потому что у нас длина звена равна трём (XYZ).

    Таким образом, мы и наш анализ очередного символа привяжем к показанию счётчика:

    f=open('24_11.txt')
    s=f.read()
    k=0
    kmax=0
    
    for i in range(0, len(s)):
        if (s[i]=='X' and k%3==0) or  (s[i]=='Y' and k%3==1) or (s[i]=='Z' and k%3==2):
            k=k+1
            kmax = max(k, kmax)
        else:
            if s[i]=='X': k=1
            else: k=0
    
    
    print(kmax)
    

    Важный момент: Если нужную цепочку прервал символ X, то нужно счётчик сразу выставить в 1, иначе может произойти такая ошибка:

    ЕГЭ по информатике 2021 - задание 24 (Цепочка символов 2)

    Т.е. первые три нужных символа в цепочке алгоритм не засчитал.

    Поэтому мы не просто сбрасываем счётчик в ноль, а прописываем условие:

    if s[i]=='X': k=1
    else: k=0
    

    Ответ: 13

    Задача (Полезный приём)

    Текстовый файл 24-157.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Определите символ, который чаще всего встречается в файле между двумя одинаковыми символами. Например, в тексте CCBAABABCBC есть комбинации ABA, BAB, BCB и CBC. Чаще всего – 2 раза – между двумя одинаковыми символами стоит B, в ответе для этого случая надо написать B2 (без пробелов и других разделителей). Если таких символов несколько, выведите тот, который стоит раньше в алфавите.

    Решение:

    f=open('24-157.txt')
    s=f.read()
    a=[0]*150
    
    for i in range(0, len(s)-2):
        if s[i]==s[i+2]:
            a[ord(s[i+1])] = a[ord(s[i+1])] + 1
    
    ch=''
    mx=0
    for i in range(0, 150):
        if a[i]>mx:
            mx=a[i]
            ch=chr(i)
    
    
    print(ch, mx)
    

    Здесь мы заводим массив a. Индексы этого массива — это коды ANSI всех букв латинского алфавита (ABC…Z). Ведь, как мы знаем, каждая буква кодируется определённым числом (кодом ANSI). Вот часть этой таблицы.

    ЕГЭ по информатике 2022 - задание 8 (Фрагмент таблицы ANSI)

    Например, буква A кодируется кодом 65. Коды увеличиваются в алфавитном порядке на 1. Буква Z кодируется числом 90. Таким образом, 150 ячеек точно хватит для нашего алфавита. Здесь берём с запасом, потому что на экзамене можно точно не вспомнить коды, но достаточно запомнить, что 150 ячеек вполне хватит для заглавных и строчных букв латинского алфавита.

    Значит, ячейка 65 отвечает за букву A, ячейка 66 отвечает за букву B и т.д. Если мы встретили букву между двумя одинаковыми буквами, то её ячейка увеличивается на 1.

    Функция ord() превращает символ в код ANSI.

    После того, как мы прошли всю строку и собрали информацию о наших буквах, нужно пройти массив a и найти наибольшее число в нём.

    Здесь мы уже не пользуемся функцией max, а используем условие, потому что нужно кроме максимального числа тянуть ещё один параметр — сам код (переменную i). Функция chr() превращает код ANSI обратно в символ.

    Ответ: W1608

    Задача (Строки различной длины)

    Текстовый файл 24-164.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Текст разбит на строки различной длины. Необходимо найти строку, содержащую самую длинную цепочку стоящих подряд одинаковых букв. Если таких строк несколько, надо взять ту, которая в файле встретилась раньше. Определите, какая буква встречается в этой строке чаще всего. Если таких букв несколько, надо взять ту, которая стоит раньше в алфавите. Запишите в ответе эту букву, а затем – сколько раз она встречается во всем файле.

    Пример. Исходный файл:

    ZZQABA
    ZALAAC
    QRAQUT

    В этом примере в первой и второй строках наибольшая длина цепочек одинаковых буквы равна 2 (ZZ в первой строке, AA во второй), в третьей – 1. Берём первую строку, т.к. она находится в файле раньше. В этой строке чаще других встречаются буквы Z и A (по 2 раза), выбираем букву A, т. к. она стоит раньше в алфавите. В ответе для этого примера надо записать A6, так как во всех строках файла буква A встречается 6 раз.

    Решение:

    Для считывания построчно файла, будем использовать конструкцию, как в задании 17. В начале найдём строчку, содержащую самую длинную цепочку стоящих подряд одинаковых букв.

    f=open('24-164.txt')
    kmax=0
    count=0
    n=-1
    for s in f.readlines():
        count=count+1
        k=1
        for i in range(0, len(s)-1):
           if s[i]==s[i+1]:
               k=k+1
               if k>kmax:
                   kmax=k
                   n=count
           else:
               k=1
    
    print(n)
    

    Получается строка под номером 162. Переменная count считает строки по порядку. В переменную n сохраняем номер нужной строки. Опять пользуемся условием, а не функцией max, т.к. здесь нужно и обновлять kmax, и сохранять значение n. У нас условие строгое k>kmax, значит, сохранится первая строка с наибольшей искомой цепочкой.

    f=open('24-164.txt')
    
    count=0
    a=[0]*150
    
    for s in f.readlines():
        count=count+1
        k=1
        if count==162:
            for i in range(0, len(s)):
                a[ord(s[i])] = a[ord(s[i])] + 1
           
    ch=''
    mx=0
    for i in range(0, 150):
        if a[i] > mx:
            mx=a[i]
            ch=chr(i)
    
    print(ch)
    

    Теперь нас интересует только строка под номером 162. Далее используем приём из прошлой задачи. Заводим массив a из 150 ячеек и используем таблицу кодов ANSI. Так определяем какая буква встретилась чаще всего в строке под номером 162. Получается буква K.

    f=open('24-164.txt')
    s=f.read()
    print(s.count('K'))
    

    Осталось найти количестов букв K во всём файле. Для этого используем функцию .count()

    Ответ: K36582

    В задаче 15 «Задача (Полезный приём)», созданы переменные k и kmax — напрасно, они не используются.

    Убрал, по привычке написал.

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

    Разбор заданий № 12 КЕГЭ 2021

    (соответствует за да нию № 14 ЕГЭ 2020)

    Проверяемые элементы содержания: Умение исполнить алгоритм для конкретного исполнителя с
    фиксированным набором команд.

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

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

    Алгоритм1
    конечная последовательность шагов в решении задачи, приводящая

    от исходных данных к
    требуемому результату.

    Алгоритм может
    представлять собой некоторую последовательность вычислений,

    а может — последовательность действий
    нематематического характера. Перед его

    составлением должны быть чётко определены начальные
    условия и то, что предстоит

    получить.

    Разрабатывать алгоритмы может только
    человек.

    Исполняют
    алгоритмы люди и всевозможные устройства — компьютеры, роботы,

    станки, спутники,
    сложная бытовая техника и т.д.

    Исполнитель2 устройство,
    способное выполнять определённый набор команд.

    Команды, которые
    может выполнить конкретный исполнитель, образуют систему

    команд исполнителя
    (СКИ).

                 Среди    автоматических   устройств    наиболее    совершенными   исполнителями

    являются   роботы.   Во   многих   случаях   и   сам   человек   является   исполнителем

    алгоритмов.

    обозначения:

    Целая часть3

    [x]

    Дробная часть4

    {x}

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

    1.    
    Теория:
    Алгоритмы

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

    a.       Исполнитель
    Редактор

    b.      Исполнитель
    Чертёжник

    c.       Остановка в
    заданной клетке, циклы с оператором ПОКА

    d.      Нестандартные
    задачи

    e.       Остановка в
    заданной клетке, циклы с операторами ПОКА
    и ЕСЛИ

    f.       
    Остановка в клетке, из которой начато движение

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

    B14-d — Анализ алгоритма для Чертёжника B12-
    Анализ алгоритма для Редактора

    Содержание:

    Исполнитель
    “РЕДАКТОР”

    Исполнитель
    “ЧЕРТЁЖНИК”

    Исполнитель
    “РОБОТ”

    1 
    Что такое алгоритм

    2 
    Разнообразие исполнителей

    3 
    Wiki. Целая часть

    4 
    Wiki. Дробная часть

    Исполнитель “РЕДАКТОР

    Редактор может
    выполнять две команды, в обеих командах v и w обозначают

    цепочки цифр.

    А) заменить (v, w)

    Эта команда заменяет в
    строке первое слева вхождение цепочки v на
    цепочку w.

    Например,
    выполнение команды заменить (111, 27) преобразует строку 05111150 в
    строку 0527150.

    Если в строке нет вхождений цепочки v,
    то выполнение команды заменить (v, w) не меняет эту строку.

    Б) нашлось (v)

    Эта команда проверяет, встречается ли
    цепочка v в строке исполнителя Редактор. Если она
    встречается, то команда возвращает логическое значение «истина», в противном
    случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.

    ПОКА условие последовательность

    команд

    КОНЕЦ ПОКА

    Цикл выполняется,
    пока условие истинно

    ЕСЛИ условие

    ТО команда1

    ИНАЧЕ
    команда2 КОНЕЦ
    ЕСЛИ

    В конструкции ЕСЛИ выполняется команда1
    (если условие истинно) или команда2 (если условие ложно).

    РЕКОМЕНДАЦИИ для решения задач
    исполнителя РЕДАКТОР:

    Задачи данного типа можно решать
    следующими способами:

    1. аналитически (без
    применения информационных технологий);

    2. в ручном режиме в
    текстовом редакторе
    , например, Блокнот, TextEdit и др.:

    a. создать строку
    символов;

    b. имитируя действия исполнителя, применить к строке
    заданную программу.

    3. перевести программу на
    язык программирования
    .

    на языке исполнителя РЕДАКТОР

    на языка программирования Python

    ПОКА условие последовательность команд КОНЕЦ
    ПОКА

    while <условие> :

    последовательность
    команд

    ЕСЛИ условие

    ТО команда1

    ИНАЧЕ
    команда2 КОНЕЦ
    ЕСЛИ

    if <условие>:

    команда1 else:

    команда2

    заменить (v, w)

    S.replace(v,
    w, 1
    )

    Метод replace[1]

    Метод replace
    заменяет
    все вхождения одной строки на другую.

    Формат: S.replace(old,
    new)
    — заменить в строке S
    все
    вхождения подстроки
    old на

    подстроку new.

    S.replace(old, new,
    count)
    – заменены будут не все вхождения, а только не
    больше,

    чем первые count
    из
    них.

    За да ние № 12
    (ДЕМО ФИПИ КЕГЭ 2021)

    (соответствует за дан ию № 14 ДЕМО ЕГЭ-2020 ФИПИ)

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

    строке, состоящей из 70
    идущих подряд цифр 8
    ? В ответе запишите полученную

    строку.

    решение на Python:

    НАЧАЛО

    ПОКА нашлось
    (2222) ИЛИ нашлось (8888)

    ЕСЛИ нашлось
    (2222)

    ТО заменить
    (2222, 88)

    ИНАЧЕ заменить
    (8888, 22)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА КОНЕЦ

    Решение:

    Действие

    Результат

    1.

    нашлось (8888):

    заменить (8888, 22), заменить (8888, 22)

    22228…888  (70 — 8 =
    62 цифр 8)

    2.

    нашлось (2222):

    заменить (2222, 88)

    888…888  (62 + 2 = 64
    цифр 8)

    В результате выполнения
    блока команд (за один период) строка, состоящая из идущих подряд цифр 8,
    сокращается на (70 — 64) 6 символов.

    Выполним целочисленное деление 70 на 6:
    Целая часть – [70 / 6] = 11, остаток  – {70 / 6} = 4. За 11 периодов строка сократится
    до 4 символов: 8888

    n

    нашлось (8888):

    заменить (8888, 22)

    22

    Ответ:
    22

    Задание 12 № 36025 (ЕГЭ−2021. Досрочная
    волна)

    Дана программа для
    Редактора:

    НАЧАЛО                                                                         решение
    на Python:

    ПОКА нашлось (1111) ИЛИ нашлось (88888)

    ЕСЛИ
    нашлось (1111)

    ТО
    заменить (1111, 888)

    ИНАЧЕ
    заменить (88888, 888)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ

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

    строке, состоящей из 81
    идущей подряд цифры 1
    ? В ответе запишите полученную

    строку.

    Решение:

    Действие

    Результат

    1.

    нашлось (1111):

    заменить (1111, 888), заменить (1111,
    888), …

    8888…881

    60

    [81/4] = 20 раз “1111”
    заменяются “888”
    60 цифр “8”; {81/4} =
    1 – в конце остается “1”

    2.

    нашлось (88888):

    заменить (88888, 888), …

    88888888…88881

    36

    [60/5] = 12 раз “88888”
    заменяются на “888” и {60/5} = 0 –

    36 цифр “8”

    3.

    нашлось (88888):

    заменить (88888, 888), …

    88888…881

    22

    [36/5] = 7 раз “88888”
    заменяются на “888”, {36/5} = 1  –

    22 цифры “8”

    4.

    нашлось (88888):

    заменить (88888, 888), …

    888888888888881

    14

    [22/5] = 4 раза “88888”
    заменяются на “888”, {22/5} = 2  –

    14 цифр “8”

    5.

    нашлось (88888):

    заменить (88888, 888), …

    88888888881

    10

    [14/5] = 2 раза “88888”
    заменяются на “888”, {14/5} = 4  –

    10 цифр “8”

    6.

    нашлось (88888):

    заменить (88888, 888), …

    8888881

    6

    [10/5] = 2 раза “88888”
    заменяются на “888”, {10/5} = 0  –

    6 цифр “8”

    7.

    нашлось (88888):

    заменить (88888, 888), …

    88881

    4

    [6/5] = 1 раз “88888”
    заменяются на “888”, {6/5} = 1  –

    4 цифры “8”

    Ответ: 88881 Разбор заданий
    № 12.
    Готовимся к итоговой аттестации 2021.
    Лещинер, В.Р.
    [2]

    Вариант № 1

    На
    вход приведённой ниже программы поступает строка, начинающаяся с символа

    “>”, а затем
    содержащая 26 цифр 1, 10 цифр 2 и 14 цифр 3,
    расположенных в

    произвольном порядке.
    Определите сумму числовых значений цифр строки,

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

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

    цифр 4, то верным
    ответом было бы число 200.

    НАЧАЛО

    ПОКА нашлось
    (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>3)

    ЕСЛИ
    нашлось (>1)

    ТО заменить
    (>1,22>)

    КОНЕЦ
    ЕСЛИ

    ЕСЛИ
    нашлось (>2)

    ТО заменить
    (>2, 2>)

    КОНЕЦ
    ЕСЛИ

    ЕСЛИ нашлось
    (>3)

    ТО заменить
    (>3, 1>)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ

    Решение (решение
    на Python:
    ):

    Ответ:
    138

    Вариант № 2

    На вход
    приведённой ниже программы поступает строка из 180 цифр, содержащая

    по 60 цифр 4, 6
    и 8, расположенных в произвольном порядке.

    Определите, какие цифры будут находиться
    на 25-м, 75-м и 150-м местах
    строки,

    получившейся в
    результате выполнения программы. Цифры в строке нумеруются

    последовательно слева направо, самая левая имеет
    номер 1, следующая — номер 2 и т.д.

    В ответе запишите три полученные цифры
    подряд без пробелов и разделителей в

    порядке возрас тания
    номеров их мест в получившейся строке.

    Так, например, если бы на 25-м месте стояла
    цифра 1, на 75-м — 2, а на 150-м — 3, то был бы ответ 123.

    НАЧАЛО

    ПОКА нашлось
    (46) ИЛИ нашлось (84) ИЛИ нашлось (86)

    ЕСЛИ нашлось
    (46)

    ТО заменить
    (46, 64)

    КОНЕЦ
    ЕСЛИ

    ЕСЛИ нашлось
    (84)

    ТО заменить
    (84, 48)

    КОНЕЦ
    ЕСЛИ

    ЕСЛИ нашлось
    (86)

    ТО заменить
    (86, 68)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ

    Решение (решение
    на Python)
    :

    Ответ:
    648

    Пример № 3

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

    стро ке, состоящей из 68
    идущих подряд цифр 8? В ответе запишите полученную

    строку.

    НАЧАЛО

    ПОКА нашлось
    (222) ИЛИ нашлось (888)

    ЕСЛИ нашлось
    (222)

    ТО заменить
    (222, 8)

    ИНАЧЕ заменить
    (888, 2)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ

    Решение (решение
    на Python)
    :

    Ответ:
    28

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

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

    строке, состоящей из 82
    идущих подряд цифр 1
    ? В ответе запишите полученную

    строку.

    НАЧАЛО

    ПОКА нашлось (11111) ИЛИ
    нашлось (888)

    ЕСЛИ нашлось
    (11111)

    ТО заменить
    (11111, 88)

    ИНАЧЕ

    ЕСЛИ нашлось
    (888)

    ТО заменить
    (888, 8)

    КОНЕЦ ЕСЛИ

    КОНЕЦ ЕСЛИ

    КОНЕЦ ПОКА

    КОНЕЦ

    решение на Python:

    Решение:

    Действие

    Результат

    1.

    нашлось (11111):

    заменить (11111, 88), заменить (11111,
    88), …

    8888…8811

    32

    [82/5] = 16 раз “11111”
    заменяются “88”
    32 цифры “8”; {82/5} =
    2 – в конце остается “11”

    2.

    нашлось (888):

    заменить (888, 8), …

    88888888888811

    12

    [32/3] = 10 раз “888”
    заменяются на “8” и {32/3} = 2 – в конце остается “88”

    12 цифр “8”

    3.

    нашлось (888):

    заменить (888, 8), …

    888811

    [12/3] = 4 раза “888”
    заменяются на “8”, {12/3} = 0

    4.

    нашлось (888):

    заменить (888, 8)

    8811

    Ответ:
    8811

    Разбор заданий № 14. СтатГрад.
    Подготовка к ЕГЭ 2019[3]

    Вариант 1

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

    строке, состоящей из 85
    идущих подряд цифр 7
    ? В ответе запишите полученную

    строку.

    НАЧАЛО

    ПОКА
    нашлось (333) ИЛИ нашлось (777)

    ЕСЛИ
    нашлось (333)

    ТО
    заменить (333, 7)

    ИНАЧЕ
    заменить (777, 3)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ Решение:

    Действие

    Результат

    1.

    нашлось (777):

    заменить (777, 3), заменить (777, 3), заменить
    (777, 3)

    333777…777  (85 — 9 = 76 цифр 7)

    2.

    нашлось (333):

    заменить (333, 7)

    777…777 (76 +1 = 77 цифр 7)

    В результате выполнения
    блока команд (за один период) строка, состоящая из идущих подряд цифр 7,
    сокращается на (85 — 77) 8 символов.

    Выполним целочисленное деление 85 на 8:
    Целая часть – [85 / 8] = 10, остаток  – {85 / 8} = 5. За 10 периодов строка
    сократится до 5 символов: 77777

    n

    нашлось (777):

    заменить (777, 3)

    377

    Ответ:
    377

    Вариант 2

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

    строке, состоящей из 76
    идущих подряд цифр 9
    ? В ответе запишите полученную

    строку.

    НАЧАЛО

    ПОКА нашлось
    (666) ИЛИ нашлось (999)

    ЕСЛИ нашлось
    (666)

    ТО заменить
    (666, 9)

    ИНАЧЕ заменить
    (999, 6)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ

    Решение:

    Действие

    Результат

    1.

    нашлось (999):

    заменить (999, 6), заменить (999, 6), заменить
    (999, 6)

    666999…999  (76 — 9 = 67 цифр 9)

    2.

    нашлось (666):

    заменить (666, 9)

    999…999 (67 +1 = 68 цифр 9)

    В
    результате выполнения блока команд (за один период) строка, состоящая из
    идущих подряд цифр 9, сокращается на (76 — 68) 8 символов.

    Выполним целочисленное
    деление 76 на 8: Целая часть – [76 / 8] = 9, остаток  – {76 / 8} = 4. За 9
    периодов строка сократится до 4 символов: 9999

    n

    нашлось (999):

    заменить (999, 6)

    69

    Решение на Python:

    Ответ:
    69

    Вариант 3

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

    строке, состоящей из 1…12…2
    (8 единиц, затем 8 двоек)
    ? В ответе запишите

    полученную строку.

    НАЧАЛО

    ПОКА нашлось
    (111) ИЛИ нашлось (222)

    ЕСЛИ нашлось
    (111)

    ТО заменить
    (111, 2)

    КОНЕЦ
    ЕСЛИ

    ЕСЛИ нашлось
    (222)

    ТО заменить
    (222, 1)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ Решение:

    Дано: 1111111122222222

    Действие

    Результат

    1.

    нашлось (111):

    заменить (111, 2), заменить (111, 2), …

    221122222222

    2.

    нашлось (222):

    заменить (222, 1)

    2211122222  (8 —
    3 = 5 цифр 2)

    3.

    нашлось (111):

    заменить (111, 2)

    22222222      (5
    + 3 = 8 цифр 2)

    4.

    нашлось (222):

    заменить (222, 1), заменить (222, 1)

    1122

    Ответ:
    1122

    Вариант 4

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

    строке, состоящей из 1…12…2
    (7 единиц, затем 7 двоек)
    ? В ответе запишите

    полученную строку.

    НАЧАЛО

    ПОКА нашлось
    (111) ИЛИ нашлось (222)

    ЕСЛИ нашлось
    (111)

    ТО заменить
    (111, 2)

    КОНЕЦ
    ЕСЛИ

    ЕСЛИ нашлось
    (222)

    ТО заменить
    (222, 1)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ

    Решение:

    Дано: 11111112222222

    Действие

    Результат

    1.

    нашлось (111):

    заменить (111, 2), заменить (111, 2)

    2212222222

    2.

    нашлось (222):

    заменить (222, 1), заменить (222, 1)

    221112

    3.

    нашлось (111):

    заменить (111, 2)

    2222

    4.

    нашлось (222):

    заменить (222, 1)

    12

    Ответ:
    12

    Вариант 5

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

    строке, состоящей из 77
    единиц
    ? В ответе запишите полученную строку.

    НАЧАЛО

    ПОКА нашлось
    (11)

    ЕСЛИ нашлось
    (222)

    ТО
    заменить (222, 1)

    ИНАЧЕ
    заменить (11, 2)

    КОНЕЦ
    ЕСЛИ КОНЕЦ ПОКА КОНЕЦ
    Решение:

    Дано: 1111…1111

    Действие

    Результат

    1.

    нашлось (11):

    заменить (11, 2), заменить (11, 2), заменить
    (11, 2)

    22211…1111  (77 — 6 = 71 цифра
    1)

    2.

    нашлось (11):

    нашлось
    (222): заменить (222, 1)

    111…1111  (71 + 1 = 72 цифры 1)

    3.

    нашлось (11):

    заменить (11, 2), заменить (11, 2), заменить
    (11, 2)

    22211…1111  (72 — 6 = 66 цифра 1)

    4.

    нашлось (11):

    нашлось
    (222): заменить (222, 1)

    111…1111  (66 + 1 = 67 цифры 1)

    В
    результате выполнения блока команд (за один период) строка, состоящая из
    идущих подряд цифр 1, сокращается на (71 — 66) 5 символов: 11111 (и вначале
    222)

    Выполним целочисленное
    деление 71 на 5: Целая часть – [71 / 5] = 14, остаток  – {71 / 5} = 1. За 14
    периодов строка сократится до 4 символов : 2221

    Ответ:
    2221

    Вариант 6

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

    строке, состоящей из 99
    единиц
    ? В ответе запишите полученную строку.

    НАЧАЛО

    ПОКА нашлось
    (111)

    ЕСЛИ нашлось
    (222)

    ТО
    заменить (222, 1)

    ИНАЧЕ
    заменить (111, 2)

    КОНЕЦ
    ЕСЛИ КОНЕЦ ПОКА КОНЕЦ

    Решение:

    Дано: 1111…1111

    Действие

    Результат

    1.

    нашлось (111):

    заменить (111, 2), заменить (111, 2), заменить
    (111, 2)

    22211…1111  (99 — 9 = 90 цифр 1)

    2.

    нашлось (111):

    нашлось
    (222): заменить (222, 1)

    111…1111  (90 + 1 = 91 цифра 1)

    3.

    нашлось (111):

    заменить (111, 2), заменить (111, 2), заменить
    (111, 2)

    22211…1111  (91 — 9 = 82 цифры 1)

    4.

    нашлось (111):

    нашлось
    (222): заменить (222, 1)

    111…1111  (82 + 1 = 83 цифры 1)

    В
    результате выполнения блока команд (за один период) строка, состоящая из
    идущих подряд цифр 1, сокращается на (90 — 82) 8 символов: 1 и вначале 222

    Выполним целочисленное
    деление 90 на 8: Целая часть – [90 / 8] = 11, остаток  – {90 / 8} = 2. За 11
    периодов строка сократится до 5 символов : 22211

    Ответ:
    22211

    Разбор заданий № 14. ЕГЭ 2020.
    Информатика. Ушаков Д.М. 10 тренировочных вариантов[4]

    Вариант № 3

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

    строке, состоящей из 80
    идущих подряд цифр 7
    ? В ответе запишите полученную

    строку.

    НАЧАЛО

    ПОКА нашлось
    (777) ИЛИ нашлось (888)

    ЕСЛИ нашлось
    (777)

    ТО заменить
    (777, 8)

    ИНАЧЕ заменить
    (888, 7)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ Решение:

    Действие

    Результат

    1.

    нашлось (777):

    заменить (777, 8), заменить (777, 8), заменить
    (777, 8), …

    88888…8877

    26

    [80/3] = 26 раз “777” заменяются на “8” и в конце
    строки остается {80/3} = 2 цифры “7”

    2.

    нашлось (888):

    заменить (888, 7), заменить (888, 7), заменить
    (888, 7)

    777888…8877

    17

    3.

    нашлось (777):

    заменить (777, 8)

    888…8877

    18

    В результате выполнения блока команд {2 и 3}, т.е.
    за один период строка, состоящая из идущих подряд цифр 8, сокращается на (26
    — 18) 8 символов.

    Выполним целочисленное деление 26 на 8:
    Целая часть – [26 / 8] = 3, остаток  – {26 / 8} = 2. В результате остается
    “88” и в конце “77”
    8877

    Ответ:
    8877

    Вариант № 4

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

    строке, состоящей из 70
    идущих подряд цифр 5
    ? В ответе запишите полученную

    строку.

    НАЧАЛО

    ПОКА нашлось
    (555) ИЛИ нашлось (444)

    ЕСЛИ нашлось
    (555)

    ТО заменить
    (555, 4)

    ИНАЧЕ заменить
    (444, 5)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ Решение:

    Действие

    Результат

    1.

    нашлось (555):

    заменить (555, 4), , заменить (555,
    4)

    444444444444444444444445
    23 “4” и 1 “5”

    По ветви “ТО” проходим строку до конца:

    [70/3] = 23 – количество цифр “4”; {70 / 3} = 1–
    цифра “5”

    2.

    нашлось (444):

    заменить (444, 5), заменить (444, 5), заменить
    (444, 5)

    555444444444444445

    14
    цифр “4”

    По ветви “ИНАЧЕ” заменяем 9 цифр “4” на 3 цифры “5”

    3

    нашлось (555):

    заменить (555, 4)

    4444444444444445

    15
    цифр “4”

    В результате выполнения блока команд {2 и 3}, т.е.
    за один период, строка, состоящая из идущих подряд цифр 4, сокращается на (23
    — 15) 8 символов.

    Выполним целочисленное деление 23 на 8: Целая часть
    – [23 / 8] = 2,

    остаток  – {23 / 8} = 7. За 2 периода строка
    сократится до 7 “4” и одной  “5” в конце строки:
    44444445

    n

    нашлось (444):

    заменить (444, 5), заменить (444, 5)

    5545

    Ответ:
    5545

    Вариант № 8

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

    строке, состоящей из 65
    идущих подряд цифр 4
    ? В ответе запишите полученную

    строку.

    Действие

    Результат

    1.

    нашлось (444):

    заменить (444, 5), , заменить (444,
    5)

    55555555555555555555544

    “5”
    и 2 “4”

    По ветви “ТО” проходим строку до конца:

    [65/3] = 21 – количество цифр “5”; {65 / 3} = 2 –
    цифр “4”

    2.

    нашлось (555):

    заменить (555, 4), заменить (555, 4), заменить
    (555, 4)

    44455555555555544

    цифр
    “5”

    По ветви “ИНАЧЕ” заменяем 9 цифр “5” на 3 цифры “4”

    3

    нашлось (444):

    заменить (444, 5)

    555555555555544

    цифр
    “5”

    В результате выполнения блока команд {2 и 3}, т.е.
    за один период, строка, состоящая из идущих подряд цифр 5, сокращается на (21
    — 13) 8 символов.

    Выполним целочисленное деление 21 на 8: Целая часть
    – [21 / 8] = 2,

    остаток  – {21 / 8} = 5. За 2 периода строка
    сократится до 5 “5” и двух  “4” в конце строки:
    5555544

    n

    нашлось (555):

    заменить (555, 1), заменить (444, 5)

    45544

    НАЧАЛО

    ПОКА нашлось
    (444) ИЛИ нашлось (555)

    ЕСЛИ нашлось
    (444)

    ТО заменить
    (444, 5)

    ИНАЧЕ заменить
    (555, 4)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ Решение:

    Ответ:
    45544

    Вариант № 9

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

    строке, состоящей из 69
    идущих подряд цифр 7
    ? В ответе запишите полученную

    строку.

    НАЧАЛО

    ПОКА нашлось
    (777) ИЛИ нашлось (888)

    ЕСЛИ нашлось
    (888)

    ТО заменить
    (888, 7)

    ИНАЧЕ заменить
    (777, 8)

    КОНЕЦ
    ЕСЛИ

    КОНЕЦ
    ПОКА

    КОНЕЦ Решение:

    Действие

    Результат

    1.

    нашлось (777):

    заменить (777, 8), заменить (777, 8), заменить
    (777, 8)

    8887…77  (69 — 9 = 60
    цифр”7”)

    2.

    нашлось (888):

    заменить (888, 7)

    777…77 (60 + 1 = 61
    цифра “7”)

    В результате выполнения
    блока команд (за один период) строка, состоящая из идущих подряд цифр 7,
    сокращается на (69 — 61) 8 символов.

    Выполним целочисленное деление 69 на 8:
    Целая часть – [69 / 8] = 8, остаток  – {69 / 8} = 5. За 8 периодов строка сократится
    до 5 символов: 77777

    n

    нашлось (777):

    заменить (777, 8)

    877

    Ответ:
    877

    Исполнитель “ЧЕРТЁЖНИК

    Исполнитель Чертёжник
    перемещается на координатной плоскости, оставляя след в

    виде линии. Чертёжник может выполнять команду
    сместиться на (a, b), где a, b –

    целые
    числа. Эта команда перемещает Чертёжника из точки с координатами (x,y)
    в

    точку с координатами (x + a, y + b). Если числа a, b
    по ло жи тель ные, зна че ние

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

    Например,
    если Чертёжник находится в точке с координатами (4, 2), то команда сместиться

    на (2, −3) переместит
    Чертёжника в точку (6, −1).

    ПОВТОРИ число РАЗ

    последовательность
    команд

    КОНЕЦ
    ПОВТОРИ

    Цикл означает, что
    последовательность команд будет выполнена указанное число раз (число должно
    быть натуральным).

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

    Чертёжнику был дан для исполнения
    следующий алгоритм (число повторений и

    величины смещения в
    первой из повторяемых команд неизвестны):

    НАЧАЛО

    сместиться на (4, 6)

    ПОВТОРИ РАЗ

    сместиться на (…, …)

    сместиться на (4,
    -6)

    КОНЕЦ ПОВТОРИ

    сместиться на (-28,
    -22)

    КОНЕЦ

    В результате выполнения этого алгоритма
    Чертёжник возвращается в исходную

    точку. Какое
    наибольшее число повторений могло быть указано в конструкции

    «ПОВТОРИ
    … РАЗ
    »?

    Решение:

    Действие

    Описание

    (x, y)

    — исходная точка

    (x + 4, y + 6)

    сместиться на (4,
    6)

    n × (x1+ 4,
    y
    1 — 6)

    цикл ПОВТОРИ

    где n — количество
    повторений, (x
    1, y1)
    — смещение

    x + 4 +
    n × (x
    1+ 4)
    – 28 = x y + 6 + n × (y
    1

    6) – 22 = y

    — система уравнений

    n ×
    (x
    1 + 4)
    = 24 n × (y
    1 – 6) = 16 n = НОД(16, 24) = 8

    n – наибольший общий
    делитель чисел 24 и 16

    Решение
    (2 вариант)

    1.    
    Сложим
    смещения до и после выполнения цикла. Получим числа
    -24 и -16.

    2.    
    n
    = НОД(16, 24) = 8.

    Ответ:
    8

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

    Вариант № 5

    Чертёжнику был дан для исполнения
    следующий алгоритм (буквами n, a, b

    обозначены неизвестные
    числа, при этом n >1):

    НАЧАЛО

    сместиться на (-5,
    8)

    ПОВТОРИ n РАЗ

    сместиться на (a,
    b
    )

    сместиться на (14,
    18)

    КОНЕЦ ПОВТОРИ

    сместиться на (-16,
    -23)

    КОНЕЦ

    Укажите наименьшее возможное
    значение числа n, для которого найдутся такие

    значения чисел a и
    b, что после выполнения программы Чертёжник возвратится в

    исходную точку.

    Решение:

    Действие

    Описание

    (x, y)

    — исходная точка

    (x – 5, y + 8)

    сместиться на (-5,
    8)

    n × (a+ 14, b + 18)

    цикл ПОВТОРИ

    x – 5 + n × (a+ 14) – 16 = x y + 8 + n × (b +
    18) – 23 = y

    — система уравнений

    n × (a + 14) = 21 n × (b +
    18) = 15

    n = НОД(15, 21) = 3

    n – наименьший общий
    делитель чисел 21 и 15, при n > 1

    Решение
    (2 вариант)

    1.    
    Сложим
    смещения до и после выполнения цикла. Получим числа — 21 и -15.

    2.    
    n
    = НОД(15, 21) = 3.

    Ответ:
    3

    Вариант № 10

    Чертёжнику был дан для исполнения
    следующий алгоритм (буквами n, a, b

    обозначены неизвестные
    числа, при этом n >1):

    НАЧАЛО

    сместиться на (12,
    -2)

    ПОВТОРИ n РАЗ

    сместиться на (a,
    b
    )

    сместиться на (12,
    8)

    КОНЕЦ ПОВТОРИ

    сместиться на (-47,
    -18)

    КОНЕЦ

    Укажите наименьшее возможное
    значение числа n, для которого найдутся такие

    значения чисел a и
    b, что после выполнения программы Чертёжник возвратится в

    исходную точку.

    Решение:

    Действие

    Описание

    (x, y)

    — исходная точка

    (x + 12, y – 2)

    сместиться на (12,
    -2)

    n × (a+ 12, b + 8)

    цикл ПОВТОРИ

    x + 12 + n × (a+ 12) – 47 = x y – 2 + n × (b
    + 8) – 18 = y

    — система уравнений

    n × (a + 12) = 35 n × (b +
    8) = 20

    n = НОД(20, 35) = 5

    n – наименьший общий
    делитель чисел 35 и 20, при n > 1

    Решение
    (2 вариант)

    1.    
    Сложим
    смещения до и после выполнения цикла. Получим числа — 35 и -20.

    2.    
    n
    = НОД(20, 35) = 5.

    Ответ:
    5

    Исполнитель РОБОТ

    Система команд исполнителя РОБОТ:

    Перемещение на
    одну клетку
    в прямоугольном лабиринте на клетчатой
    плоскости:

    вверх

    вниз

    влево

    вправо

    Проверка истинности
    условия
    отсутствия стены у той клетки, где находится РОБОТ:

    сверху
    свободно

    снизу
    свободно

    слева
    свободно

    справа
    свободно

    Цикл                                                              Цикл
    ПОКА
    выполняется,
    пока условие

    ПОКА
    <условие> истинно,
    иначе происходит переход на
    последовательность команд         следующую
    строку.

    КОНЕЦ ПОКА

    Если РОБОТ начнёт
    движение в сторону стены, то он разрушится и программа

    прервётся.

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

    Вариант № 1

    Сколько
    клеток
    приведённого лабиринта соответствует
    требованию, что, выполнив

    предложенную ниже
    программу
    РОБОТ остановится в
    той же клетке
    , с которой он

    начал движение?

    НАЧАЛО

    ПОКА <сверху
    свободно
    > вправо

    ПОКА <справа
    свободно
    > вниз

    ПОКА <снизу
    свободно
    > влево

    ПОКА <слева
    свободно
    > вверх

    КОНЕЦ

    Решение:

    Ответ:
    4

    Вариант № 2

    Сколько
    клеток
    лабиринта соответствует требованию, что,
    начав движение в ней и

    выполнив предложенную
    программу,
    РОБОТ уцелеет и остановится
    в закрашенной

    клетке (клетка
    F6)?

    НАЧАЛО

    ПОКА <справа
    свободно ИЛИ снизу свободно
    >

    ПОКА <справа
    свободно
    >

    вправо

    КОНЕЦ ПОКА

    ПОКА <снизу
    свободно
    >

    вниз

    КОНЕЦ ПОКА

    КОНЕЦ ПОКА

    КОНЕЦ

    Решение:

    Ответ:
    27

    Вариант № 6

    Сколько
    клеток
    приведённого лабиринта соответствует
    требованию, что, выполнив

    предложенную ниже
    программу,
    РОБОТ остановится в той же
    клетке, с которой он

    начал движение?

    НАЧАЛО

    ПОКА <слева
    свободно
    > вверх

    ПОКА <сверху
    свободно
    > вправо

    ПОКА <справа
    свободно
    > вниз

    ПОКА <снизу
    свободно
    > влево

    КОНЕЦ

    Решение:

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

    Сколько
    клеток
    лабиринта соответствует требованию, что,
    начав движение в ней и

    выполнив предложенную
    программу,
    РОБОТ уцелеет и остановится
    в закрашенной

    клетке (клетка
    F6)?

    НАЧАЛО

    ПОКА <справа
    свободно ИЛИ снизу свободно
    >

    ПОКА <справа
    свободно
    >

    вправо

    КОНЕЦ ПОКА

    влево

    ПОКА <снизу
    свободно
    >

    вниз

    КОНЕЦ ПОКА

    ЕСЛИ <справа
    свободно
    >

    вправо

    КОНЕЦ ЕСЛИ

    КОНЕЦ ПОКА

    КОНЕЦ

    Решение:

    Ответ:
    22

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

    Algo_970x90-20219-0c5b45.png

    Те же мореплаватели, создавая карты, делали это в соответствии с единой системой обозначений — это позволяло обмениваться информацией друг с другом. То же самое справедливо и для визуального отображения схем алгоритмов — существуют правила, единые обозначения и стандарты, регламентирующие их применение. В России это ГОСТ 19.701-90 «Схемы алгоритмов программ, данных и систем», который близок к международному стандарту ISO 5807:1985.

    Главные элементы блок-схем алгоритмов

    Прежде чем продолжить, стоит дать определение блок-схемы в соответствии со стандартом — речь идёт о совокупности символов, которые отвечают этапам работы алгоритма, причём эти символы имеют соединяющие линии:
    пунктирную — для соединения с комментарием;
    сплошную — отображает зависимости по управлению, допускается наличие на ней стрелки. В соответствии со стандартом составитель может не указывать стрелку, если дуга направляется сверху вниз или слева направо.

    Также существуют и дополнительные виды линий, которые применяются, когда надо дать описание блок-схемам параллельных алгоритмов, однако в этой статье мы их рассматривать не будем, как и ряд других дополнительных спецсимволов.

    В таблице ниже дан перечень основных символов, используемых при описании алгоритмов:

    Screenshot_1-1801-c116d0.png

    Задача и блок-схема алгоритма

    На картинке ниже дан алгоритм в виде схемы. В нем мы видим оператор присваивания :=, то есть X := 1 будет означать, что переменная Х примет значение 1. По результату алгоритмических действий надо определить итог работы представленного алгоритма, используя следующие входные данные: Х = 7, Y = 12.

    Схема этого алгоритма и решение задачи будут выглядеть следующим образом:

    Screenshot_2-1801-de2c25.png

    Смотрим, как следует решать подобное задание:
    1. Блок ввода данных определяет исходные значения Х и Y (в соответствии с условием это 7 и 12).
    2. В первом блоке значения Х и Y сравниваются. Так как условие не является верным (7 < 12), осуществляется переход по линии с пометкой «нет».
    3. Второй блок служит для второго сравнения — оно верное, в результате чего следующее действие — это переход по линии с отметкой «да».
    4. Следующий этап является заключительным, то есть происходит вычисление результата работы алгоритма. По итогу всех вышеописанных действий мы получаем окончательный ответ, не требующий дополнительных вычислений: X := 0, Y := 1.

    Algo_970x90-20219-0c5b45.png

    Решение алгоритма сортировки пузырьком

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

    Screenshot_3-1801-3fbca6.png

    На схеме отображено применение символов конца и начала цикла. Здесь условие внешнего цикла (А) проверяется в конце (с постусловием), а функционирует он до тех пор, пока переменная hasSwapped является true. Во внутреннем цикле используется предусловие для перебора пар элементов, которые сравниваются. Если они располагаются в неправильном порядке, они переставляются путём вызова внешней процедуры (swap). Для понимания назначения внешней процедуры, как и порядка следования аргументов этой процедуры, нужно оставлять комментарии. Если функция возвращает значение, то комментарий можно написать к символу-терминатору конца.

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

    • https://uchitel.pro/алгоритм-свойства-алгоритмов/;
    • https://pro-prof.com/archives/1462.

    Algo_970x550-20219-265dfd.png

    Время выполнения

    6 часов

    Цель работы

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

    Задачи лабораторной работы

    После выполнения работы студент должен знать и уметь:

    • знать назначение алгоритма и его определение;
    • знать формы представления алгоритма;
    • уметь работать с основными алгоритмическими конструкциями;
    • уметь представлять алгоритм в виде блок-схемы;
    • уметь приводить примеры алгоритмов и применять их для построения блок-схем;
    • уметь составлять и записывать алгоритм одним из способов.

    Перечень обеспечивающих средств

    Для обеспечения выполнения работы необходимо иметь методические указания по выполнению работы. 

    Общие теоретические сведения

    Решение любой задачи на ЭВМ можно разбить на следующие этапы: разработка алгоритма решения задачи, составление программы решения задачи на алгоритмическом языке, ввод программы в ЭВМ, отладка программы (исправление ошибок), выполнение программы на ПК, анализ полученных результатов.

    Первый этап решения задачи состоит в разработке алгоритма.

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

    Алгоритм может быть описан одним из трех способов:

    • словесным (пример в начале раздела);
    • графическим (виде специальной блок-схемы);
    • с помощью специальных языков программирования.

    Блок-схема – распространенный тип схем, описывающий алгоритмы или процессы, изображая шаги в виде блоков различной формы, соединенных между собой стрелками.

    1. Линейный алгоритм – это такой алгоритм, в котором все операции выполняются последовательно одна за другой.
    2. Алгоритмы разветвленной структуры применяются, когда в зависимости от некоторого условия необходимо выполнить либо одно, либо другое действие.
    3. Алгоритмы циклической структуры.

    Циклом называют повторение одних и тех же действий (шагов). Последовательность действий, которые повторяются в цикле, называют телом цикла

    Циклические алгоритмы подразделяют на алгоритмы с предусловием, постусловием и алгоритмы с конечным числом повторов. В алгоритмах с предусловием сначала выполняется проверка условия окончания цикла и затем, в зависимости от результата проверки, выполняется (или не выполняется) так называемое тело цикла.

    Задание 1. Определить площадь трапеции по введенным значениям оснований (a и b) и высоты (h).

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

    нач

                    s:=((a+b)/2)*h

    кон 

    Запись алгоритма в виде блок-схемы (рис. 1):

    Рисунок 1. Блок-схема линейного алгоритма

    Задание 2. Определить среднее арифметическое двух чисел, если a положительное и частное (a/b) в противном случае.

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

    нач

    кон

    Запись алгоритма в виде блок-схемы (рис. 2):

    Рисунок 2. Блок-схема алгоритма с ветвлением

    Задание 3. Составить алгоритм нахождения суммы целых чисел в диапазоне от 1 до 10.

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

    нач

        S:=0;

        A:=1;

            S:=S+a;

            A:=a+1;

    кон

    Запись алгоритма в виде блок-схемы (рис. 3):

     Рисунок 3. Циклический алгоритм с предусловием

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

    нач

        S:=0;

        A:=1;

            S:=S+a;

            A:=a+1;

    кон

    Запись алгоритма в виде блок-схемы (рис. 4):

     Рисунок 4. Циклический алгоритм с постусловием

    Варианты задания

    Технология выполнения работы

    В рамках выполнения работы необходимо составить алгоритм решения задачи в виде блок-схемы и с помощью языка псевдокода.

    Содержание отчета

    1. Цель работы и задание.
    2. Условие задачи.
    3. Алгоритм, написанный с помощью псевдокода и блок- схемы.

    Вопросы для защиты работы

    1. Что такое алгоритм?
    2. Свойства алгоритма.
    3. Способы записи алгоритма.
    4. Основные элементы блок-схемы.
    5. Виды алгоритмов.
    6. Отличительные особенности алгоритмов с предусловием и постусловием.

    Понравилась статья? Поделить с друзьями:
  • Решу егэ биология синтез белка задания 27
  • Решу егэ википедия
  • Решу егэ блок социальные отношения
  • Решу егэ биология сердце человека
  • Решу егэ виды экономической деятельности