ЕГЭ, вопрос 24: Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки

Проверяемые элементы содержания по спецификации (2019): Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки.

Кодификатор 1.7.2/1.1.4. Уровень сложности П, 3 балла.

Время выполнения — 30 минут. [Можно сделать за 5, но может не хватить и 45 минут! Авторы вопросов иногда используют «бредовые идеи».]

Учите тригонометрию!

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

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

Задания

  1. Демо 2020 (24). На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран минимальную чётную цифру этого числа. Если в числе нет чётных цифр, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM N, DIGIT, MINDIGIT AS LONG
    INPUT N
    MINDIGIT = N MOD 10
    WHILE N > 0
      DIGIT = N MOD 10
      IF DIGIT MOD 2 = 0 THEN
        IF DIGIT < MINDIGIT THEN
          MINDIGIT = DIGIT
        END IF
      END IF
      N = N \ 10
    WEND
    IF MINDIGIT = 0 THEN
      PRINT "NO"
    ELSE
      PRINT MINDIGIT
    END IF
    N = int(input())
    minDigit = N % 10
      while N > 0:
      digit = N % 10
      if digit % 2 == 0:
        if digit < minDigit:
          minDigit = digit
      N = N // 10
      if minDigit == 0:
        print("NO")
      else:
        print(minDigit)
    Алгоритмический языкПаскаль
    алг
    нач
    цел N, digit, minDigit
    ввод N
    minDigit := mod(N,10)
    нц пока N > 0
      digit := mod(N,10)
      если mod(digit, 2) = 0 то
        если digit < minDigit то
          minDigit := digit
        все
      все
      N := div(N,10)
    кц
    если minDigit = 0 то
      вывод "NO"
    иначе
      вывод minDigit
    все
    кон
    var N,digit,minDigit: longint;
    begin
    readln(N);
    minDigit := N mod 10;
    while N > 0 do
    begin
      digit := N mod 10;
      if digit mod 2 = 0 then
        if digit < minDigit then
          minDigit := digit;
        N := N div 10;
      end;
    if minDigit = 0 then
      writeln('NO')
    else
      writeln(minDigit)
    end.
    Си++
    #include <iostream>
    using namespace std;
    int main() {
    long N, digit, minDigit;
    cin >> N;
    minDigit = N % 10;
    while (N > 0) {
      digit = N % 10;
      if (digit % 2 == 0)
        if (digit < minDigit)
        minDigit = digit;
      N = N / 10;
    }
    if (minDigit == 0)
      cout << "NO" << endl;
    else
      cout << minDigit << endl;
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 231.
    2. Приведите пример такого трёхзначного числа, при вводе которого приведённая программа, несмотря на ошибки, выдаёт верный ответ.
    3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:
    1) выпишите строку, в которой сделана ошибка;
    2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
    Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
  2. Демо 2019 (24). На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран минимальную чётную цифру этого числа. Если в числе нет чётных цифр, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM N, DIGIT, MAXDIGIT AS LONG
    INPUT N
    MAXDIGIT = N MOD 10
    WHILE N > 0
      DIGIT = N MOD 10
      IF DIGIT MOD 2 = 0 THEN
        IF DIGIT > MAXDIGIT THEN
          MAXDIGIT = DIGIT
        END IF
      END IF
      N = N \ 10
    WEND
    IF MAXDIGIT = 0 THEN
      PRINT "NO"
    ELSE
      PRINT MAXDIGIT
    END IF
    N = int(input())
    maxDigit = N % 10
      while N > 0:
      digit = N % 10
      if digit % 2 == 0:
        if digit > maxDigit:
          maxDigit = digit
      N = N // 10
      if maxDigit == 0:
        print("NO")
      else:
        print(maxDigit)
    Алгоритмический языкПаскаль
    алг
    нач
    цел N, digit, maxDigit
    ввод N
    maxDigit := mod(N,10)
    нц пока N > 0
      digit := mod(N,10)
      если mod(digit, 2) = 0 то
        если digit > maxDigit то
          maxDigit := digit
        все
      все
      N := div(N,10)
    кц
    если maxDigit = 0 то
      вывод "NO"
    иначе
      вывод maxDigit
    все
    кон
    var N,digit,maxDigit: longint;
    begin
    readln(N);
    maxDigit := N mod 10;
    while N > 0 do
    begin
      digit := N mod 10;
      if digit mod 2 = 0 then
        if digit > maxDigit then
          maxDigit := digit;
        N := N div 10;
      end;
    if maxDigit = 0 then
      writeln('NO')
    else
      writeln(maxDigit)
    end.
    Си++
    #include <iostream>
    using namespace std;
    int main() {
    long N, digit, maxDigit;
    cin >> N;
    maxDigit = N % 10;
    while (N > 0) {
      digit = N % 10;
      if (digit % 2 == 0)
        if (digit > maxDigit)
        maxDigit = digit;
      N = N / 10;
    }
    if (maxDigit == 0)
      cout << "NO" << endl;
    else
      cout << maxDigit << endl;
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 231.
    2. Приведите пример такого трёхзначного числа, при вводе которого приведённая программа, несмотря на ошибки, выдаёт верный ответ.
    3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:
    1) выпишите строку, в которой сделана ошибка;
    2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
    Известно, что в тексте программы можно исправить ровно две строки так, чтобы она стала работать правильно.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
  3. Демо 2018 (24). На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 5. Если в числе нет цифр, кратных 5, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    Напоминание: 0 делится на любое натуральное число.
    БейсикPython
    DIM N, DIGIT, MAXDIGIT AS LONG
    INPUT N
    MAXDIGIT = N MOD 10
    WHILE N > 0
      DIGIT = N MOD 10
      IF DIGIT MOD 5 = 0 THEN
        IF DIGIT > MAXDIGIT THEN
          MAXDIGIT = DIGIT
        END IF
      END IF
      N = N \ 10
    WEND
    IF MAXDIGIT = 0 THEN
      PRINT "NO"
    ELSE
      PRINT MAXDIGIT
    END IF
    N = int(input())
    maxDigit = N % 10
      while N > 0:
      digit = N % 10
      if digit % 5 == 0:
        if digit > maxDigit:
          maxDigit = digit
      N = N // 10
      if maxDigit == 0:
        print("NO")
      else:
        print(maxDigit)
    Алгоритмический языкПаскаль
    алг
    нач
    цел N, digit, maxDigit
    ввод N
    maxDigit := mod(N,10)
    нц пока N > 0
    digit := mod(N,10)
    если mod(digit, 5) = 0 то
    если digit > maxDigit то
    maxDigit := digit
    все
    все
    N := div(N,10)
    кц
    если maxDigit = 0 то
    вывод "NO"
    иначе
    вывод maxDigit
    все
    кон
    var N,digit,maxDigit: longint;
    begin
    readln(N);
    maxDigit := N mod 10;
    while N > 0 do
    begin
    digit := N mod 10;
    if digit mod 5 = 0 then
    if digit > maxDigit then
    maxDigit := digit;
    N := N div 10;
    end;
    if maxDigit = 0 then
    writeln('NO')
    else
    writeln(maxDigit)
    end.
    Си++
    #include
    using namespace std;
    int main() {
    long N, digit, maxDigit;
    cin >> N;
    maxDigit = N % 10;
    while (N > 0) {
      digit = N % 10;
      if (digit % 5 == 0)
        if (digit > maxDigit)
        maxDigit = digit;
      N = N / 10;
    }
    if (maxDigit == 0)
      cout << "NO" << endl;
    else
      cout << maxDigit << endl;
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 132.
    2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
    3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
    1) выпишите строку, в которой сделана ошибка;
    2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
  4. D2018 (24). На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество делящихся нацело на 4 чисел в исходной последовательности и максимальное делящееся нацело на 4 число. Если делящихся нацело на 4 чисел нет, требуется на экран вывести «NO». Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    CONST n = 4
    count = 0
    maximum = 1000
    FOR I = 1 TO n
      INPUT x
      IF x mod 4 = 0 THEN
        count = count + 1
        IF x < maximum THEN
          maximum = x
        END IF
      END IF
    NEXT I
    IF count > 0 THEN
      PRINT count
      PRINT maximum
    ELSE
      PRINT "NO"
    END IF
    n = 4
    count = 0
    maximum = 1000
    for i in range (1, n+1):
      x = int(input())
      if x % 4 == 0:
        count += 1
        if x < maximum:
          maximum = x
    if count > 0:
      print (count)
      print (maximum)
    else:
      print ("NO")
    Алгоритмический языкПаскаль
    алг
    нач
    цел n = 4
    цел i, x
    цел maximum, count
    count := 0
    maximum := 1000
    нц для i от 1 до n
      ввод x
      если mod(x, 4) = 0 то
        count := count + 1
        если x < maximum то
          maximum := x
        все
      все
    кц
    если count > 0 то
      вывод count, нс
      вывод maximum
    иначе
      вывод "NO"
    все
    кон
    const n = 4;
    var i, x: integer;
    var maximum, count: integer;
    begin
    count := 0;
    maximum := 1000;
    for i := 1 to n do
    begin
      read(x);
      if x mod 4 = 0 then
      begin
        count := count + 1;
        if x < maximum then
          maximum := x
        end
      end;
    if count > 0 then
    begin
      writeln(count);
      writeln(maximum)
    end
    else
      writeln('NO')
    end.
    C++
    #include <iostream>
    using namespace std;
    int main() {
    const int n = 4;
    int x, maximum, count;
    count = 0;
    maximum = 1000;
    for (int i = 1; i <= n; i++) {
      cin >> x;
      if (x % 4 == 0) {
        count++;
        if (x < maximum)
          maximum = x;
      }
    }
    if (count > 0) {
      cout << count << endl;
      cout << maximum << endl;
    }
    else
      cout << "NO" << endl;
    return 0;
    }

  5. R2018 (24). На вход программы поступают 4 неотрицательных целых числа, не превышающие 1000, среди которых могут быть одинаковые. Нужно написать программу, которая выводит количество чисел, не кратных 3, и максимальное из этих чисел. Если среди входных данных нет чисел, не кратных трёх, программа должна вывести слово «NO». Программист написал программу неправильно.
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе чисел 7 15 8 21.
    2. Приведите пример такой последовательности, содержащей число, кратное 3, при вводе которой программа выведет правильный ответ.
    3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
    1) выпишите строку, в которой сделана ошибка;
    2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
    БейсикPython
    COUNT = 0
    MAXIMUM = 1000
    FOR I = 1 TO 4
      INPUT X
      IF X MOD 3 <> 0 THEN
        COUNT = COUNT + 1
        IF X > MAXIMUM THEN
          MAXIMUM = I
        END IF
      END IF
    NEXT I
    IF COUNT > THEN
      PRINT COUNT
      PRINT MAXIMUM
    ELSE
      PRINT “NO”
    END IF
    count = 0
    maximum = 1000
    for i in range(4):
      x = int(input())
      if x % 3 != 0:
        count = count + 1
        if x > maximum:
          maximum = i
    if count > 0:
      print(count)
      print(maximum)
    else:
      print("NO")
    Си++Паскаль
    #include <iostream>
    int main(){
    int i, x, maximum;
    count = 0;
    maximum = 1000;
    for (i=1; i<= 4; i++) {
      std::cin >> x;
      if (x % 3 != 0) {
        count = count + 1;
        if (x > maximum) maximum = i;
      }
    }
    if (count > 0) {
      std::cout << count << endl;
      std::cout << maximum
    else
      std::cout << "NO";
    return 0;
    }
    var i, x: integer;
    var maximum, count: integer;
    begin
    count := 0;
    maximum := 1000;
    for i:=1 to 4 do begin
      read(x);
      if x mod 3 <> 0 then begin
        count := count + 1;
        if x > maximum then
          maximum := i;
      end;
    end;
    if count > 0 then begin
      writeln(count);
      writeln(maximum);
    end
    else
      writeln('NO');
    end.

  6. Демо 2017 (24). Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 3. То есть требуется определить, существует ли такое целое число K, что 3K = N, и вывести это число либо сообщение, что такого числа не существует.
    Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной. Ниже эта написанная им программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM N, K AS INTEGER
    INPUT N
    K = 0
    WHILE K MOD 3 = 0
      K = K + 1
      N = N \ 3
    WEND
    IF N > 0 THEN
      PRINT K
    ELSE
      PRINT "Не существует"
    END IF
    END
    n = int(input())
    k = 0
    while k%3 == 0:
      k = k + 1
      n = n // 3
    if n > 0:
      print(k)
    else:
      print("Не существует")
    Алгоритмический языкПаскаль
    алг
    нач
    цел n, k
    ввод n
    k := 0
    нц пока mod(k, 3)=0
      k := k + 1
      n := div(n,3)
    кц
    если n > 0
      то вывод k
      иначе вывод "Не существует"
    все
    кон
    var n, k: integer;
    begin
    read(n);
    k := 0;
    while k mod 3 = 0 do begin
      k := k + 1;
      n := n div 3;
    end;
    if n > 0 then
      writeln(k)
    else
      writeln('Не существует')
    end.
    Си
    #include <stdio.h>
    int main(){
    int n, k;
    scanf("%d",&n);
    k = 0;
    while (k%3 == 0) {
      k = k + 1;
      n = n / 3;
    }
    if (n > 0)
      printf("%d", k);
    else
      printf("Не существует");
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 9.
    2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
    3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
  7. Демо 2016 (24). На обработку поступает положительное целое число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM N, DIGIT, SUM AS LONG
    INPUT N
    SUM = 0
    WHILE N > 0
      DIGIT = N MOD 10
      IF DIGIT < 7 THEN
        SUM = SUM + 1
      END IF
      N = N \ 10
    WEND
    PRINT DIGIT
    N = int(input())
    sum = 0
    while N > 0:
      digit = N % 10
      if digit < 7:
        sum = sum + 1
      N = N // 10
    print(digit)
    Алгоритмический языкПаскаль
    алг
    нач
    цел N, digit, sum
    ввод N
    sum := 0
    нц пока N > 0
      digit := mod(N,10)
      если digit < 7 то
        sum := sum + 1
      все
      N := div(N,10)
    кц
    вывод digit
    кон
    var N, digit, sum: longint;
    begin
    readln(N);
    sum := 0;
    while N > 0 do
    begin
      digit := N mod 10;
      if digit < 7 then
        sum := sum + 1;
      N := N div 10;
    end;
    writeln(digit)
    end.
    Си
    #include <stdio.h>
    int main()
    {
    int N, digit, sum;
    scanf("%d", &N);
    sum = 0;
    while (N > 0)
    {
      digit = N % 10;
      if (digit < 7)
        sum = sum + 1;
      N = N / 10;
    }
    printf("%d",digit);
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 456.
    2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
    3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
    1) выпишите строку, в которой сделана ошибка;
    2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
  8. Демо 2015 (24). На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество нечётных чисел в исходной последовательности и максимальное нечётное число. Если нечётных чисел нет, требуется на экран вывести «NO». Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    CONST n = 4
    count = 0
    maximum = 999
    FOR I = 1 TO n
      INPUT x
      IF x mod 2 <> 0 THEN
        count = count + 1
        IF x > maximum THEN
          maximum = I
        END IF
      END IF
    NEXT I
    IF count > 0 THEN
      PRINT count
      PRINT maximum
    ELSE
      PRINT "NO"
    END IF
    n = 4
    count = 0
    maximum = 999
    for i in range(1, n + 1):
      x = int(input())
      if x % 2 != 0:
        count += 1
        if x > maximum:
          maximum = i
    if count > 0:
      print(count)
      print(maximum)
    else:
      print("NO")
    Алгоритмический языкПаскаль
    алг
    нач
    цел n = 4
    цел i, x
    цел maximum, count
    count := 0
    maximum := 999
    нц для i от 1 до n
      ввод x
      если mod(x, 2) <> 0 то
        count := count + 1
        если x > maximum то
          maximum := i
        все
      все
    кц
    если count > 0 то
      вывод count, нс
      вывод maximum
    иначе
      вывод "NO"
    все
    кон
    const n = 4;
    var i, x: integer;
    var maximum, count: integer;
    begin
    count := 0;
    maximum := 999;
    for i := 1 to n do
      begin
      read(x);
      if x mod 2 <> 0 then
      begin
        count := count + 1;
        if x > maximum then
          maximum := i
        end
      end;
    if count > 0 then
    begin
      writeln(count);
      writeln(maximum)
    end
    else
      writeln('NO')
    end.
    Си
    #include <stdio.h> int main(void)
    {
    const int n = 4;
    int i, x, maximum, count;
    count = 0;
    maximum = 999;
    for (i = 1; i <= n; i++) {
      scanf("%d",&x);
      if (x % 2 != 0) {
        count++;
        if (x > maximum)
          maximum = i;
        }
      }
    if (count > 0) {
      printf("%d\n", count);
      printf("%d\n", maximum);
    }
    else
      printf("NO\n");
    }

  9. Демо 2014 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
    БейсикПаскаль
    DIM N AS LONG
    INPUT N
    max_digit = 9
    WHILE N >= 10
      digit = N MOD 10
      IF digit > max_digit THEN
        max_digit = digit
      END IF
      N = N \ 10
    WEND
    PRINT max_digit
    END
    var N: longint;
    digit, max_digit: integer;
    begin
    readln(N);
    max_digit := 9;
    while N >= 10 do
    begin
      digit := N mod 10;
      if digit > max_digit then
        max_digit := digit;
      N := N div 10;
    end;
    writeln(max_digit);
    end.
    СиАлгоритмический язык
    #include<stdio.h>
    int main()
    {
    long int N;
    int digit, max_digit;
    scanf("%ld", &N);
    max_digit = 9;
    while (N >= 10)
    {
      digit = N % 10;
      if (digit > max_digit)
        max_digit = digit;
      N = N /10;
    }
    printf("%d", max_digit);
    }
    алг
    нач
    цел N, digit, max_digit
    ввод N
    max_digit := 9
    нц пока N >= 10
      digit := mod(N, 10)
      если digit > max_digit то
        max_digit := digit
      все
      N := div(N, 10)
    кц
    вывод max_digit
    кон
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 423.
    2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
    1) выпишите строку, в которой сделана ошибка;
    2) укажите, как исправить ошибку, — приведите правильный вариант строки.
    Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
  10. Демо 2013 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (x — действительное число) и определяется принадлежность этой точки одному из выделенных отрезков В и D (включая границы). Программист торопился и написал программу неправильно.

    БейсикПаскаль
    INPUT x
    IF x>=-3 THEN
      IF x<=9 THEN
        IF x>1 THEN
          PRINT "не принадлежит"
        ELSE
          PRINT "принадлежит"
        ENDIF
      ENDIF
    ENDIF
    END
    var x: real;
    begin
    readln(x);
    if x>=-3 then
      if x<=9 then
        if x>1 then
          write('не принадлежит')
        else
          write('принадлежит')
    end.
    СиАлгоритмический язык
    void main(void)
    {
    float x;
    scanf("%f",&x);
    if(x>=-3)
      if(x<=9)
        if(x>1)
          printf("не принадлежит");
        else
          printf("принадлежит");
    }
    алг
    нач
    вещ x
    ввод x
    если x>=-3 то
      если x<=9 то
        если x>1 то
          вывод 'не принадлежит'
        иначе
          вывод 'принадлежит'
        все
      все
    все
    кон
    Последовательно выполните следующее.
    1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D и E). Границы (точки –3, 1, 5 и 9) принадлежат заштрихованным областям (B и D соответственно).
    ОбластьУсловие 1 (x >= –3)Условие 2 (x <= 9)Условие 3 (x > 1)Программа выведетОбласть обрабатывается верно
    A     
    B     
    C     
    D     
    E     
    В столбцах условий укажите «Да», если условие выполнится; «Нет», если условие не выполнится; «—» (прочерк), если условие не будет проверяться; «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «—» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет».
    2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
  11. Демо 2012 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы).

    Программист торопился и написал программу неправильно.
    БейсикПаскаль
    INPUT x, y
    IF y>=x THEN
      IF y>=0 THEN
        IF y<=2-x*x THEN
          PRINT "принадлежит"
        ELSE
          PRINT "не принадлежит"
        ENDIF
      ENDIF
    ENDIF
    END
    var x,y: real;
    begin
    readln(x,y);
    if y>=x then
      if y>=0 then
        if y<=2-x*x then
          write('принадлежит')
        else
          write('не принадлежит')
    end.
    СиАлгоритмический язык
    void main(void){
    float x,y;
    scanf("% f % f",&x,&y);
    if (y>=x)
      if (y>=0)
        if (y<=2-x*x)
          printf("принадлежит");
        else
          printf("не принадлежит");
    }
    алг
    нач
    вещ x,y
    ввод x,y
    если y>=x то
      если y>=0 то
        если y<=2-x*x то
          вывод 'принадлежит'
        иначе
          вывод 'не принадлежит'
        все
      все
    все
    кон
    Последовательно выполните следующее.
    1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G и H).
    Точки, лежащие на границах областей, отдельно не рассматривать.

    ОбластьУсловие 1 (y>=x)Условие 2 (y>=0)Условие 3 (y<=2–x*x)Программа выведетОбласть обрабатывается верно
    A     
    B     
    C     
    D     
    E     
    F     
    G     
    H     
    В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "—" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
    2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
  12. Демо 2011 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действиительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно.

    ПаскальБейсикСи
    var x,y: real;
    begin
    readln(x,y);
    if y<=x then
      if y<=-x then
        if yy>=x*x-2 then
          write('принадлежит')
        else
          write('не принадлежит')
    end.
    INPUT x, y
    IF y<=x THEN
      IF y<=-x THEN
        IF yy>=x*x-2 THEN
          PRINT "принадлежит"
        ELSE
          PRINT "не принадлежит"
        ENDIF
      ENDIF
    ENDIF
    END
    void main(void)
    { float x,y;
    scanf("%f%f",&x,&y);
    if (y<=x)
      if (y<=-x)
        if (y>=x*x-2)
          printf("принадлежит");
        else
          printf("не принадлежит");
    }
    Последовательно выполните следующее:
    1) Приведите пример таких чисел x, y, при которых программа неправильно решает поставленную задачу.
    2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой правильный способ доработки исходной программы.)
  13. Демо 2010 (C1). Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x,y — действительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно.

    ПаскальБейсикСи
    var x,y: real;
    begin
    readln(x,y);
    if x*x+y*y>=4 then
      if x>= –2 then
        if y<= –x then
          write('принадлежит')
        else
          write('не принадлежит')
    end.
    INPUT x, y
    IF x*x+y*y>=4 THEN
      IF x >= –2 THEN
        IF y <= –x THEN
          PRINT "принадлежит"
        ELSE
          PRINT "не принадлежит"
        ENDIF
      ENDIF
    ENDIF
    END
    void main(void)
    { float x,y;
    scanf("% f % f",&x,&y);
    if (x*x+y*y>=4)
      if (x>= –2)
        if (y<= –x)
          printf("принадлежит");
        else
          printf("не принадлежит");
    }
    Последовательно выполните следующее:
    1) Приведите пример таких чисел x,y, при которых программа неверно решает поставленную задачу.
    2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы).
  14. Демо 2009 (C1). Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y — действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно.

    ПаскальБейсикСи
    var x,y: real;
    begin
    readln(x,y);
    if y<=1 then
      if x>=0 then
        if y>=sin(x) then
          write('принадлежит')
        else
          write('не принадлежит')
    end.
    INPUT x, y
    IF y<=1 THEN
      IF x>=0 THEN
        IF y>=SIN(x) THEN
          PRINT "принадлежит"
        ELSE
          PRINT "не принадлежит"
        ENDIF
      ENDIF
    ENDIF
    END
    void main(void)
    { float x,y;
    scanf("%f%f",&x,&y);
    if (y<=1)
      if (x>=0)
        if (y>=sin(x))
          printf("принадлежит");
        else
          printf("не принадлежит");
    }
    Последовательно выполните следующее:
    1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу.
    2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы.)
  15. Демо 2008 (C1). Требовалось написать программу, которая решает уравнение «a|x|=b» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно.
    ПаскальБейсикСи
    var a,b,x: real;
    begin
    readln(a,b,x);
    if a = 0 then
      if b = 0 then
        write ('любое число')
      else
        write ('нет решений')
    else
      if b = 0 then
        write('x = 0')
      else
        write('x =',b/a,' или x =',-b/a);
    end.
    INPUT a, b, x
    IF a = 0 THEN
      IF b = 0 THEN
        PRINT "любое число"
      ELSE
        PRINT "нет решений"
      ENDIF
    ELSE
      IF b = 0 THEN
        PRINT "x = 0"
      ELSE
        PRINT "x =",b/a, " или x =",-b/a
      END IF
    END IF
    END
    void main(void)
    {float a,b,x;
    scanf("%f%f%f", &a,&b,&x);
    if (a==0)
      if (b==0)
        printf("любое число");
      else
        printf ("нет решений");
    else
      if (b==0)
        printf("x = 0");
      else
        printf("x=%f или x=%f", b/a,-b/a);
    }
    Последовательно выполните три задания:
    1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
    2) Укажите, какая часть программы является лишней.
    3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
  16. (т2-2012/1)
  17. (т2-2012/2)
  18. с114 (24). Дано натуральное число A > 0. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма 1*2 + 3*4 + … + K*(K+1) окажется больше A.
    Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM A,S,K AS INTEGER
    INPUT A
    S = 0
    K = 1
    WHILE S <= A
      K = K + 1
      S = S + K*(K+1)
    WEND
    PRINT K
    END
    a = int(input())
    s = 0
    k = 1
    while s <= a:
      k = k + 1
      s = s + k*(k+1)
    print(k)
    Алгоритмический языкПаскаль
    алг
    нач
    цел a, s, k
    ввод a
    s := 0
    k := 1
    нц пока s <= a
      k := k+1
      s := s+k*(k+1)
    кц
    вывод k
    кон
    var a, s, k: integer;
    begin
    read(a);
    s := 0;
    k := 1;
    while s <= a do begin
      k := k+1;
      s := s+k*(k+1);
    end;
    writeln(k)
    end.
    Си
    #include <stdio.h>
    int main(){
    int a, s, k;
    scanf("%d", &a);
    s = 0;
    k = 1;
    while (s <= a) {
      k = k+1;
      s = s+k*(k+1);
    }
    printf("%d", k);
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 15.
    2. Укажите два наименьших значения A, при которых программа выведет верный ответ.
    3. Найдите в программе все ошибки (их может быть одна или несколько).
    Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
  19. с124 (24). Дано натуральное число A>0. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма 1*2 + 3*4 + … + K*(K+1) окажется больше A.
    Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная.
    Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM A, S, K AS INTEGER
    INPUT A
    S = 0
    K = 1
    WHILE S <= A
      S = S + K*(K+1)
      K = K + 1
    WEND
    PRINT K
    END
    a = int(input())
    s = 0
    k = 1
    while s <= a:
      s = s + k*(k+1)
      k = k + 1
    print(k)
    Алгоритмический языкПаскаль
    алг
    нач
    цел a, s, k
    ввод a
    s := 0
    k := 1
    нц пока s <= a
      s := s+k*(k+1)
      k := k+1
    кц
    вывод k
    кон
    var a, s, k: integer;
    begin
    read(a);
    s := 0;
    k := 1;
    while s <= a do begin
      s := s+k*(k+1);
      k := k+1;
    end;
    writeln(k)
    end.
    Си
    #include <stdio.h>
    int main() {
    int a, s, k;
    scanf("%d", &a);
    s = 0;
    k = 1;
    while (s <= a) {
      s = s+k*(k+1);
      k = k+1;
    }
    printf("%d", k);
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 15.
    2. Укажите два наименьших значения A, при которых программа выведет верный ответ.
    3. Найдите в программе все ошибки (их может быть одна или несколько).
    Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
  20. с113 (24). Дано целое положительное число A. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма квадратов первых нечётных чисел 12 + 32+ … + K2 окажется больше A.
    Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная.
    Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM A, S, K AS INTEGER
    INPUT A
    S = 0
    K = -1
    WHILE S < A
      K = K + 1
      S = S + K*K
    WEND
    PRINT K
    END
    a = int(input())
    s = 0
    k = -1
    while s < a:
      k = k + 1
      s = s + k*k
    print(k)
    Алгоритмический языкПаскаль
    алг
    нач
    цел a, s, k
    ввод a
    s := 0
    k := -1
    нц пока s < a
      k := k+1
      s := s + k*k
    кц
    вывод k
    кон
    var a, s, k: integer;
    begin
    read(a);
    s := 0;
    k := -1;
    while s < a do begin
      k := k+1;
      s := s + k*k;
    end;
    writeln(k)
    end.
    Си
    #include <stdio.h>
    int main(){
    int a, s, k;
    scanf("%d", &a);
    s = 0;
    k = -1;
    while (s < a) {
      k = k+1;
      s = s + k*k;
    }
    printf("%d", k);
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 11.
    2. Укажите наименьшее значение A, при котором программа выведет верный ответ.
    3. Найдите в программе все ошибки (их может быть одна или несколько).
    Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки. За исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
  21. с123 (24). Дано целое положительное число A. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма квадратов первых нечётных чисел 12 + 32+ … + K2 окажется больше A.
    Для решения этой задачи ученик написал программу, но, к сожалению, его программа — неправильная.
    Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
    БейсикPython
    DIM A, S, K AS INTEGER
    INPUT A
    S = 0
    K = 1
    WHILE S <= A
      S = S + K*K
      K = K + 1
    WEND
    PRINT K
    END
    a = int(input())
    s = 0
    k = 1
    while s <= a:
      s = s + k*k
      k = k + 1
    print(k)
    Алгоритмический языкПаскаль
    алг
    нач
    цел a, s, k
    ввод a
    s := 0
    k := 1
    нц пока s <= a
      s := s + k*k
      k := k+1
    кц
    вывод k
    кон
    var a, s, k: integer;
    begin
    read(a);
    s := 0;
    k := 1;
    while s <= a do begin
      s := s + k*k;
      k := k+1;
    end;
    writeln(k)
    end.
    Си
    #include <stdio.h>
    int main(){
    int a, s, k;
    scanf("%d", &a);
    s = 0;
    k = 1;
    while (s <= a) {
      s = s + k*k;
      k = k+1;
    }
    printf("%d", k);
    return 0;
    }
    Последовательно выполните следующее.
    1. Напишите, что выведет эта программа при вводе числа 11.
    2. Укажите наименьшее значение A, при котором программа выведет верный ответ.
    3. Найдите в программе все ошибки (их может быть одна или несколько).
    Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
    Достаточно указать ошибки и способ их исправления для одного языка программирования.
    Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки. За исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.


Copyright © 1993–2024 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.