Поиск и исправление ошибок в программе

За правильное выполненное задание получишь 3 балла. На решение отводится примерно 30 минут.

Задачи для тренировки

Задача №1

На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 3 и меньше 9. Если в числе нет цифр, кратных 3, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования. Напоминание: 0 делится на любое натуральное число.

Бейсик Python
DIM N, DIGIT, MAXDIGIT AS LONG
INPUT N
MAXDIGIT = 9
WHILE N > 0
    DIGIT = N MOD 10
    IF DIGIT MOD 3 = 0 THEN
        IF DIGIT < MAXDIGIT THEN
            MAXDIGIT = DIGIT
        END IF
    END IF
    N = N \ 10
WEND
IF MAXDIGIT = 9 THEN
    PRINT "NO"
ELSE
    PRINT MAXDIGIT
END IF
N = int(input())
maxDigit = 9
while N > 0:
    digit = N % 10
    if digit % 3 == 0:
        if digit < maxDigit:
            maxDigit = digit
    N = N // 10
if maxDigit == 9:
    print("NO")
else:
    print(maxDigit))
Паскаль Алгоритмический язык
var N,digit,maxDigit: longint;
begin
    readln(N);
    maxDigit := 9;
    while N > 0 do
    begin
        digit := N mod 10;
        if digit mod 3 = 0 then
            if digit < maxDigit then
                maxDigit := digit;
            N := N div 10;
    end;
    if maxDigit = 9 then
        writeln('NO')
    else
        writeln(maxDigit)
end.
алг
нач
    цел N, digit, maxDigit
    ввод N
    maxDigit := 9
    нц пока N > 0
        digit := mod(N,10)
        если mod(digit, 3) = 0 то
            если digit < maxDigit то
                maxDigit := digit
            все
        все
        N := div(N,10)
    кц
    если maxDigit = 9 то
        вывод "NO"
    иначе
        вывод maxDigit
    все
кон
С++
#include
using namespace std;
int main() {
        long N, digit, maxDigit;
        cin >> N;
        maxDigit = 9;
        while (N > 0) {
            digit = N % 10;
            if (digit % 3 == 0)
                if (digit < maxDigit)
                    maxDigit = digit;
            N = N / 10;}
        if (maxDigit == 9)
            cout << "NO" << endl;
        else
            cout << maxDigit << endl;
        return 0;}

   Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе числа 236.
  2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
  3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:

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

Задача №2

На обработку поступает натуральные числа, не превышающие 109, пока пользователь не введет 0. Нужно написать программу, которая выводит на экран сумму последовательности четных чисел. Если нет четных чисел, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования. Напоминание: 0 делится на любое натуральное число.

Бейсик Python

DIM A, SUM
INPUT A
sum = A
WHILE A > 0
    IF A MOD 2 = 1 THEN

           SUM = SUM + A
    END IF
    INPUT A
WEND
IF SUM = 0 THEN
    PRINT "NO"
ELSE
    PRINT SUM
END IF

A = int(input())
sum = A
while a > 0:
    if a % 2 == 1:
            sum = sum + a
    A = int(input())
if sum == 0:
    print("NO")
else:
    print(sum))
Паскаль Алгоритмический язык
var a, sum: longint;
begin
    readln(a);
    sum := a;
    while a > 0 do
    begin
        if a mod 2 = 1 then
                sum := sum + a;
        readln(a);
    end;
    if sum = 0 then
        writeln('NO')
    else
        writeln(sum)
end.
алг
нач
    цел a, sum
    ввод a
    sum := a
    нц пока a > 0
        если mod(a, 2) = 1 то
                sum := sum + a
            все
        все
       ввод a
    кц
    если sum = 0 то
        вывод "NO"
    иначе
        вывод sum
    все
кон
С++
#include
using namespace std;
int main() {
        long  a, sum;
        cin >> a;
        sum = a;
        while (a > 0) {
            if (a % 2 == 1)
                sum = sum + a;
            cin >> a;
            }
        if (sum == 0)
            cout << "NO" << endl;
        else
            cout << sum << endl;
        return 0;}

Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе числа 4 1 2 3 0.
  2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
  3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:

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

Задача №3

На обработку поступает натуральные числа больше 2-х, но не превышающие 1000, пока пользователь не введет 0. Нужно написать программу, которая выводит на экран произведение последовательности нечетных чисел. Если нет четных чисел, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования. Напоминание: 0 делится на любое натуральное число.

Бейсик Python

DIM A, PROIZ
INPUT A
PROIZ= 0
WHILE A > 0
    IF A MOD 2 = 1 THEN

           PROIZ= PROIZ+ A
    END IF
    INPUT A
WEND
IF PROIZ= 0 THEN
    PRINT "NO"
ELSE
    PRINT PROIZ
END IF

A = int(input())
proiz= 0
while a > 0:
    if a % 2 == 1:
            proiz= proiz+ a
    A = int(input())
if proiz== 0:
    print("NO")
else:
    print(proiz))
Паскаль Алгоритмический язык
var a, proiz: longint;
begin
    readln(a);
    proiz:= 0;
    while a > 0 do
    begin
        if a mod 2 = 1 then
                proiz:= proiz+ a;
        readln(a);
    end;
    if proiz= 0 then
        writeln('NO')
    else
        writeln(proiz)
end.
алг
нач
    цел a, proiz
    ввод a
    proiz:= 0
    нц пока a > 0
        если mod(a, 2) = 1 то
                proiz:= proiz+ a
            все
        все
       ввод a
    кц
    если proiz= 0 то
        вывод "NO"
    иначе
        вывод proiz
    все
кон
С++
#include
using namespace std;
int main() {
        long  a, proiz;
        cin >> a;
        proiz= 0;
        while (a > 0) {
            if (a % 2 == 1)
                proiz= proiz+ a;
            cin >> a;
            }
        if (proiz== 0)
            cout << "NO" << endl;
        else
            cout << proiz<< endl;
        return 0;}

Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе числа 5 3 8 5 0.
  2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
  3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:

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

Задача №4

На обработку поступает натуральные числа меньше 1000, пока пользователь не введет 0. Нужно написать программу, которая выводит на экран кол-во двузначных чисел. Если нет двузначных чисел, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования. Напоминание: 0 делится на любое натуральное число.

Бейсик Python

DIM A, KOL
INPUT A
KOL= 1
WHILE A > 0
    IF A > 9 AND A < 99 THEN

           KOL= KOL+ 1
    END IF
    INPUT A
WEND
IF KOL= 0 THEN
    PRINT "NO"
ELSE
    PRINT KOL
END IF

A = int(input())
kol= 1
while a > 0:
    if a > 9 and a < 99:
            kol= kol+ 1
    A = int(input())
if kol== 0:
    print("NO")
else:
    print(kol))
Паскаль Алгоритмический язык
var a, kol: longint;
begin
    readln(a);
    kol:= 1;
    while a > 0 do
    begin
        if a > 9 and a < 99 then
                kol:= kol+ 1;
        readln(a);
    end;
    if kol= 0 then
        writeln('NO')
    else
        writeln(kol)
end.
алг
нач
    цел a, kol
    ввод a
    kol:= 1
    нц пока a > 0
        если (a > 9) и (a < 99)  то
                kol:= kol+ 1
            все
        все
       ввод a
    кц
    если kol= 0 то
        вывод "NO"
    иначе
        вывод kol
    все
кон
С++
#include
using namespace std;
int main() {
        long  a, kol;
        cin >> a;
        kol= 1;
        while (a > 0) {
            if (a > 9 && a < 99)
                kol= kol+ 1;
            cin >> a;
            }
        if (kol== 0)
            cout << "NO" << endl;
        else
            cout << kol<< endl;
        return 0;}

Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе числа 42 45 678 222 11 0.
  2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
  3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:

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

Задача №5

На обработку поступает натуральные числа меньше 1000, пока пользователь не введет 0. Нужно написать программу, которая выводит на экран кол-во чисел кратных 5 и не кратных 8. Если нет двузначных чисел, требуется на экран вывести «NO». Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования. Напоминание: 0 делится на любое натуральное число.

Бейсик Python

DIM A, KOL
INPUT A
KOL= 0
WHILE A > 0

    INPUT A
    IF  A MOD 5=0 and A MOD 8=0 THEN

           KOL= KOL+ 1
    END IF
WEND
IF KOL= 0 THEN
    PRINT "NO"
ELSE
    PRINT KOL
END IF

A = int(input())
kol= 0
while a > 0:

    A = int(input())
    if a%5 ==0  and a%8 ==0:
            kol= kol+ 1
if kol== 0:
    print("NO")
else:
    print(kol))

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

var a, kol: longint;
begin
    readln(a);
    kol:= 0;
    while a > 0 do
    begin

        readln(a);
        if a mod 5=0 and a mod 8=0 then
                kol:= kol+ 1;
    end;
    if kol= 0 then
        writeln('NO')
    else
        writeln(kol)
end.

алг
нач
    цел a, kol
    ввод a
    kol:= 0
    нц пока a > 0

       ввод a
        если mod(digit, 5)=0 и mod(digit, 8)=0  то
                kol:= kol+ 1
            все
        все
    кц
    если kol= 0 то
        вывод "NO"
    иначе
        вывод kol
    все
кон

С++

#include
using namespace std;
int main() {
        long  a, kol;
        cin >> a;
        kol= 0;
        while (a > 0) {

            cin >> a;
            if (a%5 ==0  && a%8 ==0)
                kol= kol+ 1;
            }
        if (kol== 0)
            cout << "NO" << endl;
        else
            cout << kol<< endl;
        return 0;}

Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе числа 2 55 70 89 34 40 0.
  2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
  3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:

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

Пройти тест

Начать