×
  • 1. Системы счисления
  • 2. Логические функции
  • 3. Анализ информационных моделей
  • 4. Файловая система и базы данных
  • 5. Кодирование и декодирование. Условие Фано
  • 6. Выполнение и анализ простых алгоритмов
  • 7. Адресация в электронных таблицах
  • 8. Анализ программ с циклами
  • 9. Скорость передачи, объем памяти, время передачи
  • 10. Кодирование, комбинаторика
  • 11. Рекурсивные алгоритмы
  • 12. Адресация в сетях TCP/IP
  • 13. Вычисление количества информации
  • 14. Анализ и выполнение алгоритмов для исполнителя
  • 15. Поиск путей в графе
  • 16. Позиционные системы счисления
  • 17. Запросы в поисковых системах
  • 18. Логические выражения и множества
  • 19. Анализ программы по работе с массивом
  • 20. Анализ программ с циклами
  • 21. Анализ программ с циклами и подпрограммами
  • 22. Динамическое программирование
  • 23. Системы логических уравнений
  • 24. Исправление фрагмента программы и ошибок
  • 25. Программа на обработку массива
  • Спасибо за внимание
  • Подготовка к ЕГЭ по Информатике

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


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

    def F(x): 
       return 2*(x*x-100)*(x*x-100)+5
    a = -20; 
    b = 20 
    M = a; 
    R = F(a) 
    for t in range(a, b + 1): 
       if (F(t) < R): 
           M = t; R = F(t) 
    print(M + 27)
    var a, b, t, M, R: longint; 
    function F(x: longint): longint;   
    begin  
       F := 2*(x*x-100)*(x*x-100)+5;  
    end; 
    begin
       a := -20; b := 20; 
       M := a; R := F(a);
       for t := a to b do begin
          if (F(t) < R) then begin 
              M := t;
              R := F(t) 
          end
       end;
       write(M + 27)
    end.
    #include <iostream> 
    using namespace std;  
    long F(long x) {
        return 2*(x*x-100)*(x*x-100)+5;
    }
    int main() {
        long a, b, t, M, R;
        a = -20; b = 20;
        M = a; R = F(a);
        for (t = a; t <= b; t++) {
           if (F(t) < R) { 
              M = t; R = F(t);
           }
        }
        cout << M + 27 << endl;
        return 0; 
    }

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

    def F(x):
     return abs(abs(x-6)+abs(x+6)-16)+2  
    
    a = -20
    b = 20 
    M = a 
    R = F(a) 
    for t in range(a, b + 1):
       if (F(t) <= R):
         M = t
         R = F(t)
    print (M + R)
    var a, b, t, M, R:longint; 
    function F(x: longint):longint; 
    begin
     F:=abs(abs(x-6)+abs(x+6)-16)+2;
    end;  
    
    begin
      a := -20;
      b := 20;  
      M := a;
      R := F(a);  
      for t := a to b do begin
         if (F(t) <= R) then begin
           M := t;
           R := F(t)
         end
      end; 
      write(M + R);
     end.
    #include <iostream>
    using namespace std;
      
    long F(long x) {
     return abs(abs(x-6)+abs(x+6)-16)+2;
    }  
    
    int main() {
         long a = -20, b = 20;
         long M = a, R = F(a);
         for (int t = a; t <= b; ++t) {
             if (F(t) <= R) {
                 M = t; R = F(t);
             }
         }
         cout << M + R; 
        return 0;
     }

    3) Укажите количество различных значений входной переменной k, при которых приведённая ниже программа выводит тот же ответ, что и при входном значении k = 10. Значение k = 10 также включается в подсчёт различных значений k.

    def f(n):
       return n*n*n
    
    i = 1
    k = int(input())
    while f(i) < k:
       i+=1
    if (f(i)-k <= k-f(i-1)):
       print (i)
    else:
       print (i - 1)
    var k, i : longint;
    function f(n: longint) : longint;
    begin
       f := n * n * n;
    end;
    begin
      i := 1;
      readln(k);
      while f(i) < k do
         i := i + 1;
      if (f(i)-k) <= (k-f(i-1)) then
         writeln(i)
      else
         writeln(i - 1);
    end.
    #include <iostream>
    using namespace std;
    
    long int f(long int n) {
    	return n*n*n;
    }
    
    void main()
    {
    	int i, k;
    	i = 1;
    	cin >> k;
    	while (f(i)<k)
    		i = i + 1;
    	if (f(i) - k <= k - f(i))
    		cout << i << endl;
    	else
    		cout << i - 1 << endl;
    }

    4) Напишите в ответе наименьшее значение входной переменной k, при котором программа выдаёт тот же ответ, что и при входном значении k = 10.

    def f(n):
       return n*n*n
    def g(n):
       return 2*n+3
    
    k = int(input())
    i = 1
    while f(i) < g(k):
       i+=1
    print (i)
    var k, i: longint;
    function f(n: longint): longint;
    begin
       f := n * n * n;
    end;
    function g(n: longint): longint;
    begin
       g := 2*n + 3;
    end;
    begin
     readln(k);
     i := 1;
     while f(i) < g(k) do
        i := i + 1;
     writeln(i);
    end.
    #include <iostream>
    using namespace std;
    long int f(long int n) {
    	return n*n*n;
    }
    long int g(long int n) {
    	return 2*n+3;
    }
    void main()
    {
    	int i, k;
    	cin >> k;
    	i = 1;
    	while (f(i) < g(k))
    		i = i + 1;
    	cout << i << endl;
    }

    5) Определите, количество чисел K, для которых следующая программа выведет такой же результат, что и для K = 45.

    def F(n):
      if n < 2:
         return 1
      else:
         return 2*F(n-1)+F(n-2)
    
    i = 0
    k = int(input())
    while F(i) < k:
        i += 1
    print(i)
    var i, k: integer;
    function F(n:integer):integer;
    begin
      if n < 2 then
          F:= 1
      else F:= 2*F(n-1) + F(n-2);
    end;
    begin
       i := 0;
       readln(k);
       while F(i) < k do 
          i:= i + 1;
       writeln(i);  
    end.
    #include <iostream>
    using namespace std;
    int F(int n) {
    	if (n < 2)
    		return 1;
    	else
    		return 2*F(n - 1) + F(n - 2);
    }
    void main()
    {
    	int i, k;
    	i = 0;
    	cin >> k;
    	while (F(i) < k)
    		i = i + 1;
    	cout << i << endl;
    }

    6) Определите, количество чисел K, для которых следующая программа выведет такой же результат, что и для K = 53.

    def F(n):
        if n <= 2:
          return 1
        else:
          return F(n-1) + F(n-2)
    
    i = 15
    k = int(input())
    while i>0 and F(i)>k:
        i -= 1
    print(i)
    var i, k: integer;
    function F(n:integer):integer;
    begin
      if n <= 2 then
          F:= 1
      else F:= F(n-1) + F(n-2);
    end;
    begin
       i := 15;
       readln(k);
       while (i > 0) and (F(i) > k) do 
          i:= i - 1;
       writeln(i);  
    end.
    #include <iostream>
    using namespace std;
    int F(int n) {
    	if (n <= 2)
    		return 1;
    	else
    		return F(n - 1) + F(n - 2);
    }
    void main()
    {
    	int i, k;
    	i = 15;
    	cin >> k;
    	while (i > 0 && F(i) > k)
    		i = i - 1;
    	cout << i << endl;
    }

    7) Определите, количество различных чисел K, для которых следующая программа выведет такой же результат, что и для K = 47. Значение k = 47 также включается в подсчёт различных значений k.

    def f(n):
       return n*(n-1) + 10
    
    i = 0
    k = int(input())
    while f(i) < k:
        i += 1
    print(i)
    var i, k: integer;
    function f(n:integer):integer;
    begin
       f:= n*(n-1) + 10;
    end;
    begin
       i := 0;
       readln(k);
       while f(i) < k do 
          i:= i + 1;
       writeln(i);  
    end.
    #include <iostream>
    using namespace std;
    int f(int n) {
    	return n*(n - 1) + 10;
    }
    void main()
    {
    	int i, k;
    	i = 0;
    	cin >> k;
    	while (f(i) < k)
    		i = i + 1;
    	cout << i << endl;
    }

    8) Определите, какое значение выведется на экран, после выполнения программы, представленной ниже.

    def F(n):
      if n // 10 == n % 10:
         return True
      else:
          return False
    
    k=0
    for i in range(10,100):
       if F(i):
          k+=1
    print(k)
    var i, k: integer;
    function F(n:integer):boolean;
    begin
       if n div 10 = n mod 10 then 
         F := True
       else 
         F := False;
    end;
    begin
       k := 0;
       for i := 10 to 99 do 
          if F(i) then k := k + 1;
       writeln(k);  
    end.
    #include <iostream>
    using namespace std;
    bool F(int n) {
    	if (n / 10 == n % 10)
    		return true;
    	else
    		return false;
    }
    void main()
    {
    	int i, k;
    	k = 0;
    	for (i = 10; i < 100; i++)
    		if (F(i))
    			k = k + 1;
    	cout << k << endl;
    }

    9) Определите, какое значение выведется на экран, после выполнения программы, представленной ниже.

    def F(n):
      if n // 10 > n % 10:
         return True
      else:
          return False
    
    k=0
    for i in range(10,100):
       if F(i):
          k+=1
    print(k)
    var i, k: integer;
    function F(n:integer):boolean;
    begin
       if n div 10 > n mod 10 then 
          F := True
       else 
          F := False;
    end;
    begin
       k := 0;
       for i := 10 to 99 do 
          if F(i) then k := k + 1;
       writeln(k);  
    end.
    #include <iostream>
    using namespace std;
    bool F(int n) {
    	if (n / 10 > n % 10)
    		return true;
    	else
    		return false;
    }
    void main()
    {
    	int i, k;
    	k = 0;
    	for (i = 10; i < 100; i++)
    		if (F(i))
    			k = k + 1;
    	cout << k << endl;
    }

    10) Определите, какое значение выведется на экран, после выполнения программы, представленной ниже.

    def F(n):
       return  n // 10 != n % 10
    
    k=0
    for i in range(10,100):
      if F(i):
        k+=1
    print(k)
    var i, k: integer;
    function F(n:integer):boolean;
    begin
       F := n div 10 <> n mod 10;
    end;
    begin
       k := 0;
       for i := 10 to 99 do 
          if F(i) then k := k + 1;
       writeln(k);  
    end.
    #include <iostream>
    using namespace std;
    bool F(int n) {
    	return n / 10 != n % 10;
    }
    void main()
    {
    	int i, k;
    	k = 0;
    	for (i = 10; i < 100; i++)
    		if (F(i))
    			k = k + 1;
    	cout << k << endl;
    }

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

    def F(x):
        return x**3 + x*x
    
    i = 15
    k = int(input())
    while (i>0) and (F(i)>k):
        i -= 1
    print(i)
    var i, k: integer;
    function F(x:integer):integer;
    begin
       F := x*x*x + x*x;
    end;
    begin
       i := 15;
       readln(k);
       while (i>0) and (F(i) > k) do
          i := i - 1;
       writeln(i);  
    end.
    #include <iostream>
    using namespace std;
    int F(int x) {
    	return x*x*x + x*x;
    }
    void main()
    {
    	int i, k;
    	i = 15;
    	cin >> k;
    	while (i > 0 && F(i) > k)
    		i = i - 1;
    	cout << i << endl;
    }

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

    def F(x):
        return 16*(9-x)*(9-x)+127
    
    a = -20
    b = 20
    n = 0
    for t in range(a,b+1):
        if F(t) > 0:
            n += 1
    print(n)
    var a, b, n, t: integer;
    function F(x:integer):integer;
    begin
       F := 16*(9-x)*(9-x) + 127;
    end;
    begin
       a := -20;
       b := 20;
       n := 0;
       for t := a to b do
          if F(t) > 0 then
             n := n + 1;
       writeln(n);
    end.
    #include <iostream>
    using namespace std;
    int F(int x) {
    	return 16 * (9 - x)*(9 - x) + 127;
    }
    void main()
    {
    	int a, b, n, t;
    	a = -20;
    	b = 20;
    	n = 0;
    	for (t = a; t <= b; t++)
    		if (F(t) > 0)
    			n = n + 1;
    	cout << n << endl;
    }

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

    def F(x):
      return (x*x-25)*(x*x-25)+15
    
    a = -15
    b = 15
    M = a
    R = F(a)
    for t in range(a,b+1):
        if F(t) <= R:
            M = t
            R = F(t)
    print(M + 15)
    var a, b, M, R, t: integer;
    function F(x:integer):integer;
    begin
       F := (x*x-25)*(x*x-25) + 15;
    end;
    begin
       a := -15;
       b := 15;
       M := a;
       R := F(a);
       for t:=a to b do
          if F(t) <= R then begin
             M := t;
             R := F(t);
          end;
       writeln(M + 15);
    end.
    #include <iostream>
    using namespace std;
    int F(int x) {
    	return (x*x - 25)*(x*x - 25) + 15;
    }
    void main()
    {
    	int a, b, M, R, t;
    	a = -15;
    	b = 15;
    	M = a;
    	R = F(a);
    	for (t = a; t <= b; t++)
    		if (F(t) <= R) {
    			M = t;
    			R = F(t);
    		}
    	cout << M + 15 << endl;
    }

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

    def F(x):
        return 4*(x-5)*(x+3)
    
    a = -20
    b = 0
    M = a
    R = F(a)
    for t in range(a,b+1):
        if F(t) < R:
            M = t
            R = F(t)
    print(M)
    var a, b, M, R, t: integer;
    function F(x:integer):integer;
    begin
       F := 4*(x - 5)*(x + 3);
    end;
    begin
       a := -20;
       b := 0;
       M := a;
       R := F(a);
       for t := a to b do
          if F(t) < R then begin
             M := t;
             R := F(t);
          end;
       writeln(M);
    end.
    #include <iostream>
    using namespace std;
    int F(int x) {
    	return 4 * (x - 5)*(x + 3);
    }
    void main()
    {
    	int a, b, M, R, t;
    	a = -20;
    	b = 0;
    	M = a;
    	R = F(a);
    	for (t = a; t <= b; t++)
    		if (F(t) < R) {
    			M = t;
    			R = F(t);
    		}
    	cout << M << endl;
    }

    15) Укажите наименьшее значение входной переменной t, при котором программа выдаёт тот же ответ, что и при входном значении t=24.

    def f(n):
      return n*n
    def g(k):
      return 4*k + 3
    
    t = int(input())
    i = 1
    while f(i) < g(t):
      i+=1
    print(i)
    var t, i : longint;
    function f(n: longint): longint;
    begin
       f := n * n;
    end;
    function g(k: longint): longint;
    begin
       g := 4*k + 3;
    end;
    begin
     readln(t);
     i := 1;
     while f(i) < g(t) do
        i := i + 1;
     writeln(i);
    end.
    #include <iostream>
    using namespace std;
    long int f(long int n) {
    	return n*n;
    }
    long int g(long int k) {
    	return 4*k+3;
    }
    void main()
    {
    	int i, t;
    	cin >> t;
    	i = 1;
    	while (f(i) < g(t))
    		i = i + 1;
    	cout << i << endl;
    }

    16) Укажите наименьшее значение входной переменной t, при котором программа выдаёт тот же ответ, что и при входном значении t=15.

    def f(n):
      if n < 3:
         return 1
      else:
         return f(n-1) + f(n-2)
    
    def g(k):
      return 3*k + 5
    
    t = int(input())
    i = 1
    while f(i) < g(t):
       i+=1
    print(i)
    var i, t: integer;
    function f(n:integer):integer;
    begin
      if n < 3 then
          f:= 1
      else f:= f(n-1) + f(n-2);
    end;
    function g(k:integer):integer;
    begin
      g:= 3*k + 5;
    end;
    begin
       readln(t);
       i := 1;
       while f(i) < g(t) do 
          i:= i + 1;
       writeln(i);  
    end.
    #include <iostream>
    using namespace std;
    int f(int n) {
    	if (n < 3)
    		return 1;
    	else
    		return f(n - 1) + f(n - 2);
    }
    int g(int k) {
    	return 3 * k + 5;
    }
    void main()
    {
    	int i, t;
    	i = 1;
    	cin >> t;
    	while (f(i) < g(t))
    		i = i + 1;
    	cout << i << endl;
    }

    17) Укажите число, равное количеству различных значений входной переменной k, при которых приведённая ниже программа выводит тот же ответ, что и при входном значении k = 11. Значение k = 11 также включается в подсчёт различных значений k.

    def f(n):
       return n*n
      
    i = 1
    k = int(input())
    while f(i) < k:
       i+=1
    if (f(i)-k) >= (k-f(i-1)):
       print (i)
    else:
       print (i + 1)
    var k, i : longint;
    function f(n: longint) : longint;
    begin
       f := n * n;
    end;
    begin
      i := 1;
      readln(k);
      while f(i) < k do
         i := i + 1;
      if (f(i)-k) >= (k-f(i-1)) then
         writeln(i)
      else
         writeln(i + 1);
    end.
    #include <iostream>
    using namespace std;
    long int f(long int n) {
    	return n*n;
    }
    void main()
    {
    	int i, k;
    	i = 1;
    	cin >> k;
    	while (f(i) < k)
    		i = i + 1;
    	if (f(i) - k >= k - f(i))
    		cout << i << endl;
    	else
    		cout << i + 1 << endl;
    }

    18) Укажите наибольшее значение входной переменной k, при котором программа выдаёт тот же ответ, что и при входном значении k = 15.

    def f(n):
       return n*n*n
    def g(n):
       return 2*n+3
    
    k = int(input())
    i = 1
    while f(i) < g(k):
       i+=1
    print (i)
    var k, i: longint;
    function f(n: longint): longint;
    begin
       f := n * n * n;
    end;
    function g(n: longint): longint;
    begin
       g := 2*n + 3;
    end;
    begin
     readln(k);
     i := 1;
     while f(i) < g(k) do
        i := i + 1;
     writeln(i);
    end.
    #include <iostream>
    using namespace std;
    long int f(long int n) {
    	return n*n*n;
    }
    long int g(long int n) {
    	return 2*n+3;
    }
    void main()
    {
    	int i, k;
    	cin >> k;
    	i = 1;
    	while (f(i) < g(k))
    		i = i + 1;
    	cout << i << endl;
    }

    19) Укажите количество различных значений входной переменной k, при которых приведённая ниже программа выводит тот же ответ, что и при входном значении k = 33. Значение k = 33 также включается в подсчёт различных значений k.

    def f(n):
       return n*n*n
    
    i = 1
    k = int(input())
    while f(i) < k:
       i+=1
    if (f(i)-k <= k-f(i-1)):
       print (i)
    else:
       print (i - 1)
    var k, i : longint;
    function f(n: longint) : longint;
    begin
       f := n * n * n;
    end;
    begin
      i := 1;
      readln(k);
      while f(i) < k do
         i := i + 1;
      if (f(i)-k) <= (k-f(i-1)) then
         writeln(i)
      else
         writeln(i - 1);
    end.
    #include <iostream>
    using namespace std;
    
    long int f(long int n) {
    	return n*n*n;
    }
    
    void main()
    {
    	int i, k;
    	i = 1;
    	cin >> k;
    	while (f(i)<k)
    		i = i + 1;
    	if (f(i) - k <= k - f(i))
    		cout << i << endl;
    	else
    		cout << i - 1 << endl;
    }

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