Требовалось написать программу, при выполнении которой с клавиатуры вводится натуральное число N (гарантируется, что 10 ≤ N ≤ 108) и выводится двузначное число, образованное двумя его первыми (старшими) цифрами. Например, при N = 2014 надо вывести 20. Ученик написал такую программу:
| Бейсик | Паскаль |
|---|---|
DIM N AS LONG INPUT N WHILE N>100 N = N MOD 100 WEND PRINT N END | var n: longint; begin read(n); while n>100 do begin n := n mod 100 end; write(n); end. |
| Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main(){ long int n; cin >> n; while (n>100) { n = n % 100; } cout << n; } | алг нач цел n ввод n нц пока n>100 n := mod(n,100) кц вывод n кон |
| Python | |
n = int(input()) while n > 100: n %= 10 0 print(n) | |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 2014.
2. Приведите пример числа, при вводе которого программа выдаст верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
1. При вводе числа 2014 программа выведет число 14. (Комментарий. Приведённая программа выводит ответ 100 для N = 100 и число, образованное двумя последними цифрами, для любого другого значения n.)
2. Пример числа, для которого программа даёт верный ответ: 2020. (Комментарий Программа даст верный ответ для любого числа, у которого общее количество цифр чётно, при этом две первые цифры совпадают с двумя последними, в частности, для любого двузначного числа.)
3. 1) Неверное условие цикла: неравенство должно быть нестрогим, иначе можно в качестве ответа получить 100.
2) Неверно реализовано отбрасывание цифр. Во-первых, вместо нахождения остатка нужно использовать целочисленное деление. Во-вторых, делить надо не на 100, а на 10, то есть отбрасывать цифры не по две, а по одной, иначе при нечётном количестве цифр в числе получится неверный ответ.
Пример исправления для языка Паскаль:
Первая строка с ошибкой: while n>100 do begin. Исправленная строка: while n>=100 do begin. Другой способ исправления: while n>99 do begin.
Вторая строка с ошибкой: n := n mod 100. Исправленная строка: n := n div 10.
В программах на других языках ошибочные строки и их исправления аналогичны.

