Вход   →
Задание 24

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

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

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

  1.     На обработку поступает натуральное число, не превышающее 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))
    Паскаль Алгоритмический язык
    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.
    алг
    нач
        цел 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
        все
    кон
    С++
    #include <iostream>
    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) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.
       Достаточно указать ошибки и способ их исправления для одного языка программирования.
      Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

    Ответ
    Проверить

    Решение
    Авторизуйтесь, чтобы увидеть решение.
  2.   Тре­бо­ва­лось на­пи­сать про­грам­му, при вы­пол­не­нии ко­то­рой с кла­ви­а­ту­ры счи­ты­ва­ет­ся на­ту­раль­ное число N, не пре­вос­хо­дя­щее 109, и вы­во­дит­ся минимальная цифра этого числа. Про­грам­мист то­ро­пил­ся и на­пи­сал про­грам­му не­пра­виль­но. (Ниже для Ва­ше­го удоб­ства про­грам­ма пред­став­ле­на на четырёх язы­ках про­грам­ми­ро­ва­ния.)

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

    DIM N AS LONG

    INPUT N

    min_digit = 9

    WHILE N >= 10

        digit = N MOD 10

        IF digit > min_digit THEN

             min_digit = digit

        END IF

        N = N \ 10

    WEND

    PRINT digit

    END

    var N: longint;

        digit, min_digit: integer;

    begin

        readln(N);

         min_digit := 9;

        while N >= 10 do

        begin

            digit := N mod 10;

            if digit > min_digit then

                 min_digit := digit;

            N := N div 10;

        end;

        writeln( digit);

    end.

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

    #include <iostream>

    using namespace std;

    void main()

    {

        long int N;

        int digit, min_digit;

    cin >>N;

         min_digit = 9;

        while (N >= 10)

        {

            digit = N % 10;

            if (digit > min_digit)

                 min_digit = digit;

            N = N /10;

        }

        cout << digit;

    }

    алг

    нач

        цел N, digit, min_digit

        ввод N

         min_digit := 9

        нц пока N >= 10

            digit := mod(N, 10)

            если digit > min_digit то

                 min_digit := digit

            все

            N := div(N, 10)

        кц

        вывод digit

    кон

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

    1. На­пи­ши­те, что вы­ве­дет эта про­грам­ма при вводе числа 324.

    2. Най­ди­те все ошиб­ки в этой про­грам­ме (их может быть одна или не­сколь­ко). Для каж­дой ошиб­ки:

    1) вы­пи­ши­те стро­ку, в ко­то­рой сде­ла­на ошиб­ка;
    2) ука­жи­те, как ис­пра­вить ошиб­ку, — при­ве­ди­те пра­виль­ный ва­ри­ант стро­ки.

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

    Ответ
    Проверить

    Решение
    Авторизуйтесь, чтобы увидеть решение.
  3.    На об­ра­бот­ку по­сту­па­ет по­ло­жи­тель­ное целое число, не пре­вы­ша­ю­щее 109. Нужно на­пи­сать про­грам­му, ко­то­рая вы­во­дит на экран сумму цифр этого числа, мень­ших 5. Если в числе нет цифр, мень­ших 5, тре­бу­ет­ся на экран вы­ве­сти -2. Про­грам­мист на­пи­сал про­грам­му не­пра­виль­но. Ниже эта про­грам­ма для Ва­ше­го удоб­ства при­ве­де­на на пяти язы­ках про­грам­ми­ро­ва­ния.

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

    DIM N, DIGIT, SUM AS LONG

    INPUT N

    SUM = 0

    WHILE N > 0

        DIGIT = N MOD 10

        IF DIGIT < 5 THEN

            SUM = SUM * digit

        END IF

        N = N \ 10

    WEND

    PRINT DIGIT

    var N, digit, sum: longint;

    begin

        readln(N);

        sum := 0;

        while N > 0 do

        begin

            digit := N mod 10;

            if digit < 5 then

                sum := sum * digit;

            N := N div 10;

        end;

        writeln(digit)

    end.

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

    #include <iostream>

    using namespace std;

    int main()

    {

        int N, digit, sum;

       cin >> N;

        sum = 0;

        while (N > 0)

        {

            digit = N % 10;

            if (digit < 5)

                sum = sum * digit;

            N = N / 10;

        }

        cout << digit;

        return 0;}

    алг

    нач

        цел N, digit, sum

        ввод N

        sum := 0

        нц пока N > 0

            digit := mod(N,10)

            если digit < 5 то

                sum := sum * digit

            все

            N := div(N,10)

        кц

        вывод digit

    кон

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

    1. На­пи­ши­те, что вы­ве­дет эта про­грам­ма при вводе числа 326.

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

    1) вы­пи­ши­те стро­ку, в ко­то­рой сде­ла­на ошиб­ка;
    2) ука­жи­те, как ис­пра­вить ошиб­ку, т.е. при­ве­ди­те пра­виль­ный ва­ри­ант стро­ки.

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

    Ответ
    Проверить

    Решение
    Авторизуйтесь, чтобы увидеть решение.
  4.     На обработку поступает натуральные числа, не превышающие 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 <iostream>
    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) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.
       Достаточно указать ошибки и способ их исправления для одного языка программирования.
      Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

    Ответ
    Проверить

    Решение
    Авторизуйтесь, чтобы увидеть решение.
  5.     На обработку поступает натуральные числа меньше 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 <iostream>
    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) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.
       Достаточно указать ошибки и способ их исправления для одного языка программирования.
      Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.

    Ответ
    Проверить

    Решение
    Авторизуйтесь, чтобы увидеть решение.
Пройти тест
Задание 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. Алгоритмы обработки массивов Задание 26. Выигрышная стратегия Задание 27. Обработка символьных строк, массивов и последовательностей

Еще нет аккаунта?

Пользователям Бингоскул доступна бесплатная подготовка к ЕГЭ по всем видам ФИПИ, просмотр решений и отслеживание статистики
Регистрация

Уже зарегистрированы?

Авторизуйтесь в своей учетной записи, чтобы получить доступ к расширенным возможностям функционала сайта
Вход

Вход в систему

Регистрация

Регистрируясь, я подтверждаю своё согласие с условиями пользовательского соглашения

Активация аккаунта

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