Сайт для подготовки к ЕГЭ: kpolyakov.narod.ru Презентация будет выложена на сайте elschool11.ru ученикам – информатика –Подготовка к ЕГЭ (внизу странички)
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y – действительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно. БейсикПаскаль INPUT x, y IF y>=x THEN IF y>=0 THEN IF y=x then if y>=0 then if y
Последовательно выполните следующее. 1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G, H). Точки, лежащие на границах областей, отдельно не рассматривать. В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет". ОбластьУсл. 1 y>=x Усл. 2 y>=0 Усл. 3 y
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Указания по оцениванию: В задаче требовалось выполнить 3 действия: 1.Заполнить таблицу (допускается ошибка НЕ БОЛЕЕ чем в 1 строке) 2.Исправить ошибочное использование оператора IF 3.Исправить ошибку, связанную с неправильным выбором набора условий
x, y y>=x ДаНет y>=0 ДаНет y=x THEN IF y>=0 THEN IF y=x then if y>=0 then if y
ОбластьУсл. 1 y>=x (выше линии) Усл. 2 y>=0 (выше оси у) Усл. 3 y=x ДаНет y>=0 ДаНет y
x, y y>=x ДаНет y>=0 ДаНет y=x THEN IF y>=0 THEN IF y=x then if y>=0 then if y
I область: y =x II область: y =0 и х>=0 Точка попадет в закрашенную область, если она попадет в I область ИЛИ во II область: IF ((y =x )) OR ((y =0) and (х>=0)) then write('принадлежит') else write('не принадлежит'); Можно преобразовать выражение, используя законы алгебры логики: IF (y =x ) or (y>=0) and (х>=0)) then write('принадлежит') else write('не принадлежит'); БЭЙСИК: IF (y =x ) OR (y =0 AND х>=0) THEN PRINT "принадлежит" ELSE PRINT "не принадлежит ENDIF I
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y – действительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно. БейсикПаскаль INPUT x, y IF x*x+y*y
x*x+y* y
Обл аст ь Усл. 1 x*x+y *y
I II I область (внутри круга и слева от оси): x*x+y*y=0)) then write('принадлежит') else write('не принадлежит'); II способ: Точка попадет в закрашенную область, если она попадет внутрь круга, НО НЕ в область D: IF (x*x+y*y 0))) then write('принадлежит') else write('не принадлежит'); Можно преобразовать выражение, используя законы алгебры логики: IF (x*x+y*y =0) and (х>=0)) then write('принадлежит') else write('не принадлежит'); БЭЙСИК: IF x*x+y*y =0 and х>=0)) THEN PRINT "принадлежит" ELSE PRINT "не принадлежит» ENDIF
(повышенный уровень, рекомендуемое время – 6 мин)
В14. Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a,b,t,M,R :integer; Function F(x:integer):integer; begin F:=4*(x-1)*(x-3); end; BEGIN a:=-20; b:=20; M:=a; R:=F(a); for t:=a to b do begin if (F(t)0, то ветви параболы направлены вверх, точка экстремума является точкой минимума. если коэффициент а
Var a,b,t,M,R :integer; Function F(x:integer):integer; begin F:=4*(x-1)*(x-3); end; BEGIN a:=-20; b:=20; M:=a; R:=F(a); for t:=a to b do begin if (F(t)
Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a,b,t,M,R :integer; Function F(x:integer):integer; begin F:=x*x + 4*x + 8; end; BEGIN a:=-10; b:=10; M:=a; R:=F(a); for t:=a to b do begin if (F(t)> R)then begin M:=t; R:=F(t); end; write(R); END. 1) рассуждая так же, как и в предыдущем примере, можно показать, что программа ищет наибольшее значение функции F(t) на интервале от a до b 2) заметим, что выводится не абсцисса, а именно это найденное наибольшее значение функции: write(R); 3) график заданной функции – это парабола, ветви которой направлены вверх, то есть она имеет точку минимума, но не точку максимума 4) поэтому нужно проверить значения функции на концах отрезка и выбрать из них наибольшее 5) при t= -10 получаем F(t)=68 6) при t=10 получаем F(t)=148 7) таким образом, ответ: 148.
Определите, какое число будет напечатано в результате выполнения следующего алгоритма: Var a,b,t,M,R :integer; Function F(x:integer):integer; begin F:=4*(x-1)*(x-3); end; BEGIN a:=-20; b:=0; M:=a; R:=F(a); for t:=a to b do begin if (F(t)
(повышенный уровень, рекомендуемое время – 6 мин)
Ниже записана программа. Получив на вход число, эта программа печатает два числа, L и M. Укажите наибольшее из таких чисел, при вводе которых алгоритм печатает сначала 3, а потом 7. var x, L, M: integer; begin readln(x); L:=0; M:=0; while x > 0 do begin L:=L+1; if M < (x mod 10) then begin M:=x mod 10; end; x:= x div 10; end; writeln(L); write(M); end. для решения задачи необходимо понять, что делает эта программа. Если это не видно сразу, можно выполнить ручную прокрутку для какого-то простого числа, например, для числа 251:
операторусловиеxLM readln(x);251?? L:=0; M:=0;00 while x > 0 do…251 > 0? да L:=L+1;1 if M
Можно догадаться, что в результате работы программы в переменной L окажется число цифр числа, а в переменной M – наибольшая цифра, но это предположение нужно постараться доказать Нужно помнить, что для целого числа остаток от деления на 10 (x mod 10) – это последняя цифра в десятичной записи числа, а целочисленное деление (x div 10) отсекает последнюю цифру, то есть из 123 получается 12 Рассмотрим цикл, число шагов которого зависит от изменения переменной x: while x > 0 do begin... x:= x div 10; { отсечение последней цифры } end; Видно, что на каждом шаге от десятичной записи x отсекается последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл выполняется только раз, сколько цифр в десятичной записи введенного числа на каждом шаге цикла переменная L увеличивается на 1: L:=L+1; других операторов, меняющих значение L, в программе нет; поэтому после завершения цикла в переменной L находится количество цифр
Переменная M сначала равна 0. Оператор, в котором она меняется, выглядит так: if M < (x mod 10) then begin M:=x mod 10; end; учитывая, что x mod 10 – это последняя цифра десятичной записи числа, получается что если последняя цифра числа эта цифра больше, чем значение M, она записывается в переменную M; этот оператор выполняется в цикле, причем выражение x mod 10 по очереди принимает значения всех цифр исходного числа; поэтому после завершения циклам в переменной M окажется наибольшая из всех цифр. По условию задачи нам требуется найти наибольшее трехзначное число со старшей цифрой 7. Это 777. Ответ: 777.