Современные методы подготовки к ГИА и ЕГЭ Симонова М.Е. МОУ СОШ 18
Информатика: 1. Одно задание с кратким ответом по теме «Кодирование текстовой информации» заменено на задание по теме «Рекурсивные алгоритмы» раздела «Элементы теории алгоритмов». 2. Немного изменена последовательность заданий во второй части работы. Время проведения экзаменов, на которые отводилось 4 часа, в соответствии с требованиями СанПиН сокращено на 5 минут (с 240 до 235 минут).
Бейсик DIM X, A, B AS INTEGER INPUT X A=0: B=1 WHILE X > 0 A = A+1 B = B*(X MOD 10) X = X \ 10 WEND PRINT A PRINT B Паскаль var x, a, b: integer; begin readln(x); a:=0; b:=1; while x>0 do begin a:=a+1; b:=b*(x mod 10); x:= x div 10; end; writeln(a); write(b); end. Вопрос B8 Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 5.
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Бейсик DIM X, A, B AS INTEGER INPUT X A=0: B=1 WHILE X > 0 A = A+1 B = B*(X MOD 10) X = X \ 10 WEND PRINT A PRINT B Паскаль var x, a, b: integer; begin readln(x); a:=0; b:=1; while x>0 do begin a:=a+1; b:=b*(x mod 10); x:= x div 10; end; writeln(a); write(b); end. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 14.
Ниже на 4-х языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Сколько есть таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 12.
B6 Последовательность чисел Люка задается рекуррентным соотношением: F(1) = 2 F(2) = 1 F(n) = F(n–2) + F(n–1), при n >2, где n – натуральное число. Чему равно восьмое число в последовательности Люка? В ответе запишите только натуральное число. Пояснение. Последовательно находим: F(3) = F(1) + F(2) = 3, F(4) = F(2) + F(3) = 4, F(5) = F(3) + F(4) = 7, F(6) = F(4) + F(5) = 11, F(7) = F(5) + F(6) = 18, F(8) = F(6) + F(7) = 29. Восьмое число в последовательности Люка равно 29.
Вопрос B6 Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(1)=1;F(2)=2; F(n)=5 F(n–1)6 F(n2), при n>2. Чему равно значение функции F(7)? В ответе запишите только натуральное число.
B14 Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a,b,t,M,R :integer; Function F(x:integer):integer; begin F:=4*(x-5)*(x+3); end; BEGIN a:=-20; b:=20; M:=a; R:=F(a); for t:=a to b do begin if (F(t)< R)then begin M:=t; R:=F(t); end; end; write(R); END. Пояснение. 1. Алгоритм предназначен для поиска наименьшего значения функции F(t) на отрезке от a до b. 2. Квадратный трехчлен F(t) с положительным старшим коэффициентом пересекает ось абсцисс в точках 5 и 3 и, следовательно, наименьшее значение достигается в вершине 1 и равно F(1) = 64.
Определите, какое число будет напечатано в результате выполнения следующего алгоритма
ЕГЭ Информатика. Тип. тест. задания_ с ЕГЭ Информатика. Тип. тест. задания_ с ЕГЭ Информатика. Сам. полн. изд. тип. вар._ с ЕГЭ Информатика. Сам. полн. изд. тип. вар._ с Подготовка к ЕГЭ. Информатика._ с
Задание С1 – на поиск ошибок и оценивается в 3 балла ВОЗМОЖНЫЕ ВАРИАНТЫ ОШИБОК: в программе осуществлен ввод лишних данных; ошибка в операторе условия (> вместо
Классификация заданий С1 1)входные данные – числовые выражения и задание содержит три вопроса: определить при каких входных данных программа работает неверно (вопрос для всех классов заданий С1); определить лишнюю часть представленной программы; исправить предложенную программу. 2)входные данные – числовые выражения, но вопросов два (т.е. в исходной части программы две ошибки); 3)входные данные – числовые, вопросов два, оба касаются исправления программы, но второй вопрос сформулирован довольно жёстко (требует не содержать логических функций и т.д.) 4)входные данные – строковые переменные, а в остальном соответствует первому классу заданий С1.
Некоторые рекомендации для подготовки Важно ориентировать учеников на то, что в этом задании отдельно оценивается ответ на каждый поставленный вопрос. В первом вопросе необходимо указать, как правило, примеры входных данных, при которых программа будет работать неправильно! Ответ не должен состоять из короткого «да» или «нет». Если требуется обоснование ответа, оно должно быть приведено. Если задания перекликаются, например, во 2 задании предлагается усовершенствовать программу любым способом, а в 3 – конкретным (без использования AND и OR), то правильный ответ на более сложный вопрос может дать 2 балла и перекрыть таким образом оба задания. Эффективность программы в задании не оценивается. Рассмотрим несколько примеров заданий С1 с различными формулировками условия
Т.е. в программе не учтено условие x
Т.е. в программе не учтено условие y>=0
Т.е. в программе не учтено условие x>=0
Программа на языке ПаскальПрограмма на языке Бейсик VAR i,j: integer; BEGIN writeln('искомые поля'); for j:=5 to 8 do for i:=1 to 8 do begin if (i=9-j) OR (i=j) then writeln('i=',i, 'j=',j); end; end. PRINT "Искомые поля" FOR J=5 TO 8 FOR I=1 TO 8 IF (I=9-J) OR (I=J) THEN PRINT "I="; I PRINT "J="; J ENDIF NEXT I NEXT J END С1. Рассматривается стандартная шахматная доска размером 8х8. Примем, что i – номер вертикали (может принимать значения от 1 до 8), j – номер горизонтали (также может принимать значения от 1 до 8). В левом нижнем углу, т.е. на поле i =1, j=1 (это поле черного цвета) стоит черный король. Напомним, что король может ходить на 1 клетку в любом направлении (по горизонтали, вертикали или диагонали). В правом нижнем углу, т.е. на поле i =8, j=1 (это поле белого цвета) стоит белый король. Введены обозначения: P(i,j) минимальное число ходов, за которое черный король может попасть на поле (i,j); V(i,j) минимальное число ходов, за которое белый король может попасть на поле (i,j). Программист написал программу, в которой требовалось определить все такие поля (i,j), для которых P(i,j) = V(i,j), и выдать на экран соответствующие значения i,j (текст программы приведен ниже). 1) Выдаст ли программа, написанная программистом, поле, для которого i=4, j=5 ? 2) Указать все из перечисленных ниже полей, которые удовлетворяют постановке задачи, т.е. для таких полей должно быть выполнено P(i,j) = V(i,j) (i=1, j=8), (i=2, j=8), (i=1, j=7), (i=5, j=5), (i=8, j=6) 3) Видно, что программист допустил ошибку в программе. Укажите, какую доработку программы нужно провести, чтобы она соответствовала постановке задачи (такая доработка может быть проведена неединственным образом – годится любой правильный вариант доработки)
Содержание верного ответа (допускаются иные формулировки ответа, не искажающие его смысла) Элементы ответа: 1) Поле i=5, j=4 будет выдано приведенной программой (т.к. i+j=9) (необходимое пояснение!) 2) (i=1, j=8), (i=2, j=8), (i=5, j=5) – эти поля удовлетворяют постановке задачи (ответ очевиден, если нарисовать шахматную доску 8х8 и королей в двух нижних углах) 3) Возможный (самый короткий) способ доработки: вместо if (i=9-j) OR (i=j) проверять условие if (i>=9-j) AND (i
ПРОГРАММА НА ПАСКАЛЕПРОГРАММА НА БЕЙСИКЕ VAR a,b,x: integer; p: integer; BEGIN readln(a,b,x); if (a>x) AND (x>b) then writeln('x между a,b'); END. CLS INPUT a, b, x IF (a>x) AND (x>b) THEN PRINT x между a, b END C1. Требовалось написать программу, в которой нужно было проверить, лежит ли число x на числовой оси между числами a и b ("между" понимается в строгом смысле, т.е. случай x=a или x=b недопустим). Числа x, a, b являются натуральными, и известно, что a отлично от b (но неизвестно: a>b или b>a). Входная информация вводится с клавиатуры, а на выходе должно быть сообщение вида «x между a и b» (если это действительно так), в противном случае никакой выходной информации не выдается. Программист торопился и написал программу некорректно. Последовательно выполните три задания: 1) Приведите пример таких чисел a, b, x, при которых программа работает неправильно. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). 3) Укажите, как можно доработать программу, соблюдая дополнительное условие: доработанная программа не должна использовать логических операций AND или OR.
Содержание верного ответа (допускаются иные формулировки ответа, не искажающие его смысла) Элементы ответа: 1) Пример: a=1 x=2 b=3 2) Возможная доработка: if ax) AND (x>b) then writeln(' x между a,b'); (могут быть и другие правильные способы доработки). 3) Возможная доработка без использования логических операций AND, OR: p:=(x-a)*(x-b); if p
Прежде, чем приступить к решению задачи, следует ещё раз обратить внимание на распространённую ошибку учащихся. Вместо требуемого в задании примера исходных данных, при которых программа работает неправильно, они приводят пример, когда ошибочная программа работает правильно. Возможно это связано с тем, что учащимися не всегда правильно понимается, что роль тестовых данных в программировании, не только доказать работоспособность программы, но и выявить содержащиеся в ней ошибки.
Этот вариант задания оказался «сырым». Если проанализировать программы на Паскале и Бейсике, выяснится, что они разные. Оказывается, что в программе на Бейсике ошибок больше. Для определённости рассмотрим программу на Паскале. Анализ программы показывает, что она даёт неправильный результат всегда, когда строчка начинается не с пробела или не заканчивается пробелом. 1. Ответ на первый вопрос, например, последовательность: b aba 2. Лишняя часть программы: if (s[i-1]=` `)and (s[i]` `)and(s[i+1]=` `) then k:=k+1; 3.Доработать программу можно следующим образом: перед циклом добавить : a:=s[1]; {сохранение первого символа} а во второе ветвление добавить ещё одно условие – if (s[i]` `)and(s[i+1]=` `)or(i=length(s)) then if s[i]=a
Таким образом вариант доработанной программы может выглядеть так: Var s:string; a: char; I, k: integer; begin readln(s); k:=0; a:=s[1]; {сохранение значения первого символа} for i:=1 to length(s) do begin if (s[i]=` `) and (s[i+1] ` `) then a:=s[i+1]; if (s[i]` `) and (s[i+1]= ` `) or (i= length(s)) then if s[i]=a then k:=k+1; end; if k=0 then write (`таких слов нет`) else write (`k=`, k) end.