Задание EGEINF108779: Преобразование записи числа

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Преобразование записи числа.

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

Дайте развернутый ответ.

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

 

Бейсик

Python

DIM N AS LONG

DIM R, d AS INTEGER

INPUT N

R = 0

WHILE N > 0

  d = N MOD 10

  IF d <> 4 THEN

    R = R + d

  END IF

  N = N \ 10

WEND

PRINT R

END

N = int(input())

R = 0

while N > 0:

    d = N % 10

    if d != 4:

       R = R + d

    N = N // 10

print(R)

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

Паскаль

алг

нач

  цел N, R, d

  ввод N

  R := 0

  нц пока N > 0

    d := mod(N, 10)

    если d <> 4 то

      R := R + d

    все

    N := div(N, 10)

  кц

  вывод R

кон

var N: longint;

  R, d: integer;

begin

  readln(N);

  R := 0;

  while N > 0 do begin

    d := N mod 10;

    if d <> 4 then

      R := R + d;

    N := N div 10;

  end;

  writeln(R);

end.

С++

#include <iostream>

using namespace std;

 

int main()

{

  long int N;

  int R, d;

  cin >> N;

  R = 0;

  while (N > 0) {

    d = N % 10;

    if (d != 4) {

      R = R + d;

    }

    N = N / 10;

  }

  cout << R << endl;

  return 0;

}

 

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

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

2. Приведите пример входного числа N, при котором приведённая программа, несмотря на ошибки, выдаёт верный ответ.

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

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

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

Известно, что в тексте программы нужно исправить не более двух строк так, чтобы она стала работать правильно.

Достаточно указать ошибки и способ их исправления для одного языка программирования.

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

 


 

i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования
Тип ответа:Развернутый ответ
Номер: 108779
НЕ РЕШЕНО Изменить статус

Решение задания EGEINF108779

Ответ: 1) 3; 2) N = 14; 3) if d == 4: и R = R + 1

Нужно подсчитать количество цифр 4 в десятичной записи натурального N ≤ 10⁹. Рассмотрим исходную программу на Python. В начале R = 0. На каждом шаге d получает последнюю цифру, затем последняя цифра N отбрасывается. Условие проверяется до перехода к следующей цифре.

1. Работа исходной ошибочной программы при N = 241.
N = 241: d = 1; условие d != 4 истинно, поэтому R = 0 + 1 = 1. Далее N = 24.
N = 24: d = 4; условие ложно, R остаётся 1. Далее N = 2.
N = 2: d = 2; условие истинно, R = 1 + 2 = 3. Далее N = 0.
Цикл заканчивается; print(R) выводит 3. Программа складывает цифры, отличные от 4, вместо подсчёта четвёрок.

2. Подходящий пример: N = 14.
Сначала обрабатывается 4: прибавления нет. Затем обрабатывается 1: R становится равным 1. Выводится 1, и четвёрка в числе 14 действительно одна.

3. Исправляем ровно две ошибочные строки на Python, сохраняя остальные строки и их отступы.
Первая ошибочная строка: if d != 4:
Правильная строка: if d == 4:
Вторая ошибочная строка: R = R + d
Правильная строка: R = R + 1
При каждой встрече цифры 4 нужно прибавлять ровно одну найденную цифру, а не её значение.

Проверка исправления. После обработки любых k последних цифр значение R равно количеству цифр 4 среди них. Вначале обработано ноль цифр и R = 0. На следующем шаге счётчик увеличивается ровно на 1 тогда и только тогда, когда очередная цифра равна 4; значит, утверждение сохраняется. После удаления всех цифр N становится 0, цикл завершается, и выводится количество нужных цифр во всём исходном числе. При N ≤ 10⁹ выполняется не более десяти итераций.
Для исходного теста 241 исправленная программа печатает 1. Для N = 444 она печатает 3, а для N = 10⁹ — 0. Пример из пункта 2 сохраняет верный результат 1.

Ответ: 1) 3; 2) N = 14; 3) if d == 4: и R = R + 1.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF108779.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.