Найдите ошибку в программе
Для того, чтобы найти ошибку, нужно поставить в соответствие друг другу все части условного оператора if и else.
Помним, что часть else относится к ближайшему if. При этом наличие части else не обязательно.
Кроме того, часто присутствует ошибка при вводе или выводе. Обязательно нужно проверить, та ли информация выводится на экран.
Особого внимания требует инициализация переменных.
Формат книги не позволяет рассмотреть все основные типы задач 2 части, рассмотрим лишь те, которые встречались на проверочных и экзаменационных работах последних двух лет.
На обработку поступает положительное целое число, не превышающее 10 9 . Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Бейсик
Python
INPUT N
WHILE N > 0
DIGIT = N MOD 10
END IF
WEND
Паскаль
Алгоритмический язык
begin
readln(N);
while N > 0 do
begin
digit := N mod 10;
N := N div 10;
end;
writeln(digit)
нач
цел N, digit, sum
ввод N
нц пока N > 0
все
кц
вывод digit
Си
int main()
int N, digit, sum;
while (N > 0)
if (digit < 7)
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение использует запись программы на Паскале. Допускается использование программы на любом из четырёх других языков.
1. Программа выведет число 4.
2. Пример числа, при вводе которого программа выдаёт верный ответ: 835.
Программа работает неправильно из-за неверной выводимой на экран переменной и неверного увеличения суммы. Соответственно, программа будет работать верно, если в числе старшая цифра (крайняя левая) равна сумме цифр, меньших 7.
3. В программе есть две ошибки.
Первая ошибка. Неверное увеличение суммы.
Строка с ошибкой:
sum := sum + digit;
Вторая ошибка. Неверный вывод ответа на экран.
Строка с ошибкой:
Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство
(при K = 0 сумма считается равной 0).
Для решения этой задачи ученик написал такую программу.
Бейсик
Python
DIM K AS INTEGER
INPUT A
WHILE S < A
WEND
PRINT K
Алгоритмический язык
Паскаль
нач
вещ a, s
цел k
ввод a
нц пока s
кц
вывод k
k: integer;
begin
read(a);
end;
write(k);
Си
int main()
double a, s;
int k;
return 0;
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.2.
2. Приведите пример числа, при вводе которого программа даст верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только исправлять ошибочные строки; удалять строки или добавлять новые строки нельзя. Постарайтесь также не внести новые ошибки – за это оценка снижается.
Решение использует запись программы на Паскале. Допускается использование программы на других языках.
1. При вводе числа 1.2 программа выведет число 2.
2. Примеры чисел, при вводе которых программа выводит верный ответ: 1.6, 2.05.
Программа содержит две ошибки, одна из которых приводит к увеличению ответа, другая – к уменьшению.
В некоторых случаях эти ошибки компенсируют друг друга, и ответ оказывается правильным. Это происходит, если значение A попадает в один из следующих диапазонов: 1.5 < A < 1.83, 2 < A < 2.08.
3. Программа содержит две ошибки.
1) Неверная инициализация. Начальное значение S должно быть равно нулю.
В приведённом варианте вычисленная сумма оказывается на 1 больше правильного значения.
Строка с ошибкой:
2) Неверное определение ответа. Приведённая программа находит не максимальное K, при котором выполняется неравенство, а минимальное, при котором оно не выполняется, то есть увеличивает верное значение на 1.
Кроме того, использованный порядок действий в цикле (увеличение K после увеличения S) приводит к увеличению ещё на 1. Это можно было бы исправить, изменив порядок действий в цикле и уменьшив K после завершения цикла, но эти действия не разрешены по условию задачи.
Поэтому для исправления ошибки можно просто скорректировать значение при выводе.
Учебник по Информатике 8 класс Босова
of your page -->
Задание 2. Дана последовательность операторов. Сколько раз будет повторен цикл и какими будут значения переменных a, b, s?
Ответ: 2 раза будет повторен цикл, a=3, b=6, s=9.
Задание 3. Требовалось написать программу вычисления факториала. Программист написал его неправильно. Ниже представлена программа, в которой содержатся ошибки. Найдите ошибки и внесите исправления.
Задание 4. Проанализируйте следующий цикл. В чём его особенность?
Значение переменной "c" будет типом boolean, то есть значение будет true или false. Выражение c:=a=b проверяет равенство "a" и "b" и будет делать проверку, пока a
Задание 5. Запишите на языке Паскаль программы решения задач № 26-30 из параграфа 2.4. Используйте оператор while.
Задание 6. Дана последовательность операторов. Сколько раз будет повторен цикл и какими будут значения переменных a, b, s?
Ответ: 4 раза будет повторен цикл, a=5, b=16, s=21.
Задание 7. Напишите программу, в которой осуществляется ввод целых чисел (ввод осуществляется до тех пор, пока не будет введен ноль) и подсчет суммы и среднего арифметического введенных положительных чисел. Используйте оператор repeat.
Задание 8. Напишите программу, в которой осуществляется ввод целых чисел (ввод осуществляется до тех пор, пока не будет введен ноль) и определение максимального (наибольшего) из введённых чисел. Используйте оператор repeat.
Задание 9. Напишите программы вычисления наибольшего общего делителя НОД двух целых чисел:
Задание 10. Сколько раз будет выполнен цикл?
а) for i:=0 to 15 do s:=s+1;
б) for i:=10 to 15 do s:=s+1;
в) for i:=-l to 1 do s:=s+1;
г) for i:=10 to 10 do s:=s+1;
д) k:=5; for i:=k-1 to k+1 do s:=s+1;
Задание 11. Напишите программу, которая 10 раз выводит на экран ваши имя и фамилию.
Задание 12. Напишите программу, выводящую на экран изображение шахматной доски, где черные клетки изображаются звёздочками, а белые – пробелами.
Задание 13. Напишите программу, которая вычисляет сумму:
а) первых n натуральных чисел;
б) квадратов первых n натуральных чисел;
в) всех чётных чисел в диапазоне от 1 до n;
г) всех двузначных чисел.
Задание 14. Напишите программу, которая генерирует 10 случайных чисел в диапазоне от 1 до 20, выводит эти числа на экран и вычисляет их среднее арифметическое.
Задание 15. Запишите на языке Паскаль программы решения задач 33 и 34 из параграфа 2.4. Используйте оператор for.
В программе мы вводим изначальную численность населения. Далее она считает количество населения в каждый год и итогом будет количество населения через три года.
Задание 16. Напишите программу, которая выводит на экран таблицу степеней двойки (от нулевой до десятой).
Десятую степень не добавили в цикл, она отрабатывает после цикла и выводит эту степень ровно по вертикали.
Задание 17. Напишите программу, которая выводит на экран таблицу умножения на n (n – целое число от 2 до 10, вводимое с клавиатуры).
Задание 18. Какой из трёх рассмотренных операторов цикла является, по вашему мнению, основным, т.е. таким, что им можно заменить два других?
Рассмотренные операторы:
repeat until
while do
for 1 to n do
Я думаю, что циклы "repeat until" и "while do" могут заменить другие циклы. Цикл "for" не сможет заменить других, так как в этом цикле происходит известное количество повторений. А в двух других разница в том, что цикл "repeat until" сначала выполняется тело цикла и потом проверяется условие, а с циклом "while do" наоборот.
Решение заданий из учебника Информатика 8 класс Босова, параграф 3.5 Программирование циклических алгоритмов. Программирование циклов с заданным условием продолжения работы, с заданным условием окончания работы, с фиксированным числом повторений, различные варианты программирования циклического алгоритма.
Задания Д24 C1 № 15640
На вход программы поступают 4 неотрицательных целых числа, не превышающие 1000, среди которых могут быть одинаковые. Нужно написать программу, которая выводит количество чисел, не кратных 3, и максимальное из этих чисел. Если среди входных данных нет чисел, не кратных трёх, программа должна вывести слово «NO». Программист написал программу неправильно.
IF X MOD 3 <> 0 THEN
COUNT = COUNT + 1
IF X > MAXIMUM THEN
for i in range(4):
count = count + 1
var i, x: integer;
var maximum, count: integer;
for i:=1 to 4 do begin
if x mod 3 <> 0 then begin
count := count + 1;
if x > maximum then
if count > 0 then begin
цел maximum, count
нц для i от 1 до 4
если mod(x, 3) <> 0 то
count := count + 1
если x > maximum то
если count > 0 то
using namespace std;
int i, x, maximum;
count = count + 1;
if ( x > maximum ) maximum = i;
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел 7 15 8 21.
2. Приведите пример такой последовательности, содержащей число, кратное 3, при вводе которой программа выведет правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
1. При вводе числа 7 15 8 21 программа сначала выведет 2, затем 1000.
2. Примеры чисел, при вводе которых программа выводит корректный ответ: 2 3 4 1000.
Комментарий для экспертов. Программа выводит сначала количество чисел, некратных 3, затем выводит 1000. Либо корректно работает при отсутствии в ряду таких чисел.
Пример исправления для языка Паскаль:
Первая ошибка:
Вторая ошибка:
Пояснение для эксперта.
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления
В задаче требуется выполнить три действия.
1. Указать результат программы при данном вводе.
Это действие считается выполненным, если указан верный результат работы программы при заданных входных данных. Экзаменуемый не обязан объяснять, как получен этот результат, достаточно указать верное число.
2. Указать пример ввода, при котором программа выводит верный ответ.
Это действие считается выполненным, если верно указаны обе ошибки и предложены верные варианты исправления, при этом никакие верные строки программы не указаны в качестве неверных. В исправленной строке допускаются незначительные синтаксические ошибки (лишние или пропущенные знаки препинания, неточные написания служебных слов языка). Ошибка считается исправленной, если выполнены оба следующих условия:
а) правильно указана строка с ошибкой;
б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа
-->
Задания Д24 C1 № 5372
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 10 9 , и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
using namespace std;
cout « sum « endl;
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 938.
2. Укажите одно число для которого эта программа будет работать верно.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
1. Программа выведет число 4.
2. Программа работает верно для любого числа, начинающегося с 1, в том числе для 1.
(Достаточно указать любое такое число).
3. В качестве ответа для остальных чисел программа выдаёт число на 1 большее, чем нужно. Возможные варианты исправления для языка Паскаль:
1) исправление условия продолжения цикла на while (N > 9) do
2) исправление инициализации на sum := 0;, а условие цикла на while (N >= 1) do или while (N > 0) do. При этом замена на while (N >= 0) do корректной не является
3) исправление условия продолжения цикла на while (N >= 1) do или while (N > 0) do и вывод значения sum − 1.
Указания по оцениванию.
Обратите внимание! В задаче требовалось выполнить три действия. Баллы за данное задание начисляются как сумма баллов за верное выполнение каждого действия.
1. Верно указано, что именно выведет программа при указанных в условии входных данных.
2. Указано число, при котором программа работает верно.
3. Указаны все строки (одна или более), в которые нужно внести исправления, и эти исправлению внесены; при этом получена верно работающая программа.
При выполнении действия 3 верное указание на ошибку при неверном её исправлении не засчитывается.
Обратите внимание! Выбор ошибочных строк может быть выполнен не единственным способом.
В работе (во фрагментах программ) допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора решения.
Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.
Рабочие листы и материалы для учителей и воспитателей
Более 2 500 дидактических материалов для школьного и домашнего обучения
Столичный центр образовательных технологий г. Москва
Получите квалификацию учитель математики за 2 месяца
от 3 170 руб. 1900 руб.
Количество часов 300 ч. / 600 ч.
Успеть записаться со скидкой
Форма обучения дистанционная
- Онлайн
формат - Диплом
гособразца - Помощь в трудоустройстве
Видеолекции для
профессионалов
- Свидетельства для портфолио
- Вечный доступ за 120 рублей
- 311 видеолекции для каждого
Выберите документ из архива для просмотра:
Выбранный для просмотра документ inf_ege_c1.pptx
«Как закрыть гештальт: практики и упражнения»
Свидетельство и скидка на обучение каждому участнику
Описание презентации по отдельным слайдам:
Задача№1. Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно. ПРОГРАММАНА ПАСКАЛЕ ПРОГРАММА НА БЕЙСИКЕ ПРОГРАММА НА СИ var x,y: real;begin readln(x,y); if y=x*x─2 then write('принадлежит') else write('не принадлежит') end. INPUT x, yIF y=x*x-2 THEN PRINT "принадлежит" ELSE PRINT "не принадлежит" ENDIF ENDIF ENDIF END void main(void)=x*x-2) printf("принадлежит"); else printf("не принадлежит"); > ПРОГРАММАНА ПАСКАЛЕ var x,y: real;begin readln(x,y); if y=x*x─2 then write('принадлежит') else write('не принадлежит') end.
Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G и H). Точки, лежащие на границах областей, отдельно не рассматривать. В столбцах условий укажите "да", если условие выполнится, "нет", если условие не выполнится, "—" (прочерк), если условие не будет проверяться, "не изв.", если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите "не изв". В последнем столбце укажите "да" или "нет". Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.) Последовательно выполните следующее:
Элементы ответа: Показать график Область Условие 1 (y<=x) Условие 2 (y<=-x) Условие 3 (y>=x*x-2) Программа выведет Область обрабатываетсяверно A нет — — — нет В нет — — — нет С нет — — — нет D да да да принадлежит да Е да нет — — нет F да нет — — нет G да да нет не принадлежит да
Задача №2. Требовалось написать программу, которая решает уравнение «a |x| = 6» относительно х для любых чисел а и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно. Последовательно выполните три задания: Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу. Укажите, какая часть программы является лишней. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). ПРОГРАММА НА ПАСКАЛЕ vara,b,x:real;begin readln(a,b,x); if a = 0 then if b = 0 then write ('любоечисло') else write ('нетрешений') else if b = 0 then write('x = 0') else write('x =',b/a,'илиx =',-b/a); end.
Пояснение a = 1, b = −1, x = 0. Значение x может быть не указано. Значения а и b могут быть любыми ненулевыми числами с разными знаками. Ошибка программиста состоит в том, что программа работает неправильно при любых ненулевых а и Ь, имеющих разные знаки. Лишняя часть: не нужно вводить х с клавиатуры; верно: readln(a, Ь). Возможная доработка: readln(а, b); if а = 0 then if b = 0 then write('любое число') else write('нет решений') else if b/а > 0 then write('х =', Ь/а, ' или х =', -Ь/а) else if b = 0 then write('х =0') else write('нет решений');
Задача№3 Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Ученик написал такую программу: ПАСКАЛЬ var x, y: real; beginreadln(x,у); ifу >= 1-хthen begin ifу =x*x-5 then write('принадлежит') else write('не принадлежит') end.
При проверке работы программа выполнялась по шагам для некоторых контрольных значений х и у, при этом был заполнен протокол тестирования. В результате неаккуратного обращения протокол был испорчен, частично сохранились только четыре строки: Последовательно выполните следующее. Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе «Область» любую из этих областей. 2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. Область Условие1 (у >=x+1) Условие 2 (y <=2−2*x*x) Условие 3 (y >= x*x−5) Вывод Верно — принадлежит нет не принадлежит да — да
Пояснение 2. Для написания правильной программы необходимо разделить требуемую область на части и описать каждую из них. Например, можно выделить области FGLM, HN и QR. При этом получается такой фрагмент программы (пример на Паскале): if (y<=1-x) and (y>=x*x-5) and (x*y<=0) or (y<=2-2*x*x) and (y>=0) then write('принадлежит') else write('не принадлежит') 1. График Область Условие1 (у >=x+1) Условие 2 (y <=2−2*x*x) Условие 3 (y >= x*x−5) Вывод Верно BCDNP да нет — — нет KDL нет — да принадлежит нет AHQR нет — нет не принадлежит да G да да — принадлежит да
Задача№4 Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе числа 584. 3. Укажите одно число для которого эта программа будет работать верно. 2. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Программа выведет число 2. Программа работает верно для всех чисел, начинающихся на 9. в том числе для числа 9. [Достаточно указать любое такое число.] В качестве ответа для остальных чисел программа выдаёт число на 1 меньшее, чем нужно. Возможные (не все) варианты исправления для языка Паскаль: 1) исправление условия продолжения цикла на while (N >= 1) do или while (N > 0) do. При этом замена на while (N >= 0) do корректной не является. 2) исправление инициализации на sum := 1, а условие продолжения цикла на while (N > 9) do или while (N >= 10) do. Пояснение
Краткое описание документа:
В данной презентации рассмотрены варианты решений задач типа С1 по информатике. Показана их условная класификация. Приведены воможные ошибки при поиске ответа. Тезисы Часть С состоит из четырех заданий. Для выполнения заданий этой части необходимо написать развернутый ответ в произвольной форме. Задание С1 относится к повышенному уровню сложности. Задания этого типа проверяют знание программирования с использованием условного оператора и различных его разновидностей, они требуют от учащихся внимания («найти лишнюю часть», «добавить недостающую часть»), простейших знаний языков программирования и логических функций.
Читайте также: