Условие выполнения цикла while решу егэ


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

Версия для печати и копирования в 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;

}

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

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

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

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

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

Массивы

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

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

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

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

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

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

      i = j

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

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

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

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

      или

      j = n — i + 1

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

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

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


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

    Паскаль:

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

    Python:

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

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

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

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

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

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

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

      Пояснение:

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

      Python:

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

    Ответ: 14

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

    Паскаль:

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

    Python:

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

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

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

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

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

    ✍ Решение:

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

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

      Пояснение:

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

      Python:

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

    Ответ: 23

    6_3 new::

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

    Паскаль:

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

    Python:

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

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

    ✍ Решение:

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

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

      Python:

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

    Ответ: 4

    6_4 new:

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

    Паскаль:

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

    Python:

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

    ✍ Решение:

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

      PascalAbc.NET:

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

      Python:

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

    Ответ: 2315

    6_5 new:

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

    Паскаль:

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

    Python:

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

    ✍ Решение:

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

      PascalAbc.NET:

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

      Python:

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

    Ответ: 699


    6_6 new:

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

    Паскаль:

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

    Python:

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

    ✍ Решение:

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

      PascalAbc.NET:

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

      Python:

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

    Ответ: 360


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

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

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

    6_14:

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

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

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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

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

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

    Ответ: 3


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

    6_3:

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

    Паскаль:

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

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

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

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

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

    ✍ Решение:

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

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

    Результат: 24

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

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


    6_2:

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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

    Результат: 51


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

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

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

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

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

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

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

    ✍ Решение:

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

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

    Результат: 36

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

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


    6_4:

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

    Паскаль:

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

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

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

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

    ✍ Решение:

    Результат: 32

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

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


    6_5:

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

    Паскаль:

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

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

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

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

    ✍ Решение:

    Результат: 32

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

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


    6_12:

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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


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

    6_7:

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

    Паскаль:

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

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

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

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

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

    ✍ Решение:

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

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

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

    Результат: 22

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

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


    6_13:

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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

    Результат: 32

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

    ЕГЭ 6.8:

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

    Паскаль:

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

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

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

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

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

    ✍ Решение:

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

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

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

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

    Результат: 67

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

    📹 здесь


    6_9:

      

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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

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

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

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

    📹 здесь


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

    6_6:

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

    Паскаль:

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

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

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

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

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

    ✍ Решение:

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

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

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

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

    Результат: 16

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

    📹 здесь


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

    6_10:

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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

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

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

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

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

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

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

    Результат: 147

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

    📹 здесь


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

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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

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

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

      2.

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

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

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

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

    Результат: 1023


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

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

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

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

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

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

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

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

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

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

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

    ✍ Решение:

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

    6_16:

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

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

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

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

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

    ✍ Решение:

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

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

    Результат: 1960

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

    📹 здесь

    6_17:

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

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

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

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

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

    ✍ Решение:

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

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

    Результат: 1024

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

    📹 здесь


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

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

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

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

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

    ✍ Решение:

    Результат: 5

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

    📹 здесь


    6_19:

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

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

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

    ✍ Решение:

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

    Результат: 2

    📹 Видео здесь


    6_20:

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

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

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

    ✍ Решение:
     

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

    Результат: 6


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

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

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

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

    ✍ Решение:
     

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


    6_22:

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

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

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

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

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

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

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

    ✍ Решение:

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

    Ответ: 75

    📹 здесь


    6_23:

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

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

    Паскаль:

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

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

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

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

    ✍ Решение:

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

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

    Ответ: 60

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


    Добрый день! В этой статье рассмотрим 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

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

    Цикл while

    Цикл while («пока») — это так называемый цикл с условием или с предусловием. В цикле for мы явно указываем, какие значения будет принимать переменная i, например, 1 <= i <= 10. В цикле while можно задавать более сложные условия, например, i ^ 2 <= 10, кроме того можно использовать логические операции «И», «ИЛИ» и т.д.

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

    Синтаксис цикла while в простейшем случае выглядит так:

    while условие:
         блок инструкций

    При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается, и управление передаётся на следующую инструкцию после тела цикла while.
    Если условие истинно, то выполняются все инструкции из блока, после чего условие проверяется снова, и снова выполняется блок инструкций. Так продолжается до тех пор, пока условие будет истинно.
    Как только условие становится ложным, работа цикла завершается, и управление передаётся следующей инструкции после цикла.

    Пример:

    Следующий фрагмент программы напечатает на экран все целые числа, не превосходящие n, и их сумму:

    s = 0
    i = 1
    while i <= n:
         print(i)
         s += i
         i += 1
    print(s)

    Пример:

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

    i = 1
    while i <= 100:
         print(i)
         i *= 2

    После окончания цикла значение i будет уже больше, чем 100, иначе цикл бы продолжился. Последнее напечатанное значение будет соответственно равно 64.

    Пример:

    Немного изменим задачу: найдём максимальную степень двойки, не превосходящую 100.

    p = 1
    while p * 2 <= 100:
         p *= 2
    print(p)

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

    Пример:

    Вот еще один пример использования цикла while для определения количества цифр натурального числа n и их суммы:

    s = 0
    n = int(input())
    count = 0
    while n > 0:
         count += 1
         s += n % 10
         n //= 10
    print(count)
    print(s)

    В этом цикле мы отбрасываем по одной цифре числа, начиная с конца, что эквивалентно целочисленному делению на 10 (n //= 10), при этом считаем в переменной count, сколько раз это было сделано, а в переменной s — сумму отброшенных цифр.

    Задача *

    Трискайдекафобия

    Трискайдекафобия — боязнь числа 13. В особо сложных формах пациент боится и всех чисел, кратных 13.

    Дано число N. Выведите все целые числа по возрастанию, начиная с числа N, пока не встретится число, кратное 13. Его выводить не нужно.

    Входные данные

    Дано натуральное число N, не превосходящее 10000.

    Выходные данные

    Выведите ответ на задачу.

    Примечание

    Программа должна быть решена при помощи одного цикла while, без if внутри цикла.

    Примеры

    Ввод Вывод
    20 20
    21
    22
    23
    24
    25

    Видеоразбор

    ОТВЕТ:
    n = int(input())
    while n % 13 != 0:
         print(n)
         n += 1

    Задача 1

    Номер числа Фибоначчи

    Последовательность Фибоначчи определяется так:

    φ0 = 0, φ1 = 1, φn = φn — 1 + φn — 2

    Дано натуральное число A. Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число n, что φn = A. Если A не является числом Фибоначчи, выведите число -1.

    Входные данные

    Вводится натуральное число A (2 ⩽ A ⩽ 2 ⋅ 109).

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    ОТВЕТ:
    f = 0
    f1 = 1
    f2 = 0
    i = 0
    n = int(input())
    while f <= n:
         f = f1 + f2
         f1, f2 = f, f1
         i += 1
    if n == f2:
         print(i)
    else:
         print(-1)

    Задача 2

    Точная степень двойки

    Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.

    Операцией возведения в степень пользоваться нельзя!

    Входные данные

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

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    ОТВЕТ:
    n = int(input())
    i = 1
    while i < n:
         i = i * 2
    if i == n:
         print(«YES»)
    else:
         print(«NO»)

    Задача 3

    Банковские проценты

    Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть от копеек отбрасывается. Определите, через сколько лет вклад составит не менее y рублей. В задаче запрещено использовать дробные числа.

    Входные данные

    Программа получает на вход три натуральных числа: x, p, y (x ⩽ 2000, p ⩽ 100, y ⩽ 2000).

    Выходные данные

    Программа должна вывести одно целое число — ответ на задачу.

    Примечание

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

    Примеры

    ОТВЕТ:
    x = int(input()) * 100
    p = int(input())
    y = int(input()) * 100
    i = 0
    while x < y:
         x += int(p * x / 100)
         i += 1
    print(i)

    Задача 4

    Минимальный простой делитель

    Дано целое число, не меньшее 2. Выведите его наименьший простой делитель.

    Входные данные

    Вводится целое положительное число N ⩽ 2 ⋅ 109.

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    ОТВЕТ:
    n = int(input())
    i = 2
    while i * i <= n:
         if n % i == 0:
              print(i)
              break
         i += 1
    if i * i > n:
         print(n)

    Задача 5

    Список квадратов

    По данному целому числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.

    Входные данные

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

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    Ввод Вывод
    50 1 4 9 16 25 36 49

    ОТВЕТ:
    x = int(input())
    i = 1
    while i * i <= x:
         print(i * i, end=’ ‘)
         i += 1

    Обработка последовательностей неизвестной длины

    Обработка последовательностей неизвестной длины

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

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

    Пример:

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

    Решение может выглядеть так:

    count = 0
    prod = 1
    elem = int(input())
    while elem != 0:
         count += 1
         prod *= elem
         elem = int(input())
    print(prod)
    print(count)

    Рассмотрим более сложную задачу.

    Пример:

    Дана последовательность неизвестной длины, требуется вывести первое число, которое встречается два раза подряд. Гарантируется, что такое число существует.

    Для решения задачи потребуется хранить не только текущее считанное значение, но и предыдущее:

    prev = int(input())
    elem = int(input())
    while elem != prev:
         prev = elem
         elem = int(input())
    print(elem)

    Задача *

    Второй минимум

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

    Последнее число 0 не учитывается. Гарантируется, что в последовательности есть хотя бы два элемента (кроме завершающего числа 0).

    Входные данные

    На вход подаётся последовательность целых неотрицательных чисел, заканчивающаяся нулём. Все числа в последовательности неотрицательные, по значению не превосходящие 109.

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    Видеоразбор

    ОТВЕТ:
    min1 = 10 ** 9
    min2 = 10 ** 9
    elem = int(input())
    while elem != 0:
         if elem < min1:
              min2 = min1
              min1 = elem
         elif elem < min2:
              min2 = elem
         elem = int(input())
    print(min2)

    Задача 6

    Количество элементов, которые больше предыдущего

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

    Входные данные

    Вводится последовательность натуральных чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак её окончания).

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    ОТВЕТ:
    elem = int(input())
    i = 0
    while elem != 0:
         f = int(input())
         if f != 0 and elem < f:
              i += 1
         elem = f
    print(i)

    Задача *

    Количество локальных максимумов

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

    Входные данные

    Дана последовательность натуральных чисел, завершающаяся числом 0. Гарантируется, что все числа не превосходят 100.

    Выходные данные

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

    Примеры

    Видеоразбор

    ОТВЕТ:
    elem = int(input())
    prev1 = elem
    prev2 = elem
    count = 0
    while elem != 0:
         if prev1 > prev2 and prev1 > elem:
              count += 1
         prev2 = prev1
         prev1 = elem
         elem = int(input())
    print(count)

    Задача 7

    Среднее значение последовательности

    Определите среднее значение всех элементов последовательности, завершающейся числом 0. Сам ноль в последовательность не входит.

    Использовать массивы в данной задаче нельзя.

    Входные данные

    Вводится последовательность целых чисел, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит как признак её окончания.

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    Ввод Вывод
    1
    7
    9
    0
    5.66666666667

    ОТВЕТ:
    elem = int(input())
    count = 0
    s = 0
    while elem != 0:
         s += elem
         count += 1
         elem = int(input())
    print(s / count)

    Задача *

    Самое частое число в последовательности

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

    Для решения этой задачи запрещено использование массивов и списков.

    Входные данные

    На вход подается последовательность натуральных чисел, заканчивающаяся нулём. Его обрабатывать не нужно. Гарантируется, что все числа не превосходят 109.

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    Видеоразбор

    ОТВЕТ:
    ans = 0
    count = 0
    elem = int(input())
    while elem != 0:
         if count == 0:
              ans = elem
              count = 1
         elif elem == ans:
              count += 1
         else:
              count -= 1
         elem = int(input())
    print(ans)

    Задача *

    Выдача сдачи

    Имеется неограниченное количество монет в 1, 2, 5, 10 рублей. Определите, сколькими способами можно выдать сдачу в n рублей. Например, 5 рублей можно выдать четырьмя способами: 5 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 + 1 + 1 + 1.

    Входные данные

    Программа получает на вход натуральное число n, не превышающее 100.

    Выходные данные

    Выведите ответ на задачу.

    Примеры

    ОТВЕТ:
    s = int(input())
    cnt = 0
    for a in range(11):
         for b in range(21):
              for c in range(51):
                   for d in range(101):
                        if a * 10 + b * 5 + c * 2 + d == s:
                             cnt += 1
    print(cnt)

    Задача *

    Выдача сдачи — 2

    Имеется неограниченное количество монет в 1, 2, 5, 10 рублей. Определите, сколькими способами можно выдать сдачу в n рублей. Например, 5 рублей можно выдать четырьмя способами: 5 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 + 1 + 1 + 1.

    Входные данные

    Программа получает на вход натуральное число n, не превышающее 106.

    Выходные данные

    Выведите ответ на задачу.

    Примечание

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

    Примеры

    Ввод Вывод
    100000 1667116705001

    Видеоразбор

    ОТВЕТ:
    s = int(input())
    ans = 0
    s5 = 0
    while s5 <= s:
         s1 = s — s5
         ans += (s1 // 2 + 1) * (s5 // 10 + 1)
         s5 += 5
    print(ans)

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

    var k,
    s: integer;

    begin

    s:=0;

    k:=1;

    while s
    < 66 do begin

    k:=k+3;

    s:=s+k;

    end;

    write(k);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s < 66, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Зна­че­ние s есть сумма пер­вых n чле­нов ариф­ме­ти­че­ской
    про­грес­сии.b=2a1+(n-1)d2*n , http://reshuege.ru/formula/92/92eb5ffee6ae2fec3ad71c777531578f.png — сумма пер­вых n чле­нов
    про­грес­сии, http://reshuege.ru/formula/82/8277e0910d750195b448797616e091ad.png — раз­ность про­грес­сии, http://reshuege.ru/formula/7b/7b8b965ad4bca0e41ab51de7b31363a1.png — ко­ли­че­ство чле­нов.

    Цикл пре­рвет­ся, когда .s= 2s1+(n-1)d/2*n<66

    Най­дем http://reshuege.ru/formula/7b/7b8b965ad4bca0e41ab51de7b31363a1.png:s=(2s1+(n-1)d)n<132 ,s1=1 ,d=3  (т. к. k:=k+3). Чтобы ре­шить это не­ра­вен­ство,
    нам не­об­хо­ди­мо ре­шить квад­рат­ное урав­не­ние 3n^2-n-132=0, среди его кор­ней нас ин­те­ре­су­ют толь­ко по­ло­жи­тель­ные,
    сле­до­ва­тель­но,n=6,8 

    Вос­поль­зо­вав­шись ме­то­дом ин­тер­ва­лов, на­хо­дим, что
    пер­вое на­ту­раль­ное n, при ко­то­ром на­ру­ша­ет­ся усло­вие, есть n=7 .

    Под­ста­вив из­вест­ные па­ра­мет­ры в Kn=k1+(n-1)d  по­лу­ча­ем, что k1=19

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

    var k,
    s: integer;

    begin

    s:=0;

    k:=0;

    while k
    < 30 do begin

    k:=k+3;

    s:=s+k;

    end;

    write(s);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    k < 30, т. е. пе­ре­мен­ная k опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Так как по­сле­до­ва­тель­ность k пред­став­ля­ет собой ариф­ме­ти­че­скую
    про­грес­сию, най­дем n из не­ра­вен­ства:

    Kn=k1+9n-1)d<30,k1=0,d=3(т. к. k:=k+3). Вос­поль­зо­вав­шись ме­то­дом
    ин­тер­ва­лов, на­хо­дим пер­вое на­ту­раль­ное n, при ко­то­ром на­ру­ша­ет­ся
    усло­вие: n=11

    Зна­че­ние s есть сумма пер­вых n чле­нов ариф­ме­ти­че­ской
    про­грес­сии.b=2a1+(n-1)d2*n  http://reshuege.ru/formula/92/92eb5ffee6ae2fec3ad71c777531578f.png — сумма пер­вых n чле­нов
    про­грес­сии, http://reshuege.ru/formula/82/8277e0910d750195b448797616e091ad.png — раз­ность про­грес­сии, http://reshuege.ru/formula/7b/7b8b965ad4bca0e41ab51de7b31363a1.png — ко­ли­че­ство чле­нов.

    S=2s1+(n-1)d2*n=0+(11-1)*32*11=165

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

    var k,
    s: integer;

    begin

    s:=1;

    k:=0;

    while k
    < 13 do begin

    s:=s+2*k;

    k:=k+4;

    end;

    write(s+k);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    k < 13, т. е. пе­ре­мен­ная k опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Так как числа не­боль­шие, можно ак­ку­рат­но вы­пи­сать все
    s и k:

    s 1 1 9 25 49

    k 0 4 8 12 16

    (Пом­ни­те, что усло­вие k < 13 про­ве­ря­ет­ся сразу
    после k:=k+4, сле­до­ва­тель­но, дей­ствие s:=s+2*k для k=16 вы­пол­нять­ся не
    будет)

    Сле­до­ва­тель­но, ответ 49+16=65

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

    var k,
    s: integer;

    begin

    s:=0;

    k:=1;

    while k
    < 11 do begin

    s:=s+k;

    k:=k+1;

    end;

    write(s);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    k < 11, т. е. пе­ре­мен­ная k опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    За­пи­шем по­сле­до­ва­тель­но зна­че­ния s и k:

    k 1 2 3  4   5   6   7   8
       9    10

    s 0 3 6 10 15 21 28 36  45   55

    Цикл вы­пол­нит­ся де­сять раз: так как дей­ствие k := k+1
    стоит в конце цикла для k=11 дей­ствие s:= s + k не будет вы­пол­нять­ся.

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

    var k,
    s: integer;

    begin

    s:=5;

    k:=0;

    while k
    < 15 do begin

    k:=k+2;

    s:=s+k;

    end;

    write(s);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    k < 15, т. е. пе­ре­мен­ная k опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Цикл будет вы­пол­нять­ся, пока k не ста­нет боль­ше либо
    рав­ным 15. Учи­ты­вая, что k при­ни­ма­ет толь­ко чётные зна­че­ния, по­след­ним
    дей­стви­ем будет http://reshuege.ru/formula/7c/7cdc4f205420670c969095bd1c256859.png, а цикл вы­пол­нит­ся 8 раз. К 5
    в ре­зуль­та­те по­сле­до­ва­тель­но при­бав­ля­ют­ся все чет­ные числа до 16
    вклю­чи­тель­но. За­ме­тим, что это — ариф­ме­ти­че­ская про­грес­сия с раз­но­стью
    про­грес­сии, рав­ной 2. Поль­зу­ясь фор­му­лой для суммы n пер­вых чле­нов
    ариф­ме­ти­че­ской про­грес­сии, по­лу­чим:

    S=5+2+4=…+16=5+(2+162)*8=77.

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

    var n,
    s: integer;

    begin

    n := 4;

    s := 0;

    while n
    <= 8 do begin

    s := s +
    n;

    n := n +
    1

    end;

    write(s)

    end.

    По­яс­не­ние.

    По­сколь­ку из­на­чаль­но n = 4, цикл while n
    <= 8 вы­пол­нит­ся пять раз. Сле­до­ва­тель­но, s = 4 + 5 + 6
    + 7 + 8 = 30.

    Ответ: 30.

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

    var k,
    s: integer;

    begin

    s:=0;

    k:=0;

    while s
    < 100 do begin

    s:=s+k;

    k:=k+4;

    end;

    write(k);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s < 100, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Зна­че­ние s есть сумма пер­вых n чле­нов ариф­ме­ти­че­ской
    про­грес­сии.d=2a1+(n-1)d2*n , http://reshuege.ru/formula/92/92eb5ffee6ae2fec3ad71c777531578f.png — сумма пер­вых n чле­нов
    про­грес­сии, http://reshuege.ru/formula/82/8277e0910d750195b448797616e091ad.png — раз­ность про­грес­сии, http://reshuege.ru/formula/7b/7b8b965ad4bca0e41ab51de7b31363a1.png — ко­ли­че­ство чле­нов.

    Цикл пре­рвет­ся, когдаs=2s1(m-1)d2*n<100 .

    Най­дем http://reshuege.ru/formula/7b/7b8b965ad4bca0e41ab51de7b31363a1.png:s=(2s1+(n-1)d)n<200 ,s1=0 ,d=4  (т. к. k:=k+4). Чтобы ре­шить это не­ра­вен­ство,
    нам не­об­хо­ди­мо ре­шить квад­рат­ное урав­не­ние:n^2-n-50=0 . Среди его кор­ней нас ин­те­ре­су­ют толь­ко по­ло­жи­тель­ные,
    сле­до­ва­тель­но,n=7,5 

    Вос­поль­зо­вав­шись ме­то­дом ин­тер­ва­лов, на­хо­дим, что
    пер­вое на­ту­раль­ное n, при ко­то­ром на­ру­ша­ет­ся усло­вие, естьn=8 .

    Учи­ты­вая по­ря­док опе­ра­ций в цикле, вы­яс­ня­ем, что,
    до того как пре­рвать­ся, цикл вы­пол­нит­ся еще раз, сле­до­ва­тель­но,n=9 .

    Под­ста­вив из­вест­ные па­ра­мет­ры в Kn=k1+(n-1)d, по­лу­ча­ем,
    чтоk9=32 

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

    var k,
    s: integer;

    begin

    s:=2;

    k:=2;

    while s
    < 50 do begin

    s:=s+k;

    k:=k+2;

    end;

    write(k);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s < 50, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Зна­че­ние s есть сумма пер­вых n чле­нов ариф­ме­ти­че­ской
    про­грес­сии. d=2a1+(n-1)d2*n , http://reshuege.ru/formula/92/92eb5ffee6ae2fec3ad71c777531578f.png — сумма пер­вых n чле­нов
    про­грес­сии, http://reshuege.ru/formula/82/8277e0910d750195b448797616e091ad.png — раз­ность про­грес­сии, http://reshuege.ru/formula/7b/7b8b965ad4bca0e41ab51de7b31363a1.png — ко­ли­че­ство чле­нов.

    Цикл пре­рвет­ся, когда s=2s1+(n-1)d2*n<50  .

    Вы­яс­ним http://reshuege.ru/formula/7b/7b8b965ad4bca0e41ab51de7b31363a1.png: s=(2s1+(n-1)d)n<100, s1=2, d=2 (т. к. k:=k+2). Чтобы ре­шить это не­ра­вен­ство,
    нам не­об­хо­ди­мо ре­шить квад­рат­ное урав­не­ние: n^2-n-50=0 . Среди
    его кор­ней нас ин­те­ре­су­ют толь­ко по­ло­жи­тель­ные, сле­до­ва­тель­но n=6,5

    Вос­поль­зо­вав­шись ме­то­дом ин­тер­ва­лов, на­хо­дим, что
    пер­вое на­ту­раль­ное n, при ко­то­ром на­ру­ша­ет­ся усло­вие, есть n=7.

    Так как опе­ра­ция k:=k+2; идет после s:=s+k; то цикл вы­пол­нит­ся
    еще раз, сле­до­ва­тель­но, n=8.

    Kn=k1+(n-1)d Под­ста­вив из­вест­ные па­ра­мет­ры, по­лу­ча­ем,
    что k8=16

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

    var k, s:
    integer;

    begin

    s:=3;

    k:=1;

    while k
    < 25 do begin

    s:=s+k;

    k:=k+2;

    end;

    write(s);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    k < 25, т.к. по усл. while k < 25 do begin и k:=k+2. То есть цикл будет
    вы­пол­нен 13 раз.

    Ак­ку­рат­но вы­пи­шем все s и k:

    s 3 4 7 12 19 28  39  52  67 
    84  103 124  147

    k 1 3 5  7  9  11  13  15
     17  19  21   23    25

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

    Бэй­сик

    Пас­каль

    DIM N, S
    AS INTEGER

    N = 3

    S = 0

    WHILE N
    <= 7

    S = S + N

    N = N + 1

    WEND

    PRINT S

    var n, s:
    integer;

    begin

    n := 3;

    s := 0;

    while n
    <= 7 do

    begin

    s := s +
    n;

    n := n +
    1

    end;

    write(s)

    end.

    Си

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

    #include<stdio.h>

    void
    main()

    {

    int n, s;

    n = 3;

    s = 0;

    while (n
    <= 7)

    {

    s = s +
    n;

    n = n +
    1;

    }

    printf(«%d»,
    s);

    }

    алг

    нач

    цел n, s

    n := 3

    s := 0

    нц пока n <= 7

    s := s +
    n

    n := n +
    1

    кц

    вывод s

    кон

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n <= 7, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Цикл вы­пол­нит­ся7-31+1=5  раз ( «+1»
    по­то­му, что в дроби мы не учи­ты­ва­ем то, что при 7 он тоже вы­пол­нит­ся).

    За­ме­тим, что в s на­кап­ли­ва­ет­ся сумма ариф­ме­ти­че­ской
    про­грес­сии из 5 чле­нов с раз­но­стью 1. Сле­до­ва­тель­но,s=2*3+1(5-1)2*5=25 .

           Условие вы­пол­не­ния цикла while

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

    Бей­сик

    Python

    DIM S, N AS INTEGER

    S = 47

    N = 1

    WHILE S > 0

    S = S — 9

    N = N + 4

    WEND

    PRINT(N)

    s = 47

    n = 1

    while s
    > 0:

    s = s — 9

    n = n + 4

    print(n)

    Пас­каль

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

    var s, n:
    integer;

    begin

    s := 47;

    n := 1;

    while s
    > 0 do

    begin

    s := s —
    9;

    n := n +
    4

    end;

    writeln(n)

    end.

    алг

    нач

    цел
    s, n

    s := 47

    n := 1

    нц пока s > 0

    s := s — 9

    n := n + 4

    кц

    вывод n

    кон

    Си

    #include <stdio.h>

    void main()

    {

    int s, n;

    s = 47;

    n = 1;

    while (s >: 0) {

    s = s – 9;

    n = n + 4;

    }

    printf(«%dn»,
    n);

    }

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s > 0, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.
    По­сколь­ку из­на­чаль­но s = 47, цикл вы­пол­нит­ся 6 раз, сле­до­ва­тель­но,
    n = 6 · 4 + 1 = 25.

    Ответ: 25.

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

    Бей­сик

    Python

    DIM S, N AS INTEGER

    S = 42

    N = 1

    WHILE S > 0

    S = S – 5

    N = N + 3

    WEND

    PRINT(N)

    s = 42

    n = 1

    while s
    > 0:

    s = s — 5

    n = n + 3

    print(n)

    Пас­каль

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

    var s, n:
    integer;

    begin

    s := 42;

    n := 1;

    while s
    > 0 do

    begin

    s := s –
    5;

    n := n +
    3

    end;

    writeln(n)

    end.

    алг

    нач

    цел
    s, n

    s := 42

    n := 1

    нц пока s > 0

    s := s — 5

    n := n + 3

    кц

    вывод n

    кон

    Си

    #include <stdio.h>

    void main()

    {

    int s, n;

    s = 42;

    n = 1;

    while (s > 0) {

    s = s – 5;

    n = n + 3;

    }

    printf(«%dn»,
    n);

    }

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s > 0, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.
    По­сколь­ку из­на­чаль­но s = 42, цикл вы­пол­нит­ся 9 раз, сле­до­ва­тель­но,
    n = 9 · 3 + 1 = 28.

    Ответ: 28.

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

    Бей­сик

    Python

    DIM N, S AS INTEGER

    N = 1

    S = 0

    WHILE N <= 100

    S = S + 30

    N = N * 3

    WEND

    PRINT S

    n = 1

    s = 0

    while n
    <= 100:

    s = s +
    30

    n = n * 3

    print(s)

    Пас­каль

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

    var n, s:
    integer;

    begin

    n := 1;

    s := 0;

    while n
    <= 100 do

    begin

    s := s +
    30;

    n := n *
    3

    end;

    write(s)

    end.

    алг

    нач

    цел
    n, s

    n := 1

    s := 0

    нц пока n <= 100

    s := s + 30

    n := n * 3

    кц

    вывод s

    кон

    Си

    #include

    int main()

    {

    int n, s;

    n = 1;

    s = 0;

    while (n <= 100)

    {

    s = s + 30;

    n = n * 3;

    }

    printf(«%d»,
    s);

    return 0;

    }

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n ≤ 100, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.
    По­сколь­ку из­на­чаль­но n = 1 и на каж­дом шаге n уве­ли­чи­ва­ет­ся в три
    раза, цикл вы­пол­нить­ся пять раз. Сле­до­ва­тель­но, после вы­пол­не­ния
    цикла s при­мет зна­че­ние 30 · 5 = 150.

    Ответ: 150.

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

    var n,
    s: integer;

    begin

    n := 1;

    s := 0;

    while n
    <= 101 do begin

    s := s +
    7;

    n := n +
    1

    end;

    write(s)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n <= 101, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл. Сле­до­ва­тель­но, фор­муль­но s можно за­дать как функ­цию n так:

    S=x0+7(nn1), где s1=0 а, 

    N=102,
    так как по­след­няя опе­ра­ция, вы­пол­нен­ная в цикле: n := 101 + 1.

    Сле­до­ва­тель­но s=707

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

    var n,
    s: integer;

    begin

    n := 2;

    s := 35;

    while n
    <= 25 do begin

    s := s +
    20;

    n := n +
    5

    end;

    write(s)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n <= 25, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Ак­ку­рат­но по­счи­та­ем, сколь­ко раз вы­пол­нит­ся
    цикл(k):

    Зна­че­ния n 2 7 12 17 22 27

    Сле­до­ва­тель­но, цикл вы­пол­нит­ся пять раз (так как дей­ствие
    n := n + 5 стоит в конце цикла, сле­до­ва­тель­но, для n=27 дей­ствие s := s +
    20 не будет вы­пол­нять­ся).

    По­счи­та­ем зна­че­ние s:s=20*k+s1=5*20+35=135 

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

    var n,
    s: integer;

    begin

    n := 24;

    s := 0;

    while n
    <= 28 do begin

    s := s +
    20;

    n := n +
    2

    end;

    write(s)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n <= 28, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Ак­ку­рат­но по­счи­та­ем, сколь­ко раз вы­пол­нить­ся цикл
    (k):

    Зна­че­ния n: 24 26 28 30.

    Сле­до­ва­тель­но, цикл вы­пол­нит­ся три раза (так как дей­ствие
    n := n + 2 стоит в конце цикла, сле­до­ва­тель­но, для n=30 дей­ствие s := s +
    20 не будет вы­пол­нять­ся).

    По­счи­та­ем зна­че­ние s:s=20*k+s1=3*20+0=60 .

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

    var n,
    s: integer;

    begin

    n := 3;

    s := 0;

    while n
    <= 7 do begin

    s := s +
    n;

    n := n +
    1

    end;

    write(s)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n <= 7, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    За­пи­шем по­сле­до­ва­тель­но зна­че­ния s и n:

    s 0 3 7 12 18 25

    n 3 4 5  6   7   8

    Цикл вы­пол­нит­ся пять раз (так как дей­ствие n := n + 1
    стоит в конце цикла, сле­до­ва­тель­но, для n=8 дей­ствие s := s + n не будет
    вы­пол­нять­ся).

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

    var n,
    s: integer;

    begin

    n := 12;

    s := 5;

    while n
    <= 25 do begin

    s := s +
    12;

    n := n +
    2

    end;

    write(s)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n <= 25, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Ак­ку­рат­но по­счи­та­ем, сколь­ко раз вы­пол­нить­ся цикл
    (k):

    Зна­че­ния n: 12 14 16 18 20 22 24 26

    Сле­до­ва­тель­но, цикл вы­пол­нит­ся семь раз (так как дей­ствие
    n := n + 2 стоит в конце цикла, сле­до­ва­тель­но, для n=26 дей­ствие s := s +
    12 не будет вы­пол­нять­ся).

    По­счи­та­ем зна­че­ние s: s=12*k+s1=12*7+5=89.

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

    var n,
    s: integer;

    begin

    n := 0;

    s :=
    512;

    while s
    >= 0 do begin

    s := s —
    20;

    n := n +
    1

    end;

    write(n)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s >= 0, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    51220=25+1225Сле­до­ва­тель­но, цикл вы­пол­нит­ся 25 раз
    и еще один раз, так как опе­ра­ция n := n + 1 идет до про­вер­ки усло­вия s
    >= 0.

    Сле­до­ва­тель­но, ответ — 26.

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

    var n, s:
    integer;

    begin

    n := 4;

    s := 0;

    while n <= 13 do

    begin

    s := s +
    15;

    n := n + 1;

    end;

    write(s)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n <= 13, т. е. пе­ре­мен­ная n опре­де­ля­ет сколь­ко раз вы­пол­нит­ся
    цикл. Сле­до­ва­тель­но, фор­муль­но s можно за­дать как функ­цию n так:

    S=s0+15(n-1), гдеs1=0  а 

    N=14,
    так как по­след­няя опе­ра­ция, вы­пол­нен­ная в цикле: n := 13 + 1.

    Сле­до­ва­тель­но, s=150

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

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

    var k,
    s: integer;

    begin

    s:=0;

    k:=0;

    while s
    < 80 do begin

    s:=s+2*k;

    k:=k+4;

    end;

    write(s);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s < 80, т. е. пе­ре­мен­ная k опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Ак­ку­рат­но вы­пи­шем все s и k:

    s 0 0 8 24 48 80

    k 0 4 8 12 16 20

    (Пом­ни­те, что усло­вие s < 80 про­ве­ря­ет­ся толь­ко
    после k:=k+4, по­это­му дей­ствие s:=s+2*k по­след­ний раз вы­пол­нит­ся для
    k=16)

    Сле­до­ва­тель­но ответ 80.

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

    Бей­сик

    Python

    DIM N, S AS INTEGER

    N = 1

    S = 0

    WHILE N <= 100

    S = S + 30

    N = N * 2

    WEND

    PRINT S

    n = 1

    s = 0

    while n
    <= 100:

    s = s +
    30

    n = n * 2

    print(s)

    Пас­каль

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

    var n, s:
    integer;

    begin

    n := 1;

    s := 0;

    while n
    <= 100 do

    begin

    s := s +
    30;

    n := n *
    2

    end;

    write(s)

    end.

    алг

    нач

    цел
    n, s

    n := 1

    s := 0

    нц пока n <= 100

    s := s + 30

    n := n * 2

    кц

    вывод s

    кон

    Си

    #include <stdio.h>

    void main()

    {

    int n, s;

    n = 1;

    s = 0;

    while (n <= 100)

    {

    s = s + 30;

    n = n * 2;

    }

    printf(«%d», s);

    }

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    n ≤ 100, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.
    По­сколь­ку из­на­чаль­но n = 1, цикл вы­пол­нит­ся 7 раз, сле­до­ва­тель­но,
    s = 30 · 7 = 210.

    Ответ: 210.

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

    var k,
    s: integer;

    begin

    s:=0;

    k:=0;

    while k
    < 12 do begin

    s:=s+2*k;

    k:=k+3;

    end;

    write(s);

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    k < 12, т. е. пе­ре­мен­ная k опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Так как числа не­боль­шие, можно ак­ку­рат­но вы­пи­сать все
    s и k:

    s 0 0 6 18 36

    k 0 3 6 9 12

    (Пом­ни­те, что усло­вие k < 12 про­ве­ря­ет­ся сразу
    после k:=k+3, сле­до­ва­тель­но дей­ствие s:=s+2*k для k=12 вы­пол­нять­ся не
    будет)

    Сле­до­ва­тель­но, ответ — 36.

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

    var n, s:
    integer;

    begin

    n := 1;

    s := 26;

    while s
    <= 205 do

    begin

    s := s +
    20;

    n := n * 2;

    end;

    write(n)

    end.

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s <= 205, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    Вы­яс­ним сколь­ко раз цикл вы­пол­нит­ся:20520=10 .
    Учи­ты­вая, что до цикла s := 26, на­хо­дим, что цикл вы­пол­нит­ся 9 раз. Зна­че­ние
    n будет равно 29 = 512.

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

    Бей­сик

    Пас­каль

    DIM N, S
    AS INTEGER

    N = 1

    S = 6

    WHILE S
    <= 365

    S = S +
    36

    N = N * 2

    WEND

    PRINT N

    var n, s:
    integer;

    begin

    n : = 1;

    s : = 6;

    while s
    <= 365 do

    begin

    s : = s +
    36;

    n : = n *
    2

    end;

    write(n)

    end.

    Си

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

    #include<stdio.h>

    void
    main()

    {

    int n, s;

    n = 1;

    s = 6;

    while (s
    <= 365)

    {

    s = s + 36;

    n = n *
    2;

    }

    printf(«%d»,
    n);

    }

    алг

    нач

    цел n,
    s

    n : = 1

    s : = 6

    нц пока s <= 365

    s : = s +
    36

    n : = n *
    2

    кц

    вывод n

    кон

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s <= 365, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл. Цикл вы­пол­нит­ся36536=10  раз. Учи­ты­вая, что из­на­чаль­но
    s=6 и что дей­ствие «n : = n * 2» вы­пол­ня­ет­ся после «s : = s
    + 36», при­хо­дим к вы­во­ду, что дей­ствие «n : = n * 2» вы­пол­нит­ся
    10 раз. Сле­до­ва­тель­но, зна­че­ние n будет равно 210 = 1024.

    Ответ: 1024.

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

    Бей­сик

    DIM N, S
    AS INTEGER

    N = 30

    S = 1

    WHILE S
    < 500

    S = S * 2

    N = N +
    10

    WEND

    PRINT N

    Пас­каль

    var n, s:
    integer;

    begin

    n := 30;

    s := 1;

    while s
    < 500 do

    begin

    s := s *
    2;

    n := n +
    10

    end;

    write(n);

    end.

    Си

    #include<stdio.h>

    void
    main()

    {

    int n, s;

    n = 30;

    s = 1;

    while (s
    < 500)

    {

    s = s * 2
    ;

    n = n +
    10;

    }

    printf(«%d»,
    n);

    }

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

    алг

    нач

    цел n, s

    n := 30

    s : = 1

    нц пока s < 500

    s := s *
    2

    n := n +
    10

    кц

    вывод n

    KOH

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s < 500, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    По­сколь­ку256<500<(512=2^9) http://reshuege.ru/formula/91/91abf674c6110d2e08e8c3763ad0bf67.png, сле­до­ва­тель­но, цикл вы­пол­нить­ся
    9 раз. На 9-м шаге s ста­нет рав­ной 512 и усло­вие s < 500 ока­жет­ся не вы­пол­нен­ным,
    цикл пре­рвет­ся. Сле­до­ва­тель­но, зна­че­ние n будет равно
    9·10 + 30 = 120.

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

    Бей­сик

    DIM N, S
    AS INTEGER

    N = 50

    S = 1

    WHILE S
    < 1000

    S = S * 2

    N = N +
    10

    WEND

    PRINT N

    Пас­каль

    var n, s:
    integer;

    begin

    n : = 50;

    s := 1;

    while s
    < 1000 do

    begin

    s := s *
    2;

    n := n +
    10

    end;

    write(n);

    end.

    Си

    #include<stdio.h>

    void
    main()

    {

    int n, s;

    n = 50;

    s = 1;

    while (s
    < 1000)

    {

    s = s * 2
    ;

    n = n +
    10;

    }

    printf(«%d»,
    n);

    }

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

    алг

    нач

    цел n, s

    n := 50

    s : = 1

    нц пока s < 1000

    s : = s *
    2

    n := n +
    10

    кц

    вывод n

    кон

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s < 1000, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся
    цикл.

    По­сколь­ку512<1000<(1024=2^10), сле­до­ва­тель­но,
    цикл вы­пол­нит­ся 10 раз. На 10-м шаге s ста­нет рав­ной 1024 и усло­вие s
    < 1000 ока­жет­ся не вы­пол­нен­ным, цикл пре­рвет­ся. Сле­до­ва­тель­но,
    зна­че­ние n будет равно 10·10 + 50 = 150.

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

    Бей­сик

    Пас­каль

    DIM N, S AS INTEGER

    N = 1

    S = 0

    WHILE S <= 1024

    S = S + 128

    N = N * 2

    WEND

    PRINT N

    program B05;

    var n, s: integer;

    begin

    n := 1;

    s := 0;

    while s <= 1024 do

    begin

    s := s + 128;

    n := n * 2;

    end;

    write(n)

    end.

    Си

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

    #include<stdio.h>

    void main()

    {

    int n, s;

    n = 1;

    s = 0;

    while (s <= 1024)

    {

    s = s + 128;

    n = n * 2;

    }

    printf(«%d»,
    n);

    }

    алг

    нач

    цел
    n, s

    n := 1

    s := 0

    нц пока s <= 1024

    s := s + 128

    n := n * 2

    кц

    вывод n

    кон

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s ≤ 1024, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.

    За­ме­тим, что 1024128=8 После 9 шага s ста­нет
    рав­ной 1152 и усло­вие s ≤ 1024 ока­жет­ся не­вы­пол­нен­ным, цикл пре­рвет­ся.
    Сле­до­ва­тель­но, зна­че­ние n будет равно 29 = 512.

    Ответ: 512.

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

    Бей­сик

    Пас­каль

    DIM N, S AS INTEGER

    N = 1

    S = 0

    WHILE S <= 1024

    S = S + 256

    N = N * 2

    WEND

    PRINT N

    program B05;

    var n, s: integer;

    begin

    n := 1;

    s := 0;

    while s <= 1024 do

    begin

    s := s + 256;

    n := n * 2;

    end;

    write(n)

    end.

    Си

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

    #include<stdio.h>

    void main()

    {

    int n, s;

    n = 1;

    s = 0;

    while (s <= 1024)

    {

    s = s + 256;

    n = n * 2;

    }

    printf(«%d»,
    n);

    }

    алг

    нач

    цел
    n, s

    n := 1

    s := 0

    нц пока s <= 1024

    s := s + 256

    n := n * 2

    кц

    вывод n

    кон

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s ≤ 1024, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.

    За­ме­тим, что 1024256=4 После 5 шага s ста­нет
    рав­ной 1280 и усло­вие s ≤ 1024 ока­жет­ся не­вы­пол­нен­ным, цикл пре­рвет­ся.
    Сле­до­ва­тель­но, зна­че­ние n будет равно 25 = 32.

    Ответ: 32.

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

    Бей­сик

    Пас­каль

    DIM N, S AS INTEGER

    N = 0

    S = 1

    WHILE S <= 1000

    S = S * 2

    N = N + 2

    WEND

    PRINT N

    program B05;

    var n, s: integer;

    begin

    n := 0;

    s := 1;

    while s <= 1000 do

    begin

    s := s * 2;

    n := n + 2;

    end;

    write(n)

    end.

    Си

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

    #include<stdio.h>

    void main()

    {

    int n, s;

    n = 0;

    s = 1;

    while (s <= 1000)

    {

    s = s * 2;

    n = n + 2;

    }

    printf(«%d»,
    n);

    }

    алг

    нач

    цел
    n, s

    n := 0

    s := 1

    нц пока s <= 1000

    s := s * 2

    n := n + 2

    кц

    вывод n

    кон

    По­яс­не­ние.

    Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие
    s ≤ 1000, т. е. пе­ре­мен­ная s опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.

    По­сколь­ку 29 < 1000 < 1024 = 210 ,
    сле­до­ва­тель­но, цикл вы­пол­нит­ся 10 раз. На 10-м шаге s ста­нет рав­ной
    1024 и усло­вие s ≤ 1000 ока­жет­ся не вы­пол­нен­ным, цикл пре­рвет­ся. Сле­до­ва­тель­но,
    зна­че­ние n будет равно 10·2 = 20.

    Ответ: 20.

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

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

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

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

    Полная

    Неполная

    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

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

    Задача №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

    Понравилась статья? Поделить с друзьями:
  • Ускоренные курсы подготовки к егэ по информатике
  • Урфу пересдача экзамена
  • Урфу направления по экзаменам
  • Урфу международные отношения экзамены
  • Урфу курсы подготовки к егэ 10 11 классы