infoegehelp.ru

Успешно сдать ЕГЭ по информатике
  • Главная
  • Контакты
  • Карта сайта
  • Помощь сайту
Важно
  • Демо варианты ЕГЭ
  • Учим числа: 2 в степени
  • Биты, байты, килобайты
Решение задач
  • Задачи вне основных разделов информатики
Разделы информатики
  • 2011-12-18-14-33-54Системы счисления
  • 2011-12-18-16-45-20Алгебра логики
  • 2011-12-18-16-55-26Программирование
  • 2011-12-18-16-53-40Кодирование информации
  • 2011-12-18-16-56-19Компьютерные сети и Интернет
  • -excelЭлектронные таблицы (Excel)
  • 2011-12-18-16-57-50Базы данных
  • 2011-12-18-16-58-50Графы
  • 2011-12-18-17-00-15Файловая система
  • Устройство компьютера
  • ПО компьютера

Разбор задачи C1 (демо ЕГЭ 2012)

Время выполнения-30 мин, уровень сложности-повышенный

Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y – действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Программист торопился и написал программу неправильно.


БейсикПаскаль
INPUT x, y
IF y>=x THEN
  IF y>=0 THEN
    IF y<=2-x*x THEN
      PRINT "принадлежит"
    ELSE
      PRINT "не принадлежит"
    END IF
  END IF
END IF
END
var x,y: real;
begin
  readln(x,y);
  if y>=x then
    if y>=0 then
      if y<=2-x*x then
        write('принадлежит')
      else
        write('не принадлежит')
end.
СиАлгоритмический язык
void main(void){
  float x,y;
  scanf("%f %f",&x,&y);
  if (y>=x)
    if (y>=0)
      if (y<=2-x*x)
        printf("принадлежит");
      else
        printf("не принадлежит");
}
алг
нач
     вещ x,y
     ввод x,y
     если y>=x то
       если y>=0 то
         если y<=2-x*x то
           вывод 'принадлежит'
         иначе
           вывод 'не принадлежит'
         все
       все
     все
кон

Последовательно выполните следующее. 1. Перерисуйте и заполните таблицу, которая показывает, как  работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F и G). Точки,  лежащие на границах областей, отдельно не рассматривать.

задача C1 ЕГЭ по информатике 2012 области

ОбластьУсловие 1
(y>=x)
Условие 2
(y>=0)
Условие 3
(y<=2–x*x)
Программа
выведет
Область
обрабатывается
верно
A




B




C




D




E




F




G




В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "—" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что  программа выведет на экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для  разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В  последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это  можно сделать несколькими способами, достаточно указать любой способ доработки исходной  программы.)

Решение:

1 часть:

Рассмотрим подробно каждую область:

Область А: (y≥x)Λ(y≥0)Λ(y>2–x*x):

задача C1 ЕГЭ по информатике 2012 область A

Область В: (y≥x)Λ(y<0)Λ(y>2–x*x):

задача C1 ЕГЭ по информатике 2012 область B

Область С: (y<x)Λ(y<0)Λ(y>2–x*x):

задача C1 ЕГЭ по информатике 2012 область C

Область D: (y<x)Λ(y<0)Λ(y≤2–x*x):

задача C1 ЕГЭ по информатике 2012 область D

Область E: (y≥x)Λ(y≥0)Λ(y≤2–x*x):

задача C1 ЕГЭ по информатике 2012 область E

Область F: (y≥x)Λ(y<0)Λ(y≤2–x*x):

задача C1 ЕГЭ по информатике 2012 область F

Область G: (y<x)Λ(y≥0)Λ(y≤2–x*x):

задача C1 ЕГЭ по информатике 2012 область G

Программа работает корректно только для двух областей: E (программа выводит:"принадлежит") и A (программа выводит:"не принадлежит"):

задача C1 ЕГЭ по информатике 2012 работает верно

Выразим условия 1, 2 и 3 через Y1, Y2, Y3:

Y1=(y>=x)

Y2=(y>=0)

Y3=(y<=2–x*x)

Область, где программа работает верно: E V A=Y1ΛY2ΛY3 V Y1ΛY2Λ¬Y3=Y1ΛY2Λ(Y3V¬Y3)=Y1ΛY2=(y>=x)Λ(y>=0).

Область, где программа работает неверно: ¬(Y1ΛY2)=¬Y1V¬Y2=(y<x)V(y<0).

Чтобы программа корректно сработала и вывела текст, необходимо, чтобы два первых условия: y≥x, y≥0 выполнялись. Вывод текста привязан только к последнему третьему условию:y≤2–x*x. Если оно выполняется, то программа выведет: "принадлежит", если не выполняется, то "не принадлежит".

Если первое условие: y≥x не выполняется, то программа не будет проверять остальные условия: y≥0, y≤2–x*x. Если y≥x выполняется, но не выполняется второе условие:y≥0, то не будет проверяться третье условие:y≤2–x*x. В таких случаях в таблице ставим "-".

Заполним таблицу:

Область Условие 1
(y>=x)
Условие 2
(y>=0)
Условие 3
(y<=2–x*x)
Программа
выведет
Область
обрабатывается
верно
A да
да
нет
не принадлежит
да
B да
нет
-
-
нет
C нет
-
- -
нет
D нет
-
-
-
нет
E да
да
да
принадлежит
да
F да
нет
-
-
нет
G нет
-
-
-
нет

2 часть:

вариант1:

Искомую закрашенную область делим на две фигуры вдось Оy:

задача C1 ЕГЭ по информатике 2012 вдоль Oy

Фигура Ф1 ограничена неравенствами:

y≤2-x*x,

y≥x,

x<0.

Фигура Ф2 ограничена неравенствами:

y≤2-x*x,

y≥0,

x≥0

На языке алгебры логики искомая область определяется так:

Ф1VФ2

(y≤2-x*x)Λ(y≥x)Λ(x<0)V(y≤2-x*x)Λ(y≥0)Λ(x≥0)

Доработка для корректной работы программы на языках программирования:

Бейсик Паскаль
IF y<=2-x*x AND y>=x AND x<0 OR
y<=2-x*x AND y>=0 AND x>=0 THEN
  PRINT "принадлежит"
ELSE
  PRINT "не принадлежит"
if (y<=2-x*x) and (y>=x) and (x<0) or
(y<=2-x*x) and (y>=0) and (x>=0) then
   write('принадлежит')
else
   write('не принадлежит')
Си Алгоритмический язык
if ((y<=2-x*x)&&(y>=x)&&(x<0)
||(y<=2-x*x)&&(y>=0)&&(x>=0))
  printf("принадлежит");
else
  printf("не принадлежит");
если y<=2-x*x и y>=x и x<0 или
y<=2-x*x и y>=0 и x>=0 то
   вывод 'принадлежит'
иначе
   вывод 'не принадлежит'


вариант2:


Закрашенную область делим на две фигуры вдось Оx:

задача C1 ЕГЭ по информатике 2012 вдоль Ox

Фигура Ф1 ограничена неравенствами:

y≤2-x*x,

y≥0.

Фигура Ф2 ограничена неравенствами:

y≤2-x*x,

y<0,

y≥x.

На языке алгебры логики искомая область определяется так:

Ф1VФ2

(y≤2-x*x)Λ(y≥0)V(y≤2-x*x)Λ(y<0)Λ(y≥x).

Доработка для корректной работы программы на языках программирования:

Бейсик Паскаль
IF y<=2-x*x AND y>=0 OR
y<=2-x*x AND y<0 AND y>=x THEN
  PRINT "принадлежит"
ELSE
  PRINT "не принадлежит"
if (y<=2-x*x) and (y>=0) or
(y<=2-x*x) and (y<0) and (y>=x) then
   write('принадлежит')
else
   write('не принадлежит')
Си Алгоритмический язык
if ((y<=2-x*x)&&(y>=0)||
(y<=2-x*x)&&(y<0)&&(y>=x))
  printf("принадлежит");
else
  printf("не принадлежит");
если y<=2-x*x и y>=0 или
y<=2-x*x и y<0 и y>=x то
   вывод 'принадлежит'
иначе
   вывод 'не принадлежит'

Перейти к С1-2011.

Перейти к С1-2010.

Перейти к С1-2009.

Перейти к другим задачам.

 

Rambler's Top100

© Латыпова В.А., 2012-2020. Все права защищены.
Копирование материалов сайта только с разрешения администрации сайта