Решу егэ информатика циклы


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

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

1

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

Си++ Python

#include <iostream>

using namespace std;

int main() {

    int s, n;

    cin >> s;

    s = s / 10;

    n = 1 ;

    while (s < 51) {

        s = s + 5;

        n = n * 2;

    }

    cout << n << endl;

    return 0;

}

s = int(input())

s = s // 10

n = 1

while s < 51:

    s = s + 5

    n = n * 2

print(n)

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

var s, n: integer;

begin

    readln (s);

    s := s div 10;

    n := 1;

    while s < 51 do

    begin

        s := s + 5;

        n := n * 2

    end;

    writeln(n)

end.

алг

нач

    цел n, s

    ввод s

    s := div( s, 10)

    n := 1

    нц пока s < 51

        s := s + 5

        n := n * 2

    кц

    вывод n

кон

Источник: Демонстрационная версия ЕГЭ−2021 по информатике, Демонстрационная версия ЕГЭ−2022 по информатике


2

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

Бейсик Python

DIM S, N AS INTEGER

INPUT X

N = 4

WHILE S < 37

    S = S + 3

    N = N * 2

WEND

PRINT N

s = int(input())

n = 4

while s < 37:

    s = s + 3

    n = n * 2

print(n)

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

var s, n: integer;

begin

    readln(s);

    n := 4;

    while s < 37 do

    begin

        s := s + 3;

        n := n * 2

    end;

    writeln(n)

end.

алг

нач

    цел n, s

    ввод s

    n := 4

    нц пока s < 37

        s := s + 3

        n := n * 2

    кц

    вывод n

кон

Си++

#include <iostream>

using namespace std;

int main()

{

int s;

cin >> s;

int n = 4;

    while (s < 37) { s = s + 3; n = n * 2; }

    cout << n << endl;

    return 0;

}


3

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

Бейсик Python

DIM S, N AS INTEGER

INPUT X

N = 1

WHILE S < 51

    S = S + 5

    N = N * 2

WEND

PRINT N

s = int(input())

n = 1

while s < 51:

    s = s + 5

    n = n * 2

print(n)

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

var s, n: integer;

begin

    readln(s);

    n := 1;

    while s < 51 do

    begin

        s := s + 5;

        n := n * 2

    end;

    writeln(n)

end.

алг

нач

    цел n, s

    ввод s

    n := 1

    нц пока s < 51

        s := s + 5

        n := n * 2

    кц

    вывод n

кон

Си++

#include <iostream>

using namespace std;

int main()

{

int s;

cin >> s;

int n = 1;

    while (s < 51) { s = s + 5; n = n * 2; }

    cout << n << endl;

    return 0;

}


4

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

Бейсик Python

DIM S, N AS INTEGER

INPUT X

N = 2

WHILE S < 37

    S = S + 3

    N = N * 2

WEND

PRINT N

s = int(input())

n = 2

while s < 37:

    s = s + 3

    n = n * 2

print(n)

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

var s, n: integer;

begin

    readln(s);

    n := 2;

    while s < 37 do

    begin

        s := s + 3;

        n := n * 2

    end;

    writeln(n)

end.

алг

нач

    цел n, s

    ввод s

    n := 2

    нц пока s < 37

        s := s + 3

        n := n * 2

    кц

    вывод n

кон

Си++

#include <iostream>

using namespace std;

int main()

{

int s;

cin >> s;

int n = 2;

    while (s < 37) { s = s + 3; n = n * 2; }

    cout << n << endl;

    return 0;

}


5

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

Бейсик Python

DIM S, N AS INTEGER

INPUT S

N = 36

WHILE S < 2020

    S = S * 2

    N = N + 3

WEND

PRINT N

s = int(input())

n = 36

while s < 2020:

    s = s * 2

    n = n + 3

print(n)

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

var s, n: integer;

begin

    readln(s);

    n := 36;

    while s < 2020 do

    begin

        s := s * 2;

        n := n + 3

    end;

    writeln(n)

end.

алг

нач

    цел n, s

    ввод s

    n := 36

    нц пока s < 2020

        s := s * 2

        n := n + 3

    кц

    вывод n

кон

Си++

#include <iostream>

using namespace std;

int main()

{

int s;

cin >> s;

int n = 36;

    while (s < 2020) { s = s * 2; n = n + 3; }

    cout << n << endl;

    return 0;

}

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

Всего: 526    1–20 | 21–40 | 41–60 | 61–80 …

Добавить в вариант

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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 365

S = S + 36

N = N + 7

WEND

PRINT N

var n, s: integer;

begin

    n := 0;

    s := 0;

    while s <= 365 do

    begin

        s := s + 36;

        n := n + 7

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 365)

    {

        s = s + 36;

        n = n + 7;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n := 0

s := 0

нц пока

s <= 365

    s := s + 36

    n := n + 7

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 365:

    s += 36

    n += 7

print(n)


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

Бейсик Python

DIM S, N AS INTEGER

S = 80

N = 0

WHILE S + N < 150

S = S − 5

N = N + 15

WEND

PRINT N

s = 80

n = 0

while s + n < 150:

    s = s − 5

    n = n + 15

print(n)

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

var s, n: integer;

begin

    s := 80;

    n := 0;

    while s + n < 150 do

    begin

        s := s − 5;

        n := n + 15;

    end;

    writeln(n)

end.

алг

нач

    цел s, n

    s := 80

    n := 0

    нц пока s + n < 150

        s := s − 5

        n := n + 15

    кц

    вывод n

кон

Си++

#include <iostream>

using namespace std;

int main()

{

    int s = 80, n = 0;

    while (s + n < 150) {

        s = s − 5;

        n = n + 15;

    }

    cout << n;

    return 0;

}

Источник: ЕГЭ по информатике 28.05.2018. Основная волна, вариант А. Имаева — «Котолис».


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 365

S = S + 33

N = N + 10

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 365 do

    begin

        s : = s + 33;

        n : = n + 10

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 365)

    {

        s = s + 33;

        n = n + 10;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n : = 0

s : = 0

нц пока s <= 365

    s : = s + 33

    n : = n + 10

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 365:

    s += 33

    n += 10

print(n)


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

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

DIM N, S AS INTEGER

N = 0

S = 0

While S <= 365

S = S + 36

N = N + 5

WEND

PRINT N

var n, s : integer;

begin

    n := 0;

    s := 0;

    while s <= 365 do

    begin

        s := s + 36;

        n := n + 5

    end;

    write(n);

end.

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

#include <iostream>

using namespace std;

int main ()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 365)

    {

        s = s + 36;

        n = n + 5;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n := 0

s := 0

нц пока s <= 365

    s := s + 36;

    n := n + 5;

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 365:

    s += 36

    n += 5

print(n)


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

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

DIM N, S AS INTEGER

N = 0

S = 0

While S <= 365

S = S + 36

N = N + 10

WEND

PRINT N

var n, s : integer;

begin

    n := 0;

    s := 0;

    while s <= 365 do

    begin

        s := s + 36;

    n := n + 10

    end;

    write(n);

end.

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

#include <iostream>

using namespace std;

int main ()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 365)

    {

        s = s + 36;

        n = n + 10;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n := 0

s := 0

нц пока s <= 365

    s := s + 36;

    n := n + 10;

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 365:

    s += 36

    n += 10

print(n)


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

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

DIM N, S AS INTEGER

N = 30

S = 25

WHILE S < 425

S = S + 40

N = N + 10

WEND

PRINT N

var n, s: integer;

begin

    n : = 30;

    s : = 25;

    while s < 425 do

    begin

        s : = s + 40;

        n : = n + 10

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 30;

    s = 25;

    while (s < 425)

    {

        s = s + 40;

        n = n + 10;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n : = 30

s : = 25

нц пока s < 425

    s : = s + 40

    n : = n + 10

кц

вывод n

кон

Python

n = 30

s = 25

while s < 425:

    s += 40

    n += 10

print(n)


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

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

DIM N, S AS INTEGER

N = 60

S = 25

WHILE S < 365

S = S + 20

N = N + 10

WEND

PRINT N

var n, s: integer;

begin

    n : = 60;

    s : = 25;

    while s < 365 do

    begin

        s : = s + 20;

        n : = n + 10

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 60;

    s = 25;

    while (s < 365)

    {

        s = s + 20;

        n = n + 10;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n : = 60

s : = 25

нц пока s < 365

    s : = s + 20

    n : = n + 10

кц

вывод n

кон

Python

n = 60

s = 25

while s < 365:

    s += 20

    n += 10

print(n)


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 257

    S = S + 10

    N = N + 3

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 257 do

    begin

        s := s + 10;

        n := n + 3

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 257)

    {

        s = s + 10;

        n = n + 3;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 0

    нц пока s <= 257

        s := s + 10

        n := n + 3

    кц

вывод n

кон

Python

n = 0

s = 0

while s <= 257:

    s += 10

    n += 3

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 1.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 257

    S = S + 25

    N = N + 4

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 257 do

    begin

        s : = s + 25;

        n : = n + 4

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 257)

    {

        s = s + 25;

        n = n + 4;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 0

    нц пока s <= 257

        s : = s + 25

        n : = n + 4

    кц

вывод n

кон

Python

n = 0

s = 0

while s <= 257:

    s += 25

    n += 4

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 2.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 325

    S = S + 10

    N = N + 3

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 325 do

    begin

        s : = s + 10;

        n : = n + 3

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 325)

    {

        s = s + 10;

        n = n + 3;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 0

    нц пока s <= 325

        s : = s + 10

        n : = n + 3

    кц

вывод n

кон

Python

n = 0

s = 0

while s <= 325:

    s += 10

    n += 3

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 1.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 257

    S = S + 10

    N = N + 3

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 257 do

    begin

        s : = s + 10;

        n : = n + 3

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 257)

    {

        s = s + 10;

        n = n + 3;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 0

    нц пока s <= 257

        s : = s + 10

        n : = n + 3

    кц

вывод n

кон

Python

n = 0

s = 0

while s <= 257:

    s += 10

    n += 3

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 5.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 249

    S = S + 24

    N = N + 3

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 249 do

    begin

        s : = s + 24;

        n : = n + 3

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 249)

    {

        s = s + 24;

        n = n + 3;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 0

    нц пока s <= 249

        s : = s + 24

        n : = n + 3

    кц

вывод n

кон

Python

n = 0

s = 0

while s <= 249:

    s += 24

    n += 3

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 3.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 256

    S = S + 25

    N = N + 5

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 256 do

    begin

        s : = s + 25;

        n : = n + 5

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 256)

    {

        s = s + 25;

        n = n + 5;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 0

    нц пока s <= 256

        s : = s + 25

        n : = n + 5

    кц

вывод n

кон

Python

n = 0

s = 0

while s <= 256:

    s += 25

    n += 5

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 2.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 512

    S = S + 25

    N = N + 4

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 0;

    while s <= 512 do

    begin

        s : = s + 25;

        n : = n + 4

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 512)

    {

        s = s + 25;

        n = n + 4;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 0

    нц пока s <= 512

        s : = s + 25

        n : = n + 4

    кц

вывод n

кон

Python

n = 0

s = 0

while s <= 512:

    s += 25

    n += 4

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 3.


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

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

DIM N, S AS INTEGER

N = 0

S = 512

WHILE S > 0

    S = S — 25

    N = N + 4

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 512;

    while s > 0 do

    begin

        s : = s — 25;

        n : = n + 4;

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 512;

    while (s > 0)

    {

        s = s — 25;

        n = n + 4;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 512

    нц пока s > 0

        s : = s — 25

        n : = n + 4

    кц

вывод n

кон

Python

n = 0

s = 512

while s > 0:

    s -= 25

    n += 4

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 2.


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

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

DIM N, S AS INTEGER

N = 0

S = 256

WHILE S > 0

    S = S — 25

    N = N + 3

WEND

PRINT N

var n, s: integer;

begin

    n : = 0;

    s : = 256;

    while s > 0 do

    begin

        s : = s — 25;

        n : = n + 3;

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

void main()

{

    int n, s;

    n = 0;

    s = 256;

    while (s > 0)

    {

        s = s — 25;

        n = n + 3;

    }

    cout « n « endl;

}

алг

нач

цел n, s

    n : = 0

    s : = 256

    нц пока s > 0

        s : = s — 25

        n : = n + 3

    кц

вывод n

кон

Python

n = 0

s = 256

while s > 0:

    s -= 25

    n += 3

print(n)

Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 3.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 325

S = S + 10

N = N + 3

WEND

PRINT N

var n, s: integer;

begin

    n := 0;

    s := 0;

    while s <= 325 do

    begin

        s := s + 10;

        n := n + 3

    end;

    write (n)

end.

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

#include <iostream>

using namespace std;

int main ()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 325)

    {

        s = s + 10;

        n = n + 3;

    }

    cout « n « endl;

}

алг

нач

целn, s

n := 0

s := 0

нц пока s <= 325

    s := s + 10

    n := n + 3

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 325:

    s += 10

    n += 3

print(n)

Источник: Демонстрационная версия ЕГЭ—2014 по информатике.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 365

S = S + 36

N = N + 8

WEND

PRINT N

var n, s: integer;

begin

    n := 0;

    s := 0;

    while s <= 365 do

    begin

        s := s + 36;

        n := n + 8

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 365)

    {

        s = s + 36;

        n = n + 8;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n := 0

s := 0

нц пока

s <= 365

    s := s + 36

    n := n + 8

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 365:

    s += 36

    n += 8

print(n)


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 267

S = S + 25

N = N + 10

WEND

PRINT N

var n, s: integer;

begin

    n := 0;

    s := 0;

    while s <= 267 do

    begin

        s := s + 25;

        n := n + 10

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 267)

    {

        s = s + 25;

        n = n + 10;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n := 0

s := 0

нц пока s <= 267

    s := s + 25

    n := n + 10

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 267:

    s += 25

    n += 10

print(n)

Источник: ЕГЭ по информатике 08.07.2013. Вторая волна. Вариант 501.


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

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

DIM N, S AS INTEGER

N = 0

S = 0

WHILE S <= 267

S = S + 25

N = N + 20

WEND

PRINT N

var n, s: integer;

begin

    n := 0;

    s := 0;

    while s <= 267 do

    begin

        s := s + 25;

        n := n + 20

    end;

    write(n)

end.

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

#include <iostream>

using namespace std;

int main()

{

    int n, s;

    n = 0;

    s = 0;

    while (s <= 267)

    {

        s = s + 25;

        n = n + 20;

    }

    cout « n « endl;

}

алг

нач

цел n, s

n := 0

s := 0

нц пока s <= 267

    s := s + 25

    n := n + 20

кц

вывод n

кон

Python

n = 0

s = 0

while s <= 267:

    s += 25

    n += 20

print(n)

Источник: ЕГЭ по информатике 08.07.2013. Вторая волна. Вариант 502.

Всего: 526    1–20 | 21–40 | 41–60 | 61–80 …

Из урока Вы узнаете, как решать 22 задание ЕГЭ по информатике: дается подробное объяснение и разбор заданий по программированию циклов и ветвлений

Содержание:

  • Объяснение задания 22 ЕГЭ по информатике
    • Алгоритмизация и программирование: циклы и ветвления
  • Решение 22 заданий ЕГЭ по информатике
    • Работа с цифрами чисел в различных системах счисления
    • Задания на алгоритм Евклида и поиск НОД

22-е задание: «Программирование: циклы и ветвления»

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

— повышенный,

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

— нет,

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

— 1,

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

— 7 минут.

  
Проверяемые элементы содержания: Умение анализировать алгоритм, содержащий ветвление и цикл

До ЕГЭ 2021 года — это было задание № 20 ЕГЭ

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

«Технические ошибки при ответе на это задание часто обусловлены недостаточно аккуратным выполнением арифметических операций в недесятичных системах счисления»

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

Задание демонстрационного варианта 2022 года ФИПИ

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

* материал рассматривается на примере языка Pascal

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

  • Условный оператор if
  • Цикл while или repeat
  • Цикл for со счетчиком
  • Операция целочисленного деления div
  • Операция взятия остатка mod

Алгоритм Евклида для вычисления НОД:

Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны:
Алгоритм Евклида для НОД

Пример:
Найти НОД 14 и 21 по алгоритму Евклида.

✍ Решение:
 

НОД (14, 21) = 
НОД (14, 21-14) = 
НОД (14, 7) = 
НОД (7, 7) = 7

Реализация на Паскале:

1
2
3
4
5
6
7
function NOD (a, b: integer): integer;
begin
 while a <> b  do
   if a > b then a := a - b
   else          b := b - a;
 NOD := a;
end;

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

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


Работа с цифрами чисел в различных системах счисления

22_1:

Ниже записан алгоритм.
Получив на вход число x, этот алгоритм печатает число L.

  
Укажите наибольшее нечетное число x, при вводе которого алгоритм печатает 53.

1
2
3
4
5
6
7
8
9
10
11
12
13
var x, L, M, D: integer;
begin
  readln(x);
  D:=x;
  L:=23;
  M:=141;
  while L<=M do
  begin
    L:=L+D;
    M:=M-3*D;
  end;
  writeln(L);
end.

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

✍ Решение:

✎ Решение с использованием программирования:

Pascal:

var
  x, L, M, D: longint;
 
begin
  x := 1000;
  while true do
  begin
    D := x;
    L := 23;
    M := 141;
    while L <= M do
    begin
      L := L + D;
      M := M - 3 * D;
    end;
    if (l = 53) and (x mod 2 <> 0) then 
    begin
      print(x); break;
    end;
    x -= 1;
  end;
end.

✎ Аналитическое решение:
Разберем решение по одному из возможных вариантов выполнения данного задания.
Рассмотрим алгоритм:

  • Результатом программы является вывод L.
  • Цикл перестанет работать, когда L станет больше M (т.к. while L<=M).
  • D в программе — это и есть искомый x (D:=x;).
  • В цикле оператор L:=L+D работает, как сумматор: L накапливает в себе сумму всех D, тогда как D в нашей задаче не меняется и равна введенному x.
  • Сумматор (L) до цикла обычно обнуляется, сделаем это: т.е. в строке 5 вместо L:=23 представим, что L:=0. Тогда и условие задачи поменяется: т.е. вместо указанного в условии числа 53 программа выводит L равное 53-23 = 30. А в условии цикла M также изменит свое значение на 141-23=118:
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    ...
      L:=23;
      M:=141;
      while L<=M do // L<=118 для первой итерации
      begin
        L:=L+D;
        M:=M-3*D;
      end;
      writeln(L); // выводится L = 30
    end.
  • Так как по заданию необходимо найти наибольший x, то представим, что он равен как раз 30:
  • L = L + D => L = 0 + 30 => L = 30 
    
  • Но число 30 — четное, а по условие необходимо нечетное x.
  • Значит, одного прохождения цикла недостаточно.
  • Предположим, что цикл имеет две итерации. За два прохождения цикла L увеличится на 2*D, то есть нужно взять такое D, чтобы 2*D было равно 30:
  • 30 / 2 = 15 
    То есть D = x = 15
    
  • Проверим:
  • D=15         1 проход       2 проход      
    L:=L+D:       0+15=15        15+15=30       
    M:=M-3*D:   118-3*15=73    73-3*15 = 28   
    L<=M:        да: 15<=73    нет: 30 > 28
    
  • Т.е. D=15 полностью подходит, и это наибольшее возможное число при данных условиях.

Результат: 15

📹 Подробное теоретическое решение данного задания 22 ЕГЭ по информатике предлагаем посмотреть в видео уроке:

📹 YouTube здесь

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


22_9:

Ниже записан алгоритм.
Получив на вход число x, этот алгоритм печатает число L.

  
Укажите наибольшее нечетное число x, при вводе которого алгоритм печатает 125.

1
2
3
4
5
6
7
8
9
10
11
12
13
var x, L, M, D: integer;
begin
  readln(x);
  D:=x;
  L:=17;
  M:=70;
  while L<=M do
  begin
    L:=L+2*D;
    M:=M+D;
  end;
  writeln(L);
end.

✍ Решение:
 

📹 Смотрите видео решения:

📹 YouTube здесь

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


22_2:

Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает S. Известно, что 100 ≤ x ≤ 200.

  
Укажите наибольшее допустимое число x, при вводе которого алгоритм распечатает 30.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var x,A,B,D,S: integer;
begin
  readln(x);
  B:= x;
  A:= 9;
  D:= x;
  S:= 0;
  while (D div 2)>0 do
  begin
    if (D mod 2) = 1 then
      S:= S + 1
    else
      S:= S + A;
    D:= D div 2;
  end;
  writeln(S);
end.

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

✍ Решение:

✎ 1 способ (аналитический):
 

    Для начала рассмотрим алгоритм программы:

  1. В начале программы вводится x, две переменные — B и D присваивают значение введенного x. Переменной A присваивается значение 9, а переменная S обнуляется.
  2. Далее следует цикл, который зависит от переменной D (равной x): пока x div 2 > 0 выполняется тело цикла. Т.е. пока x, деленный целочисленно на 2, больше нуля.
  3. В теле цикла происходит увеличение переменной S либо на 9 (А:=9), либо на 1 в зависимости от четности значения D. Т.е. переменная S увеличивается на 9 в случае, если очередное значение Dчетное и увеличивается на 1, если очередное значение Dнечетное.
  4. В конце цикла D целочисленно делится на 2 (D := D div 2).
  5. По условию программы S должно быть равно 30. Посчитаем максимальное количество итераций цикла: 2n <= 200, т.е. n = 7 (максимальное значение D — 200 — делим целочисленно на 2, пока это возможно). При этом минимальное количество итераций — 6 (2n >=100, т.е. n = 6)
  6. За 7 или 6 итераций цикла необходимо получить S = 30, каждую итерацию цикла, увеличивая S либо на 1, либо на 9. Рассмотрим варианты:
  7. 30 = 9 + 9 + 9 + 1 + 1 + 1  ->  (получаем 6 итераций, что соответствует действительности)
    30 =  9 + 9 + 12 * 1 (если взять две девятки, то цикл должен работать 14 раз 
    (9 + 9 + [12 единиц]), а это невозможно)
    
  8. Из 6 итераций имеем: 3 итерации с D — нечетным (когда s = s + 1) и 3 итерации с D — четным (когда s = s + 9)
  9. Четность чисел в двоичной системе счисления зависит от младшего бита: если младший бит = 0, то число четное, если 1, то число нечетное. Поскольку нам необходимо найти наибольшее x, то необходимо в трех старших битах данного числа, выраженного в двоичной системе счисления, поместить 1, а в остальных трех битах разместить 0. При этом необходимо не забыть про еще один старший бит равный 1 (в итерациях его нет, т.к. это последняя единица, которая уже не удовлетворяет условию цикла: условие цикла ложно while (1 div 2) > 0 — ложь):
  10. 11110002 = 12010
    первая единица будет стоять всегда, она не участвует в итерациях цикла
    
    Проверка:
    120| 0  - соответствует s + 9
     60| 0  - соответствует s + 9
     30| 0  - соответствует s + 9
     15| 1  - соответствует s + 1
      7| 1  - соответствует s + 1
      3| 1  - соответствует s + 1
      1|
     

✎ 2 способ:

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

  • Значение искомого x присваивается сразу двум переменным B и D, но B более нигде не используется, поэтому забудем про нее. D — это x.
  • В цикле:

  • D mod 2 — это крайняя справа цифра числа в двоичной системе счисления (младший разряд); т.е.:
  • например, если D = 510 = 1012, то D mod 2 = 1 (101)
  • в цикле есть сумматор S, результат которого выводится в программе (результат 30), и который накапливает в себя значения по следующему принципу:
  • если указанная крайняя цифра = 1, то в S добавляется 1, если крайняя цифра = 0, то в S добавляется 9 (А = 9);
  • последнее действие цикла D:= D div 2 — это отсечение крайнего младшего разряда числа D в двоичной системе счисления, т.е.:
  • если было D = 510 = 1012, то стало D = 102
  • условие цикла: пока D при целочисленном делении на 2 больше 0 (while (D div 2)>0);
  • анализ алгоритма показывает, что вводимый x можно рассматривать в двоичной системе счисления. Поскольку сумматор S выводит в результате число 30, то можно понять, как накапливается это число в S:
  • 30 = 9 + 9 + 9 + 1 + 1 + 1  ->  (получаем 6 итераций цикла)
  • поскольку цифра 9 прибавлялась 3 раза и единица прибавлялась 3 раза, значит, в двоичной записи исходного числа D было 3 цифры 0 и три цифры 1. Чтобы получить наибольшее x, как указано в задании, расположим в старших битах единицы, а в младших 0:
  • 111000
  • важно не забыть крайнюю слева цифру 1, которая останется не учтенной в цикле, так как условие при последней единице не выполняется:
  • при оставшемся D = 1 условие while (1 div 2) > 0 не работает, 
    поэтому добавляем еще старший разряд "1"
    таким образом, получаем число в двоичной системе: 1111000 
    
  • переведем в десятичное представление:
  • 64 32 16  8  4  2  1
    1  1   1  1  0  0  0   = 64 + 32 + 16 + 8 = 12010

Результат: 120

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

1-й длительный способ решения:
📹 YouTube здесь
📹 Видеорешение на RuTube здесь

2-й способ решения (простой и быстрый):
📹 YouTube здесь📹 Видеорешение на RuTube здесь


22_3:

Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M.

  
Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 8.

1
2
3
4
5
6
7
8
9
10
11
12
13
var x,L,M: integer;
begin
  readln(x);
  L:=0; M:=0;
  while x>0 do
  begin
    L:=L + 1;
    if M < (x mod 10) then
      M:=x mod 10;
    x:=x div 10;
  end;
  writeln(L);writeln(M);
end.

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

✍ Решение:

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

  • В конце программы алгоритм выводит значение L, равное 2 (по условию). В цикле L — это счетчик, увеличивающийся каждую итерацию цикла (каждое прохождение цикла) на 1.
  • Таким образом, цикл работает два раза.
  • В цикле x постоянно уменьшается на 1 разряд, т.е. от него отсекается цифра справа (x:=x div 10):
  • например, x = 243
    после выполнения x:=x div 10 получаем
    х = 24
    
  • Так как цикл работает два раза, значит x — двухзначное число, т.е. после двух проходов (итераций) цикла условие цикла перестало работать (x стало <= 0).

Рассмотрим работу с M в цикле:

  • В первую итерацию цикла М всегда заменится на значение x mod 10, так как изначально М = 0.
  • Из предыдущего пункта имеем, что M — это наименьшая цифра числа:
  • например, x = 243
    после выполнения M := x mod 10; получаем
    1 шаг: М = 3
    2 шаг: М = 3
    3 шаг: М = 2 
    
  • В результате работы программы на экран выводится М = 8.

Рассмотрим две цифры числа x путем подстановки:

  • Поскольку по условию нам нужно наибольшее x, то попробуем в единицы записать число 8:
  • ? 9
  • В таком случае во второй итерации цикла условие в цикле M < (x mod 10) не будет работать, и программа распечатает 9 (вместо 8). Т.е. 9 не походит:
  • if M  < (x mod 10) then
          M:=x mod 10;
    1 шаг: 
    if 0  < (9) then
          M:=9;
    2 шаг:
    if 9 < (любая цифра) then ... 
    Условие не работает, программа распечатает М = 9. Не подходит!
    
  • Поставим вместо разряда единиц число 8:
  • ? 8
  • После первой итерации цикла M = 8 (по условию нам подходит):
  • if M  < (x mod 10) then
          M:=x mod 10;
    1 шаг: 
    if 0  < (8) then
          M:=8;
    
  • Теперь рассмотрим первую цифру числа x:
  • 9 8
    если она равна 9 (то есть число 98), 
    то М станет = 9 (а нам необходимо, чтобы осталось 8):
    
    1 шаг: 
    if 0  < (8) then
          M:=8;
    2 шаг:
    if 8 < 9 then ... 
    Условие работает, программа распечатает М = 9. Не подходит!
    
  • Возьмем цифру 8 (88):
  • 8 8
    1 шаг: 
    if 0  < (8) then
          M:=8;
    2 шаг:
    if 8 < 8 then ... 
    Условие не работает, программа распечатает М = 8. Подходит!
    
  • Наибольшее х = 88.

Результат: 88

📹 Но лучше один раз увидеть, как говорится. Посмотрите разбор задания на видео:

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


22_5: Демоверсия ЕГЭ 2018 информатика:

Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M.

  
Укажите наименьшее число x, при вводе которого алгоритм печатает сначала 5, а потом 7.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var x, L, M: integer;
begin
readln(x);
L := 0;
M := 0;
while x > 0 do
begin
  M := M + 1;
  if x mod 2 <> 0 then
     L := L + 1;
  x := x div 2;
end;
writeln(L);
writeln(M);
end.

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

✍ Решение:

✎ Способ 1:

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

    В цикле:

  • Наличие операторов x mod 2 и x div 2 говорит о том, что эту задачу можно решать, представляя x в двоичной системе счисления.
  • В цикле есть счетчик M, который увеличивается на единицу и в конце программы будет соответствовать количеству итераций цикла. Таким образом, имеем 7 проходов цикла.
  • Условие if x mod 2 <> 0 проверяет на нечетность младший разряд числа в двоичной системе:
  • например, если было x = 510 = 1012, 
    то if x mod 2 <> 0 проверяет if 1 <> 0
    
  • Если в младшем разряде стоит единица (в двоичной системе число состоит только из 1 и 0), то срабатывает счетчик L, который увеличивается на единицу.
  • В строке x := x div 2; отсекается младший разряд двоичного представления значения x, т.е.:
  • если было, например, x = 510 = 1012, то стало x = 102
    
  • Таким образом, счетчик L подсчитывает количество единиц в двоичной записи числа. Так как в результате выводится L = 5, то в двоичной записи числа 5 единиц.
  • Так как цикл работает 7 раз, и в каждой итерации от числа в двоичной записи отсекается один разряд, то имеем 7 разрядов (цифр) в числе.
  • Итого, в двоичной записи 5 единиц и 2 нуля. Для получения наименьшего x (по заданию) расположим цифры следующим образом:
  • 10011112 = 64 + 8 + 4 + 2 + 1 = 7910
    

  
✎ Способ 2 (длительный, аналитический):
 

    Для начала рассмотрим алгоритм программы:

  • В начале программы вводится x, и обнуляются две переменные — L и M.
  • Далее следует цикл, который зависит от переменной x: пока x > 0 выполняется тело цикла.
  • В теле цикла каждый его шаг происходит увеличение переменной M на единицу. Т.е. переменная M — это счетчик, соответственно, его значение по завершению работы цикла будет соответствовать количеству шагов (итераций) цикла.
  • В конце программы печатается сначала L, потом M. Т.е. L должно быть равно 5, а M = 7. Раз M будет равно 7, то из предыдущего пункта видим, что цикл имеет 7 шагов, т.е. 7 итераций.
  • L — это тоже счетчик, но из условия if x mod 2 <> 0 видим, что счетчик L подсчитывает количество нечетных промежуточных x. Т.е. x в цикле постоянно меняется, а L проверяет x и в случае нечетного значения увеличивается на единицу. В программе L должно стать 5.
  • В цикле x делится целочисленно на 2: x := x div 2
  • Поскольку цикл завершит работу, когда x = 0, то последним шагом будет x = 1 div 2 = 0. Т.е. в предпоследнем шаге x = 1.
  • Решим данную задачу с конца, проследив все итерации цикла. Получается, что из предыдущего шага в следующий шаг x изменяется по двум правилам, назовем их командами:
  • 1. x*2 -> если предыдущий x - четный, 
    например 4 div 2 - обратное действие 2*2 = 4
    
    2. x*2+1 -> если предыдущий x - нечетный, 
    например 5 div 2 - обратное действие 2*2+1 = 5
    
  • Так как L в результате равно 5, значит, в программе 5 команд № 2 и 2 команды №1 (7-5 = 2)
  • Нарисуем дерево команд и получающиеся значения, начиная с последней итерации цикла до начальной итерации. Т.е. начнем с завершения цикла, когда x стал = 0:
  • 18 задание егэ информатика демоверсия 2018 решение

  • Вниз уходят команды, дающие четные значения x, а вверх — нечетные. Поскольку нам необходимо найти наименьший x, то «выгоднее» проследить нижние ветви дерева, т.к. они в результате дают меньшие значения.
  • Из дерева видим, что первая команда — это команда 2. В итоге осталось 4 команды № 2 и 2 команды № 1.
  • Нам выгодно с самого начала «двигаться» по дереву, используя команды №1 (чтобы x был наименьшим). Поэтому вторая и третья ветвь будут соответствовать команде №1. Поскольку первых команд должно быть только две, остальные команды будут №2.
  • Итого получаем следующий путь по дереву, в результате которого x становится равным 79.

Результат: 79

Подробное решение 22 (20) задания демоверсии ЕГЭ 2018 года смотрите на видео:
Способ 1 (быстрый):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь

Способ 2 (аналитический):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь


22_6: Досрочный егэ по информатике 2018, вариант 1:

Укажите наибольшее десятичное число, при вводе которого на экране сначала напечатается 3, а затем 6.

1
2
3
4
5
6
7
8
9
10
11
12
var x, L, M: integer;
begin
 readln(x);
 L:=0; M:=0;
 while x > 0 do begin
  L:=L + 1;
  if (x mod 2) <> 0 then
    M:= M + x mod 8;
  x:= x div 8;
 end;
 writeln(L); write(M);
end.

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

✍ Решение:

📹 Видеоразбор задания:
📹 YouTube здесь

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


22_7:

Получив на вход натуральное десятичное число х, этот алгоритм печатает два числа: L и М.
Укажите наименьшее число х, при вводе которого алгоритм печатает сначала 42, а потом 4.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  x, L, M: integer;
begin
  readln(x);
  L := 1;
  M := 0;
  while x > 0 do
  begin
    M := M + 1;
    if x mod 8 > 3 then
      L := L * (x mod 8);
    x := x div 8
  end;
  writeln(L);
  writeln(M)
end.

✍ Решение:

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

  • В конце программы на экран выводится сначала значение переменной L, затем M. Т.е. согласно заданию, получается что:
  • в конце программы: 
    L = 42   M = 4
    
  • В цикле while две операции указывают на то, что данное задание проще рассматривать при работе с числом в 8-й системе счисления:
  • 1. x mod 8 - младший разряд числа в 8-й системе счисления 
    т.е., например: 568
    тогда  x mod 8 - это цифра 6
    
    2. x := x div 8 - "отсекание" младшего разряда числа в 8-й системе счисления
    т.е., например: x = 4610 = 568
    тогда  x := x div 8 -> x = 510 = 58
     
  • Таким образом, в цикле рассматриваются цифры числа в 8-й системе счисления. В конце цикла, каждый раз от числа «отсекается» крайний разряд, тем самым число теряет цифру. Цикл выполняется до тех пор, пока есть цифры в числе (while x > 0).
  • М — это счетчик итераций, т.е. шагов цикла, т.к. М увеличивается каждый раз на единицу. Поскольку количество цифр числа уменьшается с каждой итерацией, то М в результате возвращает количество цифр числа — по заданию М = 4. Значит, число x — четырехзначное.
  • В условии if x mod 8 > 3 then проверяется каждая цифра числа: если она больше трех, то выполняется действие L := L * (x mod 8);. Дословно, это говорит о том, что L — это произведение цифр числа (в его 8-м представлении), которые больше трех.
  • Таким образом соберем все выводы:
  • М = 4 - количество цифр числа т.е.
    x в 8-й системе счисления имеет 4 разряда: ? ? ? ?
    L = 42 произведение цифр, которые больше трех.
    
  • По заданию нам необходимо найти наименьшее x. Теперь, зная, что х — четырехзначное, а 42 — произведение его цифр, больших трех, найдем, как получается 42:
  • 42 = 6 * 7 
    
  • Соответственно, для старшего разряда поставим единицу, а один разряд оставим равным 0:
  • x = 10678
  • Осталось перевести получившееся число в 10-ю систему счисления, чтобы найти исходный x:
  • 10678 = 56710

Результат: 567


22_8:

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

1
2
3
4
5
6
7
8
9
10
11
12
var
  i, n: longint;
begin
  i := 0;
  readln(n);
  while (n > 0) do
  begin
    i := i + n mod 8;
    n := n div 8;
  end;
  writeln(i mod 7);
end.

✍ Решение:
 

    Один из вариантов решения:

  • В цикле while две операции указывают на то, что данное задание можно рассматривать при работе с числом в 8-й системе счисления:
  • 1. n mod 8 - младший разряд числа в 8-й системе счисления 
    т.е., например: 568
    тогда  n mod 8 - это цифра 6
    
    2. n := n div 8 - "отсекание" младшего разряда числа в 8-й системе счисления
    т.е., например: n = 4610 = 568
    тогда  n := n div 8 -> n = 510 = 58
     
  • Таким образом, в цикле рассматриваются цифры числа в 8-й системе счисления. В конце цикла, каждый раз от числа «отсекается» крайний разряд, тем самым число теряет цифру. Цикл выполняется до тех пор, пока есть цифры в числе (while n > 0).
  • i — это сумматор, который аккумулирует (суммирует) цифры восьмеричного числа: поскольку n mod 8 — младшая цифра числа, и каждую итерацию цикла от числа отсекается цифра младшего разряда, то на каждом шаге в i добавляется очередная справа цифра числа:
  • Например:  n = 2568
    1) i := i + n mod 8; => i = 0 + 6 = 6  (256)
    2) i := i + n mod 8; => i = 6 + 5 = 11  (256)
    3) i := i + n mod 8; => i = 11 + 2  = 13 (256)
    
  • В конце программы распечатывается значение i mod 7, т.е. остаток от деления получившейся суммы на число 7.
  • Таким образом соберем все выводы:
  • i - сумматор цифр введенного числа n в его восьмеричном представлении
    n - двузначные десятичные числа (по условию)
    результат программы = i mod 7 = 0, т.е. остаток от деления итоговой суммы на 7 (= 0)
    
  • Поскольку в условии говорится о десятичных числах, т.е. вводятся двузначные десятичные числа. Рассмотрим максимальное и минимальное двухзначное десятичное число, преобразованное в 8-ю систему счисления:
  • nmin = 1010 = 128
    nmax = 9910 = 1438
     
  • Выберем суммы цифр чисел в диапазоне от 12 до 143 (исключая цифры большие 7, т.к. 8-я с.с):
  • 16 = 1+6 = 7 (7 mod 7 = 0), 
    25 = 2+5 = 7 (7 mod 7 = 0), 
    34 = 3+4 = 7 (7 mod 7 = 0), 
    43 = 4+3 = 7 (7 mod 7 = 0), 
    52 = 5+2 = 7 (7 mod 7 = 0), 
    61 = 6+1 = 7 (7 mod 7 = 0), 
    70 = 7+0 = 7 (7 mod 7 = 0), 
    77 = 7+7 = 14 (14 mod 7 = 0), 
    106 = 1+6 = 7 (7 mod 7 = 0), 
    115 = 1+1+5 = 7 (7 mod 7 = 0), 
    124 = 1+2+4 = 7 (7 mod 7 = 0), 
    133 = 1+3+3 = 7 (7 mod 7 = 0), 
    142 = 1+4+2 = 7 (7 mod 7 = 0),
    
  • Посчитаем количество таких чисел — их 13.

Ответ: 13


22_10:

Получив на вход натуральное число x, этот алгоритм печатает два числа: a и b. Укажите наименьшее натуральное число, при вводе которого алгоритм печатает сначала 1, а потом 9.

Паскаль:

1
2
3
4
5
6
7
8
9
10
11
12
13
var x, a, b: longint;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
  if x mod 2 = 0 then
     a := a + x mod 9
  else
     b := b * (x mod 9);
  x := x div 9;
end;
writeln(a); write(b);
end.
Бейсик:

INPUT x
a=0: b=1
WHILE x>0  
    IF x MOD 2 = 0 THEN
      a = a + x MOD 9
    ELSE
      b = b * x MOD 9
    END IF
    x = x  9
WEND
PRINT a
PRINT b
END
Python:

x = int(input())
a = 0
b = 1
while x > 0:
    if x % 2 == 0:
        a = a + x % 9
    else:
        b = b * (x % 9)
    x = x // 9
print(a)
print(b)
С++:

#include <iostream>
using namespace std;
int main()
  {
  int x, a, b;
  cin >> x;
  a = 0; b = 1;
  while (x > 0) {
    if (x%2 == 0) a += x%9;
    else b *= x%9;
    x = x / 9;
    }
  cout << a << endl << b;
  return 0;
}

✍ Решение:

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

  • Программа получает на вход число x.
  • В цикле, пока число x больше 0, в зависимости от того, четное ли число x выполняются действия:
  • если четное, то в переменную a добавляется остаток от деления числа x на 9;
  • if x mod 2 = 0 then
      a := a + x mod 9
  • если нечетное, то переменная b умножается на остаток от деления числа x на 9;
  • x целочисленно делится на 9.
  • Эти три действия в цикле — ни что иное, как работа с цифрами числа в 9-й системе счисления. Тогда, проверим значение x на четность в 9-й с.с.:
  • если четное, то в переменную a добавляется крайняя справа цифра числа (остаток от деления числа x на 9);
  • если нечетное, то переменная b умножается на крайнюю справа цифру числа x;
  • x целочисленно делится на 9: значит, отсекаем от x в 9-й с.с. крайнюю справа цифру.
  • Теперь попробуем подобрать наименьшее число x, рассматривая его пока в 9-й с.с.
  • Вспомним, что для систем счисления с нечётным основанием (наш случай, 9 — нечетное) справедливо утверждение, что число чётно тогда и только тогда, когда сумма всех его цифр чётна.

    произведение цифр (b) должно быть равно 9 (если число x нечетное)
    сумма цифр (a) должна быть равна 1 (если число x четное)

    однозначное число:
    минимальное 9, но цифры 9 в 9-й с.с. нет.
    других вариантов получить 9 нет
    
    двухзначное число:
    минимальное 33
    3 + 3 = 6 (четное) => a = 0 + 3 = 3, не подходит (т.к. а=1)
    других вариантов получить 9 нет
    
    трехзначное число:
    1 случай:
    минимальное 133
    1 + 3 + 3 = 7 (нечетное) => b = 1 * 3 = 3
    отсекаем: x = 13
    1 + 3 = 4 (четное) => a = 0 + 3 = 3, не подходит (т.к. а=1)
    
    2 случай:
    следующее минимальное 313
    3 + 1 + 3 = 7 (нечетное) => b = 1 * 3 = 3
    отсекаем: x = 31
    3 + 1 = 4 (четное) => a = 0 + 1 = 1
    отсекаем: x = 3
    3 (нечетное) => b = 3 * 3 = 9
    отсекаем: x = 0, конец цикла
    
  • Результаты нас устраивают (a = 1, b = 9). Переведем число 313 из 9-й с.с. в 10-ю:
  • 3139 = 3 * 92 + 1 * 9 + 3 = 25510

Ответ: 255

Предлагаем посмотреть видеоурок задания:
📹 YouTube здесь

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


Задания на алгоритм Евклида и поиск НОД

22_4:

Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает число M.

  
Известно, что x>40. Укажите наименьшее такое (т.е. большее 40) число x, при вводе которого алгоритм печатает 5.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var x,L,M: integer;
begin
  readln(x);
  L:=x; 
  M:=5;
  if L mod 2 = 0 then
    M:=24;
  while L <> M do
    if L > M then
      L:=L-M
    else
      M:=M-L;
  writeln(M);
end.

✍ Решение:

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

  • В начале программы запрашивается x. Переменной L присваивается значение x, а переменной M — значение 5.
  • Затем в условии проверяется четность переменной L: если переменная четная, то M присваивается значение 24.
  • Далее следует цикл, зависящий от переменных L и M: цикл завершится, когда L сравняется с M, т.е. согласно условию, когда L = M = 5 (так как по завершению программы на экран выводится число 5):
  • По завершению программы:
    L = M = 5
    
  • Кроме того, по условию известно, что x > 40.
  • В цикле из переменной большего значения вычитается переменная меньшего значения (алгоритм Евклида поиска наибольшего общего делимого):
  • НОД (a, b) = если a > b, то НОД (a-b, b) = если b > a, то НОД (a, b-a)
    
  • Поскольку в результате работы программы распечатывается значение M, равное 5, то можно утверждать, что если условие if L mod 2 = 0 не будет истинным, то в цикле постоянно будет происходить действие L:=L-M). Т.е. постоянно вычитается 5.
  • Исходя из предыдущего пункта, исходное число x должно быть кратно 5, так как в результате печатается 5 (M). А при M=24 алгоритм не выдаст в результате значение 5.
  • Первое наименьшее число, кратное 5 и большее 40 (по условию) — это 45.
  • Проверим по алгоритму:
  • L  M
    
    45 5
    40 5
    35 5
    30 5
    25 5
    20 5
    15 5
    10 5
    5  5 
    
  • Если следовать алгоритму Евклида, то число 5 (результат) — это наибольший общий делитель числа 5 (исходное значение M) и числа x (введенного числа). Поскольку x больше 40, то наименьшим значением для которого общим делителем с числом 5 будет само число 5 — это число 45.

Результат: 45

Посмотрите видео-разбор данного задания:

📹 YouTube здесь

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


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

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

Основными используемыми конструкциями являются конструкции ветвления и циклов.

Конструкция ветвления в языке Паскаль

Полная

Неполная

if <логическое  выражение> then

<оператор1>
else <оператор2>;

if <логическое выражение> then

<оператор1>;

При этом оператор может быть простым, а может быть составным.

Составной оператор имеет структуру:

begin

<Последовательность_операторов>

end

Конструкция циклов в языке Паскаль

Цикл со счетчиком (или цикл for)

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

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

Цикл for существует в двух формах:

for <счетчик>:=<значение> to <конечное_значение> do

<тело_цикла>;

for <счетчик>:=<значение> downto <конечное_значение> do

<тело_цикла>;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

Цикл с предусловием (или цикл while)

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

while <логическое_выражение> do

<тело_цикла>;

Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет зацикливание.

Цикл с постусловием (или цикл repeat)

Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако, бывают ситуации, когда тело цикла должно выполниться хотя бы один раз, независимо от того, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.

В цикле repeat логическое выражение стоит после тела цикла. В случае true происходит выход из цикла, в случае false – его повторение:

repeat <тело_цикла>

until <логическое_выражение>;

Тело цикла может включать в себя другой цикл. Количество вложенных циклов не ограничено.

Операции div и mod

Операция div возвращает целочисленный результат деления. При этом дробная часть будет отброшена. X div Y вернет целую часть от деления X на Y.

Например, после работы оператора z := 55 div 6, z будет равно 9.

Операция mod возвращает остаток от деления деления. X mod Y вернет остаток от деления X на Y.

Например, после работы оператора z := 55 mod 6, z будет равно 1.

Поиск наименьшего числа

Пример 1.

Ниже на пяти язы­ках про­грам­ми­ро­ва­ния за­пи­сан ал­го­ритм. По­лу­чив на вход число x, этот ал­го­ритм пе­ча­та­ет числа: a и b. Ука­жи­те наи­мень­шее по­ло­жи­тель­ное пя­ти­знач­ное число x, при вводе ко­то­ро­го ал­го­ритм пе­ча­та­ет сна­ча­ла 6, а потом 3.

Бей­сик

Python

DIM X, Y, A, B AS INTEGER

A = 0

B = 10

INPUT X

WHILE X > 0

Y = X MOD 10

X = X 10

IF Y > A THEN A = Y

IF Y < B THEN B = Y

WEND

PRINT A

PRINT B

a = 0

b = 10

x = int(input())

while x > 0:

y = x % 10

x = x // 10

if y > a:

a = y

if y < b:

b = y

print(a)

print(b)

Пас­каль

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

var x, y, a, b: integer;

begin

a := 0;

b := 10;

readln(x);

while x > 0 do

begin

y := x mod 10;

x := x div 10

if y > a then

a := y;

if y < b then

b := y;

end;

writeln(a);

writeln(b)

end.

алг

нач

цел x, y, a, b

a := 0

b := 10

ввод x

нц пока x > 0

y := mod(x, 10)

x := div(x, 10)

если y > a

то a := y

все

если y < b

то b := y

все

кц

вывод a, нс, b

кон

Си

#include <stdio.h>

int main()

{

int x, y, a, b;

a = 0;

b = 10;

scanf(«%d», &x);

while (x > 0)

{

y = x % 10;

x = x / 10;

if (y > a)

a = y;

if (y < b)

b = y;

}

printf(«%dn%dn», a, b);

}

Решение:

Т. к. опе­ра­тор div воз­вра­ща­ет целую часть от де­ле­ния, то при де­ле­нии на 10 это рав­но­силь­но от­се­че­нию по­след­ней цифры. Значит, цикл вы­пол­нить­ся пять раз.

В пе­ре­мен­ную a за­пи­сы­ва­ет­ся оста­ток от де­ле­ния числа x на 10 при усло­вии, что этот оста­ток боль­ше числа уже за­пи­сан­но­го в пе­ре­мен­ной a. В пе­ре­мен­ную b за­пи­сы­ва­ет­ся оста­ток от де­ле­ния числа x на 10 при усло­вии, что этот оста­ток мень­ше числа уже за­пи­сан­но­го в пе­ре­мен­ной b. Таким об­ра­зом, в пе­ре­мен­ную a за­пи­сы­ва­ет­ся наи­боль­шая цифра числа x, а в пе­ре­мен­ную b — наи­мень­шая. Итак, нужно найти наименьшее пятизначное число, у которого наименьшая цифра равна 3, а наибольшая  — равна 6. Такое число:33336.

Ответ: 33336

Пример 2.

Ниже на пяти язы­ках про­грам­ми­ро­ва­ния за­пи­сан ал­го­ритм. По­лу­чив на вход число x, этот ал­го­ритм пе­ча­та­ет число M. Из­вест­но, что x > 100. Ука­жи­те наи­мень­шее такое (т.е. боль­шее 100) число x, при вводе ко­то­ро­го ал­го­ритм пе­ча­та­ет 26.

Решение:

В теле цикла числа M и L умень­ша­ют­ся, пока не ста­нут рав­ны­ми. Поскольку в итоге напечатано 26, значит, в конце программы оба числа равны 26. Рассмотрим изменение этой пары чисел в обратном порядке (при этом не знаем, какое именно число M, а какое L):

(26; 26) – (52; 26) – (78; 52) – (130; 52)

Если 130 – это L в начале работы (равное x), то т.к. оно четное, M в начале работы должно быть 52. Условие выполнено для пары (130; 52), значит искомое число 130.

Ответ: 130

Поиск наибольшего числа

Пример 3.

Ниже за­пи­са­на про­грам­ма. По­лу­чив на вход число x , эта про­грам­ма пе­ча­та­ет два числа, L и M. Ука­жи­те наи­боль­шее из таких чисел x, при вводе ко­то­рых ал­го­ритм пе­ча­та­ет сна­ча­ла 3, а потом 7.

var x, L, M: integer;

begin

    readln(x);

    L:=0; M:=0;

    while x > 0 do begin

        L:= L + 1;

        if x mod 2 = 0 then

            M:= M + (x mod 10) div 2;

        x:= x div 10;

    end;

    writeln(L); write(M);

end.

Решение:

На каж­дом шаге от де­ся­тич­ной за­пи­си x от­се­ка­ет­ся по­след­няя цифра до тех пор, пока все цифры не будут от­се­че­ны, то есть x не ста­нет равно 0. В переменной L накапливается число выполнений цикла. L=3, значит цикл выполнился 3 раза, значит исходное число x трехзначное.

Те­перь рас­смот­рим опе­ра­тор из­ме­не­ния M:

if x mod 2 = 0 then

M:= M + (x mod 10) div 2;

end;

M увеличивается только в случае, если текущее значение  x четное, т.е. если четная его последняя цифра. В этом случае к текущему значению M прибавляется целочисленный результат деления последней цифры текущего значения x на 2.

Таким образом, М – это сумма половин четных цифр числа x.

Значит, нам нужно найти наибольшее трехзначное число х, сумма четных цифр которого равна 14.

Наибольшее такое число 986.

Ответ: 986

Пример 4.

Ниже на пяти язы­ках за­пи­сан ал­го­ритм. По­лу­чив на вход число x, этот ал­го­ритм пе­ча­та­ет два числа a и b. Ука­жи­те наи­боль­шее из таких чисел x, при вводе ко­то­ро­го ал­го­ритм пе­ча­та­ет сна­ча­ла 2, а потом 5.

 Бей­сик

Python

DIM X, A, B AS INTEGER

INPUT X

A = 0: B = 1

WHILE X > 0

A = A+1

B = B * (X MOD 100)

X = X100

WEND

PRINT A

PRINT B

x = int(input())

a, b = 0, 1

while x > 0:

a = a + 1

b = b * x%100

x = x//100

print(a)

print(b)

Пас­каль

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

var x, a, b: integer;

begin

readln(x);

a := 0; b := 1;

while x > 0 do

begin

a := a+1;

b := b*(x mod 100);

x := x div 100;

end;

writeln(a); write(b);

end.

алг

нач

цел x, a, b

ввод x

a:=0; b:=1

нц пока x > 0

a := a+1

b := b*mod(x,100)

x := div(x,100)

кц

вывод a, нс, b

кон

Си

#include <stdio.h>

void main()

{

int x, a, b;

scanf(«%d», &x);

a = 0; b = 1;

while (x > 0) {

a = a+1;

b = b * (x%100);

x = x/100;

}

printf(«%dn%d», a, b);

}

Решение:

Т. к. опе­ра­тор div воз­вра­ща­ет целую часть от де­ле­ния, то при де­ле­нии на 100 это рав­но­силь­но от­се­че­нию по­след­них двух цифр.

На каж­дом шаге от де­ся­тич­ной за­пи­си x от­се­ка­ет­ся две по­след­них цифры до тех пор, пока все цифры не будут от­се­че­ны, то есть x не ста­нет равно 0.

В переменной a накапливается количество выполнений цикла, a=2, значит число x трехзначное или четырехзначное.

В переменной b накапливается произведение двух чисел: числа, состоящего из последних двух цифр числа х и первой цифры числа х, если число x трехзначное (или двух первых цифр, если число x четырехзначное).

Т.к. b=5, то второй из множителей не может быть двузначным, т.е. число x трехзначное. Наибольшее такое число равно 501.

Ответ: 501

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

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

Добрый день! В этой статье рассмотрим 6 (шестое) задание из Единого Государственного Экзамена (ЕГЭ) по информатике.

В этом задании из ЕГЭ по информатике обычно даётся задача на понимание цикла в программировании.

Перейдём к примерам!

Задача (Классика, степенная зависимость)

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

Паскаль Python
var n, s: integer;
begin
    readln(s);
    n := 1;
    while n <= 100 do
    begin
        s := s + 30;
        n := n * 3
    end;
    write(s)
end.
s = int(input())
n = 1
while n <= 100:
    s = s + 30
    n = n * 3
print(s)
С++ Алгоритмический язык
#include
using namespace std;
int main()
{
    int n, s;
    cin >> s;
    n = 1;
    while (n <= 100)
    {
        s = s + 30;
        n = n * 3;
    }
    cout « s « endl;
}
алг
нач
    цел n, s
    ввод s
    n := 1
    нц пока n <= 100
        s := s + 30
        n := n * 3
    кц
    вывод s
кон

Решение:

Программа написана на 4 языках программирования, но мы будем работать с языком «паскаль».

Рассмотрим «анатомию» нашей программы.

ЕГЭ по информатике - задание 6 (анатомия программы с циклом)

В первой строчке объявляются переменные n и s целого типа данных. В восьмом задании из ЕГЭ по информатике преимущественно даются именно целые числа.

Ключевой слово вegin — обозначает начало программы.

В следующей строчке программа запрашивает число с клавиатуры и кладёт его в переменную s.

В переменную n в начале кладётся значение 1.

Ключевое слово while — задаёт условие цикла. Пока условие верно (истино), выполняется тело цикла! Внутри тела цикла значение переменных изменяются, в результате чего, через некоторое количество повторений уже не будет выполняться условие n <= 100. Значение переменной n будет больше 100. И цикл закончится.

После окончание цикла выполнится последняя команда данной программы write(s). Она выведет на экран значение переменной s.

Программа полностью завершается на команде end..

Ключевые слова begin и end в паскале — показывают границу чего-либо. Например, у нас есть пара команд begin и end, которая показывает область нашей программы. Есть пара begin и end, которая показывает границу тела цикла while. В некоторых других языках подобную функциональность выполняют фигурные скобки.

Приступим непосредственно к решению!

Принимаем во внимание, что в начале переменная n=1, переменная s -неизвестно.

Далее, нам нужно оценить: сколько раз повторится цикл ?

1. После 1-ого повторения цикла n := n * 3 = 1 * 3 = 3
2. После 2-ого повторения цикла n := n * 3 = 3 * 3 = 9
3. После 3-его повторения цикла n := n * 3 = 9 * 3 = 27
4. После 4-ого повторения цикла n := n * 3 = 27 * 3 = 81
5. После 5-ого повторения цикла n := n * 3 = 81 * 3 = 243

После пяти повторений n станет больше 100, значит, цикл прекратится!

Нам нужно узнать, что было в переменной s (sнач.) до начала цикла. Цикл повторился 5 раз.

Следовательно, мы должны прибавить по 30 (тридцать) к первоначальному значению sнач 5 раз. В итоге, должна получится переменная s = 160.

s = sнач. + 30 * 5 = 160
sнач. = 160 — 150 = 10

Это значение и было введено пользователем.

Ответ: 10.

Ещё одна классическая задача из тренировочных вариантов ЕГЭ по информатике.

Задача (Классика, линейная зависимость)

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

Паскаль Python
var k, s: integer;
begin
    Readln(s);
    k:=0;
    while s > 0 do begin
        s := s - 15;
        k := k + 2;
    end;
    write(k);
end.
s = int(input())
k = 0
while s > 0:
    s = s − 15
    k = k + 2
print(k)
С++ Алгоритмический язык
#include
using namespace std;
 
int main() {
    int s , k;
    cin >> s;
    k = 0;
    while(s > 0){
        s = s − 15;
        k = k + 2;
    }
    cout << k << endl;
}
алг
нач
    цел s, k
    ввод s
    k := 0
    нц пока s > 0
        s := s − 15
        k := k + 2
    кц
    вывод k
кон

Решение:

В переменной k после выполнения цикла должно быть значение 32. Оценим, сколько раз выполнится цикл.

kнач. + 2 * x = 32
0 + 2 * x = 32
x = 32 / 2 = 16

Здесь kнач. = 0. За x обозначили количество повторений цикла.

Т.е. 16 раз должен повторится цикл.

При выполнении последней итерации (16 проход цикла) от переменной s отнимается в последний раз число 15, и после этого, условие s > 0 должно не сработать. Значит, при последнем проходе цикла в переменной s может быть значение от 1 до 15. Нам нужно найти наименьшее возможное значение переменной s. Поэтому после 15 проходов цикла считаем, что переменная s=1.

Тогда 15 итераций назад, переменная s = 1 + 15 * 15 = 226.

Это и будет ответ.

Ответ: 226

Ещё один частый гость в примерных вариантах ЕГЭ по информатике.

Задача (условие цикла зависит от двух переменных)

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

Бейсик Python
DIM S, N AS INTEGER
INPUT S
N = 300
WHILE S + N <= 500
S = S + 30
N = N − 20
WEND
PRINT N
s = int(input())
n = 300
while s + n <= 500:
    s = s + 30
    n = n − 20
print(n)
Паскаль Алгоритмический язык
var s, n: integer;
begin
    Readln(s);
    n := 300;
    while s + n <= 500 do
    begin
        s := s + 30;
        n := n − 20;
    end;
    writeln(n)
end.
алг
нач
    цел s, n
    ввод s
    n := 300
    нц пока s + n <= 500
        s := s + 30
        n := n − 20
    кц
    вывод n
кон
Си++
#include
using namespace std;
int main()
{
    int s, n; 
    cin >> s;
    n = 300;
    while (s + n <= 500) {
        s = s + 30;
        n = n − 20;
    }
    cout << n;
    return 0;
}

Решение:

Здесь интересно условие цикла s + n <= 500. Оно зависит сразу от двух переменных.

Переменная n после окончания программы должна равняться 80. Найдём, сколько раз выполнился цикл. Обозначим за x — количество повторений цикла.

300 — x * 20 = 80
-x * 20 = -220
x = 220 / 20 = 11

Цикл повторится 11 раз.

За один проход цикла сумма двух переменных (s + n) увеличивается на 10. Значит, сумма после 10 проходов может быть в диапазоне от 491 до 500. Мы выбираем самое маленькое значение 491, потому что, если сумма будет принимать минимальное значение, то и переменная s будет принимать минимальное значение из всех возможных (ведь переменная n жёстко задана).

Переменная n после 10 проходов будет равна 80 + 20 = 100.

Тогда переменная s = 491 — 100 = 391 (После 10 проходов цикла). «Отмотаем» 10 итераций назад, и мы узнаем первоначальное значение переменной s.

sнач. = 391 — 10 * 30 = 91

Ответ: 91.

На этом всё! Успехов на экзамене по информатике при решении 6 задания нового формата 2021.

Спасибо большое за объяснения! Стало понятнее. В 3 задании, немного не понятно почему взяли 491, а не 490 например..

Маша,у нас не может получится 490,т.к. в учет взято 10 повторений. При 11-ом повторении(финальном) программа выдаст 500,алгоритм будет выполняться и дальше до 12 повтора. Нам же нужно,чтобы алгоритм завершился на 11 повторении,то есть строго больше 500. Подходит диапазон от 491 до 500

Спасибо огромное, вы так помогаете, размеренно, спокойно, пошагово объясняете. Надеюсь вы дальше тоже будете разбирать задания из ЕГЭ. Вы прекрасны

Задачи с циклами

Задача №8 ЕГЭ по информатике и ИКТ относится к базовому уровню сложности. Однако наличие в программе цикла с предусловием может стать причиной потенциальных ошибок.

Разберем на примерах особенности данного задания, возможные сложности и приемы решения.

Рассмотрим задачу №8 из варианта КИМ, использованного для проведения ЕГЭ по информатике и ИКТ досрочного периода 2017 года.

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

Задача 8 Досрочный ЕГЭ 2017

Решение.

  1. Переменные s и n получают начальные значения равные нулю.
  2. Переменные s и n изменяются в теле цикла.
  3. На каждом шаге цикла значение переменной n увеличивается на 3. Очевидно, для ответа на вопрос задачи необходимо выяснить количество шагов в цикле.
  4. Цикл while заканчивает работу когда условие s < 71 перестает выполняться.
  5. Найдем предельное количество шагов, для которого условие s < 71 истинно:
    kпр • 10 < 71, отсюда kпр = 7.
  6. Рассмотрим работу цикла при kпр = 7: значение переменной s равно 70, значит, условие s < 71 ИСТИННО, поэтому выполняется последний, 8-ой, шаг.
    Действительно, s = 70 + 10 = 80 и следующая проверка условного выражения дает ЛОЖЬ.
  7. Теперь нетрудно определить значение n: 8 • 3 = 24

Ответ. 24

Разберем восьмую задачу из демонстрационного варианта ЕГЭ 2017 года по информатике и ИКТ.

Задача №8. Определите, какое число будет напечатано в результате выполнения программы, записанной ниже.

Задача 8 демо вариант 2017

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

  1. Начальные значения переменных s и n равны соответственно 0 и 1.
  2. Переменные s и n изменяются в теле цикла.
  3. С каждым шагом цикла значение переменной n увеличивается в 5 раз. Значит, n изменяется по закону n = 5k, где k – количество шагов в цикле. Тогда условие выполнения цикла можно записать 5k <= 150.
  4. Значение переменной s увеличивается с каждым шагом на 30. Поэтому s = k * 30.
  5. Таким образом, при n = 125 выполняется последний, 4-ый, шаг. Действительно, n = 125 * 5 = 625 и следующая проверка условного выражения дает ЛОЖЬ.
  6. Тогда s = 4 • 30 = 120

Ответ. 120

12 задание ЕГЭ по информатике обычно решает только половина выпускников. Оно правда такое сложное? Нет, если заранее изучить каждый из трех прототипов. Из этой статьи вы узнаете, как справиться с Редактором, Роботом и Чертежником — и как можно сделать это еще проще, используя программирование.

12 задание ЕГЭ по информатике

Прототипы задания 12 и их сложности

12 задание ЕГЭ по информатике относится к повышенному уровню сложности. На экзамене за него можно получить один первичный балл.

Это задание — часть блога «Алгоритмизация». Чтобы решить его, нужно уметь работать с алгоритмами и анализировать их. В этом задании могут встретиться три прототипа заданий: Редактор, Робот и Чертежник. Причем Редактор встречается на экзамене в последнее время чаще других прототипов.

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

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

Робот — прототип на работу с клетчатой плоскостью и алгоритмом. Вам дают алгоритм и плоскость, содержащую 36 клеток. Нужно найти количество клеток, удовлетворяющее определенному условию. Сложность в том, что ученики начинают проверять все 36 клеток. Делать это не нужно, если проанализировать алгоритм из условия.

Чертежник — прототип на работу с алгоритмом, где исполнитель перемещается по координатной плоскости. Чаще всего в таких заданиях в алгоритме есть пропуски в командах. Нужно найти наибольшее количество повторений цикла. Сложностей обычно здесь не так много, основная — невнимательность при выполнении вычислений.

Самостоятельно подготовиться к ЕГЭ непросто. На то, чтобы разобраться со всеми темами, понадобится много времени. Но и это не решит проблему! Например, если вы запомнили какое-то решение из интернета, а оно оказалось неправильным, можно на пустом месте потерять баллы. Если хотите научиться решать все задания ЕГЭ по информатике, обратите внимание на онлайн-курсы MAXIMUM! Наши специалисты уже проанализировали сотни вариантов ЕГЭ и подготовили для вас вас максимально полезные занятия.

Приходите к нам на консультацию — вы сможете пройти диагностику по выбранным предметам ЕГЭ, поставить цели и составить стратегию подготовки, чтобы получить на экзамене высокие баллы. Все это абсолютно бесплатно!

Редактор — как решать?

Задания с прототипом «Редактор» можно решать как аналитически, так и с помощью компьютера, если у вас все хорошо с программированием. Мы рассмотрим с вами оба способа решения и убедимся, что они дают одинаковые ответы.

Пример 1 (Редактор)

Исполнитель Редактор получает на вход строку цифр и преобразовывает ее.

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

А) заменить (v, w).

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

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

Б) нашлось (v).

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

12 задание ЕГЭ по информатике

Какая строка получится в результате применения приведенной ниже программы к строке, состоящей из 88 идущих подряд цифр 4? В ответе запишите полученную строку.

12 задание ЕГЭ по информатике

Аналитическое решение

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

Сначала уберем по возможности все четверки из цепочки.

88 / 3 = 29 и 1 в остатке. 

Получается, что из цепочки уйдет 29 блоков по 3 четверки и образуется 29 единиц, 1 четверка останется в цепочке в самом конце.

Теперь будем последовательно убирать единицы из цепочки.

29 “1” + 1 “4”

1 “4” + 27 “1” + 1 “4”

2 “4” + 25 “1” + 1 “4”

3 “4” + 23 “1” + 1 “4”

24 “1” + 1 “4”

Как только в цепочке появились 3 четверки, алгоритм заменил их назад на единицу. Суммарно из цепочки ушло 5 единиц. Это действие будет повторяться циклически, поэтому можно посчитать, сколько блоков по 5 единиц уйдет из цепочки.

29 / 5 = 5 и 4 в остатке

Получается, что в цепочке останется 4 единицы и 1 четверка.

11114 → 4114 → 444 → 1

В итоге в цепочке останется только единица.

Решение с помощью компьютера 

В самом задании у нас уже написана программа. Остается перевести ее на конкретный язык программирования. Напишем программу на Python.

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

12 задание ЕГЭ по информатике

Создаем строку, содержащую 88 четверок. Далее запускаем цикл, который будет проверять, есть ли в строке 3 четверки или 2 единицы. Пропиваем условие и замену в строке. Важно в методе replace() указать третий параметр, который отмечает, сколько замен нужно выполнить. По умолчанию replace() сразу заменит все цифры в строке, а нам нужно выполнять замены по одной.

При запуске данной программы мы также получим ответ 1.

Ответ: 1

Пример 2 (Редактор)

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

А)  заменить (v, w).

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

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

Б)     нашлось (v).

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

На вход приведенной ниже программе поступает строка, начинающаяся с символа «>», а затем содержащая 25 цифр 1, 45 цифр 2 и 10 цифр 3, расположенных в произвольном порядке.

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

Так, например, если результат работы программы представлял бы собой строку, состоящую из 50 цифр 4, то верным ответом было бы число 200.

12 задание ЕГЭ по информатике

Аналитическое решение 

Цифры 1, 2 и 3 находятся в строке в произвольном порядке. Все, что нам нужно сделать, чтобы получить ответ — это понять, сколько цифр образовалось в результате замен. 

Каждую единицу алгоритм заменит на тройку. Если изначально было 25 единиц, то в результате замен образуется 25 троек, и их сумма будет равна 25 * 3 = 75.

Каждую двойку алгоритм заменит на 2 единицы. Изначально было 45 двоек, значит, в результате замен образуется 90 единиц. Их сумма будет равна 90.

Каждую тройку алгоритм заменит на 2 тройки. Было 10 троек, станет 20. Сумма составит 20 * 3 = 60.

Итоговая сумма всех цифр цепочки будет равна 75 + 90 + 60 = 225.

Решение с помощью компьютера

Перенесем алгоритм на язык программирования Python.

Получаем следующую программу:

Сначала мы задали строку, содержащую знак “>” и нужное количество всех цифр. Далее в цикле проверяем наличие знака “>” и цифр и выполняем замену. Как только программа вышла из цикла, считаем количество единиц, двоек и троек в строке — и находим сумму. При запуске программы также получается ответ 225.

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

Ответ: 225

Робот — как решать?

Второй прототип, который включает в себя 12 задание ЕГЭ по информатике — Робот. Этот прототип точно придётся решать аналитически, поэтому давайте разбираться, как сделать это с минимальными затратами времени.

Пример 3 (Робот)

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости, включает в себя 4 команды-приказа и 4 команды проверки условия. 

Команды-приказы: вверх, вниз, влево, вправо

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.

Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится, и программа прервется.

Другие 4 команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ: сверху свободно, снизу свободно, слева свободно, справа свободно

Цикл

ПОКА < условие > команда

Выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, то он разрушится, и программа прервется. 

Сколько клеток лабиринта соответствуют требованию, что, выполнив предложенную программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

НАЧАЛО

ПОКА < снизу свободно > вправо

ПОКА < справа свободно > вверх

ПОКА < сверху свободно > влево

ПОКА < слева свободно > вниз

КОНЕЦ

12 задание ЕГЭ по информатике

Решение

Чтобы не проверять все 36 клеток плоскости, нужно проанализировать программу. В алгоритме 4 цикла, но нам важен только последний. Робот будет выполнять действия и остановится только в той клетке плоскости, где слева есть стена, так как в последнем цикле мы проверяем именно это условие. Поэтому необходимо проверить только те клетки, где слева есть стена. В остальных клетках плоскости Робот просто не сможет остановиться, поэтому и начинать движение из них мы тоже не будем.

12 задание ЕГЭ по информатике

Проверяем по алгоритму 12 отмеченных клеток. 

Из всех отмеченных клеток нам подойдет только клетка В5. Если начать движение из нее, Робот вернется в эту же точку. Остальные клетки не подойдут, так как Робот либо разобьется, либо остановится в другой клетке.

Ответ: 1

Прототип Чертежник — как решать?

Последний прототип, который составители включили в 12 задание ЕГЭ по информатике — это Чертежник. Здесь при решении важно правильно составить систему уравнений и найти наибольший/наименьший делитель двух чисел. Посмотрим, как это сделать.

Пример 4 (Чертежник)

Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (a, b), где a, b – целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x + a, y + b).

Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на (2, −3) переместит Чертёжника в точку (6, −1).

Цикл

ПОВТОРИ число РАЗ

последовательность команд

КОНЕЦ ПОВТОРИ

означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным).

Чертёжнику был дан для исполнения следующий алгоритм (количество повторений и величины смещения в первой из повторяемых команд неизвестны):

В результате выполнения этого алгоритма Чертёжник возвращается в исходную точку. Какое наибольшее число повторений могло быть указано в конструкции «ПОВТОРИ … РАЗ»?

Решение

Чтобы решить это задание, необходимо обозначить неизвестными пропуски в алгоритме.

12 задание ЕГЭ по информатике

Далее составим систему уравнений. Нам известно, как перемещался Чертежник, и сказано, что он вернулся в начальную точку. Получается, его перемещение равно 0.

Теперь мы можем найти n — наибольшее количество повторений цикла. Число n должно быть делителем как 24, так и 16, то есть нам нужно найти НОД(24, 16). Он равен 8. Это и будет ответом к заданию.

Ответ: 8

Что нужно запомнить?

  1. Если вам попадется Редактор, можете написать программу, которая найдет ответ вместо вас. Но всегда рассчитывайте, что будет рациональнее: аналитическое решение или компьютерное. Если останется время, можно проверить себя вторым способом.
  2. Решая задание с Роботом, не нужно проверять все клетки — это долго. Проанализируйте алгоритм и проверяйте только те клетки, которые действительно могут подойти под условия.
  3. Чтобы разобраться с Чертежником, внимательно составляйте систему уравнений. Ищите НОД, если нужно найти наибольшее количество повторений цикла. 
  4. Если в конце экзамена осталось время, вернитесь к заданию и проверьте его — ребята часто теряют баллы из-за невнимательности. Особенно рекомендую перепроверить Робота — решите его заново. 

Теперь вы знаете, как решать 12 задание ЕГЭ по информатике! Обязательно прочитайте наш гайд по этому экзамену, если хотите разобраться с остальными темами и заданиями. Там вы найдете структуру экзамена, актуальные прототипы, тематические блоки и лайфхаки от наших преподавателей. Желаем удачи в подготовке 🙂

Понравилась статья? Поделить с друзьями:

Новое и интересное на сайте:

  • Решу егэ информатика фипи 2022
  • Решу егэ информатика 8654
  • Решу егэ информатика условие фано
  • Решу егэ информатика тип 4
  • Решу егэ информатика 8101

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: