Математика ЕГЭ
Русский язык ЕГЭ
Математика 5-7
Математика ОГЭ
Информатика
Физика
Обществознание
Кликните, чтобы открыть меню

(Старый формат ЕГЭ) 24. Программирование – исправление ошибки

1. Вспоминай формулы по каждой теме
2. Решай новые задачи каждый день
3. Вдумчиво разбирай решения
Задание 1 #11437

На обработку поступает последовательность из четырёх целых чисел. Нужно написать программу, которая выводит на экран количество положительных чисел последовательности и их сумму. Если положительных чисел нет, требуется вывести на экран «NO». Известно, что вводимые числа по абсолютной величине не превышают 100. Краб был слишком увлечен поеданием песка и написал программу с ошибками. Ниже эта программа для Вашего удобства приведена на трех языках программирования.

\[\begin{array}{|l|l|l|} \hline \text{C++}&\text{Python}&\text{Pascal}\\ \hline \#include<iostream>&count=0&var\;count,\;sum,\; x,\; i: \; integer;\\ using \; namespace \; std;&sum=0&begin\\ int \; main()\;\{&for \; i \; in \; range \; (1, \; 5):&\quad count:=0;\\ \quad int \; count=0, \; sum=0, \; x, \; i;&\quad x=x(input())&\quad sum:=0;\\ \quad for \; (i=1;\;i<=4;\;i++) \; \{ &\quad if \; x<0:&\quad for\;i:=1\;to\;4\;do\\ \quad \quad cin >> x;&\quad \quad count=count+1&\quad begin\\ \quad \quad if \; (x<0) \; \{&\quad \quad sum=sum+count&\quad \quad readln(x);\\ \quad \quad \quad count++;&if\;count==0:&\quad \quad if\;(x<0)\; then \; begin\\ \quad \quad \quad sum=sum+count; \; \} &\quad print\text{('NO')}&\quad \quad \quad count:=count+1;\\ \quad \quad \}&else:&\quad \quad \quad sum:=sum+count;\\ \quad if \; (count==0)&\quad print(count)&\quad \quad end;\\ \quad \quad cout<<\text{"NO"\ };&\quad print(sum)&\quad end;\\ \quad else&&\quad if \; (count=0)\; then\\ \quad \quad cout<<count<<endl<<sum;&&\quad \quad write\text{('NO')}\\ \quad return \; 0;&&\quad else\\ \quad \} &&\quad begin\\ &&\quad \quad writeln(count);\\ &&\quad \quad writeln(sum);\\ &&\quad end;\\ &&\quad end.\\ \hline \end{array}\]

Выполните следующие задания:

1. Напишите, что выведет эта программа при вводе последовательности 0, 2, 1, -1.

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

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

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

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

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

1. Запоминаем начальные значения переменных \(count\) и \(sum\). Заходим в цикл, подставляем \(x=0\). Так как 0 не меньше 0, программа не зайдет в цикл.

Далее подставляем \(x=2\). Так как 2 не меньше 0, программа не зайдет в цикл.

Подставляем \(x=1\). Так как 1 не меньше 0, программа не зайдет в цикл.

Подставляем \(x=-1\). Так как \(-1<0\), увеличиваем значение переменной \(count\) и добавляем его к значению \(sum\).

Далее идет проверка значения переменной \(count\), поскольку у нас \(count=1\), программа выведет значение \(count\) и \(sum\) на экран:

1

1

2. По условию необходимо найти сумму положительных чисел последовательности. Программа с ошибками ищет количество отрицательных чисел, поэтому, чтобы получить верное значение переменной \(count\), необходимо сравнять количество положительных и отицательных чисел. Тогда возьмем два положительных и два отрицательных числа. Программа Краба находит не просто сумму отрицательных чисел, а сумму \(count\) после нахождения каждого отрицательного числа в последовательности. Значит, при нахождении первого отрицательного числа \(sum\) станет равна 1, а после нахождения второго отрицательного \(sum\) будет равна 3. Таким образом получаем, что последовательность может иметь вид -1, -1, 1, 2, где вместо первых двух элементов можно поставить любые отрицательные числа.

3. В первую очередь необходимо заметить, что по условию задачи требуется находить положительные числа, а программа, написанная Крабом, находит отрицательные числа. То есть ошибка находится в строчке с первым оператором “if”.

 

Исправим на языке C++:

Ошибочная строка: if (\(x<0\)) {

Исправленная строка: if (\(x>0\)) {

 

Исправим на языке Python:

Ошибочная строка: if \(x<0:\)

Исправленная строка: if \(x>0:\)

 

Исправим на языке Pascal:

Ошибочная строка: if (\(x<0\)) then begin

Исправленная строка: if (\(x>0\)) then begin

 

Еще одной ошибкой в программе является вычисление перменной \(sum\). Мы должны суммировать именно значения самих положительных \(x\), а не их количество.

 

Исправим на языке C++:

Ошибочная строка: \(sum=sum+count\);

Исправленная строка: \(sum=sum+x\);

 

Исправим на языке Python:

Ошибочная строка: \(sum=sum+count\)

Исправленная строка: \(sum=sum+x\)

 

Исправим на языке Pascal:

Ошибочная строка: \(sum:=sum+count;\)

Исправленная строка: \(sum:=sum+x;\)

 

Ответ: См. решение

Задание 2 #11438

На обработку поступает последовательность из четырёх целых чисел. Нужно написать программу, которая выводит на экран количество неотрицательных чисел последовательности и их сумму. Если неотрицательных чисел нет, требуется вывести на экран «NO». Известно, что вводимые числа по абсолютной величине не превышают 100. Краб был слишком увлечен поеданием песка и написал программу с ошибками. Ниже эта программа для Вашего удобства приведена на трех языках программирования.

\[\begin{array}{|l|l|l|} \hline \text{C++}&\text{Python}&\text{Pascal}\\ \hline \#include<iostream>&count=1&var\;count,\;sum,\; x,\; i: \; integer;\\ using \; namespace \; std;&sum=0&begin\\ int \; main()\;\{&for \; i \; in \; range \; (1, \; 5):&\quad count:=1;\\ \quad int \; count=1, \; sum=0, \; x, \; i;&\quad x=x(input())&\quad sum:=0;\\ \quad for \; (i=1;\;i<=4;\;i++) \; \{ &\quad if \; x>0:&\quad for\;i:=1\;to\;4\;do\\ \quad \quad cin >> x;&\quad \quad count=count+1&\quad begin\\ \quad \quad if \; (x>0) \; \{&\quad \quad sum=sum+x&\quad \quad readln(x);\\ \quad \quad \quad count++;&if\;count==0:&\quad \quad if\;(x>0)\; then \; begin\\ \quad \quad \quad sum=sum+x; \; \} &\quad print\text{('NO')}&\quad \quad \quad count:=count+1;\\ \quad \quad \}&else:&\quad \quad \quad sum:=sum+x;\\ \quad if \; (count==0)&\quad print(count)&\quad \quad end;\\ \quad \quad cout<<\text{"NO"\ };&\quad print(sum)&\quad end;\\ \quad else&&\quad if \; (count=0)\; then\\ \quad \quad cout<<count<<endl<<sum;&&\quad \quad write\text{('NO')}\\ \quad return \; 0;&&\quad else\\ \quad \} &&\quad begin\\ &&\quad \quad writeln(count);\\ &&\quad \quad writeln(sum);\\ &&\quad end;\\ &&\quad end.\\ \hline \end{array}\]

Выполните следующие задания:

1. Напишите, что выведет эта программа при вводе последовательности -1, -2, 0, 1.

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

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

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

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

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

1. Запоминаем начальные значения переменных \(count\) и \(sum\). Заходим в цикл, подставляем \(x=-1\). Так как -1 не больше 0, программа не зайдет в цикл.

Далее подставляем \(x=-2\). Так как -2 не больше 0, программа не зайдет в цикл.

Подставляем \(x=0\). Так как 0 не больше 0, программа не зайдет в цикл.

Подставляем \(x=1\). Так как \(1>0\), увеличиваем значение переменной \(count\) и добавляем \(x\) к значению \(sum\).

Далее идет проверка значения переменной \(count\), поскольку у нас \(count=2\), программа выведет значение \(count\) и \(sum\) на экран:

2

1

2. По условию необходимо найти сумму неотрицательных чисел последовательности. Так как в программе Краба начальное значение \(count\) равно 1, а складываются только положительные числа, то возьмем в качестве элементов последовательности три любых положительных числа и 0 (поскольку 0 никак не влияет на сумму, а его наличие в последовательности учитывается начальным значением переменной \(count\)), например, 0, 2, 2, 2.

3. В первую очередь необходимо заметить, что по условию задачи требуется находить неотрицательные числа, а программа, написанная Крабом, находит положительные числа. То есть ошибка находится в строчке с первым оператором “if”.

 

Исправим на языке C++:

Ошибочная строка: if (\(x>0\)) {

Исправленная строка: if (\(x>=0\)) {

 

Исправим на языке Python:

Ошибочная строка: if \(x>0:\)

Исправленная строка: if \(x>=0:\)

 

Исправим на языке Pascal:

Ошибочная строка: if (\(x>0\)) then begin

Исправленная строка: if (\(x>=0\)) then begin

 

Еще одной ошибкой в программе является начальное значение переменной \(count\). Чтобы программа выводила верный ответ, необходимо обнулить счетчик перед началом работы.

 

Исправим на языке C++:

Ошибочная строка: \(int\;count=1,sum=0,x,i\);

Исправленная строка: \(int\;count=0,sum=0,x,i\);

 

Исправим на языке Python:

Ошибочная строка: \(count=1\)

Исправленная строка: \(count=0\)

 

Исправим на языке Pascal:

Ошибочная строка: \(count:=1\);

Исправленная строка: \(count:=0\);

 

Ответ: См. решение

Задание 3 #11439

На обработку поступает последовательность из пяти положительных целых чисел. Нужно написать программу, которая выводит на экран разность максимального элемента последовательности и суммы четных чисел. Если четных чисел нет, требуется вывести на экран «NO». Известно, что вводимые числа по абсолютной величине не превышают 99. Марафонец замечтался о поступлении в топовый ВУЗ и написал программу с ошибками. Ниже эта программа для Вашего удобства приведена на трех языках программирования.

\[\begin{array}{|l|l|l|} \hline \text{C++}&\text{Python}&\text{Pascal}\\ \hline \#include<iostream>&mx=100&var\;mx,\;sum,\; x,\; i: \; integer;\\ using \; namespace \; std;&sum=0&begin\\ int \; main()\;\{&for \; i \; in \; range \; (1, \; 6):&\quad mx:=100;\\ \quad int \; mx=100, \; sum=0, \; x, \; i;&\quad x=x(input())&\quad sum:=0;\\ \quad for \; (i=1;\;i<=5;\;i++) \; \{ &\quad if \; x\%2==0:&\quad for\;i:=1\;to\;5\;do\\ \quad \quad cin >> x;&\quad \quad sum=sum+x&\quad begin\\ \quad \quad if \; (x\%2==0) &\quad if\;x>mx:&\quad \quad readln(x);\\ \quad \quad \quad sum=sum+x; &\quad \quad mx=x&\quad \quad if\;(x\; mod\; 2 = 0)\; then\\ \quad \quad if \; (x>mx) \; &if\;sum==0:&\quad \quad \quad sum:=sum+x;\\ \quad \quad \quad mx=x; \; \} &\quad print\text{('NO')}&\quad \quad if\;(x>mx)\; then\\ \quad if \; (sum==0)&else:&\quad \quad \quad mx:=x;\\ \quad \quad cout<<\text{"NO"\ };&\quad print(x-sum)&\quad end; \\ \quad else&&\quad if \; (sum=0)\; then \\ \quad \quad cout<<x-sum;&&\quad \quad writeln\text{('NO')} \\ \quad return \; 0;&&\quad else\\ \quad \} && \quad \quad writeln(x-sum);\\ &&end.\\ \hline \end{array}\]

Выполните следующие задания:

1. Напишите, что выведет эта программа при вводе последовательности 25, 10, 2, 1, 3.

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

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

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

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

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

1. Запомним начальные значения \(sum\) и \(mx\). Подставим \(x=25\). Так как 25 — нечетное число, его остаток от деления на 2 равен 1, значит, \(sum\) не изменится. 25 не больше 100, значит, \(mx\) также не меняется.

Подставим \(x=10\). Так как \(x\) — четное число, значит к значению \(sum\) прибавим 10, \(sum=10\). 10 не больше 100, значит, \(mx\) также не меняется.

Подставим \(x=2\). Так как \(x\) — четное число, значит к значению \(sum\) прибавим 2, \(sum=12\). 2 не больше 100, значит, \(mx\) также не меняется.

Подставим \(x=1\). Так как \(x\) — нечетное число, \(sum\) не изменится. 1 не больше 100, значит, \(mx\) также не меняется.

Подставим \(x=3\). Так как \(x\) — нечетное число, \(sum\) не изменится. 3 не больше 100, значит, \(mx\) также не меняется.

Программа выводит на экран значение \(x-sum\), где \(x\) — последний элемент последовательности, значит, на экран будет выведено -9.

2. Так как по условию задачи нам необходимо, чтобы программа выводила разность максимального элемента последовательности и суммы четных чисел, а код, написанный Марафонцем, считает разность между последним элементом и суммой четных элементов, сделаем максимальным числом последний элемент. Тогда последовательность может иметь вид 2, 4, 1, 1, 99, в данном случае на экран будет выведено 93, что является верным ответом.

3. В первую очередь необходимо заметить, что \(mx\) обозначает максимальный элемент и для корректного его поиска переменная должна быть меньше любого возможного числа последовательности.

 

Исправим на языке C++:

Ошибочная строка: \(int\;mx=100,sum=0,x,i\);

Исправленная строка: \(int\;mx=0,sum=0,x,i\);

 

Исправим на языке Python:

Ошибочная строка: \(mx=100\)

Исправленная строка: \(mx=0\)

 

Исправим на языке Pascal:

Ошибочная строка: \(mx:=100\);

Исправленная строка: \(mx:=0\);

 

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

Исправим на языке C++:

Ошибочная строка: \(cout<<x-sum\);

Исправленная строка: \(cout<<mx-sum\);

 

Исправим на языке Python:

Ошибочная строка: \(print(x-sum)\)

Исправленная строка: \(print(mx-sum)\)

 

Исправим на языке Pascal:

Ошибочная строка: \(writeln(x-sum)\);

Исправленная строка: \(writeln(mx-sum)\);

 

Ответ: См. решение

Задание 4 #11441

На обработку поступает последовательность из четырёх целых чисел. Нужно написать программу, которая выводит на экран количество отрицательных чисел последовательности и их произведение. Если положительных чисел нет, требуется вывести на экран «NO». Известно, что вводимые числа по абсолютной величине не превышают 100. Краб был слишком увлечен поеданием песка и написал программу с ошибками. Ниже эта программа для Вашего удобства приведена на трех языках программирования.

\[\begin{array}{|l|l|l|} \hline \text{C++}&\text{Python}&\text{Pascal}\\ \hline \#include<iostream>&count=0&var\;count,\;comp,\; x,\; i: \; integer;\\ using \; namespace \; std;&comp=0&begin\\ int \; main()\;\{&for \; i \; in \; range \; (1, \; 5):&\quad comp:=0;\\ \quad int \; count=0, \; comp=0, \; x, \; i;&\quad x=x(input())&\quad sum:=0;\\ \quad for \; (i=1;\;i<=4;\;i++) \; \{ &\quad if \; x<0:&\quad for\;i:=1\;to\;4\;do\\ \quad \quad cin >> x;&\quad \quad count=count+1&\quad begin\\ \quad \quad if \; (x<0) \; \{&\quad \quad comp=comp+x&\quad \quad readln(x);\\ \quad \quad \quad count++;&if\;count==0:&\quad \quad if\;(x<0)\; then \; begin\\ \quad \quad \quad comp=comp+x; \; \} &\quad print\text{('NO')}&\quad \quad \quad count:=count+1;\\ \quad \quad \}&else:&\quad \quad \quad comp:=comp+x;\\ \quad if \; (count==0)&\quad print(count)&\quad \quad end;\\ \quad \quad cout<<\text{"NO"\ };&\quad print(comp)&\quad end;\\ \quad else&&\quad if \; (count=0)\; then\\ \quad \quad cout<<count<<endl<<comp;&&\quad \quad write\text{('NO')}\\ \quad return \; 0;&&\quad else\\ \quad \} &&\quad begin\\ &&\quad \quad writeln(count);\\ &&\quad \quad writeln(comp);\\ &&\quad end;\\ &&\quad end.\\ \hline \end{array}\]

Выполните следующие задания:

1. Напишите, что выведет эта программа при вводе последовательности 3, -1, -2, -5.

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

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

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

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

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

1. Подставим \(x=3\). Т.к. 3 не меньше нуля, подставляем следующий \(x=-1\). Увеличиваем значение \(count\) и добавляем значение \(x\) к переменной \(comp\).

Подставим \(x=-2\). Т.к. -2<0, увеличиваем значение \(count\) и добавляем значение \(x\) к переменной \(comp\). Получаем \(count=2,comp=-3\).

Подставим \(x=-5\). Т.к. -5<0, увеличиваем значение \(count\) и добавляем значение \(x\) к переменной \(comp\). Получаем \(count=3,comp=-8\).

Значит, программа выведет на экран:

3

-8

2. Программа Краба верно считает количество отрицательных чисел, но вместо произведения находит сумму отрицательных чисел. Сумма отрицательных чисел может быть равна их произведению только тогда, когда их количество в последовательности нечетно. Самый простой такой случай — в последовательности всего одно отрицательное число. Например, 1, 1, -1, 1.

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

 

Исправим на языке C++:

Ошибочная строка: \(comp=comp+x\);

Исправленная строка: \(comp=comp*x\);

 

Исправим на языке Python:

Ошибочная строка: \(comp=comp+x\)

Исправленная строка: \(comp=comp*x\)

 

Исправим на языке Pascal:

Ошибочная строка: \(comp:=comp+x\);

Исправленная строка: \(comp:=comp*x\);

 

Заметим, что при вычислении произведения, начальное значение переменной \(comp\) должно равняться 1. При \(comp=0\) произведение всегда будет равно 0.

 

Исправим на языке C++:

Ошибочная строка: \(int\;count=0,comp=0,x,i\);

Исправленная строка: \(int\;count=0,comp=1,x,i\);

 

Исправим на языке Python:

Ошибочная строка: \(comp=0\)

Исправленная строка: \(comp=1\)

 

Исправим на языке Pascal:

Ошибочная строка: \(comp:=0\);

Исправленная строка: \(comp:=1\);

 

Ответ: См. решение

Задание 5 #11442

Дядя Господин вводит с клавиатуры четыре неотрицательных числа (они могут повторяться). Крабоеда попросили написать про­грам­му, ко­то­рая вы­во­дит на экран ко­ли­че­ство четных чисел в введенной по­сле­до­ва­тель­но­сти и мак­си­маль­ное четное число. Если четных чисел нет, тре­бу­ет­ся на экран вы­ве­сти «NO». Из­вест­но, что вво­ди­мые числа не пре­вы­ша­ют 1000. Крабоед, конечно же, на­пи­сал про­грам­му не­пра­виль­но. Ниже эта про­грам­ма для Ва­ше­го удоб­ства при­ве­де­на на трех язы­ках про­грам­ми­ро­ва­ния.

\[\begin{array}{|l|l|l|} \hline \text{C++}&\text{Python}&\text{Pascal}\\ \hline \#include<iostream>&count=0&var\;count,\;mx,\; x,\; i: \; integer;\\ using \; namespace \; std;&mx=1000&begin\\ int \; main()\;\{&for \; i \; in \; range \; (1, \; 5):&\quad mx:=1000;\\ \quad int \; count=0, \; mx=1000, \; x, \; i;&\quad x=x(input())&\quad count:=0;\\ \quad for \; (i=1;\;i<=4;\;i++) \; \{ &\quad if \; x\%2==0:&\quad for\;i:=1\;to\;4\;do\\ \quad \quad cin >> x;&\quad \quad count=count+1&\quad begin\\ \quad \quad if \; (x\%2==0) \; \{&\quad \quad if\; x>mx:&\quad \quad readln(x);\\ \quad \quad \quad count++;&\quad \quad \quad mx=x&\quad \quad if\;(x\; mod\; 2 = 0)\; then \; begin\\ \quad \quad \quad if\;(x>mx) \; &if\;count==0:&\quad \quad \quad count:=count+1;\\ \quad \quad \quad \quad mx=x; \; \}&\quad print(\text{'NO'})&\quad \quad \quad if\;(x>mx)\;then\\ \quad \} &else:&\quad \quad \quad \quad mx:=x;\\ \quad if \; (count==0) &\quad print(count)&\quad \quad end;\\ \quad \quad cout<<\text{"NO"\ }; &\quad print(mx)&\quad end;\\ \quad else &&\quad if \; (count=0)\; then\\ \quad \quad cout<<count<<endl<<mx; &&\quad \quad write\text{('NO')}\\ \quad return \; 0; \; \} &&\quad else\\ &&\quad begin\\ &&\quad \quad writeln(count);\\ &&\quad \quad writeln(mx);\\ &&\quad end;\\ &&\quad end.\\ \hline \end{array}\]

Выполните следующие задания:

1. Напишите, что выведет эта программа при вводе последовательности 3, 1, 2, 4.

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

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

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

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

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

1. Подставим \(x=3\). Так как \(x\) — нечетное, подставляем \(x=1\), тоже нечетное число, следовательно, берем \(x=2\). Так как 2 — четное, увеличиваем \(count\), но не меняем значение \(mx\), поскольку \(2<1000\).

Подставим \(x=4\). Так как 4 — четное, увеличиваем \(count\), но не меняем значение \(mx\), поскольку \(4<1000\).

Значит, программа выведет на экран:

2

1000

2. Программа Крабоеда верно считает количество четных цифр, но неверно определяет максимум, исходя из кода он всегда равен 1000. Значит, можем привести любую последовательность, где содержится 1000. Например, 1 1 1 1000.

3. Единственная ошибка в программе — начальное значение максимума. Чтобы поиск максимума работал верно, необходимо, чтобы его начальное значение было минимальным, в нашем случае — -1, так как Дядя Господин вводит неотицательные числа.

 

Исправим на языке C++:

Ошибочная строка: \(int\;count=0,mx=1000,x,i\);

Исправленная строка: \(int\;count=0,mx=-1,x,i\);

 

Исправим на языке Python:

Ошибочная строка: \(mx=1000\)

Исправленная строка: \(mx=-1\)

 

Исправим на языке Pascal:

Ошибочная строка: \(mx:=1000\);

Исправленная строка: \(mx:=-1\);

 

Ответ: См. решение

Задание 6 #11445

Дядя Господин вводит с клавиатуры четыре неотрицательных числа (они могут повторяться). Крабоеда попросили написать про­грам­му, ко­то­рая вы­во­дит на экран ко­ли­че­ство чисел, последняя цифра которых 0 и их сумму. Если чисел, последняя цифра которых равна 0, не нашлось, тре­бу­ет­ся на экран вы­ве­сти «NO». Из­вест­но, что вво­ди­мые числа не пре­вы­ша­ют 100. Крабоед, конечно же, на­пи­сал про­грам­му не­пра­виль­но. Ниже эта про­грам­ма для Ва­ше­го удоб­ства при­ве­де­на на трех язы­ках про­грам­ми­ро­ва­ния.

\[\begin{array}{|l|l|l|} \hline \text{C++}&\text{Python}&\text{Pascal}\\ \hline \#include<iostream>&count=0&var\;count,\;sum,\; x,\; i: \; integer;\\ using \; namespace \; std;&sum=0&begin\\ int \; main()\;\{&for \; i \; in \; range \; (1, \; 5):&\quad count:=0;\\ \quad int \; count=0, \; sum=0, \; x, \; i;&\quad x=x(input())&\quad sum:=0;\\ \quad for \; (i=1;\;i<=4;\;i++) \; \{ &\quad if \; x/10>0:&\quad for\;i:=1\;to\;4\;do\\ \quad \quad cin >> x;&\quad \quad count=count+1&\quad begin\\ \quad \quad if \; (x/10>0) \; \{&\quad \quad sum=x&\quad \quad readln(x);\\ \quad \quad \quad count++;&if\;count==0:&\quad \quad if\;(x\;div\;10>0)\; then \; begin\\ \quad \quad \quad sum=x; \; \} &\quad print\text{('NO')}&\quad \quad \quad count:=count+1;\\ \quad \quad \}&else:&\quad \quad \quad sum:=x;\\ \quad if \; (count==0)&\quad print(count)&\quad \quad end;\\ \quad \quad cout<<\text{"NO"\ };&\quad print(sum)&\quad end;\\ \quad else&&\quad if \; (count=0)\; then\\ \quad \quad cout<<count<<endl<<sum;&&\quad \quad write\text{('NO')}\\ \quad return \; 0;&&\quad else\\ \quad \} &&\quad begin\\ &&\quad \quad writeln(count);\\ &&\quad \quad writeln(sum);\\ &&\quad end;\\ &&\quad end.\\ \hline \end{array}\]

Выполните следующие задания:

1. Напишите, что выведет эта программа при вводе последовательности 5, 11, 20, 1.

2. Приведите пример такой последовательности, содержащей хотя бы одно число, последняя цифра котрого равна 0, что, несмотря на ошибки, программа печатает правильный ответ.

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

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

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

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

1. Подставим \(x=5\). Так как при делении 5 нацело на 10, получается 0, подставляем следующий \(x=11\). При делении 11 нацело на 10, получается 1, программа зайдет в цикл. Увеличиваем значение \(count\) и меняем \(sum\), получаем \(count=1,sum=11\).

Подставим \(x=20\). При делении 20 нацело на 10, получается 2, программа заходит в цикл. Увеличиваем значение \(count\) и меняем \(sum\), получаем \(count=2,sum=20\).

Подставим \(x=1\). Так как при делении 1 нацело на 10, получается 0, программа выведет на экран:

2

20

2. Программа Крабоеда определяет количество элементов, значение которых не менее 10 и в качестве суммы выводит последнее такое число. Значит, необходимо привести такую последовательность, в которой единственный элемент, значение которого не менее 10, оканчивается 0. Например, 1 1 1 10.

3. Чтобы алгоритм верно определял числа, оканчивающиеся на 0, необходимо смотреть на остаток от деления на 10 и сравнивать его с 0.

 

Исправим на языке C++:

Ошибочная строка: if (\(x/10>0\)) {

Исправленная строка: if (\(x\%10==0\)) {

 

Исправим на языке Python:

Ошибочная строка: if \(x/10>0:\)

Исправленная строка: if \(x\%10==0:\)

 

Исправим на языке Pascal:

Ошибочная строка: if (\(x\;div\;10>0\)) then begin

Исправленная строка: if (\(x\;mod\;10=0\)) then begin

 

Для верного нахождения суммы необходимо не просто присваивать переменной \(sum\) значение \(x\), а добавлять его к уже имеющемуся значению \(sum\).

 

Исправим на языке C++:

Ошибочная строка: \(sum=x\);

Исправленная строка: \(sum=sum+x\);

 

Исправим на языке Python:

Ошибочная строка: \(sum=x\)

Исправленная строка: \(sum=sum+x\)

 

Исправим на языке Pascal:

Ошибочная строка: \(sum:=x;\)

Исправленная строка: \(sum:=sum+x;\)

 

Ответ: См. решение

Задание 7 #13012

На обработку поступает последовательность из четырех положительных целых чисел. Нужно написать программу, которая выводит на экран произведение минимального элемента последовательности и суммы нечетных чисел. Если нечетных чисел нет, требуется вывести на экран «NO». Известно, что вводимые числа по абсолютной величине не превышают 99. Марафонец замечтался о поступлении в топовый ВУЗ и написал программу с ошибками. Ниже эта программа для Вашего удобства приведена на трех языках программирования.

\[\begin{array}{|l|l|l|} \hline \text{C++}&\text{Python}&\text{Pascal}\\ \hline \#include<iostream>&min=100&var\;min,\;sum,\; x,\; i: \; integer;\\ using \; namespace \; std;&sum=0&begin\\ int \; main()\;\{&for \; i \; in \; range \; (1, \; 5):&\quad min:=100;\\ \quad int \; min=100, \; sum=0, \; x, \; i;&\quad x=x(input())&\quad sum:=0;\\ \quad for \; (i=1;\;i<=4;\;i++) \; \{ &\quad if \; x\%2==1:&\quad for\;i:=1\;to\;4\;do\\ \quad \quad cin >> x;&\quad \quad sum=sum+x&\quad begin\\ \quad \quad if \; (x\%2==1) &\quad if\;x>min:&\quad \quad readln(x);\\ \quad \quad \quad sum=sum+x; &\quad \quad min=x&\quad \quad if\;(x\; mod\; 2 = 1)\; then\\ \quad \quad if \; (x>min) \; &if\;sum==0:&\quad \quad \quad sum:=sum+x;\\ \quad \quad \quad min=x; \; \} &\quad print\text{('NO')}&\quad \quad if\;(x>min)\; then\\ \quad if \; (sum==0)&else:&\quad \quad \quad min:=x;\\ \quad \quad cout<<\text{"NO"\ };&\quad print(x)&\quad end; \\ \quad else&&\quad if \; (sum=0)\; then \\ \quad \quad cout<<x;&&\quad \quad writeln\text{('NO')} \\ \quad return \; 0;&&\quad else\\ \quad \} && \quad \quad writeln(x);\\ &&end.\\ \hline \end{array}\]

Выполните следующие задания:

1. Напишите, что выведет эта программа при вводе последовательности 25, 50, 2, 1.

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

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

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

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

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

1. Заметим, что несмотря на все вычисления, происходящие внутри программы, на экран выводится лишь последнее значение \(x\), в нашем случае — 1.

2. Так как программа Марафонца выводит на экран только последнее значение \(x\), нам необходимо сделать так, чтобы сумма нечетных чисел, умноженная на минимальный элемент последовательности совпадала с последним элементом и была меньше 99 (по условию числа не превышают 99 по абсолютному значению). Тогда подходящяя последовательность может иметь вид 3, 3, 2, 12. Сумма нечетных элементов — 6, минимальный элемент — 2, их произведение — 12, последний элемент также равен 12, значит, программа выведет верный ответ.

3. В первую очередь необходимо заметить, что в программе марафонца не работает поиск минимума, поскольку условие ищет элемент больший, чем \(min\).

 

Исправим на языке C++:

Ошибочная строка: \(if\;(x>min)\);

Исправленная строка: \(if\;(x<min)\);

 

Исправим на языке Python:

Ошибочная строка: \(if\;x>min\)

Исправленная строка: \(if\;x<min\)

 

Исправим на языке Pascal:

Ошибочная строка: \(if\;(x>min)\;then\);

Исправленная строка: \(if\;(x<min)\;then\);

 

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

 

Исправим на языке C++:

Ошибочная строка: \(cout<<x\);

Исправленная строка: \(cout<<min*sum\);

 

Исправим на языке Python:

Ошибочная строка: \(print(x)\)

Исправленная строка: \(print(min*sum)\)

 

Исправим на языке Pascal:

Ошибочная строка: \(writeln(x)\);

Исправленная строка: \(writeln(min*sum)\);

 

Ответ: См. решение