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

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

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

Неравенства и уравнения

Задание 1 #12683

Для заданного положительного вещественного числа \(A\) необходимо найти минимальное целове число \(K\), при котором выполняется неравество \(1+\cfrac{1}{2}+\cfrac{1}{3}+...+\cfrac{1}{K} \geq A\). Для решения этой задачи марафонец написал такую программу.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline a=float(input())&\#include \; <iostream>&var\;a,s:\;real;\\ k=0&using\;namespace\;std;&\quad k: \; integer;\\ s=1&int\;main()\; \{& begin\\ while \; s>=a:&\quad double \; a, s;&\quad read(a);\\ \quad k=k+1&\quad int \; k;&\quad k:=0;\\ \quad s=s+1.0/k&\quad cin>>a;&\quad s:=1;\\ print \; (k)&\quad k=0;&\quad while \; s>=a \; do\; begin\\ &\quad s=1;&\quad \quad k:=k+1;\\ & \quad while \; (s>=a) \; \{ & \quad \quad s:=s+1.0/k;\\ & \quad\quad k++;&\quad end;\\ & \quad\quad s=s+1.0/k; &\quad write(k);\\ & \quad \} & end.\\ & \quad cout<<k<<endl;&\\ & \quad return \; 0;&\\ & \}&\\ \hline \end{array}\]

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

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

2. Сколько существует натуральных чисел \(a\), при вводе которых программа выведет ответ 1?

3. Найдите в программе все ошибки (их может быть одна или несколько).

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

1. При вводе числа 1.5 программы выведет 0, так как не будет выполняться \(s>=a\).

2. Ответ: 0. В данной программе при вводе \(a>1\), программа не запускает цикл, а при \(a\leq1\) происходит зацикливание.

3. Приведем решение задания на языке С++:

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

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

 

Ошибочная строка: \(while \; (s>=a)\) {

Исправленная строка: \(while \; (s<a)\) {

 

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

Задание 2 #12684

Для заданного положительного вещественного числа \(A\) необходимо найти минимальное целове число \(K\), при котором выполняется неравество \(1+\cfrac{1}{2}+\cfrac{1}{3}+...+\cfrac{1}{K} > A\). Для решения этой задачи марафонец написал такую программу.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline a=float(input())&\#include \; <iostream>&var\;a,s:\;real;\\ k=1&using\;namespace\;std;&\quad k: \; integer;\\ s=0&int\;main()\; \{& begin\\ while \; s>a:&\quad double \; a, s;&\quad read(a);\\ \quad k=k+1&\quad int \; k;&\quad k:=1;\\ \quad s=s+1.0/k&\quad cin>>a;&\quad s:=0;\\ print \; (k)&\quad k=1;&\quad while \; s>a \; do\; begin\\ &\quad s=0;&\quad \quad k:=k+1;\\ & \quad while \; (s>a) \; \{ & \quad \quad s:=s+1.0/k;\\ & \quad\quad k++;&\quad end;\\ & \quad\quad s=s+1.0/k; &\quad write(k);\\ & \quad \} & end.\\ & \quad cout<<k<<endl;&\\ & \quad return \; 0;&\\ & \}&\\ \hline \end{array}\]

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

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

2. Сколько существует натуральных чисел \(a\), при вводе которых программа выведет ответ 3?

3. Найдите в программе все ошибки (их может быть одна или несколько).

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

1. При вводе числа 2.1 программы выведет 0, так как не будет выполняться \(s>a\).

2. Ответ: 0. В данной программе при вводе любого значения \(a\) программа не запускает цикл.

3. Приведем решение задания на языке С++:

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

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

 

Ошибочная строка: \(while \; (s>a)\) {

Исправленная строка: \(while \; (s<=a)\) {

 

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

Задание 3 #12685

Дано целое положительное число \(N\). Необходимо определить наименьшее целое число \(K\), для которого выполняется неравенство:

\[1+2+...+K>N\]

Для решения этой задачи марафонец написал программу, но, к сожалению, его программа неправильная.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline n=int(input())&\#include\;<iostream>&var \; n,k:integer;\\ k=1&using\;namespace\;std;&begin\\ whilne\; n>0:&int\;main()\; \{&\quad read(n);\\ \quad n=n-k&\quad int \; n,k;&\quad k:=1;\\ \quad k=k+1&\quad cin>>n;&\quad while \; n>0 \; do\;begin\\ print(k)&\quad k=1;&\quad\quad n:=n-k;\\ &\quad while (n>0) \; \{ &\quad\quad k:=k+1;\\ & \quad \quad n=n-k;&\quad end;\\ &\quad \quad k=k+1; &\quad writeln(k);\\ & \quad \} &end.\\ & \quad cout<<k<<endl; &\\ & \quad return \; 0; &\\ & \} &\\ \hline \end{array}\]

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

1. Приведите пример числа \(N\), при вводе которого программа выведет неверный ответ. Укажите верный ответ и ответ, который выведет программа.

2. Приведите пример числа \(N\), при вводе которого программа выведет верный ответ. Укажите этот ответ.

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

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

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

1. Приведем примеры \(N\) и ответы, которые выводит и должна выводить программа:

\(N=2\)

Ответ программы: 3

Верный ответ: 2

 

\(N=4\)

Ответ программы: 4

Верный ответ: 3

 

\(N=5\)

Ответ программы: 4

Верный ответ: 3

 

2. Приведем примеры \(N\) и верные ответы, которые выводит программа:

\(N=1\)

Ответ: 2

 

\(N=3\)

Ответ: 3

 

\(N=6\)

Ответ: 4

 

3. Приведем решение задания на языке С++:

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

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

 

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

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

 

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

Задание 4 #12686

Требовалось написать программу, которая решает уравнение \(a\cdot|x| = b\) относительно \(х\) для любых чисел \(а\) и \(b\), введенных с клавиатуры. Все числа считаются действительными. Марафонец торопился из-за дедлайна и написал программу неправильно.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline a=float(input())&\#include\;<iostream>&var\;a,b,x:real;\\ b=float(input())&using\;namespace\;std;&begin\\ x=float(input())&int\;main()\;\{&\quad readln(a,b,x);\\ if\;a==0:&\quad float \; a,b,x;&\\ \quad if\;b==0:&\quad cin>>a>>b>>x;&\quad if \; a=0\; then\\ \quad\quad print\;('\text{Любое число}')&\quad if(a==0) \{&\quad\quad if\;b=0\;then\\ \quad else:&\quad\quad if (b==0)&\quad\quad\quad write('\text{Любое число}')\\ \quad\quad print('\text{Нет решений}')&\quad\quad\quad cout<<\text{"Любое число``};&\quad\quad else\\ else:&\quad\quad else&\quad\quad\quad write('\text{Нет решений}')\\ \quad if\;b==0:&\quad\quad\quad cout<<\text{"Нет решений``}; \; \}&\quad else\\ \quad\quad print('x=0')&\quad else&\quad\quad if\;b=0\;then\\ \quad else:&\quad\quad if(b==0)&\quad\quad\quad write('x=0')\\ \quad\quad print('x=',b/a,'\text{или }x=',-b/a)&\quad\quad\quad cout<<"x=0``;& \quad\quad else\\ &\quad\quad else&\quad\quad\quad write('x=',b/a,'\text{или }x=',-b/a);\\ &\quad\quad\quad \{ \; cout<<"x1=``<<b/a;&end.\\ &\quad\quad\quad cout<<"x2=``<<-b/a; \; \} &\\ &\}&\\ \hline \end{array}\]

1) Приведите пример таких чисел \(a, b, x\) при которых программа неверно решает поставленную задачу.

2) Найдите ошибку в коде программы (в данном задании она единственная).

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

Примечание. Требуется либо описать словами недостающее действие в программе, либо привести доработанный фрагмент программы.

1. \(a = 1, b = -1, x = 0\).

Значение \(x\) может быть не указано. Значения \(а\) и \(b\) могут быть любыми ненулевыми числами с разными знаками. Ошибка марафонца состоит в том, что программа работает неправильно при любых ненулевых \(a\) и \(b\), имеющих разные знаки.

2. Приведем решение задания на языке С++:

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

Исправленная строка: \(cin>>a>>b;\)

3. Если \(a\neq0\) в программе необходимо добавить проверку \(b/a>0\). Если условие выполняется, то сразу выводим ответ, если нет — проверяем, равно ли \(b\) нулю, если да, то \(x=0\), если нет — уравнение не имеет решений.

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

Задание 5 #12687

Марафонец написал программу, определяющую, какой степенью числа 5 является введенное. Например, для 25 это 2, так как \(5^2 = 25\). Если же такой степени нет, то необходимо вывести сообщение “Не существует”. К сожалению, марафонец написал программу неверно.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline n=int(input())&\#include\;<iostream>&var\;n,k:integer;\\ k=0&using\;namespace\;std;&begin\\ while\;k\%5==0:&int\;main()\; \{&\quad read(n);\\ \quad n=n//5&\quad int\;n,k;&\quad k:=0;\\ \quad k=k+1&\quad cin>>n;&\quad while \; k\;mod\;5=0\;do\;begin\\ if\;k<=5:&\quad k=0;&\quad\quad n:=n\;div\;5;\\ \quad print(k)&\quad while(k\%5==0) \; \{&\quad\quad k:=k+1;\\ else:&\quad\quad n=n/5;&\quad end;\\ \quad print("\text{Не существует}``)&\quad\quad k=k+1;&\quad if\;k<=5\;then\\ &\quad \}&\quad\quad writeln(k)\\ &\quad if(k<=5)&\quad else\\ &\quad \quad cout<<k<<endl;&\quad\quad writeln('\text{Не существует}')\\ &\quad else&end.\\ &\quad \quad cout<<"\text{Не существует}``;&\\ &\quad return\;0;&\\ &\}&\\ \hline \end{array}\]

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

1. Что выдаст программа при вводе числа 125?

2. При вводе какого числа программа выдаст верный ответ? Укажите этот ответ.

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

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

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

1. Так как после первой итерации цикла \(k\) станет не кратно 5, программа выведет 1.

2. Так как при любом \(n\), кратном 5, программа выводит 1, правильный ответ будет при \(n=5\).

3. Приведем пример решения на языке С++:

Ошибочная строка: \(while(k\%5==0)\; \{\)

Исправленная строка: \(while(n\%5==0)\; \{\)

 

Ошибочная строка: \(if(k<=5)\)

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

 

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

Задание 6 #12688

Марафонец написал программу, определяющую, какой степенью числа 6 является введенное. Например, для 36 это 2, так как \(6^2 = 36\). Если же такой степени нет, то необходимо вывести сообщение “Не существует”. К сожалению, марафонец написал программу неверно.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline n=int(input())&\#include\;<iostream>&var\;n,k:integer;\\ k=0&using\;namespace\;std;&begin\\ while\;k\%6==0:&int\;main()\; \{&\quad read(n);\\ \quad n=n//6&\quad int\;n,k;&\quad k:=0;\\ \quad k=k+1&\quad cin>>n;&\quad while \; k\;mod\;6=0\;do\;begin\\ if\;k<=6:&\quad k=0;&\quad\quad n:=n\;div\;6;\\ \quad print(k)&\quad while(k\%6==0) \; \{&\quad\quad k:=k+1;\\ else:&\quad\quad n=n/6;&\quad end;\\ \quad print("\text{Не существует}``)&\quad\quad k=k+1;&\quad if\;k<=6\;then\\ &\quad \}&\quad\quad writeln(k)\\ &\quad if(k<=6)&\quad else\\ &\quad \quad cout<<k<<endl;&\quad\quad writeln('\text{Не существует}')\\ &\quad else&end.\\ &\quad \quad cout<<"\text{Не существует}``;&\\ &\quad return\;0;&\\ &\}&\\ \hline \end{array}\]

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

1. Что выдаст программа при вводе числа 216?

2. При вводе какого числа программа выдаст верный ответ? Укажите этот ответ.

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

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

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

1. Так как после первой итерации цикла \(k\) станет не кратно 6, программа выведет 1.

2. Так как при любом \(n\), кратном 6, программа выводит 1, правильный ответ будет при \(n=6\).

3. Приведем пример решения на языке С++:

Ошибочная строка: \(while(k\%6==0)\; \{\)

Исправленная строка: \(while(n\%6==0)\; \{\)

 

Ошибочная строка: \(if(k<=6)\)

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

 

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

Задание 7 #12689

Марафонец написал программу, определяющую, какой степенью числа 6 является введенное. Например, для 49 это 2, так как \(7^2 = 49\). Если же такой степени нет, то необходимо вывести сообщение “Не существует”. К сожалению, марафонец написал программу неверно.

\[\begin{array}{|l|l|l|} \hline Python&C++&Pascal\\ \hline n=int(input())&\#include\;<iostream>&var\;n,k:integer;\\ k=0&using\;namespace\;std;&begin\\ while\;k\%7==0:&int\;main()\; \{&\quad read(n);\\ \quad n=n//7&\quad int\;n,k;&\quad k:=0;\\ \quad k=k+1&\quad cin>>n;&\quad while \; k\;mod\;7=0\;do\;begin\\ if\;k<=7:&\quad k=0;&\quad\quad n:=n\;div\;7;\\ \quad print(k)&\quad while(k\%7==0) \; \{&\quad\quad k:=k+1;\\ else:&\quad\quad n=n/7;&\quad end;\\ \quad print("\text{Не существует}``)&\quad\quad k=k+1;&\quad if\;k<=7\;then\\ &\quad \}&\quad\quad writeln(k)\\ &\quad if(k<=7)&\quad else\\ &\quad \quad cout<<k<<endl;&\quad\quad writeln('\text{Не существует}')\\ &\quad else&end.\\ &\quad \quad cout<<"\text{Не существует}``;&\\ &\quad return\;0;&\\ &\}&\\ \hline \end{array}\]

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

1. Что выдаст программа при вводе числа 343?

2. При вводе какого числа программа выдаст верный ответ? Укажите этот ответ.

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

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

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

1. Так как после первой итерации цикла \(k\) станет не кратно 7, программа выведет 1.

2. Так как при любом \(n\), кратном 7, программа выводит 1, правильный ответ будет при \(n=7\).

3. Приведем пример решения на языке С++:

Ошибочная строка: \(while(k\%7==0)\; \{\)

Исправленная строка: \(while(n\%7==0)\; \{\)

 

Ошибочная строка: \(if(k<=7)\)

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

 

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