Выбранный для просмотра документ inf_ege_c1.pptx
Скачать материал "Решение С1 по информатике - поиск ошибок в программе со сложным условием"
Рабочие листы
к вашим урокам
Скачать
1 слайд
Вернуться
2 слайд
в программе осуществлен ввод лишних данных; ошибка в операторе условия (> вместо <, + вместо -) или в условии выхода из области; несоответствие количества «скобок» в условии (while и if, ошибка до или после else); возможно строки в программе поменяны местами (или строка удалена) ВОЗМОЖНЫЕ ВАРИАНТЫ ОШИБОК:
3 слайд
входные данные – числовые выражения и задание содержит три вопроса: определить при каких входных данных программа работает неверно (вопрос для всех классов заданий С1); определить лишнюю часть представленной программы; исправить предложенную программу. входные данные – числовые выражения, но вопросов два (т.е. в исходной части программы две ошибки); входные данные – числовые, вопросов два, оба касаются исправления программы, но второй вопрос сформулирован довольно жёстко (требует не содержать логических функций и т.д.) входные данные – строковые переменные, а в остальном соответствует первому классу заданий С1. Классификация заданий С1
4 слайд
Задача№1. Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно. ПРОГРАММАНА ПАСКАЛЕ ПРОГРАММА НА БЕЙСИКЕ ПРОГРАММА НА СИ var x,y: real;begin readln(x,y); if y<=x then if y<=─x then if y>=x*x─2 then write('принадлежит') else write('не принадлежит') end. INPUT x, yIF y<=x THEN IF y<=-x THEN IF y>=x*x-2 THEN PRINT "принадлежит" ELSE PRINT "не принадлежит" ENDIF ENDIF ENDIF END void main(void){float x,y; scanf("%f %f",&x,&y); if (y<=x) if (y<=-x) if (y>=x*x-2) printf("принадлежит"); else printf("не принадлежит"); } ПРОГРАММАНА ПАСКАЛЕ var x,y: real;begin readln(x,y); if y<=x then if y<=─x then if y>=x*x─2 then write('принадлежит') else write('не принадлежит') end.
5 слайд
Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G и H). Точки, лежащие на границах областей, отдельно не рассматривать. В столбцах условий укажите "да", если условие выполнится, "нет", если условие не выполнится, "—" (прочерк), если условие не будет проверяться, "не изв.", если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите "не изв". В последнем столбце укажите "да" или "нет". Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.) Последовательно выполните следующее:
6 слайд
Элементы ответа: Показать график Область Условие 1 (y<=x) Условие 2 (y<=-x) Условие 3 (y>=x*x-2) Программа выведет Область обрабатываетсяверно A нет — — — нет В нет — — — нет С нет — — — нет D да да да принадлежит да Е да нет — — нет F да нет — — нет G да да нет не принадлежит да
7 слайд
Возможная доработка (Паскаль, разбиение области на две части прямой x = 0): if ((y>=x*x─2) and (y<=x) and (x>=0)) or ((x<=0) and (y<=-x)) then write('принадлежит') else write('не принадлежит') Вариантов доработки может быть достаточно много, но обычно правильное описание заштрихованных областей в них представляет собой или объединение двух (или более) возможно пересекающихся областей, или исключение одной области из другой. При разделении области вдоль какой-либо линии точки, которые лежат на этой линии внутри области, могут быть причислены к одной части, к другой или к обеим (то есть, например, в приведенном решении на языке Паскаль одно из условий (x >= 0) или (x <= 0) может быть строгим).
8 слайд
Задача №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.
9 слайд
Пояснение 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('нет решений');
10 слайд
Задача№3 Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y — действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Ученик написал такую программу: ПАСКАЛЬ var x, y: real; beginreadln(x,у); ifу >= 1-хthen begin ifу <= 2-2*x*x then write(1принадлежит') end else ifу >=x*x-5 then write('принадлежит') else write('не принадлежит') end.
11 слайд
При проверке работы программа выполнялась по шагам для некоторых контрольных значений х и у, при этом был заполнен протокол тестирования. В результате неаккуратного обращения протокол был испорчен, частично сохранились только четыре строки: Последовательно выполните следующее. Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе «Область» любую из этих областей. 2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. Область Условие1 (у >=x+1) Условие 2 (y <=2−2*x*x) Условие 3 (y >= x*x−5) Вывод Верно — принадлежит нет не принадлежит да — да
12 слайд
Пояснение 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 да да — принадлежит да
13 слайд
Задача№4 Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе числа 584. 3. Укажите одно число для которого эта программа будет работать верно. 2. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
14 слайд
Программа выведет число 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. Пояснение
15 слайд
16 слайд
Рабочие листы
к вашим урокам
Скачать
Рабочие листы
к вашим урокам
Скачать
В данной презентации рассмотрены варианты решений задач типа С1 по информатике. Показана их условная класификация. Приведены воможные ошибки при поиске ответа. Тезисы Часть С состоит из четырех заданий. Для выполнения заданий этой части необходимо написать развернутый ответ в произвольной форме. Задание С1 относится к повышенному уровню сложности. Задания этого типа проверяют знание программирования с использованием условного оператора и различных его разновидностей, они требуют от учащихся внимания («найти лишнюю часть», «добавить недостающую часть»), простейших знаний языков программирования и логических функций.
6 664 139 материалов в базе
Настоящий материал опубликован пользователем Мухаметгалиев Равиль Рафаильевич. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалВаша скидка на курсы
40%Курс профессиональной переподготовки
500/1000 ч.
Курс профессиональной переподготовки
500/1000 ч.
Курс профессиональной переподготовки
300 ч. — 1200 ч.
Курс профессиональной переподготовки
600 ч.
Мини-курс
4 ч.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.