Инфоурок Информатика Другие методич. материалыРешения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х

Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х

Скачать материал

Выберите документ из архива для просмотра:

Выбранный для просмотра документ A1.doc

isa.muschanov.70.95@yandex.ru



А1 (базовый уровень, время – 1 мин)

Тема: Системы счисления и двоичное представление информации в памяти компьютера.

Что нужно знать:

  • перевод чисел между десятичной, двоичной, восьмеричной и шестнадцатеричной системами счисления (см. презентацию «Системы счисления»)

    Полезно помнить, что в двоичной системе:

    • четные числа оканчиваются на 0, нечетные – на 1;

    • числа, которые делятся на 4, оканчиваются на 00, и т.д.; числа, которые делятся на 2k, оканчиваются на k нулей

    • если число N принадлежит интервалу 2k-1 N < 2k, в его двоичной записи будет всего k цифр, например, для числа 125:

    26 = 64 125 < 128 = 27, 125 = 11111012 (7 цифр)

  • числа вида 2k записываются в двоичной системе как единица и k нулей, например:

16 = 24 = 100002

  • числа вида 2k-1записываются в двоичной системе k единиц, например:

15 = 24-1 = 11112

  • если известна двоичная запись числа N, то двоичную запись числа 2·N можно легко получить, приписав в конец ноль, например:
    15 = 11112, 30 = 111102, 60 = 1111002, 120 = 11110002

отрицательные целые числа хранятся в памяти в двоичном дополнительном коде (подробнее см. презентацию «Компьютер изнутри»)

для перевода отрицательного числа (-a) в двоичный дополнительный код нужно сделать следующие операции:

  • перевести число a-1 в двоичную систему счисления

  • сделать инверсию битов: заменить все нули на единицы и единицы на нули в пределах разрядной сетки (см. пример далее)

Пример задания:

Дано: hello_html_m5bd3c85a.gifи hello_html_7755797c.gif. Какое из чисел с, записанных в двоичной системе счисления, удовлетворяет неравенству a < c < b?

1) 110110012 2) 110111002 3) 110101112 4) 110110002

Общий подход:

перевести все числа (и исходные данные, и ответы) в одну (любую!) систему счисления и сравнить.

Решение (вариант 1, через десятичную систему):

  1. hello_html_m6c88dff6.gif

  2. hello_html_m2128d98.gif

  3. переводим в десятичную систему все ответы:

110110012 = 217, 11011100 2= 220, 110101112 = 215, 110110002=216

  1. очевидно, что между числами 215 и 217 может быть только 216

  2. таким образом, верный ответ – 4 .

Возможные проблемы:

арифметические ошибки при переводе из других систем в десятичную.

Решение (вариант 2, через двоичную систему):

  1. hello_html_m34953f69.gif (каждая цифра шестнадцатеричной системы отдельно переводится в четыре двоичных – тетраду);

  2. hello_html_5627873c.gif (каждая цифра восьмеричной системы отдельно переводится в три двоичных – триаду, старшие нули можно не писать);

  3. теперь нужно сообразить, что между этими числами находится только двоичное число 110110002 – это ответ 4.


Возможные проблемы:

запись двоичных чисел однородна, содержит много одинаковых символов – нулей и единиц, поэтому легко запутаться и сделать ошибку.

Решение (вариант 3, через восьмеричную систему):

  1. hello_html_53bf7577.gif(сначала перевели в двоичную систему, потом двоичную запись числа разбили на триады справа налево, каждую триаду перевели отдельно в десятичную систему, так как для чисел от 0 до 7 их восьмеричная запись совпадает с десятичной);

  2. hello_html_2b546a87.gif, никуда переводить не нужно;

  3. переводим в восьмеричную систему все ответы:

110110012 = 011 011 0012 = 3318 (разбили на триады справа налево, каждую триаду перевели отдельно в десятичную систему, как в п. 1)

11011100 2= 3348, 110101112 = 3278, 110110002=3308

  1. в восьмеричной системе между числами 3278 и 3318 может быть только 3308

  2. таким образом, верный ответ – 4 .

Возможные проблемы:

нужно помнить двоичную запись чисел от 0 до 7 (или переводить эти числа в двоичную систему при решении).

Решение (вариант 4, через шестнадцатеричную систему):

  1. hello_html_m5bd3c85a.gif никуда переводить не нужно;

  2. hello_html_m43abcbb6.gif (сначала перевели в двоичную систему, потом двоичную запись числа разбили на тетрады справа налево, каждую тетраду перевели в шестнадцатеричную систему; при этом тетрады можно переводить из двоичной системы в десятичную, а затем заменить все числа, большие 9, на буквы – A, B, C, D, E, F);

  3. переводим в шестнадцатеричную систему все ответы:

110110012 = 1101 10012 = D916 (разбили на тетрады справа налево, каждую тетраду перевели отдельно в десятичную систему, все числа, большие 9, заменили на буквы – A, B, C, D, E, F, как в п. 1)

11011100 2= DC16, 110101112 = D716, 110110002=D816

  1. в шестнадцатеричной системе между числами D716 и D916 может быть только D816

  2. таким образом, верный ответ – 4 .

Возможные проблемы:

нужно помнить двоичную запись чисел от 0 до 15 (или переводить эти числа в двоичную систему при решении).

Выводы:

  • есть несколько способов решения, «каждый выбирает для себя»;

  • наиболее сложные вычисления – при переводе всех чисел в десятичную систему, можно легко ошибиться;

  • сравнивать числа в двоичной системе сложно, также легко ошибиться;

  • видимо, в этой задаче наиболее простой вариант – использовать восьмеричную систему, нужно просто запомнить двоичные записи чисел от 0 до 7 и аккуратно все сделать;

  • в других задачах может быть так, что выгоднее переводить все в десятичную или шестнадцатеричную систему счисления.

Еще пример задания:

Для хранения целого числа со знаком используется один байт. Сколько единиц содержит внутреннее представление числа (-78)?

1) 3 2) 4 3) 5 4) 6

Решение (вариант 1, классический):

  1. переводим число 78 в двоичную систему счисления:

78 = 64 + 8 + 4 + 2 = 26 + 23 + 22 + 21 = 10011102

  1. по условию число занимает в памяти 1 байт = 8 бит, поэтому нужно представить число с помощью 8 разрядов

  2. чтобы получилось всего 8 разрядов (бит), добавляем впереди один ноль:

78 = 010011102

  1. делаем инверсию битов (заменяем везде 0 на 1 и 1 на 0):

010011102 → 101100012

  1. добавляем к результату единицу

101100012 + 1 = 101100102

это и есть число (-78) в двоичном дополнительно коде

  1. в записи этого числа 4 единицы

  2. таким образом, верный ответ – 2 .

Возможные ловушки и проблемы:

  • нужно не забыть в конце добавить единицу, причем это может быть не так тривиально, если будут переносы в следующий разряд – тут тоже есть шанс ошибиться из-за невнимательности

Решение (вариант 1, неклассический):

  1. переводим число 78 – 1=77 в двоичную систему счисления:

77 = 64 + 8 + 4 + 2 = 26 + 23 + 22 + 20 = 10011012

  1. по условию число занимает в памяти 1 байт = 8 бит, поэтому нужно представить число с помощью 8 разрядов

  2. чтобы получилось всего 8 разрядов (бит), добавляем впереди один ноль:

77 = 010011012

  1. делаем инверсию битов (заменяем везде 0 на 1 и 1 на 0):

010011012 → 101100102

это и есть число (-78) в двоичном дополнительно коде

  1. в записи этого числа 4 единицы

  2. таким образом, верный ответ – 2 .

Возможные ловушки и проблемы:

  • нужно помнить, что в этом способе в двоичную систему переводится не число a, а число
    a-1; именно этот прием позволяет избежать добавления единицы в конце (легче вычесть в десятичной системе, чем добавить в двоичной)

Задачи для тренировки1:

  1. Как представлено число 8310 в двоичной системе счисления?

1) 10010112 2) 11001012 3) 10100112 4) 1010012

  1. Сколько единиц в двоичной записи числа 195?

1) 5 2) 2 3) 3 4) 4

  1. Сколько единиц в двоичной записи числа 173?

1) 7 2) 5 3) 6 4) 4

  1. Как представлено число 25 в двоичной системе счисления?

1) 10012 2) 110012 3) 100112 4) 110102

  1. Как представлено число 82 в двоичной системе счисления?

1) 10100102 2) 10100112 3) 1001012 4) 10001002

  1. Как представлено число 263 в восьмеричной системе счисления?

1) 3018 2) 6508 3) 4078 4) 7778

  1. Как записывается число 5678 в двоичной системе счисления?

1) 10111012 2) 1001101112 3) 1011101112 4) 111101112

  1. Как записывается число A8716 в восьмеричной системе счисления?

1) 4358 2) 15778 3) 52078 4) 64008

  1. Как записывается число 7548 в шестнадцатеричной системе счисления?

1) 73816 2) 1A416 3) 1EC16 4) A5616

  1. Для хранения целого числа со знаком используется один байт. Сколько единиц содержит внутреннее представление числа (-128)?

1) 1 2) 2 3) 3 4) 4

  1. Для хранения целого числа со знаком используется один байт. Сколько единиц содержит внутреннее представление числа (-35)?

1) 3 2) 4 3) 5 4) 6

  1. Дано: hello_html_m69c85273.gif, hello_html_m4f4c38e9.gif. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству hello_html_4668a754.gif?

1) 10011010 2) 10011110 3) 10011111 4) 11011110

  1. Дано: hello_html_m65c5195e.gif, hello_html_m1b584144.gif. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству hello_html_4668a754.gif?

1) 11111001 2) 11011000 3) 11110111 4) 11111000

  1. Дано: hello_html_m590d4dbd.gif, hello_html_35f7acff.gif. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству hello_html_4668a754.gif?

1) 11011010 2) 11111110 3) 11011110 4) 11011111

  1. Дано: hello_html_m612dc02d.gif, hello_html_m7c944075.gif. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству hello_html_4668a754.gif?

1) 11101010 2) 11101110 3) 11101011 4) 11101100

  1. Дано: hello_html_m707c2d25.gif, hello_html_m1f7e17a5.gif. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству hello_html_4668a754.gif?

1) 11101010 2) 11101000 3) 11101011 4) 11101100

  1. Дано: hello_html_m242e1807.gif, hello_html_24b9e5b6.gif. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству hello_html_4668a754.gif?

1) 11010011 2) 11001110 3) 11001010 4) 11001100

  1. Дано: hello_html_m69c85273.gif, hello_html_m4f4c38e9.gif. Какое из чисел С, записанных в двоичной системе счисления, удовлетворяет неравенству hello_html_4668a754.gif?

1) 10011010 2) 10011110 3) 10011111 4) 11011110

  1. Сколько единиц в двоичной записи числа 64?

1) 1 2) 2 3) 4 4) 6

  1. Сколько единиц в двоичной записи числа 127?

1) 1 2) 2 3) 6 4) 7

  1. Сколько значащих нулей в двоичной записи числа 48?

1) 1 2) 2 3) 4 4) 6

  1. Сколько значащих нулей в двоичной записи числа 254?

1) 1 2) 2 3) 4 4) 8

  1. Какое из чисел является наименьшим?

1) E616 2) 3478 3) 111001012 4) 232



  1. Какое из чисел является наибольшим?

1) 9B16 2) 2348 3) 100110102 4) 153








1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

isa.muschanov.70@yandex.ru



Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Методические разработки к Вашему уроку:

Получите новую специальность за 3 месяца

SMM-менеджер

Получите профессию

Методист-разработчик онлайн-курсов

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A10.doc

isa.muschanov.70@yandex.ru



A10 (базовый уровень, время – 2 мин)

Тема: Использование информационных моделей (таблицы, диаграммы, графики).
Перебор вариантов, выбор лучшего по какому-то признаку.

Что нужно знать:

  • в принципе, особых дополнительных знаний, кроме здравого смысла и умения перебирать варианты (не пропустив ни одного!) здесь, как правило, не требуется

  • полезно знать, что такое граф (это набор вершин и соединяющих их ребер) и как он описывается в виде таблицы, хотя, как правило, все необходимые объяснения даны в формулировке задания

  • чаще всего используется взвешенный граф, где с каждым ребром связано некоторое число (вес), оно может обозначать, например, расстояние между городами или стоимость перевозки

  • рассмотрим граф (рисунок слева), в котором 5 вершин (A, B, C, D и E); он описывается таблицей, расположенной в центре; в ней, например, число 4 на пересечении строки В и столбца С означает, что, во-первых, есть ребро, соединяющее В и С, и во-вторых, вес этого ребра равен 4; пустая клетка на пересечении строки А и столбца В означает, что ребра из А в В нет

hello_html_m246dbeef.gifhello_html_1398494c.gif


A

B

C

D

Е

A



3

1


B



4


2

C

3

4



2

D

1





Е


2

2








  • обратите внимание, что граф по заданной таблице (она еще называется весовой матрицей) может быть нарисован по-разному; например, той же таблице соответствует граф, показанный на рисунке справа от нее

  • в приведенном примере матрица симметрична относительно главной диагонали; это может означать, например, что стоимости перевозки из В в С и обратно равны (это не всегда так)

  • желательно научиться быстро (и правильно) строить граф по весовой матрице и наоборот

Пример задания:

Между четырьмя местными аэропортами: ОКТЯБРЬ, БЕРЕГ, КРАСНЫЙ и СОСНОВО, ежедневно выполняются авиарейсы. Приведён фрагмент расписания перелётов между ними:

Аэропорт вылета Аэропорт прилета Время вылета Время прилета

СОСНОВО КРАСНЫЙ 06:20 08:35

КРАСНЫЙ ОКТЯБРЬ 10:25 12:35

ОКТЯБРЬ КРАСНЫЙ 11:45 13:30

БЕРЕГ СОСНОВО 12:15 14:25

СОСНОВО ОКТЯБРЬ 12:45 16:35

КРАСНЫЙ СОСНОВО 13:15 15:40

ОКТЯБРЬ СОСНОВО 13:40 17:25

ОКТЯБРЬ БЕРЕГ 15:30 17:15

СОСНОВО БЕРЕГ 17:35 19:30

БЕРЕГ ОКТЯБРЬ 19:40 21:55

Путешественник оказался в аэропорту ОКТЯБРЬ в полночь (0:00). Определите самое раннее время, когда он может попасть в аэропорт СОСНОВО.

1) 15:40 2) 16:35 3)17:15 4) 17:25

Решение:

  1. сначала заметим, что есть прямой рейс из аэропорта ОКТЯБРЬ в СОСНОВО с прибытием в 17:25:

ОКТЯБРЬ СОСНОВО 13:40 17:25

  1. посмотрим, сможет ли путешественник оказаться в СОСНОВО раньше этого времени, если полетит через другой аэропорт, с пересадкой

  2. можно лететь, через КРАСНЫЙ, но, как следует из расписания,

hello_html_34025fb0.gifОКТЯБРЬ КРАСНЫЙ 11:45 13:30

КРАСНЫЙ СОСНОВО 13:15 15:40

путешественник не успеет на рейс КРАСНЫЙ – СОСНОВО, который улетает в 13:15, то есть на 15 минут раньше, чем в КРАСНЫЙ прилетает самолет ОКТЯБРЬ – КРАСНЫЙ

  1. можно лететь через БЕРЕГ,

hello_html_m7890242f.gifБЕРЕГ СОСНОВО 12:15 14:25

ОКТЯБРЬ БЕРЕГ 15:30 17:15

но рейс БЕРЕГ – СОСНОВО вылетает даже раньше, чем рейс ОКТЯБРЬ – БЕРЕГ, то есть, пересадка не получится

  1. поскольку даже перелеты с одной пересадкой не стыкуются по времени, проверять варианты с двумя пересадками в данной задаче бессмысленно (хотя в других задачах они теоретически могут дать правильное решение)

  2. таким образом, правильный ответ – 4 (прямой рейс).

Возможные ловушки и проблемы:

  • можно не заметить, что путешественник не успеет на пересадку в КРАСНОМ (неверный ответ 15:40)

  • можно перепутать аэропорты вылета и прилета (неверный ответ 16:35)

Решение (вариант 2, граф):

  1. для решения можно построить граф, показывающий, куда может попасть путешественник из аэропорта ОКТЯБРЬ

  2. из аэропорта ОКТЯБРЬ есть три рейса:

ОКТЯБРЬ СОСНОВО 13:40 17:25

ОКТЯБРЬ КРАСНЫЙ 11:45 13:30

ОКТЯБРЬ БЕРЕГ 15:30 17:15

  1. построим граф, около каждого пункта запишем время прибытия

hello_html_m57025895.gif

  1. проверим, не будет ли быстрее лететь с пересадкой: рейс «КРАСНЫЙ-СОСНОВО» вылетает в 13:15, то есть, путешественник на него не успевает; он не успеет также и на рейс «БЕРЕГ-СОСНОВО», вылетающий в 12:15

  2. таким образом, правильный ответ – 4 (прямой рейс).

Еще пример задания:

Грунтовая дорога проходит последовательно через населенные пункты А, B, С и D. При этом длина дороги между А и В равна 80 км, между В и С – 50 км, и между С и D – 10 км. Между А и С построили новое асфальтовое шоссе длиной 40 км. Оцените минимально возможное время движения велосипедиста из пункта А в пункт В, если его скорость по грунтовой дороге – 20 км/час, по шоссе – 40 км/час.

1) 1 час 2) 1,5 часа 3)3,5 часа 4) 4 часа

Решение:

  1. нарисуем схему дорог, обозначив данные в виде дроби (расстояние в числителе, скорость движения по дороге – в знаменателе):

hello_html_m68323d1e.gif

  1. разделив числитель на знаменатель, получим время движения по каждой дороге

hello_html_m480672d.gif

  1. ехать из А в B можно

    • напрямую, это займет 4 часа, или …

    • через пункт C, это займет 1 час по шоссе (из А в С) и 2,5 часа по грунтовой дороге
      (из В в С), всего 1 + 2,5 = 3,5 часа

  2. таким образом, правильный ответ – 3.

Возможные ловушки и проблемы:

  • можно не заметить, что требуется найти минимальное время поездки именно в В, а не в С (неверный ответ 1 час)

  • можно ограничиться рассмотрением только прямого пути из А в В и таким образом получить неверный ответ 4 часа

  • можно неправильно нарисовать схему



Еще пример задания:

Таблица стоимости перевозок устроена следующим образом: числа, стоящие на пересечениях строк и столбцов таблиц, означают стоимость проезда между соответствующими соседними станциями. Если пересечение строки и столбца пусто, то станции не являются соседними. Укажите таблицу, для которой выполняется условие: «Минимальная стоимость проезда из А в B не больше 6». Стоимость проезда по маршруту складывается из стоимостей проезда между соответствующими соседними станциями.

1)

2)

3)

4)


A

B

C

D

Е

A



3

1


B



4


2

C

3

4



2

D

1





Е


2

2






A

B

C

D

Е

A



3

1

1

B



4



C

3

4



2

D

1





Е

1


2






A

B

C

D

Е

A



3

1

4

B



4


2

C

3

4



2

D

1





Е

4

2

2






A

B

C

D

Е

A




1


B



4


1

C


4


4

2

D

1


4



Е


1

2





Решение (вариант 1):

  1. нужно рассматривать все маршруты из А в В, как напрямую, так и через другие станции

  2. рассмотрим таблицу 1:

  • из верхней строки таблицы следует, что из А в В напрямую везти нельзя, только через C (стоимость перевозки А-С равна 3) или через D (стоимость перевозки из А в D равна 1)


    A

    B

    C

    D

    Е

    A



    3

    1


  • предположим, что мы повезли через C; тогда из третьей строки видим, что из C можно ехать в В, и стоимость равна 4


    A

    B

    C

    D

    Е

    C

    3

    4



    2

  • таким образом общая стоимость перевозки из А через С в В равна 3 + 4 = 7

  • кроме того, из С можно ехать не сразу в В, а сначала в Е:


A

B

C

D

Е

C

3

4



2

а затем из Е – в В (стоимость также 2),


A

B

C

D

Е

Е


2

2



так что общая стоимость этого маршрута равна 3 +2 + 4 = 7

  • теперь предположим, что мы поехали из А в D (стоимость 1); из четвертой строки таблицы видим, что из D можно ехать только обратно в А, поэтому этим путем в В никак не попасть:


    A

    B

    C

    D

    Е

    D

    1





  • таким образом, для первой таблицы минимальная стоимость перевозки между А и В равна 7; заданное условие «не больше 6» не выполняется

  1. аналогично рассмотрим вторую схему; возможные маршруты из А в В:

  • hello_html_5cb4e84a.gif, стоимость 7

  • hello_html_44ad86fc.gif, стоимость 7

  • таким образом, минимальная стоимость 7, условие не выполняется

  1. для третьей таблицы:

  • hello_html_5cb4e84a.gif, стоимость 7

  • hello_html_5223a094.gif, стоимость 6

  • hello_html_4b2162dc.gif, стоимость 7

  • таким образом, минимальная стоимость 6, условие выполняется

  1. для четвертой:

  • hello_html_m57e7a749.gif, стоимость 9

  • hello_html_m7f4be6aa.gif, стоимость 8

  • минимальная стоимость 8, условие не выполняется

  1. условие «не больше 6» выполняется только для таблицы 3

  2. таким образом, правильный ответ – 3.

Возможные ловушки и проблемы:

  • метод ненагляден, легко запутаться и пропустить решение с минимальной стоимостью

Решение (вариант 2, с рисованием схемы):

  1. для каждой таблицы нарисуем соответствующую ей схему дорог, обозначив стоимость перевозки рядом с линиями, соединяющими соседние станции:

1)

2)

3)

4)


A

B

C

D

Е

A



3

1


B



4


2

C

3

4



2

D

1





Е


2

2






A

B

C

D

Е

A



3

1

1

B



4



C

3

4



2

D

1





Е

1


2






A

B

C

D

Е

A



3

1

4

B



4


2

C

3

4



2

D

1





Е

4

2

2






A

B

C

D

Е

A




1


B



4


1

C


4


4

2

D

1


4



Е


1

2





hello_html_468be5f9.gifhello_html_4c15c4b6.gifhello_html_35aa74b4.gifhello_html_4e01b5ac.gif

  1. теперь по схемам определяем кратчайшие маршруты для каждой таблицы:

1: hello_html_5cb4e84a.gif или hello_html_m54fb299d.gif, стоимость 7

2: hello_html_5cb4e84a.gif или hello_html_44ad86fc.gif, стоимость 7

3: hello_html_8132445.gif, стоимость 6

4: hello_html_m76128c0.gif, стоимость 8

  1. условие «не больше 6» выполняется только для таблицы 3

  2. таким образом, правильный ответ – 3.

Возможные ловушки и проблемы:

  • нужно внимательно строить схемы по таблицам, этот дополнительный переход (от табличных моделей к графическим) повышает наглядность, но добавляет еще одну возможность для ошибки

  • наглядность схемы зависит от того, как удачно вы выберете расположение ее узлов; один из подходов – сначала расставить все узлы равномерно на окружности, нарисовать все связи и посмотреть, как можно расположить узлы более удобно

  • по невнимательности можно пропустить решение с минимальной стоимостью

Еще пример задания1:

Между четырьмя местными аэропортами: ВОСТОРГ, ЗАРЯ, ОЗЕРНЫЙ и ГОРКА, ежедневно выполняются авиарейсы. Приведён фрагмент расписания перелётов между ними:

Аэропорт вылета Аэропорт прилета Время вылета Время прилета

ВОСТОРГ ГОРКА 16:15 18:30

ОЗЕРНЫЙ ЗАРЯ 13:40 15:50

ОЗЕРНЫЙ ВОСТОРГ 14:10 16:20

ГОРКА ОЗЕРНЫЙ 17:05 19:20

ВОСТОРГ ОЗЕРНЫЙ 11:15 13:20

ЗАРЯ ОЗЕРНЫЙ 16:20 18:25

ВОСТОРГ ЗАРЯ 14:00 16:15

ЗАРЯ ГОРКА 16:05 18:15

ГОРКА ЗАРЯ 14:10 16:25

ОЗЕРНЫЙ ГОРКА 18:35 19:50

Путешественник оказался в аэропорту ВОСТОРГ в полночь (0:00). Определите самое раннее время, когда он может попасть в аэропорт ГОРКА.

1) 16:15 2) 18:15 3)18:30 4) 19:50

Решение («обратный ход»):

  1. сначала заметим, что есть прямой рейс из аэропорта ВОСТОРГ в ГОРКУ с прибытием в 18:30:

ВОСТОРГ ГОРКА 16:15 18:30

  1. посмотрим, сможет ли путешественник оказаться в ГОРКЕ раньше этого времени, если полетит через другой аэропорт, с пересадкой; рассмотрим все остальные рейсы, который прибывают в аэропорт ГОРКА:

ЗАРЯ ГОРКА 16:05 18:15

ОЗЕРНЫЙ ГОРКА 18:35 19:50

  1. это значит, что имеет смысл проверить только возможность перелета через аэропорт ЗАРЯ (через ОЗЕРНЫЙ явно не получится раньше, чем прямым рейсом); для этого нужно быть в ЗАРЕ не позже, чем в 16:05

  2. смотрим, какие рейсы прибывают в аэропорт ЗАРЯ раньше, чем в 16:05:

ОЗЕРНЫЙ ЗАРЯ 13:40 15:50

  1. дальше проверяем рейсы, который приходят в ОЗЕРНЫЙ раньше, чем в 13:40

ВОСТОРГ ОЗЕРНЫЙ 11:15 13:20

  1. таким образом, мы «пришли» от конечного пункта к начальному, в обратном направлении

  2. поэтому оптимальный маршрут

hello_html_4b847ae1.gif

  1. и правильный ответ – 2.

Возможные ловушки и проблемы:

  • «напрашивается» ошибочный ответ 18:30 (прямой рейс)

  • при решении задачи «прямым ходом», с начального пункта, легко пропустить вариант с двумя пересадками

Задачи для тренировки2:


  1. A

    B

    C

    D

    A


    4


    5

    B

    4


    3

    6

    C


    3



    D

    5

    6



    В таблице приведена стоимость перевозок между соседними железнодорожными станциями. Укажите схему, соответствующую таблице.



1)

2)

3)

4)

hello_html_79161a.png

hello_html_28fa2797.png

hello_html_4eba8b11.png

hello_html_m37adb244.png

  1. В таблицах приведена протяженность автомагистралей между соседними населенными пунктами. Если пересечение строки и столбца пусто, то соответствующие населенные пун­кты не соединены автомагистралями. Укажите номер таблицы, для которой выполняется условие «Максимальная протяженность маршрута от пункта А до пункта С не больше 5». Протяженность маршрута складывается из протяженности автомагистралей между соответствующими соседними населенными пунктами. При этом любой населенный пункт должен встречаться на маршруте не более одного раза.

    1)

    2)

    3)

    4)


    A

    B

    C

    D

    A


    2


    2

    B

    2


    1

    3

    C


    1


    3

    D

    2

    3

    3




    A

    B

    C

    D

    A


    2

    2


    B

    2


    1

    1

    C

    2

    1


    3

    D


    1

    3




    A

    B

    C

    D

    A


    2

    3

    2

    B

    2


    2

    2

    C

    3

    2



    D

    2

    2





    A

    B

    C

    D

    A


    3

    2

    1

    B



    2


    C

    2

    2


    1

    D

    1


    1



  2. В таблице приведена стоимость перевозки грузов между соседними станциями. Если пересечение строки и столбца пусто, то соответствующие станции не являются соседними. Укажите таблицу, для которой выполняется условие «Минимальная стоимость перевозки грузов от пункта А до пункта В не больше 3».

1)

2)

3)

4)


A

B

C

D

Е

A




1


B



4


3

C


4


4


D

1


4



Е


3






A

B

C

D

Е

A



5

1


B



4


2

C

5

4




D

1





Е


2






A

B

C

D

Е

A



3

1

1

B



2

1


C

3

2




D

1

1




Е

1







A

B

C

D

Е

A



2

1

3

B



2


2

C

2

2




D

1





Е

3

2








A

B

C

D

A



1

2

B



2

3

C

1

2


5

D

2

3

5



  1. В таблице приведена стоимость перевозки пассажиров между соседними населенными пунктами. Укажите схему, соответствующую.


1)

2)

3)

4)

hello_html_1ed6826b.gif

hello_html_4e774db1.gif

hello_html_6f0f7324.gif

hello_html_m5d43f121.gifhello_html_42d1f81c.gif

  1. В таблицах приведена стоимость перевозки грузов между соседними станциями. Если пересечение строки и столбца пусто, то соответствующие станции не являются соседними. Укажите номер таблицы, для которой выполняется условие «Максимальная стоимость перевозки грузов от пункта В до пункта D не больше 5».

1)

2)

3)

4)


A

B

C

D

A


2


2

B

2


4

3

C


4


4

D

2

3

4




A

B

C

D

A


2

1

1

B

2


4


C

1

4


1

D

1


1




A

B

C

D

A


1

3

6

B

1


2

4

C

3

2



D

6

4





A

B

C

D

A


3

2

1

B

3


2


C

2

2


4

D

1


4





A

B

C

D

A


3


1

B

3


2

1

C


2


4

D

1

1

4



  1. В таблице приведена стоимость перевозки пассажиров между соседними населенными пунктами. Укажите схему, соответствующую таблице.



1)

2)

3)

4)

hello_html_31d4bde9.gif

hello_html_47b734b1.gif

hello_html_18b22d2.gif

hello_html_m40330dc0.gifhello_html_42d1f81c.gif

  1. В таблицах приведена протяженность автомагистралей между соседними населенными пунктами. Если пересечение строки и столбца пусто, то соответствующие населенные пункты не являются соседними. Укажите номер таблицы, для которой выполняется условие «Максимальная протяженность маршрута от пункта А до пункта С не больше 6». Протяженность маршрута складывается из протяженности автомагистралей между соответствующими соседними населенными пунктами. При этом через любой насеченный пункт маршрут должен проходить не более одного раза.

1)

2)

3)

4)


A

B

C

D

A


1


2

B

1


4

3

C


4


3

D

2

3

3




A

B

C

D

A


1

2


B

1


4

2

C

2

4


3

D


2

3




A

B

C

D

A


3

3

2

B

3


4

3

C

3

4



D

2

3





A

B

C

D

A


3

2

1

B

3


4


C

2

4


1

D

1


1





  1. A

    B

    C

    D

    E

    A


    1

    4


    1

    B

    1


    2



    C

    4

    2


    3


    D



    3



    E

    1





    В таблице приведена стоимость перевозки пассажиров между соседними населенными пунктами. Укажите схему, соответствующую таблице.





1)

2)

3)

4)


hello_html_m62902a2c.gif

hello_html_m283668c6.gif

hello_html_m27e0ca8f.gifhello_html_m2b80afe1.gif

hello_html_2402feda.gifhello_html_m2b80afe1.gif


































A

B

C

D

E

A


2

4

1


B

2





C

4




5

D

1




4

E



5

4



  1. В таблице приведена стоимость перевозки пассажиров между соседними населенными пунктами. Укажите схему, соответствующую таблице.




1)

2)

3)

4)

hello_html_m65dbde5.gifhello_html_m5bfb6355.gif

hello_html_43da2c80.gif

hello_html_m6dfb66ea.gif

hello_html_m388f8803.gif


  1. Путешественник пришел в 08:00 на автостанцию поселка ЛЕСНОЕ и увидел следующее расписание автобусов:

Отправление из Прибытие в Время отправления Время прибытия

ЛЕСНОЕ ОЗЕРНОЕ 07:45 08:55

ЛУГОВОЕ ЛЕСНОЕ 08:00 09:10

ПОЛЕВОЕ ЛЕСНОЕ 08:55 11:25

ПОЛЕВОЕ ЛУГОВОЕ 09:10 10:10

ЛЕСНОЕ ПОЛЕВОЕ 09:15 11:45

ОЗЕРНОЕ ПОЛЕВОЕ 09:15 10:30

ЛЕСНОЕ ЛУГОВОЕ 09:20 10:30

ОЗЕРНОЕ ЛЕСНОЕ 09:25 10:35

ЛУГОВОЕ ПОЛЕВОЕ 10:40 11:40

ПОЛЕВОЕ ОЗЕРНОЕ 10:45 12:00

Определите самое раннее время, когда путешественник сможет оказаться в пункте ПОЛЕВОЕ согласно этому расписанию.

1) 10:30 2) 11:25 3)11:40 4) 11:45

  1. Путешественник пришел в 08:00 на автостанцию поселка КАЛИНИНО и увидел следующее расписание автобусов:

Отправление из Прибытие в Время отправления Время прибытия

КАМЫШИ КАЛИНИНО 08:15 09:10

КАЛИНИНО БУКОВОЕ 09:10 10:15

РАКИТИНО КАМЫШИ 10:00 11:10

РАКИТИНО КАЛИНИНО 10:05 12:25

РАКИТИНО БУКОВОЕ 10:10 11:15

КАЛИНИНО РАКИТИНО 10:15 12:35

КАЛИНИНО КАМЫШИ 10:20 11:15

БУКОВОЕ КАЛИНИНО 10:35 11:40

КАМЫШИ РАКИТИНО 11:25 12:30

БУКОВОЕ РАКИТИНО 11:40 12:40

Определите самое раннее время, когда путешественник сможет оказаться в пункте РАКИТИНО согласно этому расписанию.

1) 12:25 2) 12:30 3)12:35 4) 12:40

  1. В таблицах приведена протяженность автомагистралей между соседними населенными пунктами. Если пересечение строки и столбца пусто, то соответствующие населенные пункты не являются соседними. Укажите номер таблицы, для которой выполняется условие «Максимальная протяженность маршрута от пункта C до пункта B не больше 6». Протяженность маршрута складывается из протяженности автомагистралей между соответствующими соседними населенными пунктами. При этом через любой насеченный пункт маршрут должен проходить не более одного раза.

1)

2)

3)

4)


A

B

C

D

E

A


4

3


7

B

4



2


C

3



6


D


2

6


1

E

7



1




A

B

C

D

E

A


2

5


6

B

2



3


C

5





D


3



1

E

6



1




A

B

C

D

E

A



2

2

6

B




2


C

2



2


D

2

2

2



E

6







A

B

C

D

E

A


5

2


6

B

5



5


C

2



2


D


5

2


3

E

6



3




  1. Между четырьмя местными аэропортами: ВОСТОРГ, ЗАРЯ, ОЗЕРНЫЙ и ГОРКА, ежедневно выполняются авиарейсы. Приведён фрагмент расписания перелётов между ними:

Аэропорт вылета Аэропорт прилета Время вылета Время прилета

ВОСТОРГ ГОРКА 13:10 17:15

ОЗЕРНЫЙ ЗАРЯ 13:00 14:30

ОЗЕРНЫЙ ВОСТОРГ 12:10 14:20

ГОРКА ОЗЕРНЫЙ 11:15 15:30

ВОСТОРГ ОЗЕРНЫЙ 12:35 14:50

ЗАРЯ ОЗЕРНЫЙ 12:30 14:20

ВОСТОРГ ЗАРЯ 10:30 12:15

ЗАРЯ ГОРКА 14:40 16:45

ГОРКА ЗАРЯ 15:15 17:20

ОЗЕРНЫЙ ГОРКА 14:30 16:20

Путешественник оказался в аэропорту ВОСТОРГ в полночь (0:00). Определите самое раннее время, когда он может попасть в аэропорт ГОРКА.

1) 13:10 2) 16:20 3)16:45 4) 17:15

1 Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

  4. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

12 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Интернет-маркетолог

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A11.doc

isa.muschanov.70@yandex.ru



А11 (базовый уровень, время – 1 мин)

Тема: Кодирование и декодирование информации.

Что нужно знать:

  • кодирование – это перевод информации с одного языка на другой (запись в другой системе символов, в другом алфавите)

  • обычно кодированием называют перевод информации с «человеческого» языка на формальный, например, в двоичный код, а декодированием – обратный переход

  • один символ исходного сообщения может заменяться одним символом нового кода или несколькими символами, а может быть и наоборот – несколько символов исходного сообщения заменяются одним символом в новом коде (китайские иероглифы обозначают целые слова и понятия)

  • кодирование может быть равномерное и неравномерное;
    при равномерном кодировании все символы кодируются кодами равной длины;
    при неравномерном кодировании разные символы могут кодироваться кодами разной длины, это затрудняет декодирование

Пример задания:

Для кодирования букв А, Б, В, Г решили использовать двухразрядные последовательные двоичные числа (от 00 до 11, соответственно). Если таким способом закодировать последовательность символов БАВГ и записать результат шестнадцатеричным кодом, то получится

1) 4B16 2) 41116 3)BACD16 4) 102316

Решение:

  1. из условия коды букв такие: A – 00, Б –01, В – 10 и Г – 11, код равномерный

  2. последовательность БАВГ кодируется так: 01 00 10 11 = 1001011

  3. разобьем такую запись на тетрады справа налево и каждую тетраду переведем в шестнадцатеричную систему (то есть, сначала в десятичную, а потом заменим все числа от 10 до 15 на буквы A, B, C, D, E, F); получаем

1001011 = 0100 10112 = 4B16

  1. правильный ответ – 1.


Возможные ловушки:

  • расчет на то, что при переводе тетрад в шестнадцатеричную систему можно забыть заменить большие числа (10–15) на буквы (10112 = 11, получаем неверный ответ 41116)

  • может быть дан неверный ответ, в котором нужные цифры поменяли местами (расчет на невнимательность), например, B416

  • в ответах дана последовательность, напоминающая исходную (неверный ответ BACD16), чтобы сбить случайное угадывание

Еще пример задания:



Решение (вариант 1, декодирование с начала):

  1. здесь используется неравномерное кодирование, при котором декодирование может быть неоднозначным, то есть, заданному коду может соответствовать несколько разных исходных сообщений

  2. попробуем декодировать с начала цепочки, первой буквой может быть B или E, эти случаи нужно рассматривать отдельно

  3. пусть первая буква – E с кодом 011, тогда остается цепочка 0100011000

  • для кода 0100011000 первой буквой может быть только B с кодом 01, тогда остается 00011000 ( начало исходной цепочки – EB?)

  • для кода 00011000 первой буквой может быть только A с кодом 000, тогда остается 11000, а эта цепочка не может быть разложена на заданные коды букв

  • поэтому наше предположение о том, что первая буква – E, неверно

  1. пусть первая буква – B с кодом 01, тогда остается цепочка 10100011000

  • для кода 10100011000 первой буквой может быть только D с кодом 10, тогда остается 100011000 (можно полагать, что начало исходной цепочки – BD?)

  • для кода 100011000 первой буквой может быть только С с кодом 100, тогда остается 011000 (начало исходной цепочки – BDC?)

Несмотря на то, что среди ответов есть единственная цепочка, которая начинается с BDC, здесь нельзя останавливаться, потому что «хвост» цепочки может «не сойтись»

  • для кода 011000 на первом месте может быть B (код 01) или E (011); в первом случае «хвост» 1000 нельзя разбить на заданные коды букв, а во втором – остается код 000 (буква А), поэтому исходная цепочка может быть декодирована как BDCEA

  1. правильный ответ – 3

Возможные ловушки и проблемы:

  • при декодировании неравномерных кодов может быть очень много вариантов, их нужно рассмотреть все; это требует серьезных усилий и можно легко запутаться

  • нельзя останавливаться, не закончив декодирование до конца и не убедившись, что все «сходится», на это обычно и рассчитаны неверные ответы

Решение (вариант 2, декодирование с конца):

  1. для кода 0110100011000 последней буквой может быть только А (код 000), тогда остается цепочка 0110100011

  2. для 0110100011 последней может быть только буква E (011), тогда остается цепочка 0110100

  3. для 0110100 последней может быть только буква C (100), тогда остается цепочка 0110

  4. для 0110 последней может быть только буква D (10), тогда остается 01 – это код буквы B

  5. таким образом, получилась цепочка BDCEA

  6. правильный ответ – 3

Возможные ловушки и проблемы:

  • при декодировании неравномерных кодов может быть очень много вариантов (здесь случайно получилась единственно возможная цепочка), их нужно рассмотреть все; это требует серьезных усилий и можно легко запутаться

  • нельзя останавливаться, не закончив декодирование до конца и не убедившись, что все «сходится», на это обычно и рассчитаны неверные ответы

Решение (вариант 3, кодирование ответов):

  1. в данном случае самое простое и надежное – просто закодировать все ответы, используя приведенную таблицу кодов, а затем сравнить результаты с заданной цепочкой

  2. получим

1) EBCEA – 01101100011000 2) BDDEA – 011010011000

3) BDCEA – 0110100011000 4) EBAEA – 01101000011000

  1. сравнивая эти цепочки с заданной, находим, что правильный ответ – 3.


Возможные проблемы:

  • сложно сравнивать длинные двоичные последовательности, поскольку они однородны, содержат много одинаковых нулей и единиц

Еще пример задания:

Для передачи по каналу связи сообщения, состоящего только из букв А, Б, В, Г, решили использовать неравномерный по длине код: A=0, Б=10, В=110. Как нужно закодировать букву Г, чтобы длина кода была минимальной и допускалось однозначное разбиение кодированного сообщения на буквы?

1) 1 2) 1110 3) 111 4) 11

Решение (вариант 1, метод подбора):

  1. рассмотрим все варианты в порядке увеличения длины кода буквы Г

  2. начнем с Г=1; при этом получается, что сообщение «10» может быть раскодировано двояко: как ГА или Б, поэтому этот вариант не подходит

  3. следующий по длине вариант – Г=11; в этом случае сообщение «110» может быть раскодировано как ГА или В, поэтому этот вариант тоже не подходит

  4. третий вариант, Г=111, дает однозначное раскодирование во всех сочетаниях букв, поэтому…

  5. … правильный ответ – 3.


Возможные проблемы:

  • при переборе можно ошибиться и «просмотреть» какой-нибудь вариант


Решение (вариант 2, «умный» метод):

  1. для того, чтобы сообщение, записанное с помощью неравномерного по длине кода, однозначно раскодировалось, требуется, чтобы никакой код не был началом другого (более длинного) кода; это условие называют условием Фано

  2. как и в первом решении, рассматриваем варианты, начиная с самого короткого кода для буквы Г; в нашем случае код Г=1 является началом кодов букв Б и В, поэтому условие Фано не выполняется, такой код не подходит

  3. код Г=11 также является началом другого кода (кода буквы В), поэтому это тоже ошибочный вариант

  4. третий вариант кода, Г=111, не является началом никакого уже известного кода; кроме того, ни один уже имеющийся код не является началом кода 111; таким образом, условие Фано выполняется

  5. поэтому правильный ответ – 3.


Возможные проблемы:

  • нужно знать условие Фано

Еще пример задания1:

Черно-белое растровое изображение кодируется построчно, начиная с левого верхнего угла и заканчивая в правом нижнем углу. При кодировании 1 обозначает черный цвет, а 0 – белый.

























Для компактности результат записали в шестнадцатеричной системе счисления. Выберите правильную запись кода.

1) BD9AA5 2) BDA9B5 3) BDA9D5 4) DB9DAB

Решение:

  1. «вытянем» растровое изображение в цепочку: сначала первая (верхняя) строка, потом – вторая, и т.д.:

























    1 строка

    2 строка

    3 строка

    4 строка

  2. в этой полоске 24 ячейки, черные заполним единицами, а белые – нулями:

    1

    0

    1

    1

    1

    1

    0

    1

    1

    0

    1

    0

    1

    0

    0

    1

    1

    1

    0

    1

    0

    1

    0

    1

    1 строка

    2 строка

    3 строка

    4 строка

  3. поскольку каждая цифра в шестнадцатеричной системе раскладывается ровно в 4 двоичных цифры, разобьем полоску на тетрады – группы из четырех ячеек (в данном случае все равно, откуда начинать разбивку, поскольку в полоске целое число тетрад – 6):

    1

    0

    1

    1

    1

    1

    0

    1

    1

    0

    1

    0

    1

    0

    0

    1

    1

    1

    0

    1

    0

    1

    0

    1

  4. переводя тетрады в шестнадцатеричную систему, получаем последовательно цифры B (11), D(13), A(10), 9, D(13) и 5, то есть, цепочку BDA9D5

  5. поэтому правильный ответ – 3.


Возможные проблемы:

  • нужно уметь быстро переводить тетрады в шестнадцатеричные цифры (в крайнем случае, это можно сделать через десятичную систему)


Задачи для тренировки2:

  1. Для кодирования букв А, Б, В, Г решили использовать двухразрядные последовательные двоичные числа (от 00 до 11 соответственно). Если таким способом закодировать последовательность символов ГБАВ и записать результат в шестнадцатеричной системе счисления, то получится:

1) 13216 2) D216 3) 310216 4) 2D16

  1. Для кодирования букв А, Б, В, Г решили использовать двухразрядные последовательные двоичные числа (от 00 до 11 соответственно). Если таким способом закодировать последовательность символов ГБВА и записать результат шестнадцатеричным кодом, то получится:

1) 13816 2) DBCA16 3) D816 4) 312016

  1. Для 5 букв латинского алфавита заданы их двоичные коды (для некоторых букв - из двух бит, для некоторых - из трех). Эти коды представлены в таблице:

a b c d e

000 110 01 001 10

Определите, какой набор букв закодирован двоичной строкой 1100000100110

1) baade 2) badde 3) bacde 4) bacdb

  1. Для кодирования букв А, Б, В, Г используются четырехразрядные последовательные двоичные числа от 1000 до 1011 соответственно. Если таким способом закодировать последовательность символов БГАВ и записать результат в восьмеричном коде, то получится:

1) 175423 2) 115612 3) 62577 4) 12376

  1. Для кодирования букв А, В, С, D используются трехразрядные последовательные двоичные числа, начинающиеся с 1 (от 100 до 111 соответственно). Если таким способом закодировать последовательность символов CDAB и записать результат в шестнадцатеричном коде, то получится:

1) А5216 2) 4С816 3) 15D16 4) DE516

  1. Для кодирования букв К, L, М, N используются четырехразрядные последовательные двоичные числа от 1000 до 1011 соответственно. Если таким способом закодировать последовательность символов KMLN и записать результат в восьмеричном коде, то получится:

1) 846138 2) 1052338 3) 123458 4) 7763258

  1. Для 5 букв латинского алфавита заданы их двоичные коды (для некоторых букв – из двух бит, для некоторых – из трех). Эти коды представлены в таблице:

а b с d е

100 110 011 01 10

Определите, какой набор букв закодирован двоичной строкой 1000110110110, если известно, что все буквы в последовательности – разные:

1) cbade 2) acdeb 3) acbed 4) bacde

  1. Для 6 букв латинского алфавита заданы их двоичные коды (для некоторых букв из двух бит, для некоторых – из трех). Эти коды представлены в таблице:

А В С D Е F

00 100 10 011 11 101

Определите, какая последовательность из 6 букв закодирована двоичной строкой 011111000101100.

1) DEFBAC 2) ABDEFC 3) DECAFB 4) EFCABD

  1. Для кодирования букв А, В, С, D используются четырехразрядные последовательные двоичные числа, начинающиеся с 1 (от 1001 до 1100 соответственно). Если таким способом закодировать последовательность символов CADB и записать результат в шестнадцатеричном коде, то получится:

1) AF5216 2) 4CB816 3) F15D16 4) В9СА16

  1. Для кодирования сообщения, состоящего только из букв А, Б, В и Г, используется неравномерный по длине двоичный код:

А Б В Г

00 11 010 011

Если таким способом закодировать последовательность символов ВГАГБВ и записать результат в шестнадцатеричном коде, то получится:

1) CDADBC16 2) A7C416 3) 41271016 4) 4С7А16

  1. Для кодирования сообщения, состоящего только из букв А, Б, В и Г, используется неравномерный по длине двоичный код:

А Б В Г

00 11 010 011

Если таким способом закодировать последовательность символов ГАВБВГ и записать результат в шестнадцатеричном коде, то получится:

1) 62D316 2) 3D2616 3) 3132616 4) 6213316

  1. Для кодирования сообщения, состоящего только из букв А, Б, В и Г, используется неравномерный по длине двоичный код:

А Б В Г

00 11 010 011

Если таким способом закодировать последовательность символов ГБВАВГ и записать результат в шестнадцатеричном коде, то получится:

1) 7101316 2) DBCACD16 3) 31A716 4) 7A1316

  1. Для кодирования сообщения, состоящего только из букв А, Б, В и Г, используется неравномерный по длине двоичный код:

А Б В Г

00 11 010 011

Если таким способом закодировать последовательность символов ГАВБГВ и записать результат в шестнадцатеричном коде, то получится:

1) DACBDC16 2) AD2616 3) 62131016 4) 62DA16

  1. Для кодирования сообщения, состоящего только из букв A, B, C, D и E, используется неравномерный по длине двоичный код:

A B C D E

000 11 01 001 10

Какое (только одно!) из четырех полученных сообщений было передано без ошибок и может быть раскодировано:

1) 110000010011110

2) 110000011011110

3) 110001001001110

4) 110000001011110

  1. Для передачи по каналу связи сообщения, состоящего только из символов А, Б, В и Г используется посимвольное кодирование: А-00, Б-11, В-010, Г-011. Через канал связи передается сообщение: ВАГБГВ. Закодируйте сообщение данным кодом. Полученную двоичную последовательность переведите в шестнадцатеричный вид.

1) AD34 2) 43DA 3) 101334 4) CADBCD

  1. Для передачи по каналу связи сообщения, состоящего только из букв А, Б, В, Г, решили использовать неравномерный по длине код: A=0, Б=01, В=001. Как нужно закодировать букву Г, чтобы длина кода была минимальной и допускалось однозначное разбиение кодированного сообщения на буквы?

1) 0001 2) 000 3) 11 4) 101

  1. Для передачи по каналу связи сообщения, состоящего только из букв А, Б, В, Г, решили использовать неравномерный по длине код: A=0, Б=100, В=101. Как нужно закодировать букву Г, чтобы длина кода была минимальной и допускалось однозначное разбиение кодированного сообщения на буквы?

1) 1 2) 11 3) 01 4) 010

  1. Черно-белое растровое изображение кодируется построчно, начиная с левого верхнего угла и заканчивая в правом нижнем углу. При кодировании 1 обозначает черный цвет, а 0 – белый.
















Для компактности результат записали в восьмеричной системе счисления. Выберите правильную запись кода.

1) 57414 2) 53414 3) 53412 4) 53012

  1. Для передачи по каналу связи сообщения, состоящего только из символов А, Б, В и Г используется посимвольное кодирование: А-0, Б-11, В-100, Г-011. Через канал связи передается сообщение: ГБАВАВГ. Закодируйте сообщение данным кодом. Полученную двоичную последовательность переведите в восьмеричный код.

1) DBACACD 2) 75043 3) 7A23 4) 3304043

  1. Для передачи по каналу связи сообщения, состоящего только из символов А, Б, В и Г используется посимвольное кодирование: А-10, Б-11, В-110, Г-0. Через канал связи передается сообщение: ВАГБААГВ. Закодируйте сообщение данным кодом. Полученную двоичную последовательность переведите в шестнадцатеричный код.

1) D3A6 2) 62032206 3) 6A3D 4) CADBAADC




1 Самылкина Н.Н., Островская Е.М. Информатика: тренировочные задания. – М.: Эксмо, 2009.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Самылкина Н.Н., Островская Е.М. Информатика: тренировочные задания. – М.: Эксмо, 2009.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

8 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Фитнес-тренер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A12.doc

isa.muschanov.70@yandex.ru



A12 (базовый уровень, время – 2 мин)

Тема: Проверка закономерностей методом рассуждений.

Что нужно знать:

  • в общем-то, никаких знаний из курса информатики здесь не требуется, эту задачу можно давать детям начальной школы для развития логического мышления

Пример задания:

Цепочка из трех бусин, помеченных латинскими буквами, формируется по следующему правилу. В конце цепочки стоит одна из бусин A, B, C. На первом месте – одна из бусин B, D, C, которой нет на третьем месте. В середине – одна из бусин А, C, E, B, не стоящая на первом месте. Какая из перечисленных цепочек создана по этому правилу?

1) CBB 2) EAC 3)BCD 4) BCB

Решение:

  1. правило содержит три условия, обозначим их так:

У1: третья бусина – A, B или C

У2-3: первая бусина – B, D или C, не совпадающая с третьей

У4-5: вторая бусина – A, B, C или E, не совпадающая с первой

  1. фактически условия У2-3 и У4-5 сложные, их можно разбить на два, так что получится всего пять условий

У1: третья бусина – A, B или C

У2: первая бусина – B, D или C

У3: первая и третья бусины – разные

У4: вторая бусина – A, B, C или E

У5: первая и вторая бусины – разные

  1. теперь для каждого из ответов проверим выполнение всех условий; в таблице красный крестик обозначает, что условие не выполняется для данного варианта; зеленым цветом выделена строка, где нет ни одного крестика, то есть все условия выполняются:


    У1

    У2

    У3

    У4

    У5

    1) CBB






    2) EAC






    3) BCD






    4) BCB






  2. таким образом, правильный ответ – 1.

Возможные проблемы:

  • не все могут сделать подобный анализ в уме, особенно если не разбивать У2-3 и У4-5 на две части; поэтому не стесняйтесь построить таблицу на черновике

Задачи для тренировки1:

  1. В формировании цепочки из четырех бусин используются некоторые правила: В конце цепочки стоит одна из бусин Р, N, Т, O. На первом – одна из бусин P, R, T, O, которой нет на третьем месте. На третьем месте – одна из бусин O, P, T, не стоящая в цепочке последней. Какая из перечисленных цепочек могла быть создана с учетом этих правил?

1) PORT 2) TTTO 3)TTOO 4) OOPO

  1. Для составления цепочек разрешается использовать бусины 5 типов, обозначаемых буквами А, Б, В, Е, И. Каждая цепочка должна состоять из трех бусин, при этом должны соблюдаться следующие правила:

а) на первом месте стоит одна из букв: А, Е, И,

б) после гласной буквы в цепочке не может снова идти гласная, а после согласной – согласная,

в) последней буквой не может быть А.

Какая из цепочек построена по этим правилам?

1)АИБ 2) ЕВА 3) БИВ 4) ИБИ

  1. Для составления цепочек используются бусины, помеченные буквами: A, B, C, D, E. На первом месте в цепочке стоит одна из бусин A, C, E. На втором – любая гласная, если первая буква согласная, и любая согласная, если первая гласная. На третьем месте – одна из бусин C, D, E, не стоящая в цепочке на первом месте. Какая из перечисленных цепочек создана по этому правилу?

1) CBE 2) ADD 3) ECE 4) EAD

  1. Цепочка из трех бусин формируется по следующему правилу: На первом месте в цепочке стоит одна из бусин А, Б, В. На втором – одна из бусин Б, В, Г. На третьем месте – одна из бусин А, В, Г, не стоящая в цепочке на первом или втором месте. Какая из следующих цепочек создана по этому правилу:

1) АГБ 2) ВАГ 3) БГГ 4) ББГ

  1. Для составления 4-значных чисел используются цифры 1, 2, 3, 4, 5, при этом соблюдаются следующие правила:

  • На первом месте стоит одна из цифр 1, 2 или 3.

  • После каждой четной цифры идет нечетная, а после каждой нечетной - четная

  • Третьей цифрой не может быть цифра 5.

Какое из перечисленных чисел получено по этим правилам?

1) 4325 2) 1432 3) 1241 4) 3452

  1. Для составления цепочек используются разные бусины, которые условно обозначаются цифрами 1, 2, 3, 4, 5. Каждая такая цепочка состоит из 4 бусин, при этом соблюдаются следующие правила построения цепочек:

  • На первом месте стоит одна из бусин 1, 4 или 5.

  • После четной цифры в цепочке не может идти снова четная, а после нечетной – нечетная.

  • Последней цифрой не может быть цифра 3.

Какая из перечисленных цепочек создана по этим правилам?

1) 4325 2) 4123 3) 1241 4) 3452

  1. Для составления цепочек используются разноцветные бусины: темные – синяя (С), зеленая (3) и светлые – желтая (Ж), белая (Б), голубая (Г). На первом месте в цепочке стоит бусина синего или желтого цвета. В середине цепочки – любая из светлых бусин, если первая бусина темная, и любая из темных бусин, если первая бусина светлая. На последнем месте – одна из бусин белого, голубого или зеленого цвета, не стоящая в цепочке в середине. Какая из перечисленных цепочек создана по этому правилу?

1) ЖСГ 2) БГЗ 3) СГЖ 4) ЖБС

  1. Цепочка из трех бусин формируется по следующему правилу: на первом месте стоит одна из бусин Б, В, Г. На втором – одна из бусин А, Б, В. На третьем месте – одна из бусин А, В, Г, не стоящая в цепочке на первом или втором месте. Какая из цепочек создана по этому правилу?

1) АГБ 2) ВАА 3) БГВ 4) ГБА

  1. Для составления цепочек используются разноцветные бусины: темные – красная (К), синяя (С), зеленая (3), и светлые – желтая (Ж), белая (Б). На первом месте в цепочке стоит бусина красного, синего или белого цвета. В середине цепочки - любая из светлых бусин, если первая бусина темная, и любая из темных бусин, если первая бусина светлая. На последнем месте – одна из бусин белого, желтого или синего цвета, не стоящая в цепочке в середине. Какая из перечисленных цепочек создана по этому правилу?

1) КЖС 2) БКЗ 3) СЗЖ 4) ЗКС

  1. Для составления цепочек используются разные бусины, которые условно обозначаются цифрами 1, 2, 3, 4, 5. Каждая такая цепочка состоит из 4 бусин, при этом соблюдаются следующие правила построения цепочек: На втором месте стоит одна из бусин 2, 3 или 4. После четной цифры в цепочке не может идти снова четная, а после нечетной – нечетная. Последней цифрой не может быть цифра 2. Какая из перечисленных цепочек создана по этим правилам?

1) 4321 2) 4123 3) 1241 4) 3452

  1. Джентльмен пригласил даму в гости, но вместо кода цифрового замка своего подъезда отправил ей такое сообщение: «В последовательности 52186 все четные цифры нужно разделить на 2, а из нечетных вычесть 1. Затем удалить из полученной последовательности первую и последнюю цифры». Определите код цифрового замка.

1) 104 2) 107 3) 218 4) 401

  1. Кассир забыл пароль к сейфу, но помнил алгоритм его получения из строки «AYY1YABC55»: если последовательно удалить из строки цепочки символов «YY» и «ABC», а затем поменять местами символы A и Y, то полученная последовательность и будет паролем. Определите пароль:

1) A1Y55 2) A155 3) A55Y1 4) Y1A55

  1. Вася забыл пароль к Windows XP, но помнил алгоритм его получения из строки подсказки «B265C42GC4»: если все последовательности символов «C4» заменить на «F16», а затем из получившейся строки удалить все трехзначные числа, то полученная последовательность и будет паролем. Определите пароль:

1) BFGF16 2) BF42GF16 3) BFGF4 4) BF16GF

  1. Вася забыл пароль к Windows XP, но помнил алгоритм его получения из строки подсказки «23ABN12QR8N»: если последовательности символов «AB» и «QR» поменять местами, а затем из получившейся строки удалить все символы «N», то полученная последовательность и будет паролем. Определите пароль:

1) 23AB12QR8 2) 23QR12AB8 3) 23QRAB8 4) 23QR128

  1. Шифровальщику нужно восстановить забытое кодовое слово. Он помнит, что на третьем месте стоит одна из букв Д, З, Е. на четвертом месте – И, К или Е, не стоящая на третьем месте. на первом месте – одна из букв Д, З, К, И, не стоящая в слове на втором или четвертом месте. На втором месте стоит любая согласная, если третья буква гласная, и любая гласная, если третья согласная. Определите кодовое слово:

1) ДИЕК 2) КДЕК 3) ИЗЕЕ 4) ДИДЕ

  1. Витя пригласил своего друга Сергея в гости, но не сказал ему код от цифрового замка своего подъезда, а послал следующее SMS-сообщение: «в последовательности чисел 3, 1, 8, 2, 6 все числа больше 5 разделить на 2, а затем удалить из полученной последовательности все четные числа». Выполнив указанные в сообщении действия, Сергей получил следующий код для цифрового замка:

1) 3, 1 2) 1, 1, 3 3) 3, 1, 3 4) 3, 3, 1

  1. Вася забыл пароль для запуска компьютера, но помнил алгоритм его получения из строки подсказки «KBRA69KBK»: если все последовательности символов «RA6» заменить на «FL», «KB» на «12B», а затем из получившейся строки удалить три последних символа, то полученная последовательность и будет паролем. Определите пароль:

1) 12BFL91 2) 12BFL9 3) KBFL912BK 4) 12BFL1

  1. Маша забыла пароль для запуска компьютера, но помнила алгоритм его получения из строки подсказки «KBMAM9KBK»: если все последовательности символов «MAM» заменить на «RP», «KBK» на «1212», а затем из получившейся строки удалить три последних символа, то полученная последовательность и будет паролем. Определите пароль:

1) KBRP91 2) 1212RP91 3) KBRP9 4) KB91212

  1. Глаша забыла пароль для запуска компьютера, но помнила алгоритм его получения из строки подсказки «QWER3QWER1»: если все последовательности символов «QWER» заменить на «QQ», а затем из получившейся строки удалить сочетания символов «3Q», то полученная последовательность и будет паролем. Определите пароль:

1) 3QQQ1 2) QQ1 3) QQQ 4) QQQ1





1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

5 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Методист-разработчик онлайн-курсов

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A12k.doc

isa.muschanov.70@yandex.ru



A12к (базовый уровень, время – 2 мин)

Тема: расчет количества возможных вариантов (комбинаторика)1

Что нужно знать:

  • если на каждом шаге известно количество возможных вариантов выбора, то для вычисления общего количества вариантов нужно все эти числа перемножить;
    например, в двузначном числе мы можем выбрать первую цифру 9 способами (она не может быть нулем), а вторую – 10 способами, поэтому всего есть 9·10=90 двузначных чисел

  • если мы разбили все нужные нам комбинации на несколько групп (не имеющих общих элементов!) и подсчитали количество вариантов в каждой группе, то для вычисления общего количества вариантов нужно все эти числа сложить;
    например, есть 9·10=90 трехзначных чисел, оканчивающихся на 5, и 9·10=90 трехзначных чисел, оканчивающихся на 2, поэтому 90+90=180 трехзначных чисел оканчиваются на 2 или на 5

  • если в предыдущем случае группы имеют общие элементы, их количество нужно вычесть из полученной суммы;
    например, есть 9·10=90 трехзначных чисел, оканчивающихся на 5, и 10·10=100 трехзначных чисел, начинающихся на 5; в обе группы входят числа, которые начинаются и заканчиваются на 5, их всего 10 штук, поэтому количество чисел, которые начинаются или заканчиваются на 5, равно 90+100-10=180.

Что не мешает знать:

  • если есть n различных элементов, число их различных перестановок равно факториалу числа n, то есть произведению всех натуральных чисел от 1 до n:

n! = 1·2·3·…·(n-1)·n

например, три объекта (А, Б и В) можно переставить 6 способами (3!=1·2·3=6):

(А, Б, В), (А, В, Б), (Б, А, В), (Б, В, А), (В, А, Б) и (В, Б, А)

  • если нужно выбрать m элементов из n (где nm) и две комбинации, состоящие из одних и тех же элементов, расположенных в разном порядке, считаются различными, число таких комбинаций (они называются размещениями) равно

hello_html_m5d329ef6.gif

например, в соревновании пяти спортсменов призовые места (первые три) могут распределиться 60 способами, поскольку

hello_html_5c6e9f1b.gif

  • если нужно выбрать m элементов из n (где nm) и порядок их расположения не играет роли, число таких комбинаций (они называются сочетаниями) равно

hello_html_m1ece8397.gif

например, выбрать двух дежурных из пяти человек можно 10 способами, поскольку

hello_html_m72310de5.gif.

Пример задания:

Сколько существует различных четырехзначных чисел, в записи которых используются только четные цифры?

1) 125 2) 250 3) 500 4) 625

Решение:

  1. первой цифрой может быть любая четная цифра, кроме нуля (иначе число не будет четырехзначным) – это 2, 4, 6 или 8, всего 4 варианта


    x

    ?

    ?

    ?

    Вариантов

    4




  2. предположим, что первая цифра выбрана; независимо от нее на втором месте может стоять любая из четных цифр – 0, 2, 4, 6 или 8, всего 5 вариантов:


    x

    y

    ?

    ?

    Вариантов

    4

    5



  3. аналогично находим, что последние две цифры также могут быть выбраны 5-ю способами каждая, независимо друг от друга и от других цифр (первой и второй):


    x

    y

    z

    w

    Вариантов

    4

    5

    5

    5

  4. общее количество комбинаций равно произведению

4·5·5·5 = 500

  1. таким образом, правильный ответ – 3.

Возможные ловушки и проблемы:

  • легко забыть, что первая цифра не может быть нулем, при этом мы получим неверный ответ 625 (ответ 4)

Еще пример задания:

Сколько существует четырехзначных чисел, в записи которых все цифры различны?

1) 3528 2) 4536 3) 5040 4) 9000

Решение:

  1. первой цифрой может быть любая цифра, кроме нуля (иначе число не будет четырехзначным), всего 9 вариантов


    x

    ?

    ?

    ?

    Вариантов

    9




  2. предположим, что первая цифра x выбрана; на втором месте может стоять любая цифра y, кроме x, всего 9 вариантов (ноль тоже может быть!):


    x

    y

    ?

    ?

    Вариантов

    9

    9



  3. третья цифра z может быть любой, кроме тех двух, которые уже стоят на первых двух местах, всего 8 вариантов:


    x

    y

    z

    ?

    Вариантов

    9

    9

    8


  4. наконец, четвертая цифра может быть любой из 7 оставшихся (не равных x, y и z)


    x

    y

    z

    w

    Вариантов

    9

    9

    8

    7

  5. общее количество комбинаций равно произведению

9·9·8·7 = 4536

  1. таким образом, правильный ответ – 2.

Возможные ловушки и проблемы:

  • легко забыть, что первая цифра не может быть нулем, при этом мы получим неверный ответ 10·9·8·7=5040 (ответ 3)

  • нужно учитывать, что выбор каждой следующей цифры зависит от предыдущих, иначе мы получим неверный ответ 9·10·10·10=9000 (ответ 4)

Еще пример задания:

Сколько существует различных четырехзначных чисел, в записи которых ровно две девятки, стоящие рядом?

1) 212 2) 225 3) 243 4) 280

Решение:

  1. возможны три случая: 99, 99 и 99, где жирная точка обозначает некоторую цифру, не равную 9

  2. для каждого из этих случаев нужно подсчитать количество вариантов и эти числа сложить

  3. в варианте 99 две последних цифры могут быть любыми, кроме девятки (по 9 вариантов выбора):




9

9

x

y

Вариантов

1

1

9

9

поэтому всего получаем 1·1·9·9 = 81 вариант

  1. в варианте 99 первая цифра не может быть нулем и девяткой (остается 8 вариантов), а последняя может быть любой, кроме девятки (9 вариантов):


x

9

9

y

Вариантов

8

1

1

9

поэтому всего получаем 8·1·1·9 = 72 варианта

  1. в варианте 99 первая цифра не может быть нулем и девяткой (остается 8 вариантов), а последняя может быть любой, кроме девятки (9 вариантов):


x

x

9

9

Вариантов

8

9

1

1

поэтому всего получаем 8·9·1·1 = 72 варианта

  1. общее количество вариантов равно сумме

81 + 72 + 72 = 225

  1. таким образом, правильный ответ – 2.

Возможные ловушки и проблемы:

  • можно забыть, что первая цифра не может быть нулем, при этом мы получим неверный ответ 81+81+81=243 (ответ 3)

  • можно забыть, что числа x и y не могут быть равны 9, при этом мы получим неверный ответ 100+90+90=280 (ответ 4)

Еще пример задания:

Сколько существует различных четырехзначных чисел, в записи которых не более двух различных цифр?

1) 446 2) 516 3) 576 4) 640

Решение:

  1. обозначим первую цифру через x, она не может быть нулем, поэтому возможно 9 вариантов выбора


    x

    ?

    ?

    ?

    Вариантов

    9




  2. другую цифру обозначим через y, ее тоже можно выбирать 9 способами (она может быть нулем, но не может быть равна x)

  3. нужно отдельно рассмотреть три случая: xy, xxy и xxx; для каждого из этих случаев нужно подсчитать количество вариантов и эти числа сложить

  4. в варианте xy две последних цифры могут быть (независимо друг от друга) выбраны равными x или y (по 2 варианта выбора):


x

y

x или y

x или y

Вариантов

9

9

2

2

поэтому всего получаем 9·9·2·2 = 324 варианта

  1. в варианте xxy последняя цифра может быть равна только x или y (2 варианта):


x

x

y

x или y

Вариантов

9

1

9

2

поэтому всего получаем 9·1·9·2 = 162 варианта

  1. в варианте xxx последняя цифра может быть любой (10 вариантов):


x

x

x

x или y

Вариантов

9

1

1

10

поэтому всего получаем 9·1·1·10 = 90 вариантов

  1. общее количество вариантов равно сумме

324 + 162 + 90 = 576

  1. таким образом, правильный ответ – 3.

Возможные ловушки и проблемы:

  • можно забыть, что первая цифра не может быть нулем, при этом мы получим неверный ответ 360+180+100=640 (ответ 4)

Еще пример задания:

Сколько существует различных четырехзначных чисел, в записи которых все цифры нечетные и хотя бы одна из них равна 5?

1) 226 2) 369 3) 500 4) 625

Решение (вариант 1):

  1. рассмотрим четыре варианта: 5, 5, 5 и 5; для каждого из этих случаев нужно подсчитать количество уникальных вариантов (исключив все общие!) и эти числа сложить

  2. в случае 5 три последних цифры могут быть любыми нечетными (по 5 независимых вариантов выбора):




5

x

y

z

Вариантов

1

5

5

5

поэтому всего получаем 1·5·5·5 = 125 вариантов

  1. с первого взгляда для случая 5 ситуация та же самая, но это не так; дело в том, что часть этих вариантов (с пятеркой на первом месте) уже вошла в первую группу 5, поэтому второй раз их учитывать не нужно; это значит, что на первом месте может быть одна из 4-х цифр – 1, 3, 7 или 9:


x

5

y

z

Вариантов

4

1

5

5

всего получаем 4·1·5·5 = 100 вариантов

  1. рассматривая случай 5, нужно выкинуть все варианты, в которых пятерки стоят на первых двух местах


x

y

5

z

Вариантов

4

4

1

5

всего получаем 4·4·1·5 = 80 вариантов

  1. для 5 аналогично получаем


x

y

z

5

Вариантов

4

4

4

1

всего получаем 4·4·4·1 = 64 варианта

  1. общее количество вариантов

125 + 100 + 80 + 64 = 369 вариантов

  1. таким образом, правильный ответ – 2.

Возможные ловушки и проблемы:

  • можно забыть отбросить повторяющиеся варианты при рассмотрении групп 5, 5 и 5; при этом мы получим неверный ответ 125+125+125+125=500 (ответ 3)

Решение (вариант 2):

  1. все числа, состоящие только из нечетных цифр, можно разбить на две группы: те, в которых есть пятерка, и те, где ее нет

  2. общее число чисел, состоящих только из нечетных цифр, находим аналогично первой рассмотренной задаче; учитывая, что среди них нет нуля, получаем

5·5·5·5 = 625 вариантов

  1. теперь аналогично найдем количество чисел, состоящих только из цифр 1, 3, 7 и 9 (без пятерки); поскольку на каждом из 4-х мест может стоять одна из 4-х цифр, получаем

4·4·4·4 = 256 вариантов

  1. нужный нам результат – это разница

625 – 256 = 369 вариантов

  1. таким образом, правильный ответ – 2.

Еще пример задания:

Виктор хочет купить пять разных книг, но денег у него хватает только на три (любые) книги. Сколькими способами Виктор может выбрать три книги из пяти?

1) 10 2) 20 3) 30 4) 60

Решение (вариант 1):

  1. будем рассуждать так: сначала Виктор выбирает одну (любую) книгу, затем – вторую (из оставшихся), затем – третью

  2. у него есть 5 разных способов выбрать первую книгу, затем – 4 разных способа выбрать вторую книгу (поскольку ту, что он выбрал сначала, уже нет смысла брать снова), и 3 способа выбрать третью книгу:


книга 1

книга 2

книга 3

Вариантов

5

4

3

всего получаем 5·4·3 = 60 вариантов

  1. проблема состоит в том, что среди этих 60 вариантов есть повторяющиеся: предположим, что книги имеют номера от 1 до 5, тогда наборы книг (1, 2, 3) и (3, 2, 1) – одинаковые (это разные перестановки чисел 1, 2 и 3)

  2. подсчитаем число перестановок трех чисел; на первом месте может стоять любое из 3-х чисел (3 варианта), на втором месте – любое из двух оставшихся (2 варианта), на третьем месте – только одно оставшееся число:


книга 1

книга 2

книга 3

Вариантов

3

2

1

всего получаем 3·2·1 = 6 вариантов

  1. это означает, что каждое сочетание было подсчитано 6 раз в п. 2, поэтому различных сочетаний книг – в 6 раз меньше, то есть 60 / 6 = 10

  2. таким образом, правильный ответ – 1.

Возможные ловушки и проблемы:

  • можно забыть, что среди сочетаний, подсчитанных в п. 2, есть одинаковые (неверный ответ 60)

  • можно неверно подсчитать количество повторяющихся комбинаций, разделив 60 на количество выбранных книг (неверный ответ 20)

Решение (вариант 2, формулы комбинаторики):

  1. нам нужно выбрать 3 объекта из 5, причем порядок выбора здесь не важен – нам нужны разные сочетания

  2. зная формулу для вычисления количества сочетаний, сразу находим (при m = 3 и n = 5)

hello_html_375f7b5c.gif.

  1. таким образом, правильный ответ – 1.

Возможные проблемы:

  • нужно помнить формулы комбинаторики





Задачи для тренировки:

  1. Сколько существует четырехзначных чисел, в которых есть ровно две восьмерки, не стоящие рядом?

1) 216 2) 224 3) 234 4) 243

  1. Сколько существует четырехзначных чисел, составленных из разных четных цифр?

1) 96 2) 120 3) 500 4) 625

  1. Сколько существует четырехзначных чисел, в записи которых есть хотя бы одна четная цифра?

1) 3289 2) 4536 3) 8375 4) 9000

  1. Сколько существует четырехзначных чисел, которые делятся на 5?

1) 900 2) 1000 3) 1800 4) 2000

  1. Сколько существует четырехзначных чисел, не превышающих 3000, в которых ровно две цифры «3»?

1) 36 2) 54 3) 81 4) 162

  1. В чемпионате по шахматам участвовало 40 спортсменов. Каждый с каждым сыграл по одной партии. Сколько всего партий было сыграно?

1) 780 2) 800 3) 1560 4) 1600

  1. В вазе лежат яблоко, груша, персик и абрикос. Кате разрешили выбрать два каких-то фрукта. Сколько у Кати вариантов выбора?

1) 6 2) 12 3) 16 4) 24

  1. У Паши есть 6 воздушных шариков разного цвета. Три из них он хочет подарить Маше. Сколькими способами он может это сделать?

1) 6 2) 12 3) 20 4) 60

  1. Сколько существует четырехзначных чисел, которые читаются одинаково «слева направо» и «справа налево»?

1) 50 2) 90 3) 100 4) 120

  1. Цепочка из трех бусин формируется по следующему правилу: На первом месте в цепочке стоит одна из бусин А, Б, В. На втором – одна из бусин Б, В, Г. На третьем месте – одна из бусин А, В, Г, не стоящая в цепочке на первом или втором месте. Сколько всего есть таких цепочек?

1) 9 2) 16 3) 21 4) 27





1 В демонстрационных вариантах заданий такого типа нет. Однако репетиционные экзамены в различных центрах тестирования (в том числе при ВУЗах) говорят о том, что они могут быть.

9 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Секретарь-администратор

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A13.doc

isa.muschanov.70@yandex.ru



A13 (базовый уровень, время – 1 мин)

Тема: Файловая система.

Что нужно знать:

  • данные на дисках хранятся в виде файлов (наборов данных, имеющих имя)

  • чтобы было удобнее разбираться с множеством файлов, их объединяют в каталоги (в Windows каталоги называются «папками»)

  • каталог можно воспринимать как контейнер, в котором размещаются файлы и другие каталоги, которые называются подкаталогами или вложенными каталогами (они находятся внутри другого каталога, вложены в него)

  • каталоги организованы в многоуровневую (иерархическую) структуру, которая называется «деревом каталогов»

  • главный каталог диска (который пользователь видит, «открыв» диск, например, в Проводнике Windows или аналогичной программе) называется корневым каталогом или «корнем» диска, он обозначается буквой логического диска, за которой следует двоеточие и знак «\» (обратный слэш1); например, A:\ – это обозначение корневого каталога диска А

  • каждый каталог (кроме корневого) имеет (один единственный!) «родительский» каталог – этот тот каталог, внутри которого находится данный каталог

  • полный адрес каталога – это перечисление каталогов, в которые нужно войти, чтобы попасть в этот каталог (начиная с корневого каталога диска); например
    С:\USER\BIN\SCHOOL

  • полный адрес файла состоит из адреса каталога, в котором он находится, символа «\» и имени файла, например
    С:\USER\BIN\SCHOOL\Вася.txt

  • маска служит для обозначения (выделения) группы файлов, имена которых имеют общие свойства, например, общее расширение

  • в масках, кроме «обычных» символов (допустимых в именах файлов) используются два специальных символа: звездочка «*» и знак вопроса «?»;

  • звездочка «*» обозначает любой количество любых символов, в том числе, может обозначать пустую последовательность;

  • знак вопроса «?» обозначает ровно один любой символ

  • при выводе списка имен файлов они могут быть отсортированы по имени, типу (расширению), дате последнего изменения, размеру; это не меняет их размещения на диске;

  • если установлена сортировка по имени или типу, сравнение идет по кодам символов, входящих в имя или в расширение

Пример задания:

Определите, какое из указанных имен файлов удовлетворяет маске: ?hel*lo.c?*

1) hello.c 2) hello.cpp 3) hhelolo.cpp 4) hhelolo.c

Решение:

  1. будем проверять соответствие файлов маске по частям, записывая результаты в таблицу

  2. начнем с первой части маски, «?hel»; эта часть означает, что перед сочетанием «hel» в начале имени стоит один любой символ;

  3. сразу видим, что первые два имени не подходят (начинаются прямо с «hel», без стартового символа), отмечаем их крестиком в таблице и больше не рассматриваем:


?hel

hello.cp

×

hello.cpp

×

hhelolo.cpp

hhelolo.cpp

hhelolo.c

hhelolo.c

желтым и фиолетовым маркером в таблице выделены соответствующие части маски и имен файлов (где есть совпадение)

  1. для двух последних имен проверяем второй блок маски: после «hel» должна быть цепочка «lo.c», или вплотную (и это возможно!) или через произвольную «вставку», на которую указывает звездочка в маске; видим, что оба имени прошли проверку:


    ?hel

    ?hel*lo.c

    hello.cp

    ×


    hello.cpp

    ×


    hhelolo.cpp

    hhelolo.cpp

    hhelolo.cpp

    hhelolo.c

    hhelolo.c

    hhelolo.c

  2. последняя часть маски, «?*», означает, что после «lo.c» должен стоять по крайне мере один любой символ (на это указывает знак «?»); проверяя это правило, обнаруживаем, что для последнего имени, «hhelolo.c», маска не подходит, поскольку после «lo.c» ни одного символа нет:


    ?hel

    ?hel*lo.c

    ?hel*lo.c?*

    hello.cp

    ×



    hello.cpp

    ×



    hhelolo.cpp

    hhelolo.cpp

    hhelolo.cpp

    hhelolo.cpp

    hhelolo.c

    hhelolo.c

    hhelolo.c

    ×

  3. таким образом, правильный ответ – 3.

Возможные ловушки и проблемы:

  • можно забыть, что звездочка «*» может соответствовать и пустой последовательности; например, в рассмотренной задаче имя «hhelolo.cp» также соответствует маске

  • можно забыть, что знак «?» НЕ может соответствовать пустой последовательности, а заменяет ровно 1 символ

Еще пример задания:

Перемещаясь из одного каталога в другой, пользователь последовательно посетил каталоги DOC, USER, SCHOOL, A:\, LETTER, INBOX. При каждом перемещении пользователь либо спускался в каталог на уровень ниже, либо поднимался на уровень выше. Каково полное имя каталога, из которого начал перемещение пользователь?

1) A:\DOC

2) A:\LETTER\INBOX

3) А:\SCHOOL\USER\DOC

4) А:\DOC\USER\SCHOOL

Решение:

  1. в задачах, где нужно определить полный адрес файла или каталога, нужно начинать с поиска имени диска, в данном случае каталог находится на диске A:\ (так обозначается корневой каталог)

  2. поскольку в списке посещенных каталогов перед A:\ стоит SCHOOL, пользователь мог попасть в корень диска A:\ только через каталог SCHOOL, поэтому адрес стартового каталога начинается с A:\SCHOOL

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

  4. как пользователь попал в каталог SCHOOL? по условию он мог как подниматься, так и спускаться по дереву каталогов

  5. явно он не мог спуститься из USER в SCHOOL, потому что SCHOOL находится в корневом каталоге и каждый каталог имеет только одного «родителя»; значит, пользователь поднялся из USER в SCHOOL, и начальная часть полного адреса А:\SCHOOL\USER

  1. аналогично можно доказать, что пользователь поднялся в каталог USER из каталога DOC

  2. таким образом, мы доказали, что правильный ответ – 3.

Возможные ловушки и проблемы:

  • можно забыть, что названия каталогов в полном имени перечисляются в порядке входа в них, начиная от корневого; пользователь выходил из каталогов, поднимаясь к корню диска A:\, поэтому проходил каталоги в обратном порядке (на эту ошибку рассчитан неверный ответ А:\DOC\USER\SCHOOL)

  • можно перепутать каталог, из которого вышел пользователь, и каталог, где он в конечном счете оказался (на эту ошибку рассчитан неверный ответ А:\LETTER\INBOX)

  • в условии есть лишние данные, которые только запутывают дело; например, имена каталогов LETTER, INBOX никак не влияют на ответ, потому что пользователь попал в них уже после выхода в корневой каталог диска A:\, то есть, пройдя весь путь исходного каталога в обратном порядке



Еще пример задания:

Каталог содержит файлы с именами

а) q.c

б) qq.cpp

в) qq.c

г) q1.c1

д) qaa.cmd

е) q12.cpp

Определите, в каком порядке будут показаны файлы, если выбрана сортировка по типу (по возрастанию).

1) авгдбе 2) авгдеб 3) абвгде 4) авдбег


Решение:

  1. при сортировке по типу сравниваются расширения имен файлов

  2. при сравнении используют коды символов

  3. отсутствие символа (когда расширение закончилось) считается «меньше» любого символа, то есть, файл с расширением будет находиться в списке выше, чем файлы с расширениями .c1 и .cmd

  4. коды цифр размещаются в таблице символов раньше, чем коды букв, то есть, файл с расширением .с1 будет находиться в списке выше, чем файл с расширением .сmd

  5. теперь можно распределить имена файлов по расширениям

а) q.c

в) qq.c

г) q1.c1

д) qaa.cmd

б) qq.cpp

е) q12.cpp

  1. осталась еще одна проблема – решить, что делать, если расширения совпадают; в этом случае в большинстве программ для определенности используется дополнительная сортировка по имени, поэтому файл с именем q12.cpp будет стоять в списке выше, чем файл qq.cpp (код цифры ‘1' меньше, чем код буквы ‘q’)

  2. в итоге получаем

а) q.c

в) qq.c

г) q1.c1

д) qaa.cmd

е) q12.cpp

б) qq.cpp

  1. таким образом, мы доказали, что правильный ответ – 2.

Возможные ловушки и проблемы:

  • можно забыть правильно расставить имена файлов с одинаковыми расширениями (неверный ответ 1)

  • нельзя сравнивать числовые значения: например, интуитивно кажется, что файл с расширением .c10 «больше», чем файл с расширением .c2, однако это неверно, потому что код цифры '2' больше, чем код цифры '1’; поэтому файл с расширением .c10 будет стоять в списке выше файла с расширением .c2 (при сортировке по типу в порядке возрастания)

  • можно забыть, что отсутствие кода (имя или расширение закончилось) «меньше» любого кода

  • можно забыть, что коды цифр меньше, чем коды букв

  • очень легко по невнимательности выбрать не тот ответ

Задачи для тренировки2:

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов удовлетворяет маске: ?a???*

1) dad1 2) dad22 3) 3daddy 4) add444

  1. В некотором каталоге хранился файл Задача5. После того, как в этом каталоге создали подкаталог и переместили в созданный подкаталог файл Задача5, полное имя файла стало Е:\Класс9\Физика\Задачник\Задача5. Каково было полное имя этого файла до перемещения?

1) Е:\Физика\Задачник\Задача5

2) Е:\Физика\Задача5

3) Е:\Класс9\Задачник\Задача5

4hello_html_64b2e6.gif) Е:\Класс9\Физика\Задача5

  1. Дhello_html_mb60b119.gifано дерево каталогов. Определите полное имя файла Doc3.

1) A:\DOC3

2) A:\DOC3\Doc3

3) A:\DOC3\Doc1

4) A:\TOM3\Doc3

  1. В некотором каталоге хранится файл Список_литературы.txt. В этом каталоге создали подкаталог с именем 10_CLASS и переместили в него файл Список_литературы.txt. После чего полное имя файла стало
    D:\SCHOOL\PHYSICS\10_CLASS\Список_литературы.txt.
    Каково пол­ное имя каталога, в котором хранился файл до перемещения?

1) D:\SCHOOL\PHYSICS\10_CLASS

2) D:\SCHOOL\PHYSICS

3) D:\SCHOOL

4) SCHOOL

  1. Пользователь, перемещаясь из одного каталога в другой, последовательно посетил каталоги LESSONS, CLASS, SCHOOL, D:\ , MYDOC, LETTERS. При каждом перемещении пользователь либо спускался в каталог на уровень ниже, либо поднимался на уровень выше. Каково полное имя каталога, из которого начал перемещение пользователь?

1) D:\MYDOC\LETTERS

2) D:\SCHOOL\CLASS\LESSONS

3) D:\LESSONS\CLASS\SCHOOL

4) D:\LESSONS

  1. В некотором каталоге хранится файл Задачи_по_программированию.tхt. В этом каталоге создали подкаталог и переместили в него файл Задачи_по_программированию.tхt. После этого полное имя файла стало
    D:\INFORM\LESSONS\10_CLASS\Задачи_по_программированию.txt
    Каково полное имя каталога, в котором хранился файл до перемещения?

1) D:\INFORM

2) D:\INFORM\LESSONS

3) 10_CLASS

4) LESSONS\10_CLASS

  1. Учитель работал в каталоге
    D:\Материалы к урокам\10 класс\Практические работы.
    Затем перешел в дереве каталогов на уровень выше, спустился в подкаталог Лекции и удалил из него файл Введение. Каково полное имя файла, который удалил преподаватель?

1) D:\Материалы к урокам\10 класс\Введение

2) D:\Материалы к урокам\10 класс\Лекции\Введение

3) D:\Материалы к урокам\Лекции\Введение

4) D:\Материалы к урокам\Введение\Лекции

  1. В некотором каталоге хранится файл Список_10_клacca.txt. В этом каталоге создали подкаталог и переместили в него файл Список_10_класса.txt, после чего полное имя файла стало
    D:\USER\CLASS\DOC\Список_10_класca.txt.
    Каково полное имя каталога, в котором хранился файл до перемещения?

1) D:\USER\CLASS

2) DOC

3) D:\USER\CLASS\DOC

4) CLASS

  1. Пользователь, перемещаясь из одного каталога в другой, последовательно посетил каталоги ACADEMY, COURSE, GROUP, Е:\, PROFESSOR, LECTIONS. При каждом перемещении пользователь либо спускался в каталог на уровень ниже, либо поднимался на уровень выше. Каково полное имя каталога, из которого начал перемещение пользователь?

1) Е:\PROFESSOR\LECTIONS\ACADEMY

2) Е:\ACADEMY\COURSE\GROUP

3) E:\ACADEMY

4) Е:\GROUP\COURSE\ACADEMY

  1. Каталог содержит файлы с именами

а) p5.pas

б) p4.ppt

в) p12.pas

г) pq.p

д) pq.pas

е) p12.ppt

Определите, в каком порядке будут показаны файлы, если выбрана сортировка по типу (по возрастанию).

1) вадгеб 2) гавдбе 3) вадгбе 4) гвадеб

  1. В некотором каталоге хранится файл Шпора.tхt. В этом каталоге создали подкаталог и переместили в него файл Шпора.tхt. После этого полное имя файла стало
    D:\Документы\Физика\Контрольная\Шпора.txt
    Каково полное имя файла до перемещения?

1) D:\Документы\Контрольная\Шпора.txt

2) D:\Физика\Шпора.txt

3) D:\Документы\Физика\Шпора.txt

4) D:\Физика\Контрольная\Шпора.txt

  1. В некотором каталоге хранится файл Шпора.tхt. В этом каталоге создали подкаталог и переместили в него файл Шпора.tхt. После этого полное имя файла стало
    D:\Документы\Химия\Контрольная\Шпора.txt
    Каково полное имя каталога, в котором хранился файл до перемещения?

1) D:\Документы\Химия\Контрольная

2) D:\Документы\Химия

3) D:\Документы

4) D:\

  1. Полное имя файла было C:\Задачи\Физика.C. Его переместили в каталог Tasks корневого каталога диска D. Каково полное имя файла после перемещения?

1) D:\Tasks\Физика.C

2) D:\Tasks\Физика.D

3) D:\Задачи\Tasks\Физика.C

4) D:\Tasks\Задачи\Физика.C

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов удовлетворяет маске: ?ba*r.?xt

1) bar.txt 2) obar.txt 3) obar.xt 4) barr.txt

  1. Находясь в корневом каталоге только что отформатированного диска, ученик создал 3 каталога. Затем в каждом из них он создал еще по 4 каталога. Сколько всего каталогов оказалось на диске, включая корневой?

1) 12 2) 13 3) 15 4) 16

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов удовлетворяет маске: F??tb*.d?*

1) Fructb.d 2) Feetball.ddd 3) Football.mdb 4) Futbol.doc

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов удовлетворяет маске: A?ce*s.m*

1) Acess.md 2) Accesst.dbf 3) Access.mdb 4) Akcces.m1

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов не удовлетворяет маске: ??pri*.?*

1) caprika.wow 2) weprik.cpp 3) otopri.c 4) reprint.be

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов не удовлетворяет маске: sys??.*

1) syste.m 2) sys23.exe 3) system.dll 4) syszx.problem

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов не удовлетворяет маске: ?ell*.??

1) yell.ow 2) fellow.ra 3) tell_me.tu 4) bell.lab

  1. Для групповых операций с файлами используются маски имен файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы: Символ «?» (вопросительный знак) означает ровно один произвольный символ. Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность. Определите, какое из указанных имен файлов не удовлетворяет маске: ?*di.t?*

1) poydi.t 2) pogudi.tanx 3) 2di.t9 4) melodi.theme



1 Для разделения имен каталогов в адресе в разных операционных системах применяют прямой слэш «/» или обратный слэш «\». В системе Windows, которая наиболее распространена в России, стандартным разделителем считается «\», именно такой знак чаще всего используется в задачах ЕГЭ.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Крылов С.С. ЕГЭ-2010. Информатика: сборник экзаменационных заданий. – М.: Эксмо, 2009.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

10 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Копирайтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A14.doc

isa.muschanov.70@yandex.ru



A14 (базовый уровень, время – 2 мин)

Тема: Поиск и сортировка информации в базах данных.

Что нужно знать:

  • при составлении условия отбора можно использовать знаки отношений <, <= (меньше или равно), >, >= (больше или равно), = (равно), <> (не равно)

  • последовательность выполнения логических операций в сложных запросах: сначала выполняются отношения, затем – «И», потом – «ИЛИ»

  • для изменения порядка выполнения операции используют скобки

Пример задания:

Результаты тестирования представлены в таблице:

Фамилия

Пол

Математика

Русский язык

Химия

Информатика

Биология

Аганян

ж

82

56

46

32

70

Воронин

м

43

62

45

74

23

Григорчук

м

54

74

68

75

83

Роднина

ж

71

63

56

82

79

Сергеенко

ж

33

25

74

38

46

Черепанова

ж

18

92

83

28

61

Сколько записей в ней удовлетворяют условию «Пол =’ж’ ИЛИ Химия > Биология»?

1) 5 2) 2 3) 3 4) 4

Решение:

  1. заданное сложное условие отбора состоит из двух простых

У1: Пол =’ж’

У2: Химия > Биология

которые связаны с помощью логической операции «ИЛИ»

  1. заметим, что столбцы «Фамилия», «Математика», «Русский язык» и «Информатика» никак не влияют на результат; уберем их из таблицы и добавим два новых столбца, в которых будем отмечать, выполняются ли условия У1 и У2 для каждой строчки

    Пол

    Химия

    Биология

    Пол =’ж’

    Химия > Биология

    ж

    46

    70

    +


    м

    45

    23


    +

    м

    68

    83



    ж

    56

    79

    +


    ж

    74

    46

    +

    +

    ж

    83

    61

    +

    +

  2. логическая операция «ИЛИ» означает выполнение хотя бы одного из двух условия (или обоих одновременно), поэтому заданному сложному условию удовлетворяют все строки, где есть хотя бы один плюс; таких строк пять, они выделены зеленым фоном:

    Пол

    Химия

    Биология

    Пол =’ж’

    Химия > Биология

    ж

    46

    70

    +


    м

    45

    23


    +

    м

    68

    83



    ж

    56

    79

    +


    ж

    74

    46

    +

    +

    ж

    83

    61

    +

    +

  3. таким образом, правильный ответ – 1.

Возможные ловушки и проблемы:

  • можно перепутать действие операций «И» и «ИЛИ» (неверный ответ 2)

  • можно перепутать порядок выполнения операций «И» и «ИЛИ», если они обе используются в сложном условии

  • помните, что в бланк нужно вписать не количество записей, удовлетворяющих условию, а номер ответа из предложенных

Еще пример задания:

Из правил соревнования по тяжелой атлетике: Тяжелая атлетика – это прямое соревнование, когда каждый атлет имеет три попытки в рывке и три попытки в толчке. Самый тяжелый вес поднятой штанги в каждом упражнении суммируется в общем зачете. Если спортсмен потерпел неудачу во всех трех попытках в рывке, он может продолжить соревнование в толчке, но уже не сможет занять какое-либо место по сумме 2-х упражнений. Если два спортсмена заканчивают состязание с одинаковым итоговым результатом, высшее место присуждается спортсмену с меньшим весом. Если же вес спортсменов одинаков, преимущество отдается тому, кто первым поднял победный вес. Таблица результатов соревнований по тяжелой атлетике:

Фамилия И.О.

Вес спортсмена

Взято в рывке

Рывок с попытки

Взято в толчке

Толчок с попытки

Айвазян Г.С.

77,1

150,0

3

200,0

2

Викторов М.П.

79,1

147,5

1

202,5

1

Гордезиани Б.Ш.

78,2

147,5

2

200,0

1

Михальчук М.С.

78,2

147,5

2

202,5

3

Пай С.В.

79,5

150,0

1

200,0

1

Шапсугов М.Х.

77,1

147,5

1

200,0

1

Кто победил в общем зачете (по сумме двух упражнений)?

1) Айвазян Г.С. 2) Викторов М.П. 3) Михальчук М.С. 4) Пай С.В.

Решение:

  1. основная сложность этой задачи (особенно для тех, кто не увлекается тяжелой атлетикой) состоит в том, что бы внимательно прочитать и понять достаточно запутанные условия соревнований

  2. можно убрать из таблицы всех участников, кроме тех, которые упомянуты в ответах

  3. в условии читаем первое правило для определения победителя: «Самый тяжелый вес поднятой штанги в каждом упражнении суммируется в общем зачете», поэтому добавим в таблицу столбец «Общий зачет», в котором для каждого спортсмена сложим веса, взятые в рывке и в толчке

    Фамилия И.О.

    Вес спортсмена

    Взято в рывке

    Рывок с попытки

    Взято в толчке

    Толчок с попытки

    Общий зачет

    Айвазян Г.С.

    77,1

    150,0

    3

    200,0

    2

    350,0

    Викторов М.П.

    79,1

    147,5

    1

    202,5

    1

    350,0

    Михальчук М.С.

    78,2

    147,5

    2

    202,5

    3

    350,0

    Пай С.В.

    79,5

    150,0

    1

    200,0

    1

    350,0

  4. все интересующие нас участники набрали одинаковый результат, поэтому по этому критерию выявить победителя не удалось; читаем далее: «Если два спортсмена заканчивают состязание с одинаковым итоговым результатом, высшее место присуждается спортсмену с меньшим весом»; отсюда сразу следует, что победитель – Айвазян Г.С., поскольку его вес – наименьший среди всех участников

  1. таким образом, правильный ответ – 1.

Возможные ловушки и проблемы:

  • длинное и запутанное условие, которое нужно формализовать

  • можно перепутать порядок применения условий; например, если сначала учесть количество попыток, то победителем будет Викторов

  • лишняя информация, которая не влияет на решение задачи, но осложняет восприятие длинного условия и выделение действительно значимой информации

Еще пример задания:

В таблице представлены несколько записей из базы данных «Расписание»:

Учитель

День_недели

Номер_урока

Класс

1

Айвазян Г.С.

понедельник

3

2

Айвазян Г.С.

понедельник

4

3

Айвазян Г.С.

вторник

2

10Б

4

Михальчук М.С.

вторник

2

5

Пай С.В.

вторник

3

10Б

6

Пай С.В.

среда

5

Укажите номера записей, которые удовлетворяют условию
Номер_урока > 2 И Класс > '8А'

1) 1, 6 2) 2, 6 3) 2, 5, 6 4) 1, 2, 5, 6

Решение:

  1. уберем из таблицы всю лишнюю информацию, оставив только номер записи, номер урока и класс:

    Номер_урока

    Класс

    1

    3

    2

    4

    3

    2

    10Б

    4

    2

    5

    3

    10Б

    6

    5

  2. логическая связка И означает одновременное выполнение двух условий; оставим в таблице только те строки, для которых выполняется первое из двух условий, Номер_урока > 2

    Номер_урока

    Класс

    1

    3

    2

    4

    5

    3

    10Б

    6

    5

  3. теперь нужно из оставшихся строк отобрать те, для которых Класс > '8А'; на взгляд «нормального» человека, этому условию удовлетворяют последние 3 строчки, однако это неправильный ответ

  4. дело в том, что в данном случае поле Класс имеет тип «символьная строка», поэтому сравнение будет Класс > '8А' выполняться по кодам символов, начиная с первого

  5. цифры во всех кодовых таблицах располагаются последовательно, одна за другой, от 0 до 9

  6. поэтому код цифры «1» меньше, чем код цифры «8», и строка 5 не удовлетворяет условию Класс > '8А'

  7. к счастью, русские буквы А и Б во всех кодовых таблицах расположены друг за другом1, поэтому сравнение пройдет «нормально», условие Класс > '8А' для записи № 6 будет истинно

  1. в результате после применения условия Класс > '8А' остаются две записи

    Номер_урока

    Класс

    2

    4

    6

    5

  2. таким образом, правильный ответ – 2.

Возможные ловушки и проблемы:

  • помните, что символьные строки сравниваются по кодам символов

  • цифры в таблице кодов стоят подряд от 0 до 9 (коды 48-57)

  • в кодировке Windows русские буквы стоят по алфавиту



Задачи для тренировки2:

  1. На городской олимпиаде по программированию предлагались задачи трех типов: А, В и С. По итогам олимпиады была составлена таблица, в колонках которой указано, сколько задач каждого типа решил участник. Вот начало таблицы:

Фамилия

А

В

С

Иванов

3

2

1

За правильное решение задачи типа А участнику начислялся 1 балл, за решение задачи типа В – 2 балла и за решение задачи типа С – 3 балла. Победитель определялся по сумме баллов, которая у всех участников оказалась разная. Для определения победителя олимпиады достаточно выполнить следующий запрос:

1) Отсортировать таблицу по возрастанию значения поля С и взять первую строку.

2) Отсортировать таблицу по убыванию значения поля С и взять первую строку.

3) Отсортировать таблицу по убыванию значения выражения А+2В+3С и взять первую строку.

4) Отсортировать таблицу по возрастанию значения выражения А+2В+3С и взять первую строку

  1. Сколько записей в нижеследующем фрагменте турнирной таблицы удовлетворяют условию «Место <= 4 И (Н > 2 ИЛИ О > 6)»?

Место

Участник

В

Н

П

О

1

Силин

5

3

1

6 ½

2

Клеменс

6

0

3

6

3

Холево

5

1

4

5 ½

4

Яшвили

3

5

1

5 ½

5

Бергер

3

3

3

4 ½

6

Численко

3

2

4

4

1) 5 2) 2 3) 3 4) 4

  1. Сколько записей в нижеследующем фрагменте турнирной таблицы удовлетворяют условию «Место <= 5 И (В > 4 ИЛИ MЗ > 12)» (символ <= означает «меньше или равно»)?

Место

Команда

В

Н

П

О

МЗ

МП

1

Боец

5

3

1

18

9

5

2

Авангард

6

0

3

18

13

7

3

Опушка

4

1

4

16

13

7

4

Звезда

3

6

0

15

5

2

5

Химик

3

3

3

12

14

17

6

Пират

3

2

4

11

13

7

1) 5 2) 2 3) 3 4) 4

  1. Ниже в табличной форме представлен фрагмент базы данных:

Страна

Столица

Площадь, тыс. км2

Численность населения, тысяч чел.

Часть света

1.

Бельгия

Брюссель

30,5

10 289

Европа

2.

Бурунди

Бужумбура

27,8

6 096

Африка

3.

Гаити

Порт-о-Пренс

27,8

7 528

Северная Америка

4.

Дания

Копенгаген

43,1

5 384

Европа

5.

Джибути

Джибути

22,0

0,457

Африка

6.

Доминиканская Республика

Санто-Доминго

48,7

8716

Северная Америка

7.

Израиль

Тель-Авив

20,8

6 116

Азия

8.

Коста-Рика

Сан-Хосе

51,1

3 896

Северная Америка

9.

Лесото

Масеру

30,4

1 862

Африка

10.

Македония

Скопье

25,3

2 063

Европа

11.

Руанда

Кигали

26,4

7810

Африка

12.

Сальвадор

Сан-Сальвадор

21,0

6 470

Северная Америка

Сколько записей в данном фрагменте удовлетворяют условию:

((Площадь, тыс.км2 > 30) И (Численность населения, тысяч чел. > 5000)) И (Часть света = Европа)?

1) 1 2) 2 3) 3 4) 4

  1. На олимпиаде по английскому языку предлагались задания трех типов; А, В и С. Итоги олимпиады были оформлены в таблицу, в которой было отражено, сколько заданий каждого типа выполнил каждый участник, например:

Фамилия, имя участника

А

В

С

Быкова Елена

3

1

1

Тихомиров Сергей

3

2

1

За правильное выполнение задания типа А участнику начислялся 1 балл, за выполнение задания типа В – 3 балла и за С – 5 баллов. Победитель определялся по сумме набранных баллов. При этом у всех участников сумма баллов оказалась разная. Для определения победителя олимпиады достаточно выполнить следующий запрос:

1) Отсортировать таблицу по убыванию значения столбца С и взять первую строку.

2) Отсортировать таблицу по возрастанию значений выражения А + В + С и взять первую строку.

3) Отсортировать таблицу по убыванию значений выражения А + ЗВ + 5С и взять первую строку

4) Отсортировать табл.- <у по возрастанию значений выражения А + ЗВ + 5С и взять первую строку

  1. Ниже в табличной форме представлен фрагмент базы данных:

№п/п

Наименование товара

Цена

Количество

Стоимость

1

Монитор

7654

20

153080

2

Клавиатура

1340

26

34840

3

Мышь

235

34

7990

4

Принтер

3770

8

22620

5

Колонки акустические

480

16

7680

6

Сканер планшетный

2880

10

28800

На какой позиции окажется товар «Сканер планшетный», если произвести сортировку данной таблицы по возрастанию столбца «Количество»?

1) 5 2) 2 3) 3 4) 6

  1. Ниже в табличной форме представлен фрагмент базы данных:


Название пролива

Длина (км)

Ширина (км)

Глубина (м)

Местоположение

1

Босфор

30

0,7

20

Атлантический океан

2

Магелланов

575

2,2

29

Тихий океан

3

Ормузский

195

54

27

Индийский океан

4

Гудзонов

806

115

141

Северный Ледовитый океан

5

Гибралтарский

59

14

53

Атлантический океан

6

Ла-Манш

578

32

23

Атлантический океан

7

Баб-эль-Мандебский

109

26

31

Индийский океан

8

Дарданеллы

120

1,3

29

Атлантический океан

9

Берингов

96

86

36

Тихий океан

Сколько записей в данном фрагменте удовлетворяют условию:

«(Ширина (км) > 50 ИЛИ Глубина (м) > 50) И

(Местоположение = Атлантический океан)»?

1) 1 2) 2 3) 3 4) 4

  1. Ниже в табличной форме представлен фрагмент базы данных по учащимся 10-х классов:

Фамилия

Имя

Пол

Год рождения

Рост(см)

Вес (кг)

Соколова

Елена

ж

1990

165

51

Антипов

Ярослав

м

1989

170

53

Дмитриева

Елена

ж

1990

161

48

Коровин

Дмитрий

м

1990

178

60

Зубарев

Роман

м

1991

172

58

Полянко

Яна

ж

1989

170

49

Сколько записей в данном фрагменте удовлетворяют условию:

«(Имя = 'Елена') ИЛИ (Год рождения > 1989)»?

1) 5 2) 6 3) 3 4) 4

  1. Ниже в табличной форме представлен фрагмент базы данных:

Страна

Столица

Площадь, тыс. км2

Численность населения, тысяч чел.

Часть света

1

Бельгия

Брюссель

30,5

10 289

Европа

2

Бурунди

Бужумбура

27,8

6 096

Африка

3

Гаити

Порт-о-Пренс

27,8

7 528

Северная Америка

4

Дания

Копенгаген

43,1

5 384

Европа

5

Джибути

Джибути

22,0

0,457

Африка

6

Доминиканская Республика

Санто-Доминго

48,7

8716

Северная Америка

7

Израиль

Тель-Авив

20,8

6116

Азия

8

Коста-Рика

Сан-Хосе

51,1

3 896

Северная Америка

9

Лесото

Масеру

30,4

1862

Африка

10

Македония

Скопье

25,3

2 063

Европа

11

Руанда

Кигали

26,4

7810

Африка

12

Сальвадор

Сан-Сальвадор

21,0

6 470

Северная Америка

Сколько записей в данном фрагменте удовлетворяют условию:
((Площадь, тыс. км2) > 20) И (Численность населения, тысяч чел.) > 1500))

И (Часть света = Африка)?

1) 1 2) 2 3) 3 4) 4

  1. Ниже в табличной форме представлен фрагмент базы данных:

номер

Фамилия

Имя

Отчество

класс

школа

1

Иванов

Петр

Олегович

10

135

2

Катаев

Сергей

Иванович

9

195

3

Беляев

Иван

Петрович

11

45

4

Носов

Антон

Павлович

7

4

Какую строку будет занимать фамилия ИВАНОВ после проведения сортировки по возрастанию в поле КЛАСС?

1) 1 2) 2 3) 3 4) 4

  1. Ниже в табличной форме представлен фрагмент базы данных:

Номер

Фамилия

Пол

Алгебра

Сочинение

Физика

История

1

Аверин

м

5

4

5

3

2

Антонов

м

3

5

4

5

3

Васильева

ж

3

5

4

5

4

Купанов

м

4

5

4

5

5

Лебедева

ж

4

3

3

4

6

Прокопьев

м

3

2

4

3

Сколько записей удовлетворяют условию

(Пол = «ж») ИЛИ (Физика < 5 ИЛИ Алгебра = 4)?

1) 5 2) 2 3) 3 4) 4

  1. Из правил соревнования по тяжелой атлетике: Тяжелая атлетика – это прямое соревнование, когда каждый атлет имеет три попытки в рывке и три попытки в толчке. Самый тяжелый вес поднятой штанги в каждом упражнении суммируется в общем зачете. Если спортсмен потерпел неудачу во всех трех попытках в рывке, он может продолжить соревнование в толчке, но уже не сможет занять какое-либо место по сумме 2-х упражнений. Если два спортсмена заканчивают состязание с одинаковым итоговым результатом, высшее место присуждается спортсмену с меньшим весом. Если же вес спортсменов одинаков, преимущество отдается тому, кто первым поднял победный вес. Таблица результатов соревнований по тяжелой атлетике:

Фамилия И.О.

Вес спортсмена

Взято в рывке

Рывок с попытки

Взято в толчке

Толчок с попытки

Айвазян Г.С.

77,1

150,0

3

200,0

2

Викторов М.П.

79,1

147,5

1

202,5

1

Гордезиани Б.Ш.

78,2

150,0

2

200,0

1

Михальчук М.С.

78,2

152,5

3

202,5

2

Пай С.В.

79,5

202,5

1

Шапсугов М.Х.

77,1

150,0

3

202,5

3

Кто победил в толчке в этом соревновании?

1) Викторов М.П. 2) Михальчук М.С. 3) Пай С.В. 4) Шапсугов М.Х.

  1. Из правил соревнования по тяжелой атлетике: Тяжелая атлетика – это прямое соревнование, когда каждый атлет имеет три попытки в рывке и три попытки в толчке. Самый тяжелый вес поднятой штанги в каждом упражнении суммируется в общем зачете. Если спортсмен потерпел неудачу во всех трех попытках в рывке, он может продолжить соревнование в толчке, но уже не сможет занять какое-либо место по сумме 2-х упражнений. Если два спортсмена заканчивают состязание с одинаковым итоговым результатом, высшее место присуждается спортсмену с меньшим весом. Если же вес спортсменов одинаков, преимущество отдается тому, кто первым поднял победный вес. Таблица результатов соревнований по тяжелой атлетике:

Фамилия И.О.

Вес спортсмена

Взято в рывке

Рывок с попытки

Взято в толчке

Толчок с попытки

Айвазян Г.С.

77,1

147,5

3

200,0

2

Викторов М.П.

79,1

147,5

1

202,5

1

Гордезиани Б.Ш.

78,2

147,5

2

200,0

1

Михальчук М.С.

78,2

147,5

3

202,5

3

Пай С.В.

79,5

150,0

1

200,0

1

Шапсугов М.Х.

77,1

147,5

1

200,0

1

Кто победил в общем зачете (по сумме двух упражнений)?

1) Айвазян Г.С. 2) Викторов М.П. 3) Михальчук М.С. 4) Пай С.В.

  1. Из правил соревнования по тяжелой атлетике: Тяжелая атлетика – это прямое соревнование, когда каждый атлет имеет три попытки в рывке и три попытки в толчке. Самый тяжелый вес поднятой штанги в каждом упражнении суммируется в общем зачете. Если спортсмен потерпел неудачу во всех трех попытках в рывке, он может продолжить соревнование в толчке, но уже не сможет занять какое-либо место по сумме 2-х упражнений. Если два спортсмена заканчивают состязание с одинаковым итоговым результатом, высшее место присуждается спортсмену с меньшим весом. Если же вес спортсменов одинаков, преимущество отдается тому, кто первым поднял победный вес. Таблица результатов соревнований по тяжелой атлетике:

Фамилия И.О.

Вес спортсмена

Взято в рывке

Рывок с попытки

Взято в толчке

Толчок с попытки

Айвазян Г.С.

77,1

147,5

3

200,0

2

Викторов М.П.

79,1

147,5

1

202,5

1

Гордезиани Б.Ш.

78,2

150,0

2

200,0

1

Михальчук М.С.

78,2

150,0

3

202,5

2

Пай С.В.

79,5

147,5

1

202,5

1

Шапсугов М.Х.

79,1

150,0

3

202,5

3

Кто победил в рывке в этом соревновании?

1) Викторов М.П. 2) Гордезиани Б.Ш. 3) Михальчук М.С. 4) Шапсугов М.Х.

  1. На городской тур олимпиады по ОБЖ проходят те учащиеся, которые набрали на районном туре не менее 10 баллов или решили полностью одну из самых сложных задач 6 или 7. За полное решение задач 1-4 дается 2 балла, задач 5-6 – 3 балла, задачи 7 – 4 балла. Дана таблица результатов районной олимпиады:




Фамилия

Пол

Баллы за задачи

1

2

3

4

5

6

7

Айвазян Г.

ж

1

0

2

1

0

1

3

Викторов М.

м

2

2

2

2

2

1

4

Гордезиани Б.

м

2

0

0

0

1

1

4

Михальчук М.

м

1

1

1

1

1

2

3

Пай С.В.

м

2

0

0

1

0

3

0

Шапсугов М.

м

2

2

2

0

3

0

1

Юльченко М.

ж

1

1

0

0

0

2

3

Яковлева К.

ж

2

2

0

0

1

1

3

Сколько человек прошли на городской тур?

1) 5 2) 6 3) 7 4) 4

  1. Ниже приведены фрагменты таблиц базы данных участников конкурса исполнительского мастерства:


Страна

Участник



Германия

Силин



США

Клеменс



Россия

Холево



Грузия

Яшвили



Германия

Бергер



Украина

Численко



Германия

Феер



Россия

Каладзе



Германия

Альбрехт
































Участник

Инструмент

Автор произведения

Альбрехт

флейта

Моцарт

Бергер

скрипка

Паганини

Каладзе

скрипка

Паганини

Клеменс

фортепиано

Бах

Силин

скрипка

Моцарт

Феер

флейта

Бах

Холево

скрипка

Моцарт

Численко

фортепиано

Моцарт

Яшвили

флейта

Моцарт

Представители скольких стран исполняют Моцарта?

1) 5 2) 2 3) 3 4) 4

  1. На игровом Интернет-сайте есть следующая информация об играх и количестве играющих:

Аркадные

Логические

Словесные

Спортивные

Астероид

Веселая ферма

Фабрика подарков

Фишдом

Филлер

Снежные загадки

Виселица

Сканворд

Лесопилка

Бильярд

Боулинг

Футбол


Игра

Кол-во играющих

Астероид

536

Бильярд

340

Боулинг

60

Веселая ферма

264

Виселица

981

Лесопилка

288

Сканворд

119

Снежные загадки

93

Фабрика подарков

100

Филлер

463

Фишдом

437

Футбол

572

Определите, игры какого типа пользуются наибольшей популярностью у игроков (в игры какого типа играет наибольшее количество людей)?

1) Аркадные 2) Логические 3) Словесные 4) Спортивные

  1. На игровом Интернет-сайте есть следующая информация об играх и количестве играющих:

Аркадные

Логические

Словесные

Спортивные

Астероид

Веселая ферма

Фабрика подарков

Фишдом

Филлер

Снежные загадки

Виселица

Сканворд

Лесопилка

Бильярд

Боулинг

Футбол


Игра

Кол-во играющих

Астероид

536

Бильярд

340

Боулинг

60

Веселая ферма

264

Виселица

981

Лесопилка

288

Сканворд

119

Снежные загадки

93

Фабрика подарков

100

Филлер

463

Фишдом

437

Футбол

572

Определите, игры какого типа чаще всего встречаются в пятерке самых популярных игр.

1) Аркадные 2) Логические 3) Словесные 4) Спортивные

  1. Ниже приведены фрагменты таблиц базы данных победителей городских олимпиад:


Школа

Фамилия



10

Иванов



10

Петров



10

Сидоров



50

Кошкин



150

Ложкин



150

Ножкин



200

Тарелкин



200

Мискин



250

Чашкин
































Фамилия

Предмет

Диплом

Иванов

физика

I степени

Мискин

математика

III степени

Сидоров

физика

II степени

Кошкин

история

I степени

Ложкин

физика

II степени

Ножкин

история

I степени

Тарелкин

физика

III степени

Петров

история

I степени

Мискин

физика

I степени


Сколько дипломов I степени получили ученики 10-й школы?

1) 1 2) 2 3) 3 4) 4

  1. Ниже приведены фрагменты таблиц базы данных учеников школы:


Код класса

Класс



1

1-А



2

3-А



3

4-А



4

4-Б



5

6-А



6

6-Б



7

6-В



8

9-А



9

10-А
































Фамилия

Код класса

Рост

Иванов

3

156

Петров

5

174

Сидоров

8

135

Кошкин

3

148

Ложкин

2

134

Ножкин

8

183

Тарелкин

5

158

Мискин

2

175

Чашкин

3

169


В каком классе учится самый высокий ученик?

1) 3-А 2) 4-А 3) 6-А 4) 9-А

  1. Артикул

    Размер

    Цвет

    Цена

    8457

    М

    красный

    5

    2537

    Б

    синий

    9

    5748

    Б

    синий

    8

    3647

    Б

    синий

    8

    4758

    М

    зеленый

    5

    3647

    Б

    зеленый

    9

    1948

    М

    синий

    6

    3647

    Б

    красный

    8

    1948

    М

    красный

    6

    Ниже приведены фрагменты таблиц базы данных канцелярского магазина:

Изделие

Артикул

Авторучка

1948

Фломастер

2537

Карандаш

3647

Фломастер

4758

Авторучка

5748

Карандаш

8457








Сколько разных карандашей продается в магазине?

1) 1 2) 2 3) 3 4) 4

  1. Ниже приведены фрагменты таблиц базы данных победителей городских олимпиад:


Школа

Фамилия



10

Иванов



10

Петров



10

Сидоров



50

Кошкин



150

Ложкин



150

Ножкин



200

Тарелкин



200

Мискин



250

Чашкин
































Фамилия

Предмет

Диплом

Иванов

физика

I степени

Мискин

математика

III степени

Сидоров

физика

II степени

Кошкин

история

I степени

Ложкин

физика

II степени

Ножкин

история

I степени

Тарелкин

физика

III степени

Петров

история

I степени

Мискин

физика

I степени


Сколько различных школ имеют победителей олимпиады по физике?

1) 1 2) 2 3) 3 4) 4









  1. Ниже приведены фрагменты таблиц базы данных учеников школы:


Код класса

Класс



1

1-А



2

3-А



3

4-А



4

4-Б



5

6-А



6

6-Б



7

6-В



8

9-А



9

10-А
































Фамилия

Код класса

Рост

Иванов

3

156

Петров

5

174

Сидоров

8

135

Кошкин

3

148

Ложкин

2

134

Ножкин

8

183

Тарелкин

5

158

Мискин

2

175

Чашкин

3

169


В каком классе учится наибольшее число учеников?

1) 3-А 2) 4-А 3) 6-А 4) 9-А

  1. Ниже приведены фрагменты таблиц базы данных канцелярского магазина:


Изделие

Артикул



Авторучка

1948



Фломастер

2537



Карандаш

3647



Фломастер

4758



Авторучка

5748



Карандаш

8457






















































Артикул

Размер

Цвет

Цена

8457

М

красный

5

2537

Б

синий

9

5748

Б

синий

8

3647

Б

синий

8

4758

М

зеленый

5

3647

Б

зеленый

9

1948

М

синий

6

3647

Б

красный

8

1948

М

красный

6


Сколько разных (по названию) красных изделий продается в магазине?

1) 1 2) 2 3) 3 4) 4

  1. Ниже приведены фрагменты таблиц базы данных учеников школы:


Код класса

Класс



1

1-А



2

3-А



3

4-А



4

4-Б



5

6-А



6

6-Б



7

6-В



8

9-А



9

10-А
































Фамилия

Код класса

Рост

Иванов

3

156

Петров

5

174

Сидоров

8

135

Кошкин

3

148

Ложкин

2

134

Ножкин

8

183

Тарелкин

5

158

Мискин

2

175

Чашкин

3

169


В каком классе наибольший рост у самого низкого ученика в классе?

1) 3-А 2) 4-А 3) 6-А 4) 9-А

  1. Ниже приведены фрагменты таблиц базы данных канцелярского магазина:


Изделие

Артикул



Авторучка

1948



Фломастер

2537



Карандаш

3647



Фломастер

4758



Авторучка

5748



Карандаш

8457






















































Артикул

Размер

Цвет

Цена

8457

М

красный

5

2537

Б

синий

9

5748

Б

синий

8

3647

Б

синий

8

4758

М

зеленый

5

3647

Б

зеленый

9

1948

М

синий

6

3647

Б

красный

8

1948

М

красный

6


За какую самую низкую цену в магазине можно купить карандаш?

1) 5 2) 6 3) 8 4) 9







1 Интересующиеся могут посмотреть на коды русских букв в кодировке КОИ-8R
hello_html_22dc4c99.png

и ужаснуться, осознав, что было бы при использовании букв В и Г.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

18 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

HR-менеджер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A15.doc

isa.muschanov.70@yandex.ru



А15 (повышенный уровень, время – 2 мин)

Тема: Кодирование и обработка графической информации.

Что нужно знать:

  • графическая информация может храниться в растровом и векторном форматах

  • векторное изображение – это набор геометрических фигур, которые можно описать математическими зависимостями; задачи на эту тему в ЕГЭ автору пока не встречались

  • растровое изображение хранится в виде набора пикселей, для каждого из которых задается свой цвет, независимо от других

  • глубина цвета – это количество бит на пиксель (обычно от 1 до 24 бит на пиксель)

  • в режиме истинного цвета (True Color) информация о цвете каждого пикселя растрового изображения хранится в виде набора его RGB-составляющих (Red, Green, Blue);
    каждая из RGB-составляющих – целое число (яркость) в интервале [0,255] (всего 256 вариантов), занимающее в памяти 1 байт или 8 бит (так как 28 = 256);
    таким образом, на каждый пиксель отводится 3 байта = 24 бита памяти (глубина цвета – 24 бита);
    нулевое значение какой-то составляющей означает, что ее нет в этом цвете, значение 255 – максимальная яркость;
    в режиме истинного цвета можно закодировать 2563 = 224 = 16 777 216 различных цветов

  • палитра – это ограниченный набор цветов, которые используются в изображении (обычно не более 256);
    при кодировании с палитрой выбираются N любых цветов (из полного набора 16 777 216 цветов), для каждого из них определяется RGB-код и уникальный номер от 0 до N-1;
    тогда информация о цвете пикселя – это номер его цвета в палитре;
    при кодировании с палитрой количество бит на 1 пиксель (K) зависит от количества цветов в палитре N, они связаны формулой: hello_html_m431518d7.gif;
    объем памяти на все изображение вычисляется по формуле hello_html_37fa088a.gif, где hello_html_3eb40b6c.gif– число бит на пиксель, а hello_html_4e3dd032.gif – общее количество пикселей1

  • полезно знать на память таблицу степеней двойки: она показывает, сколько вариантов N (а данном случае – сколько цветов) можно закодировать с помощью K бит:

    K, бит

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    N, вариантов

    2

    4

    8

    16

    32

    64

    128

    256

    512

    1024

  • цвет на Web-страницах кодируется в виде RGB-кода в шестнадцатеричной системе: #RRGGBB, где RR, GG и BB – яркости красного, зеленого и синего, записанные в виде двух шестнадцатеричных цифр; это позволяет закодировать 256 значений от 0 (0016) до 255 (FF16) для каждой составляющей;
    коды некоторых цветов:
    #FFFFFF – белый, #000000 – черный,
    #CCCCCC и любой цвет, где R = G = B, – это серый разных яркостей
    #FF0000 – красный, #00FF00 – зеленый, #0000FF – синий,
    #FFFF00 – желтый, #FF00FF – фиолетовый, #00FFFF – цвет морской волны

  • чтобы получить светлый оттенок какого-то «чистого» цвета, нужно одинаково увеличить нулевые составляющие; например, чтобы получить светло-красный цвет, нужно сделать максимальной красную составляющую и, кроме этого, одинаково увеличить остальные – синюю и зеленую: #FF9999 (сравните с красным – #FF0000)

  • чтобы получить темный оттенок чистого цвета, нужно одинаково уменьшить все составляющие, например, #660066 – это темно-фиолетовый цвет (сравните с фиолетовым #FF00FF)

Пример задания:

Для хранения растрового изображения размером 32×32 пикселя отвели 512 байтов памяти. Каково максимально возможное число цветов в палитре изображения?

1) 256 2) 2 3)16 4) 4

Общий подход:

В таких задачах вся игра идет на двух формулах: hello_html_37fa088a.gif и hello_html_m431518d7.gif (обозначения см. выше). Поэтому нужно:

  1. найти общее количество пикселей Q

  2. перевести объем памяти M в биты

  3. найти количество бит на пиксель hello_html_m47a55ba5.gif

  4. по таблице степеней двойки найти количество цветов N

Рекомендация:

Большие числа. Что делать?

Обычно (хотя и не всегда) задачи, в условии которых даны большие числа, решаются достаточно просто, если выделить в этих числах степени двойки. На эту мысль должны сразу наталкивать такие числа как

128 = 27, 256 = 28, 512 = 29 , 1024 = 210,

2048 = 211, 4096 = 212 , 8192 = 213, 16384 = 214, 65536 = 216 и т.п.

Нужно помнить, что соотношение между единицами измерения количества информации также представляют собой степени двойки:

1 байт = 8 бит = 23 бит,

1 Кбайт = 1024 байта = 210 байта

= 210 · 23 бит = 213 бит,

1 Мбайт = 1024 Кбайта = 210 Кбайта

= 210 · 210 байта = 220 байта

= 220 · 23 бит = 223 бит.

Правила выполнения операций со степенями:

  • при умножении степени при одинаковых основаниях складываются

hello_html_1e5c8a8b.gif

  • … а при делении – вычитаются:

hello_html_m2ec04f9.gif

Решение:

  1. находим общее количество пикселей hello_html_5244faea.gif

  2. находим объем памяти в битах hello_html_6ab4447a.gifбайтhello_html_3c3ea4c3.gifбайтhello_html_m2602fe47.gifбитhello_html_62bc4371.gifбит

  3. определяем количество бит на пиксель: hello_html_6fa19431.gifбита на пиксель

  4. по таблице степеней двойки находим, что 4 бита позволяют закодировать 24 = 16 цветов

  5. поэтому правильный ответ – 3.


Возможные ловушки:

  • расчет на то, что ученик где-то слышал, что в палитре 256 цветов (в самом деле – обычно не более 256) – дан неверный ответ 256

  • если перепутать количество цветов и количество бит на пиксель (или невнимательно прочитать условие), можно остановиться на п. 3, считая это окончательным ответом (неверный ответ 4)

  • если перепутать количество цветов и количество бит на пиксель и применить таблицу «в обратную сторону», получаем неверный ответ 2

Еще пример задания:

Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. Какой цвет будет у страницы, заданной тэгом

?

1) белый 2) зеленый 3)красный 4) синий

Решение:

  1. значение FF16 = 255 соответствует максимальной яркости, таким образом, яркость всех составляющих максимальна, это белый цвет

  2. правильный ответ – 1

Возможные ловушки:

  • можно перепутать порядок следования цветов

  • часто считают, что белый цвет – это когда все составляющие равны нулю, а в самом деле - наоборот

Задачи для тренировки2:

  1. Для хранения растрового изображения размером 64 на 64 пикселя отвели 512 байтов памяти. Каково максимально возможное число цветов в палитре изображения?

1) 16 2) 2 3) 256 4) 1024

  1. Для хранения растрового изображения размером 128 x 128 пикселей отвели 4 килобайта памяти. Каково максимально возможное число цветов в палитре изображения?

1) 8 2)2 3) 16 4) 4

  1. В процессе преобразования растрового графического файла количество цветов уменьшилось с 1024 до 32. Во сколько раз уменьшился информационный объем файла?

1) 5 2) 2 3) 3 4) 4

  1. Монитор позволяет получать на экране 224 цветов. Какой объем памяти в байтах занимает 1 пиксель?

1) 2 2) 3 3) 4 4) 5

  1. Разрешение экрана монитора – 1024 х 768 точек, глубина цвета – 16 бит. Каков необходимый объем видеопамяти для данного графического режима?

1) 6 Мбайт 2) 256 байт 3) 4 Кбайта 4) 1,5 Мбайт

  1. Для хранения растрового изображения размером 1024 х 512 пикселей отвели 256 Кбайт памяти. Каково максимально возможное число цветов в палитре изображения?

1) 16 2) 64 3) 32 4) 128

  1. Для хранения растрового изображения размером 128 х 128 пикселей используется 8 Кбайт памяти. Каково максимально возможное количество цветов в палитре данного изображения?

1) 8 2) 16 3) 32 4) 4

  1. В процессе преобразования растрового графического файла количество цветов уменьшилось с 512 до 8. Во сколько раз уменьшился информационный объем файла?

1) 5 2) 2 3) 3 4) 4

  1. После преобразования растрового 256-цветного графического файла в черно-белый формат (2 цвета) его размер уменьшился на 70 байт. Каков был размер исходного файла?

1) 70 байт 2) 640 бит 3) 80 бит 4) 560 бит

  1. В процессе преобразования растрового графического изображения количество цветов уменьшилось с 64 до 8. Во сколько раз уменьшился объем, занимаемый им в памяти?

1) 2 2) 4 3) 8 4) 64

  1. Сколько памяти нужно для хранения 64-цветного растрового графического изображения размером 32 на 128 точек?

1) 32 Кбайта 2) 64 байта 3) 4096 байт 4) 3 Кбайта

  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. Какой цвет будет у страницы, заданной тэгом

    ?

1) белый 2) зеленый 3)красный 4) синий


  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. Какой цвет будет у страницы, заданной тэгом

    ?

1) белый 2) зеленый 3)красный 4) синий


  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) белый 2) серый 3)желтый 4) фиолетовый


  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) белый 2) серый 3)желтый 4) фиолетовый


  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) белый 2) серый 3)желтый 4) фиолетовый


  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) темно-фиолетовый 2) светло-зеленый 3)желтый 4) светло-желтый


  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) темно-фиолетовый 2) светло-зеленый 3)желтый 4) светло-желтый


  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) темно-фиолетовый 2) светло-зеленый 3)желтый 4) светло-желтый


  1. Какова ширина (в пикселях) прямоугольного 64-цветного неупакованного растрового изображения, занимающего на диске 1,5 Мбайт, если его высота вдвое меньше ширины?

1) 256 2) 512 3) 1024 4) 2048

  1. Какова ширина (в пикселях) прямоугольного 16-цветного неупакованного растрового изображения, занимающего на диске 1 Мбайт, если его высота вдвое больше ширины?

1) 256 2) 512 3) 1024 4) 2048

  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) черный 2) темно-синий 3)темно-зеленый 4) темно-красный

  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) красный 2) желтый 3) фиолетовый 4) голубой

  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) желтый 2) розовый 3) светло-зеленый 4) светло-синий

  1. Для кодирования цвета фона страницы Интернет используется атрибут bgcolor="#ХХХХХХ", где в кавычках задаются шестнадцатеричные значения интенсивности цветовых компонент в 24-битной RGB-модели. К какому цвету будет близок цвет страницы, заданной тэгом

    ?

1) желтый 2) розовый 3) светло-зеленый 4) светло-синий



1 В задачах ЕГЭ место на хранение палитры и служебной информации не учитывается. Кроме того, все популярные графические форматы используют сжатие данных, так что фактический объем файла будет значительно меньше, чем мы тут считаем. Но на ЕГЭ про это лучше забыть, этот тот случай, когда много знать вредно.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

7 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Методист-разработчик онлайн-курсов

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A16.doc

isa.muschanov.70@yandex.ru



A16 (базовый уровень, время – 1 мин)

Тема: Электронные таблицы.

Что нужно знать:

  • адрес ячейки в электронных таблицах состоит из имени столбца и следующего за ним номера строки, например, C15

  • формулы в электронных таблицах начинаются знаком = («равно»)

  • знаки +, –, *, / и ^ в формулах означают соответственно сложение, вычитание, умножение, деление и возведение в степень

  • запись B2:C4 означает диапазон, то есть, все ячейки внутри прямоугольника, ограниченного ячейками B2 и C4:

hello_html_m7a677b8d.png

  • например, по формуле =СУММ(B2:C4) вычисляется сумма значений ячеек B2, B3, B4, C2, C3 и C4

  • в заданиях ЕГЭ могут использоваться стандартные функции СЧЕТ (количество непустых ячеек), СУММ (сумма), СРЗНАЧ (среднее значение), МИН (минимальное значение), МАКС (максимальное значение)

  • функция СРЗНАЧ при вычислении среднего арифметического не учитывает пустые ячейки; например, после ввода формулы в C2 появится значение 2 (ячейка А2 – пустая):

hello_html_7bfb306e.png

функция СЧЕТ(A1:B2) в этом случае выдаст значение 3 (а не 4).

  • адреса ячеек (или ссылки на ячейки) бывают относительные, абсолютные и смешанные, вся разница между ними проявляется при копировании формулы в другую ячейку:

    • в абсолютных адресах перед именем столбца и перед номером строки ставится знак доллара $, такие адреса не изменяются при копировании; вот что будет, если формулу =$B$2+$C$3 скопировать из D5 во все соседние ячейки

hello_html_33afefb3.png

знак $ как бы «фиксирует» значение: в абсолютных адресах и имя столбца, и номер строки зафиксированы

    • в относительных адресах знаков доллара нет, такие адреса при копировании изменяются: номер столбца (строки) изменяется на столько, на сколько отличается номер столбца (строки), где оказалась скопированная формула, от номера столбца (строки) исходной ячейки; вот что будет, если формулу =B2+C3 (в ней оба адреса – относительные) скопировать из D5 во все соседние ячейки:

hello_html_441beccc.png

    • в смешанных адресах часть адреса (строка или столбец) – абсолютная, она «зафиксирована» знаком $, а вторая часть – относительная; относительная часть изменится при копировании так же, как и для относительной ссылки:

hello_html_m7c5d3b30.png

Пример задания:

В электронной таблице значение формулы =СУММ(B1:B2) равно 5. Чему равно значение ячейки B3, если значение формулы =СРЗНАЧ(B1:B3) равно 3?

1) 8 2) 2 3) 3 4) 4

Решение:

  1. функция СУММ(B1:B2) считает сумму значений ячеек B1 и B2, поэтому B1 + B2 = 5

  2. функция СРЗНАЧ(B1:B3) считает среднее арифметическое диапазона B1:B3

  3. в диапазон B1:B3 входят три ячейки, среднее арифметическое – это сумма их значений, деленная на 3; таким образом B1 + B2 + B3 = 3 · 3 = 9

  4. поскольку B1 + B2 = 5, сразу получаем B3 = 9 – 5 = 4

  5. таким образом, правильный ответ – 4.

Возможные ловушки и проблемы:

  • чтоб сбить угадывание, среди ответов приведены сумма исходных данных (8) и их разность (2) , это неверные ответы

Еще пример задания:

Дан фрагмент электронной таблицы:


А

В

С

1

10

20

= A1+B$1

2

30

40


Чему станет равным значение ячейки С2, если в нее скопировать формулу из ячейки С1? Знак $ обозначает абсолютную адресацию.

1) 40 2) 50 3)60 4) 70

Решение:

  1. это задача на использование абсолютных и относительных адресов в электронных таблицах

  2. вспомним, что при копировании все относительные адреса меняются (согласно направлению перемещения формулы), а абсолютные – нет

  3. в формуле, которая находится в C1, используются два адреса: A1 и B$1

  4. адрес A1 – относительный, он может изменяться полностью (и строка, и столбец)

  5. адрес B$1 – смешанный, в нем номер строки «зафиксирован» знаком доллара, а имя столбца – нет, поэтому при копировании может измениться только имя столбца

  6. при копировании из C1 в C2 столбец не изменяется, а номер строки увеличивается на 1, поэтому в C2 получим формулу =A2+B$1 (здесь учтено, что у второго адреса номер строки «зафиксирован»)

  7. сумма ячеек A2 и B1 равна 30 + 20 = 50

  1. таким образом, правильный ответ – 2.

Возможные ловушки и проблемы:

  • расчет на то, что ученик забудет, что абсолютная ссылка не меняется (тогда получится формула =A2+B$2, на этот случай дан неверный ответ 70)



Еще пример задания:

Дан фрагмент электронной таблицы:


А

В

С

1

1

2


2

2

6

=СЧЁТ(A1:B2)

3



=СРЗНАЧ(A1:C2)

Как изменится значение ячейки С3, если после ввода формул переместить содержимое ячейки В2 в В3? («+1» означает увеличение на 1, а «–1» – уменьшение на 1)

1) –2 2) –1 3) 0 4) +1

Решение:

  1. это задача на знание особенностей функций СЧЕТ и СРЗНАЧ, которые не учитывают пустые ячейки

  2. после ввода формул в С2 окажется количество непустых ячеек диапазона А1:В2, равное 4

  3. в С3 будет выведено среднее значение диапазона А1:С2 равное

(1+2+2+6+4)/5 = 3

  1. после перемещения (не копирования!) содержимого ячейки В2 в В3 ячейка В2 окажется пустой, поэтому в С2 выводится число 3 – количество непустых ячеек диапазона А1:В2

  2. в С3 будет выведено среднее значение диапазона А1:С2 равное

(1+2+2+3)/4 = 2,

то есть значение С3 уменьшится на 1

  1. таким образом, правильный ответ – 2.

Возможные ловушки и проблемы:

  • нужно помнить, что при перемещении содержимого ячейки в другое место она становится пустой

  • нужно помнить, что функции СЧЕТ и СРЗНАЧ не учитывают пустые ячейки

Задачи для тренировки1:

  1. В ячейке B1 записана формула =2*$A1. Какой вид приобретет формула, после того как ячейку B1 скопируют в ячейку C2?

1) =2*$B1 2) =2*$A2 3) =3*$A2 4) =3*$B2Н

  1. В ячейке C2 записана формула =$E$3+D2. Какой вид приобретет формула, после того как ячейку C2 скопируют в ячейку B1?

1) =$E$3+C1 2) =$D$3+D2 3) =$E$3+E3 4) =$F$4+D2

  1. Дан фрагмент электронной таблицы:


A

B

C

D

1

5

2

4


2

10

1

6


В ячейку D2 введена формула =А2*В1+С1. В результате в ячейке D2 появится значение:

1) 6 2) 14 3) 16 4) 24

  1. В ячейке А1 электронной таблицы записана формула =D1-$D2. Какой вид приобретет формула после того, как ячейку А1 скопируют в ячейку В1?

1) =E1-$E2 2) =E1-$D2 3) =E2-$D2 4) =D1-$E2

  1. Дан фрагмент электронной таблицы:


А

В

С

D

1

1

2

3


2

4

5

6


3

7

8

9


В ячейку D1 введена формула =$А$1*В1+С2, а затем скопирована в ячейку D2. Какое значение в результате появится в ячейке D2?

1) 10 2) 14 3) 16 4) 24

  1. В ячейке В2 записана формула =$D$2+Е2. Какой вид будет иметь формула, если ячейку В2 скопировать в ячейку А1?

1) =$D$2+E1 2) =$D$2+C2 3) =$D$2+D2 4) =$D$2+D1

  1. В ячейке СЗ электронной таблицы записана формуле =$А$1+В1. Какой вид будет иметь формула, если ячейку СЗ скопировать в ячейку ВЗ?

1) =$A$1+А1 2) =$В$1+ВЗ 3) =$А$1+ВЗ 4) =$B$1+C1

  1. При работе с электронной таблицей в ячейке ЕЗ записана формула =В2+$СЗ. Какой вид приобретет формула после того, как ячейку ЕЗ скопируют в ячейку D2?

1) =А1+$СЗ 2) =А1+$С2 3) =E2+$D2 4) =D2+$E2

  1. В ячейке электронной таблицы В4 записана формула =С2+$A$2. Какой вид приобретет формула, если ячейку В4 скопировать в ячейку С5?

1) =D2+$В$3 2) =С5+$A$2 3) =D3+$A$2 4) =СЗ+$А$3

  1. В ячейке электронной таблицы А1 записана формула =$D1+D$2. Какой вид приобретет формула, если ячейку А1 скопировать в ячейку ВЗ?

1) =D1+$E2 2) =D3+$F2 3) =E2+D$2 4) =$D3+Е$2

  1. Дан фрагмент электронной таблицы:


А

В

С

1

2

3


2

4

5

=СЧЁТ(A1:B2)

3



=СРЗНАЧ(A1:C2)

Как изменится значение ячейки С3, если после ввода формул переместить содержимое ячейки В2 в В3? («+1» означает увеличение на 1, а «–1» – уменьшение на 1):

1) –1 2) –0,6 3) 0 4) +0,6

  1. В электронной таблице значение формулы =СРЗНАЧ(A6:C6) равно (-2). Чему равно значение формулы =СУММ(A6:D6), если значение ячейки D6 равно 5?

1) 1 2) -1 3) -3 4) 7

  1. В электронной таблице значение формулы =СРЗНАЧ(A6:C6) равно 0,1. Чему равно значение формулы =СУММ(A6:D6), если значение ячейки D6 равно (–1)?

1) – 0,7 2) -0,4 3) 0,9 4) 1,1

  1. В электронной таблице значение формулы =СРЗНАЧ(B5:E5) равно 100. Чему равно значение формулы =СУММ(B5:F5), если значение ячейки F5 равно 10?

1) 90 2) 110 3) 310 4) 410

  1. В электронной таблице значение формулы =СРЗНАЧ(A6:C6) равно 2. Чему равно значение формулы =СУММ(A6:D6), если значение ячейки D6 равно -5?

1) 1 2) -1 3) -3 4) 7

  1. В электронной таблице значение формулы =СУММ(C3:E3) равно 15. Чему равно значение формулы =СРЗНАЧ(C3:F3), если значение ячейки F3 равно 5?

1) 20 2) 10 3) 5 4) 4

  1. В динамической (электронной) таблице приведены значения пробега автомашин (в км) и общего расхода дизельного топлива (в литрах) в четырех автохозяйствах с 12 по 15 июля.


12 июля

13 июля

14 июля

15 июля

За четыре дня

Название автохозяйства

Пробег

Расход

Пробег

Расход

Пробег

Расход

Пробег

Расход

Пробег

Расход

Автоколонна №11

9989

2134

9789

2056

9234

2198

9878

2031

38890

8419

Грузовое такси

490

101

987

215

487

112

978

203

2942

631

Автобаза №6

1076

147

2111

297

4021

587

1032

143

8240

1174

Трансавтопарк

998

151

2054

299

3989

601

1023

149

8064

1200

В каком из хозяйств средний расход топлива на 100 км пути за эти четыре дня наименьший?

1) Автоколонна № 11

2) Грузовое такси

3) Автобаза №6

4) Трансавтопарк


  1. В электронной таблице значение формулы =СРЗНАЧ(A1:C1) равно 5. Чему равно значение ячейки D1, если значение формулы =СУММ(A1:D1)равно 7?

1) 2 2) -8 3) 8 4) -3

  1. В электронной таблице значение формулы =СРЗНАЧ(B1:D1) равно 4. Чему равно значение ячейки A1, если значение формулы =СУММ(A1:D1)равно 9?

1) -3 2) 5 3) 1 4) 3

  1. В электронной таблице значение формулы =СРЗНАЧ(A1:B4) равно 3. Чему равно значение ячейки A4, если значение формулы =СУММ(A1:B3)равно 30, а значение ячейки B4 равно 5?

1) -11 2) 11 3) 4 4) -9

  1. На рисунке приведен фрагмент электронной таблицы. Определите, чему будет равно значение, вычисленное по следующей формуле =СУММ(B1:C4)+F2*E4–A3


A

B

C

D

E

F

1

1

3

4

8

2

0

2

4

–5

–2

1

5

5

3

5

5

5

5

5

5

4

2

3

1

4

4

2

1) 19 2) 29 3) 31 4) 71

  1. На рисунке приведен фрагмент электронной таблицы. Определите, чему будет равно значение, вычисленное по следующей формуле =СУММ(A1:C2)*F4*E2-D3


A

B

C

D

E

F

1

1

3

4

8

2

0

2

4

–5

–2

1

5

5

3

5

5

5

5

5

5

4

2

3

1

4

4

2

1) 15 2) 0 3) 45 4) 55

  1. В электронной таблице значение формулы =СРЗНАЧ(A4:C4) равно 5. Чему равно значение формулы =СУММ(A4:D4), если значение ячейки D4 равно 6?

1) 1 2) 11 3) 16 4) 21

  1. В электронной таблице значение формулы =СРЗНАЧ(A3:D4) равно 5. Чему равно значение формулы =СРЗНАЧ(A3:C4), если значение формулы =СУММ(D3:D4)равно 4?

1) 1 2) 3 3) 4 4) 6

  1. В электронной таблице значение формулы =СРЗНАЧ(C2:D5) равно 3. Чему равно значение формулы =СУММ(C5:D5), если значение формулы =СРЗНАЧ(C2:D4)равно 5?

1) –6 2) –4 3) 2 4) 4

1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

7 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Интернет-маркетолог

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A17.doc

isa.muschanov.70@yandex.ru



A17 (базовый уровень, время –3 мин)

Тема: Представление данных в электронных таблицах в виде диаграмм и графиков.

Что нужно знать:

  • что такое столбчатая, линейчатая и круговая диаграмма, какую информацию можно получить с каждой из них

  • адрес ячейки в электронных таблицах состоит из имени столбца и следующего за ним номера строки, например, C15

  • формулы в электронных таблицах начинаются знаком = («равно»)

  • знаки +, –, *, / и ^ в формулах означают соответственно сложение, вычитание, умножение, деление и возведение в степень

  • в заданиях ЕГЭ могут использоваться стандартные функции СУММ (сумма), СРЗНАЧ (среднее значение), МИН (минимальное значение), МАКС (максимальное значение)

  • запись B2:C4 означает диапазон, то есть, все ячейки внутри прямоугольника, ограниченного ячейками B2 и C4; например, с помощью формулы =СУММ(B2:C4) вычисляется сумма значений ячеек B2, B3, B4, C2, C3 и C4

Пример задания:

На диаграмме показано количество призеров олимпиады по информатике (И), математике (М), физике (Ф) в трех городах России.

hello_html_56d0d722.png

Какая из диаграмм правильно отражает соотношение общего числа призеров по каждому предмету для всех городов вместе?

hello_html_m79783f08.png

Решение:

  1. в условии дана столбчатая диаграмма, по которой можно определить все числовые данные

  2. в ответах все диаграммы – круговые, по ним можно определить только доли отдельных составляющих в общей сумме

  3. при анализе диаграмм-ответов нужно «вылавливать» их характерные черты (половину или четверть круга, одинаковые значения, соотношения между секторами), именно они позволяют определить верный ответ

  4. попробуем сначала проанализировать круговые диаграммы (ответы)

  • наибольшая доля (на всех диаграммах) приходится на математику

  • самый меньший сектор на диаграммах 1-3 – информатика, а на 4-ой – физика

  • на 1-ой диаграмме информатика составляет четверть от общей суммы

  • на 3-ей диаграмме математика составляет половину от общей суммы

  1. теперь снимем данные с заданной столбчатой диаграммы и подсчитаем сумму призеров по каждому предмету:


М

Ф

И

Всего

Екатеринбург

180

120

120


Томск

160

140

60


Новосибирск

180

120

120


Всего

520

380

300

1200


  1. по условию для построения круговой диаграммы использовалась нижняя строка таблицы

  2. общее количество призеров ­ – 1200, информатика составляет ровно четверть от этого числа

  3. таким образом, правильный ответ – 1.

Еще пример задания:

В цехе трудятся рабочие трех специальностей – токари (Т), слесари (С) и фрезеровщики (Ф). Каждый рабочий имеет разряд не меньший второго и не больший пятого. На диаграмме I отражено количество рабочих с различными разрядами, а на диаграмме II – распределение рабочих по специальностям. Каждый рабочий имеет только одну специальность и один разряд.

hello_html_m7735d9a6.png

Имеются четыре утверждения:

А) Все рабочие третьего разряда могут быть токарями

Б) Все рабочие третьего разряда могут быть фрезеровщиками

В) Все слесари могут быть пятого разряда

Г) Все токари могут быть четвертого разряда

Какое из этих утверждений следует из анализа обеих диаграмм?

1) А 2) Б 3) В 4) Г

Решение:

  1. в условии даны столбчатая диаграмма, по которой можно определить все числовые данные, и круговая диаграмма, по которой можно определить только доли отдельных составляющих в общей сумме

  2. по данным столбчатой диаграммы определим, сколько рабочих имеют 2-ой, 3-й, 4-й и 5-й разряды:

2-ой разряд: 25 чел. 3-й разряд: 40 чел.

4-й разряд: 20 чел. 5-й разряд: 15 чел.

  1. сложив все эти числа, определим, что всего в цехе 25 + 40 + 20 + 15 = 100 рабочих

  2. по круговой диаграмме видим, что половина из них – токари (значит их 50 человек), четверть – слесари (25 чел.) и еще четверть – фрезеровщики (25 чел.)

  3. теперь последовательно рассмотрим все утверждения-ответы:

А: Все рабочие третьего разряда (их 40 чел.) МОГУТ быть токарями, потому в цеху 50 токарей

Б: Все рабочие третьего разряда (их 40 чел.) НЕ могут быть фрезеровщиками, потому в цеху всего 25 фрезеровщиков

В: Все слесари (их 25 чел.) НЕ могут быть 5-ого разряда, потому в цеху только 15 рабочих имеют 5-й разряд

Г: Все токари (их 50 чел.) НЕ могут быть четвертого разряда, потому в цеху только 20 рабочих имеют 4-й разряд

  1. таким образом, правильный ответ – 1.

Еще пример задания:

Дан фрагмент электронной таблицы в режиме отображения формул.

hello_html_m616f3f2f.png

После копирования диапазона ячеек АЗ:ЕЗ в диапазон А4:Е6 была построена диаграмма (график) по значениям столбцов диапазона ячеек В2:Е6.

hello_html_7256ed9d.pnghello_html_m5045f2e5.gifhello_html_4fffedbd.gifhello_html_mbbffd51.gifhello_html_m289c3f83.gif

Значениям С2:С6 соответствует график

1) А 2) Б 3) В 4) Г

Решение:

  1. прежде всего разберемся, что значит фраза «После копирования диапазона ячеек АЗ:ЕЗ в диапазон А4:Е6»; очевидно, что размеры диапазонов АЗ:ЕЗ и А4:Е6, поэтому авторы задачи имели ввиду следующее: выделяется диапазон АЗ:ЕЗ и «растягивается» вниз за маркер заполнения до строки 6:

hello_html_52b439.pnghello_html_m2e4f2484.gif

  1. при этом формула, находящаяся в А3, скопируется в ячейки А4:А6, формула из В3 – в ячейки В4:В6 и т.д.

  2. по условию нас в конечном счете интересует только столбец С, посмотрим, что получится при копировании формулы из С3 (=-C2+3*$B$1) в ячейки С4:С6

  3. в этой формуле есть ссылки на две ячейки – одна относительная, на С2 (при копировании она будет меняться (на С3, С4 и т.д.), а вторая – абсолютная, на В1, она при копировании не изменится:

hello_html_m49fd347b.png

  1. видим, что формулы в столбце С зависят только от В1 и ячеек этого же столбца, поэтому не нужно рассчитывать все остальные ячейки

  2. последовательно найдем все числа в диапазоне С3:С6:

С3=-С2+3*В1=-1+3*3=8

С4=-С3+3*В1=-8+3*3=1

С5=-С4+3*В1=-1+3*3=8

С6=-С5+3*В1=-8+3*3=1

  1. посмотрев на график, видим, что именно так меняются данные на графике Б

  2. таким образом, правильный ответ – 2.





Задачи для тренировки1:

  1. Дан фрагмент электронной таблицы:


A

B

C

D

1


3

4


2

=C1-B1

=B1-A2*2

=C1/2

=B1+B2

После выполнения вычислений была построена диаграмма по значениям диапазона ячеек A2:D2. Укажите получившуюся диаграмму.

hello_html_4fb44747.png



  1. Дан фрагмент электронной таблицы:


А

В

1

=B1+1

1

2

=A1+2

2

3

=B2-1


4

=A3


После выполнения вычислений, была построена диаграмма по значениям диапазона ячеек A1:A4. Укажите получившуюся диаграмму.

hello_html_m2811aa9a.png

  1. Год

    Кол-во пользователей, тыс. чел.

    1997

    450

    1998

    900

    1999

    1100

    Имеется фрагмент электронной таблицы «Динамика роста числа пользователей Интернета в России»:

По данным таблицы были построены диаграммы



hello_html_m2a2be892.png

Укажите, какие диаграммы правильно отражают данные, представленные в таблице.

1) 1, 2 2) 2, 3 3) 2, 4 4) 3, 4

  1. В телеконференции учителей физико-математических школ принимают участие 100 учителей. Среди них есть учителя математики (М), физики (Ф) и информатики (И). Учителя имеют разный уровень квалификации: каждый учитель либо не имеет категории вообще (без категории – БK), либо имеет II, I или высшую (ВК) квалификационную категорию. На диаграмме 1 отражено количество учителей с различным уровнем квалификации, а на диаграмме 2 – распределение учителей по предметам.

hello_html_m5dc78481.png

Имеются 4 утверждения:

A) Все учителя I категории могут являться учителями математики.

Б) Все учителя I категории могут являться учителями физики.

B) Все учителя информатики могут иметь высшую категорию.

Г) Все учителя математики могут иметь II категорию.

Какое из этих утверждений следует из анализа обеих представленных диаграмм?'

1) А 2) Б 3) В 4) Г

  1. Имеется фрагмент электронной таблицы:


Население, млн. чел

1970 год

1989 год

Австралия и Океания

19

26

Африка

361

628

Европа

642

701

Южная Америка

190

291

Северная и Центральная Америка

320

422

Азия

2161

3133

Диаграмма 1.

hello_html_710b3c8a.png

Диаграмма 2.

hello_html_1e8f9baa.png

Какое из следующих утверждений истинно?

1) Обе диаграммы верно отражают данные, представленные в таблице.

2) Ни одна из диаграмм не соответствует данным, представленным в таблице.

3) Данным, представленным в таблице, соответствует только диаграмма 1.

4) Данным, представленным в таблице, соответствует только диаграмма 2.


  1. Имеется фрагмент электронной таблицы:


Название пролива

Длина (км)

Глубина(м)

1

Босфор

30

20

2

Магелланов

575

29

3

Ормузский

195

27

4

Гудзонов

806

141

5

Гибралтарский

59

53

6

Ла-Манш

578

23

7

Баб-эль-Мандебский

109

31

8

Дарданеллы

120

29

9

Берингов

96

36

По данным таблицы были построены диаграммы.

hello_html_m33898a10.png

Какое из следующих утверждений истинно?

1) Обе диаграммы верно отражают данные, представленные в таблице.

2) Ни одна из диаграмм не соответствует данным, представленным в таблице.

3) Диаграмма 1 отражает глубину проливов.

4) Диаграмма 2 отражает длину проливов.

  1. Дан фрагмент электронной таблицы:


А

В

1

=В2+2

5

2

=В4-1

0

3

=А1


4

=А2+2

2

После выполнения вычислений по значениям диапазона ячеек А1:А4 была построена диаграмма. Укажите получившуюся диаграмму.

hello_html_m6936b43a.png

  1. В соревнованиях по зимним видам спорта принимают участие лыжники (Л), конькобежцы (К) и хоккеисты (X). Спортсмены имеют разный уровень мастерства: каждый имеет либо III, либо II, либо I разряд, либо является мастером спорта (М). На диаграмме 1 отражено количество спортсменов с различным уровнем спортивного мастерства, а на диаграмме 2 – распределение спортсменов по видам спорта.

hello_html_m4ccc0c2c.png

Имеются 4 утверждения:

A) Все спортсмены, имеющие I разряд, могут являться конькобежцами.

Б) Все лыжники могут быть мастерами спорта.

B) Все хоккеисты могут иметь II разряд.

Г) Все спортсмены, имеющие I разряд, могут являться хоккеистами.

Какое из этих утверждений следует из анализа обеих представленных диаграмм?

1) А 2) Б 3) В 4) Г



  1. Дан фрагмент электронной таблицы в режиме отображения формул.

hello_html_m616f3f2f.png

После копирования диапазона ячеек АЗ:ЕЗ в диапазон А4:Е6 была построена диаграмма (график) по значениям столбцов диапазона ячеек В2:Е6.

hello_html_7256ed9d.pnghello_html_m5045f2e5.gifhello_html_4fffedbd.gifhello_html_mbbffd51.gifhello_html_m289c3f83.gif

Значениям B2:B6 соответствует график

1) А 2) Б 3) В 4) Г

  1. Дан фрагмент электронной таблицы в режиме отображения формул.

hello_html_m616f3f2f.png

После копирования диапазона ячеек АЗ:ЕЗ в диапазон А4:Е6 была построена диаграмма (график) по значениям столбцов диапазона ячеек В2:Е6.

hello_html_7256ed9d.pnghello_html_m5045f2e5.gifhello_html_4fffedbd.gifhello_html_mbbffd51.gifhello_html_m289c3f83.gif

Значениям D2:D6 соответствует график

1) А 2) Б 3) В 4) Г

  1. Дан фрагмент электронной таблицы в режиме отображения формул.

hello_html_df9ed9e.png

После выполнения вычисления построили диаграмму по значениям диапазона A1:D1. Укажите полученную диаграмму:

hello_html_m28e16498.png









  1. Дан фрагмент электронной таблицы в режиме отображения формул.

z hello_html_m7f5a99fc.png

После выполнения вычислений построили диаграмму по значениям диапазона A1:D1. Укажите полученную диаграмму:

hello_html_m15cd3666.png

  1. Дан фрагмент электронной таблицы в режиме отображения формул.

hello_html_m65c66a78.png

После выполнения вычислений построили диаграмму по значениям диапазона A1:D1. Укажите полученную диаграмму:

hello_html_7148df75.png

  1. На диаграмме показаны объемы выпуска продукции трех видов (А, Б и В) за каждый месяц первого квартала:

hello_html_m33b75bcf.gif

Какая из диаграмм правильно отражает соотношение объемов выпуска этих видов продукции за весь квартал?

hello_html_75d8eff.png

  1. Дан фрагмент электронной таблицы:


А

В

C

D

1

=С2

=С1-A1

=A1*2

=B1*2+B2

2


4

2


После выполнения вычислений по значениям диапазона ячеек А1:D1 была построена диаграмма. Укажите получившуюся диаграмму.

1)

hello_html_m19df6c35.png

2)

hello_html_20194a5f.png

3)

hello_html_m2c7e498f.png

4)

hello_html_m70f1ccc8.png


  1. Дан фрагмент электронной таблицы:


А

В

C

D

1

=B2+С2

=С1+B2

=A1-C2

=B1-C1

2


1

3


После выполнения вычислений по значениям диапазона ячеек А1:D1 была построена диаграмма. Укажите получившуюся диаграмму.

1)

hello_html_m520afcd7.png

2)

hello_html_m70f1ccc8.png

3)

hello_html_20194a5f.png

4)

hello_html_m7bc286db.png


  1. Дан фрагмент электронной таблицы:


А

В

C

D

1


3

4


2

=C1-B1

=B1-A2*2

=C1/2

=B1+B2

После выполнения вычислений по значениям диапазона ячеек А2:D2 была построена диаграмма. Укажите получившуюся диаграмму.

1)

hello_html_548a8600.png

2)

hello_html_m37e03586.png

3)

hello_html_511729c5.png

4)

hello_html_m6bd54373.png

  1. На диаграмме представлено количество участников тестирования в разных регионах России:

hello_html_maa307c2.png

Какая из диаграмм правильно отражаем соотношение общего количества участников тестирования по регионам?

1)

hello_html_m1c4f9add.png

2)

hello_html_m14c6fc5a.png

3)

hello_html_70371f64.png

4)

hello_html_m7f539469.png

  1. На диаграмме представлено количество участников тестирования в разных регионах России:

hello_html_maa307c2.png

Какая из диаграмм правильно отражаем соотношение количества участников тестирования по химии в регионах?

1)

hello_html_m1c4f9add.png

2)

hello_html_m14c6fc5a.png

3)

hello_html_70371f64.png

4)

hello_html_m7f539469.png


  1. На диаграмме представлено количество участников тестирования в разных регионах России:

hello_html_maa307c2.png

Какая из диаграмм правильно отражаем соотношение количества участников тестирования по истории в регионах?

1)

hello_html_m1c4f9add.png

2)

hello_html_m14c6fc5a.png

3)

hello_html_70371f64.png

4)

hello_html_m7f539469.png

  1. На диаграмме представлено количество участников тестирования в разных регионах России:

hello_html_maa307c2.png

Какая из диаграмм правильно отражаем соотношение количества участников тестирования по биологии в регионах?

1)

hello_html_m1c4f9add.png

2)

hello_html_m14c6fc5a.png

3)

hello_html_70371f64.png

4)

hello_html_m7f539469.png

  1. Ученики четырех 10-х классов ходят на элективные курсы, причем каждый ученик выбрал только один курс. На диаграмме 1 показано количество учеников в классах, а на диаграмме 2 – сколько человек занимается каждым элективным курсом.

Диаграмма 1

Диаграмма 2

hello_html_m7eb0a22a.png

hello_html_53f90277.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) Все ученики 10-А и 10-Б могли выбрать элективные курсы либо по химии, либо по истории.

2) Все ученики 10-Г могли выбрать элективный курс по физике.

3) Никто из учеников 10-А и 10-Б не выбрал элективный курс по физике.

4) Все ученики 10-Б могли выбрать элективный курс по информатике.


  1. Девочки 5-6 классов занимаются в трех кружках: вязания, вышивания и макраме, причем каждая девочка ходит только в один кружок. На диаграмме 1 показано количество девочек в классах, а на диаграмме 2 – сколько человек занимается в каждом кружке.

Диаграмма 1

Диаграмма 2

hello_html_63a9b773.png

hello_html_37ab027d.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) В кружок вязания ходит больше девочек из 5-А, чем из 5-Б.

2) На кружке вышивания девочек 6-Б может не быть.

3) На кружок вышивания ходит больше девочек из 6-А, чем из 6-Б.

4) Кружок макраме может состоять только из девочек 5-А.


  1. Все ученики старших классов (с 9-го по 11-й) участвовали в школьной спартакиаде. По результатам соревнований каждый из них получил от 0 до 3 баллов. На диаграмме 1 показано количество по классам, а на диаграмме 2 – количество учеников, набравших баллы от 0 до 3.

Диаграмма 1

Диаграмма 2

hello_html_m4025e76d.png

hello_html_m7deb58e9.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) Среди учеников 9 класса есть хотя бы один, набравший 2 или 3 балла.

2) Все ученики, набравшие 0 баллов, могут быть 9-классниками.

3) Все 10-классники могли набрать ровно по 2 балла.

4) Среди набравших 3 балла нет ни одного 10-классника.


  1. В магазине продаются мячи четырех цветов (синие, зеленые, красные и желтые) и трех размеров (большие, средние и маленькие). На диаграмме 1 показано количество мячей разного размера, а на диаграмме 2 – распределение мячей по цветам.

Диаграмма 1

Диаграмма 2

hello_html_5f6acb1a.png

hello_html_ee2907e.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) Все маленькие мячи могут быть синими или желтыми.

2) Среди больших мячей найдется хотя бы один красный.

3) Среди маленьких мячей найдется хотя бы один зеленый или красный.

4) Все красные мячи могут быть среднего размера.


  1. Заведующая детским садом обнаружила, что в сад ходят дети четырех имен: Саши, Вали, Миши и Иры. По цвету волос каждого из них можно четко отнести к блондинам, шатенам или брюнетам. На диаграмме 1 показано количество детей по именам, а на диаграмме 2 – распределение детей по цвету волос.













Диаграмма 1

Диаграмма 2

hello_html_3ef1fc4a.png

hello_html_2d2569fa.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) Всех блондинов зовут Саша.

2) Все Миши могут быть блондинами.

3) Среди Саш может не быть ни одного шатена.

4) Среди брюнетов есть хотя бы один ребенок по имени Валя или Ира.


  1. В магазине продаются головные уборы трех видов (шляпы, панамы и бейсболки), сделанные из четырех материалов (брезент, хлопок, шелк и соломка). На диаграмме 1 показано количество головных уборов каждого вида, а на диаграмме 2 – распределение головных уборов по материалам.

Диаграмма 1

Диаграмма 2

hello_html_4ba66086.png

hello_html_m2dc41b1f.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) Все соломенные изделия могут быть бейсболками.

2) Все панамки могут быть из хлопка или брезентовыми.

3) Среди изделий из шелка может не быть ни одной шляпы.

4) Среди изделий, сделанных не из соломки, может не быть ни одной панамы.


  1. Молодой человек решил сделать подарок своей невесте и пришел в ювелирный магазин. Там он обнаружил кольца из золота, серебра и платины, каждое из которых было украшено одним из четырех драгоценных камней (топазом, изумрудом, алмазом или рубином). На диаграмме 1 показано соотношение колец с разными камнями, а на диаграмме 2 – распределение колец по материалам.

Диаграмма 1

Диаграмма 2

hello_html_5638479a.png

hello_html_280460d7.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) Все кольца с изумрудами могут быть из золота.

2) Среди серебряных колец найдется хотя бы одно кольцо с изумрудом.

3) Все кольца с рубинами и алмазами могут быть платиновыми.

4) Все золотые кольца могут быть с алмазами.


  1. Молодой человек решил сделать подарок своей невесте и пришел в ювелирный магазин. Там он обнаружил кольца из золота, серебра и платины, каждое из которых было украшено одним из четырех драгоценных камней (топазом, изумрудом, алмазом или рубином). На диаграмме 1 показано соотношение колец с разными камнями, а на диаграмме 2 – распределение колец по материалам.

Диаграмма 1

Диаграмма 2

hello_html_5638479a.png

hello_html_280460d7.png

Какое из этих утверждений следует из анализа обеих диаграмм?

1) Все кольца с изумрудами могут быть серебряными.

2) Среди золотых и серебряных колец найдется хотя бы одно с рубином.

3) Все золотые кольца могут быть с топазами.

4) Все рубины находятся в серебряных кольцах.



1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Крылов С.С. ЕГЭ-2010. Информатика: сборник экзаменационных заданий. – М.: Эксмо, 2009.

  4. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  5. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

18 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A18.doc

isa.muschanov.70@yandex.ru



A18 (базовый уровень, время – 2 мин)

Тема: Выполнение алгоритмов для исполнителя.

Что нужно знать:

  • правила выполнения линейных, разветвляющихся и циклических алгоритмов

  • основные операции с символьными строками (определение длины, выделение подстроки, удаление и вставка символов, «сцепка» двух строк в одну)

  • исполнитель – это человек, группа людей, животное, машина или другой объект, который может понимать и выполнять некоторые команды

  • в школьном алгоритмическом языке нц обозначает «начало цикла», а кц – «конец цикла»; все команды между нц и кц – это тело цикла, они выполняются несколько раз

  • запись нц для i от 1 до n обозначает начало цикла, в котором переменная i (она называется переменной цикла) принимает последовательно все значения от 1 до n с шагом 1

Пример задания:

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно







6







5







4







3







2







1

A

B

C

D

E

F


Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 0

НАЧАЛО

ПОКА <снизу свободно> вниз

ПОКА <слева свободно> влево

ПОКА <сверху свободно> вверх

ПОКА <справа свободно> вправо

КОНЕЦ









hello_html_m72439dd5.gifhello_html_f741232.gif




hello_html_74c8f26.gifhello_html_m232984aa.gif
























hello_html_m5f255a02.gif













Решение:
  1. легко понять, что для того, чтобы исполнитель вернулся обратно в ту клетку, откуда он начал движения, четыре стенки должны быть расставлены так, чтобы он упирался в них сначала при движении вниз, затем – влево, вверх и, наконец, вправо:

на рисунке красная точка обозначает клетку, начав с которой РОБОТ вернется обратно;

  1. кроме этих четырех стенок, необходимо, чтобы коридор, выделенный на рисунке справа зеленым фоном, был свободен для прохода

  2. обратим внимание, что возможны еще «вырожденные» варианты, вроде таких:









    hello_html_m5f255a02.gifhello_html_m74631a52.gif




    hello_html_m232984aa.gif









  3. итак, мы выяснили, что нужно рассматривать лишь те клетки, где есть стенка справа; отметим на исходной карте клетки-кандидаты:





    6





    5






    4






    3





    2






    1

    A

    B

    C

    D

    E

    F


  4. этих «подозрительных» клеток не так много, но можно еще сократить количество рассматриваемых вариантов: если РОБОТ начинает движение с любой клетки на вертикали F, он все равно приходит в клетку F4, которая удовлетворяет заданному условию, таким образом, одну клетку мы нашли, а остальные клетки вертикали F условию не удовлетворяют:






    6






    5






    4






    3






    2






    1

    A

    B

    C

    D

    E

    F


  5. проверяем оставшиеся три клетки-кандидаты, но для каждой из них после выполнения алгоритма РОБОТ не приходит в ту клетку, откуда он стартовал:







6







5


hello_html_m4a691af6.gif





4







3






2







1

A

B

C

D

E

F


hello_html_48888ecd.gif





6







5







4







3







2







1

A

B

C

D

E

F








6



hello_html_m4e826777.gif



5







4







3







2







1

A

B

C

D

E

F












  1. итак, условию удовлетворяет только одна клетка – F4

  2. таким образом, правильный ответ – 1.

Возможные ловушки и проблемы:

  • вариантов может быть достаточно много, важно не пропустить ни один из них

  • можно попытаться выполнить алгоритм для каждой клетки лабиринта, но это займет много времени; поэтому лучше ограничиться только клетками-кандидатами

  • нужно правильно определить свойства, по которым клетку можно считать «кандидатом»

  • можно не заметить стенку и таким образом получить лишнее решение

Еще пример задания:

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно







6







5







4







3







2







1

A

B

C

D

E

F


Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену) и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 0

НАЧАЛО

ПОКА <слева свободно> вверх

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

КОНЕЦ









hello_html_m72439dd5.gifhello_html_f741232.gif




hello_html_74c8f26.gif


hello_html_4c3bdba.gifhello_html_m52627dce.gif





hello_html_690a6ea1.gif
















hello_html_m20842efd.gifhello_html_m232984aa.gif

hello_html_487b83a8.gif












Решение:
  1. особенность этой задач в том, что РОБОТ проверяет стенку в одном направлении, а движется в другом

  2. рассмотрим первый цикл:

ПОКА <слева свободно> вверх

понятно, что при движении вверх РОБОТ остановится в первой же клетке, где слева будет стена






  1. 6






    5







    4






    3






    2

    1

    A

    B

    C

    D

    E

    F


    рассуждая аналогично, находим, что во втором цикле при движении вправо РОБОТ останавливается в клетке, где есть стена сверху; в третьем цикле (движение вниз) РОБОТ останавливается в клетке, где есть стена справа;
  2. наконец, в четвертом цикле РОБОТ останавливается в клетке, где есть стена снизу; при этом он должен попасть обратно в исходную клетку, обозначенную на рисунке красной точкой;

  3. кроме этих четырех стенок, необходимо, чтобы коридор, выделенный на рисунке зеленым фоном, был свободен для прохода, иначе РОБОТ врежется в стенку

  4. теперь отметим на карте все клетки-кандидаты, где снизу есть стена:

  5. при движении из клеток B5, D1, E1, E6, F1 и F3 РОБОТ врежется в стенку, потому что слева стены нет и условие «слева свободно» всегда истинно:


    hello_html_476be275.gif


    hello_html_m7b819d02.gif

    hello_html_m3d1ad82d.gif

    hello_html_596e1ae0.gif

    6




    hello_html_m3bed230f.gif


    5







    4






    3





    hello_html_m38e961dd.gif

    2

    1

    A

    B

    C

    D

    E

    F


  6. начав движение с клетки A1, C1 или C2, РОБОТ также врезается в стенку и разрушается:







6



hello_html_m47fdffd1.gif




5







4







3






2

hello_html_m79c3365c.gif

hello_html_mb1e9e72.gif




1

A

B

C

D

E

F



  1. и только путь, начатый в клетке B1, приводит РОБОТА обратно в точку старта:







6







5


hello_html_7a308974.gif





4







3







2






1

A

B

C

D

E

F




  1. таким образом, только клетка B1 удовлетворяет условию задачи, поэтому …

  2. правильный ответ – 1.

Еще пример задания:

В приведенном ниже фрагменте алгоритма, записанном на алгоритмическом языке, переменные a, b, c имеют тип «строка», а переменные i, k – тип «целое». Используются следующие функции:

Длина(a) – возвращает количество символов в строке a. (Тип «целое»)

Извлечь(a,i) – возвращает i-тый (слева) символ в строке a. (Тип «строка»)

Склеить(a,b) – возвращает строку, в которой записаны сначала все символы
строки
a, а затем все символы строки b. (Тип «строка»)

Значения строк записываются в одинарных кавычках (Например, a:='дом'). Фрагмент алгоритма:

i := Длина(a)

k := 2

b := 'А'

пока i > 0

нц

c := Извлечь(a,i)

b := Склеить(b,c)

i := i – k

кц

b := Склеить(b,'Т')

Какое значение будет у переменной b после выполнения вышеприведенного фрагмента алгоритма, если значение переменной a было ‘ПОЕЗД’?

1) ‘АДЕПТ’ 2) ‘АДЗЕОП’ 3) ‘АДТЕТПТ’ 4) ‘АДЗОТ’

Решение:

  1. эта задача более близка к классическому программированию, здесь выполняется обработка символьных строк; вся информация для успешного решения, вообще говоря, содержится в условии, но желательно иметь хотя бы небольшой опыт работы с символьными строками на Паскале (или другом языке)

  2. заметим, что последняя команда алгоритма, b:=Склеить(b,'Т'), добавляет букву 'Т' в конец строки b, поэтому ответ 2 – явно неверный (строка должна оканчиваться на букву 'Т', а не на 'П')

  3. для решения будем использовать ручную прокрутку; здесь пять переменных: a, b, c, i, k, для каждой из них выделим столбец, где будем записывать изменение ее значения

  4. перед выполнением заданного фрагмента мы знаем только значение a, остальные неизвестны (обозначим их знаком вопроса):


    a

    b

    c

    i

    k


    'ПОЕЗД'

    ?

    ?

    ?

    ?

  5. в первой команде длина строки a (она равна 5 символам) записывается в переменную i:


    a

    b

    c

    i

    k


    'ПОЕЗД'

    ?

    ?

    ?

    ?

    i:=Длина(a)




    5


  6. следующие два оператора записывают начальные значения в k и b:


    a

    b

    c

    i

    k


    'ПОЕЗД'

    ?

    ?

    ?

    ?

    i:=Длина(a)




    5


    k:=2





    2

    b:='А'


    'A'




  7. далее следует цикл пока с проверкой условия i>0 в начале цикла; сейчас i=5>0, то есть, условие выполняется, цикл начинает работать и выполняются все операторы в теле цикла:


a

b

c

i

k


'ПОЕЗД'

?

?

?

?

i:=Длина(a)




5


k:=2





2

b:='А'


'A'




i > 0?

да

c:=Извлечь(a,i)

i:=Длина(a)




5

b:=Cклеить(b,c)

k:=2





i:=i–k




3


  • поскольку i=5, вызов функции Извлечь(a,i) выделяет из строки a символ с номером 5, это 'Д';

  • следующей командой этот символ приписывается в «хвост» строки b, теперь в ней хранится цепочка 'АД';

  • в команде i:=i-k значение переменной i уменьшается на k (то есть, на 2)

  1. далее нужно перейти в начало цикла и снова проверить условие i>0, оно опять истинно, поэтому выполняется следующий шаг цикла, в котором к строке b добавляется 3-й символ строки a, то есть 'Е':


    a

    b

    c

    i

    k

    ...

    'ПОЕЗД'

    'АД'

    3

    2

    i > 0?

    да

    c:=Извлечь(a,i)



    'Е'



    b:=Cклеить(b,c)


    'АДЕ'




    i:=i–k




    1


  2. условие i>0 истинно, поэтому тело цикла выполняется еще один раз, к строке b добавляется 1-й символ строки a, то есть 'П':


    a

    b

    c

    i

    k

    ...

    'ПОЕЗД'

    'АДЕ'

    1

    2

    i > 0?

    да

    c:=Извлечь(a,i)



    'П'



    b:=Cклеить(b,c)


    'АДЕП'




    i:=i–k




    1


  3. теперь i=-1, поэтому при очередной проверке условие i>0 в начале цикла оказывается ложным, выполнение цикла заканчивается, и исполнителю остается выполнить единственную строчку после цикла, которая дописывает в конец строки b букву 'Т':


    a

    b

    c

    i

    k

    ...

    'ПОЕЗД'

    'АДЕП'

    –1

    2

    i > 0?

    нет

    b:=Склеить(b,'Т')


    'АДЕПТ'




  4. у нас получилось, что в конце выполнения фрагмента алгоритма в переменной b будет записана последовательность символов 'АДЕПТ'

  5. таким образом, правильный ответ – 1.

Возможные проблемы:

  • таблица получилась достаточно громоздкая, однако она позволяет наиболее наглядно решить задачу



Еще пример задания1:

Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.











































































































































































Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену)?

1) 1 2) 13 3) 21 4) 39

НАЧАЛО

ПОКА <снизу свободно> вниз

ПОКА <слева свободно> влево

вверх

вправо

КОНЕЦ



Решение:

  1. нарисуем примерный путь Робота в соответствии с программой; вот три варианта, когда Робот не разбивается:

1)

?

?hello_html_m385e13e9.gif

?

?


2)

?

?hello_html_610a9e9d.gif


?

3)

?

hello_html_m3317ed1b.gif

?

?


?

?

?

?



?

?


?


?


?

?


?



?



?



?


?



?











?




?

?


?

?

?

?



?

?


?


?


?

?

здесь ключевые клетки – две стенки (слева и снизу) и три ярко-зеленых клетки, которые должны быть свободны

  1. теперь ищем на карте участки, где есть все ключевые клеток (они выделены на рисунке):












































































































































































обратите внимание, что в двух случаях нижняя «ключевая» стенка имеет длину больше 1 (темно-коричневый цвет), то есть Робот может спускаться по разным линиям.

  1. теперь осталось подсчитать все клетки, спускаясь из которых Робот упирается в темно-коричневые стенки:











































































































































































  2. подсчет показывает, что их 39 штук;

  3. поэтому правильный ответ – 4.



Задачи для тренировки2:

  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно







6







5







4







3







2







1

A

B

C

D

E

F


Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ остановится в той же клетке, с которой он начал движение?

1) 1 2) 0 3) 3 4) 4

НАЧАЛО

ПОКА <справа свободно> вправо

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

ПОКА <снизу свободно> вниз

КОНЕЦ


  1. Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n, где n – целое число, вызывающая передвижение черепашки на n шагов в направлении движения.

Направо m, где m – целое число, вызывающая изменение направления движения на m градусов по часовой стрелке.

Запись Повтори 5 [Команда1 Команда2] означает, что последовательность команд в скобках повторится 5 раз.

Черепашке был дан для исполнения следующий алгоритм:

Повтори 5 [Вперед 10 Направо 72]

Какая фигура появится на экране?

1) Незамкнутая ломаная линия

2) Правильный треугольник

3) Квадрат

4) Правильный пятиугольник

  1. Имеется фрагмент алгоритма, записанный на алгоритмическом языке:

n := Длина(а)

m := 6

b := Извлечь(а, m)

с := Извлечь(а, m-4)

b := Склеить(b, с)

с := Извлечь(а, m+2)

b := Склеить(b, с)

нц для i от 10 до n

с := Извлечь(а, i)

b := Склеить(b, с)

кц

Здесь переменные a, b и с - строкового типа; переменные n, m, k – целые. В алгоритме используются следующие функции:

Длина(х) – возвращает количество символов в строке х. Имеет тип «целое».

Извлечь(х,i) – возвращает i-й символ слева в строке х. Имеет строковый тип.

Склеить(х,у) – возвращает строку, в которой записаны подряд сначала все символы
строки х, а затем все символы строки у. Имеет строковый тип.

Значения строк записываются в кавычках (одинарных), например x='школа'.

Какое значение примет переменная b после выполнения этого фрагмента алгоритма,

если переменная а имела значение 'КИБЕРНЕТИКА'?

1) ‘БЕРЕТ’ 2) ‘НИТКА’ 3) ‘ТИБЕТ’ 4) ‘НЕРКА’

  1. Имеется фрагмент алгоритма, записанный на алгоритмическом языке:

m := 10

b := Извлечь(а, m)

нц для k от 4 до 5

с := Извлечь(а, k)

b := Склеить(b, с)

кц

нц для k от 1 до 3

с := Извлечь(а, k)

b := Склеить(b, с)

кц

Здесь переменные a, b и с - строкового типа; переменные n, m, k – целые. В алгоритме используются следующие функции:

Извлечь(х,i) – возвращает i-й символ слева в строке х. Имеет строковый тип.

Склеить(х,у) – возвращает строку, в которой записаны подряд сначала все символы
строки х, а затем все символы строки у. Имеет строковый тип.

Значения строк записываются в кавычках (одинарных), например x='школа'.

Какое значение примет переменная b после выполнения этого фрагмента алгоритма,

если переменная а имела значение 'ИНФОРМАТИКА'?

1) ‘ФОРМАТ’ 2) ‘ФОРИНТ’ 3) ‘КОРТИК’ 4) ‘КОРИНФ’

  1. Некий исполнитель умеет выполнять три команды:

FD<число шагов> – движение вперед на указанное число шагов

RT<число градусов> – поворот направо на указанное число градусов

REPEAT<число повторений>[<повторяющиеся действия>] – команда повторения

Например, REPEAT 4[FD 20 RT 90] строит квадрат со стороной 20. Какую фигуру будет представлять собой траектория движения данного исполнителя в результате выполнения команды

REPEAT 8 [FD 60 RT 45]

1) Равносторонний треугольник

2) Ромб

3) Правильный шестиугольник

4) Правильный восьмиугольник


  1. Нhello_html_m3e7ecbbc.gifекий исполнитель умеет строить лесенки. Каждая ступенька такой лесенки имеет одну единицу по высоте и целое количество единиц в длину. Одна из возможных лесенок показана на рисунке.
    Исполнитель умеет выполнять команды ВВЕРХ и ВПРАВО N, где N – длина ступеньки, причем алгоритм всегда начинается командой ВВЕРХ и заканчивается командой ВПРАВО. Необходимо, выполнив 8 команд, построить лесенку из четырех, ступенек, ведущую из точки А в точку В. Точка А имеет координаты (0,0) на координатной плоскости, а точка В – координаты (5,4). Сколько различных последовательностей команд могут привести к требуемому результату?

1) 5 2) 6 3) 3 4) 4

  1. A











    B









    Исполнитель Робот действует на клетчатом поле, между соседними клетками которого могут стоять стены. Робот передвигается по клеткам поля и может выполнять следующие команды: Вверх (1), Вниз (2), Вправо (3), Влево (4).
    При выполнении каждой такой команды Робот перемещается в соседнюю клетку в указанном направлении. Если же в этом направлении между клетками стоит стена, то робот разрушается.
    Какую последовательность из 5 команд выполнил Робот, чтобы переместиться из клетки А в клетку В, не разрушившись от встречи со стенами? Ответы записаны в виде последовательности цифр, соответствующих командам.

1) 32323 2) 23324 3) 32324 4) 22211

  1. Имеется фрагмент алгоритма, записанный на алгоритмическом языке:

n := Длина(а)

m := 1

b := Извлечь(а, m)

нц для i от 7 до n

с := Извлечь(а, i)

b := Склеить(b, с)

кц

Здесь переменные a, b и с - строкового типа; переменные n, m – целые. В алгоритме используются следующие функции:

Длина(х) – возвращает количество символов в строке х. Имеет тип «целое».

Извлечь(х,i) – возвращает i-й символ слева в строке х. Имеет строковый тип.

Склеить(х,у) – возвращает строку, в которой записаны подряд сначала все символы
строки х, а затем все символы строки у. Имеет строковый тип.

Значения строк записываются в кавычках (одинарных), например x='школа'.

Какое значение примет переменная b после выполнения этого фрагмента алгоритма,

если переменная а имела значение 'ЭНЕРГЕТИКА'?

1) ‘РАНЕТ’ 2) ‘ЭТИКА’ 3) ‘ЭРКЕР’ 4) ‘РЕНТА’

  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <слева свободно> влево

ПОКА <снизу свободно> вниз

ПОКА <справа свободно> вправо

ПОКА <сверху свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <снизу свободно> вниз

ПОКА <справа свободно> вправо

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F





  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

ПОКА <сверху свободно> вправо

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F





  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вверх

ПОКА <справа свободно> вправо

ПОКА <снизу свободно> вниз

ПОКА <слева свободно> влево

КОНЕЦ









7








6








5








4








3








2








1

A

B

C

D

E

F

G




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Исполнитель Черепашка перемещается на экране компьютера, оставляя след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существуют две команды:

Вперед n, где n – целое число, вызывающая передвижение черепашки на n шагов в направлении движения.

Направо m, где m – целое число, вызывающая изменение направления движения на m градусов по часовой стрелке.

Запись Повтори 5 [Команда1 Команда2] означает, что последовательность команд в скобках повторится 5 раз.

Черепашке был дан для исполнения следующий алгоритм:

Повтори 5 [Повтори 4 [Вперед 40 Направо 90] Направо 120]

Какая фигура появится на экране?

1)

hello_html_m6cb53ee6.png

2)

hello_html_m1ba917fb.png

3)

hello_html_7ae27540.png

4)

hello_html_1dd0a4db.png


  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <слева свободно> вниз

ПОКА <снизу свободно> вправо

ПОКА <справа свободно> вверх

ПОКА <сверху свободно> влево

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <справа свободно> вверх

ПОКА <сверху свободно> влево

ПОКА <слева свободно> вниз

ПОКА <снизу свободно> вправо

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

ПОКА <снизу свободно> вниз

ПОКА <справа свободно> вправо

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <справа свободно> вправо

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

ПОКА <снизу свободно> вниз

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> влево

ПОКА <слева свободно> вниз

ПОКА <снизу свободно> вправо

ПОКА <справа свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Имеется фрагмент алгоритма, записанный на алгоритмическом языке:

i := Длина(а)

k := 1

b := 'T'

пока i > 1 нц

с := Извлечь(а, i)

b := Склеить(b, с)

i := i - k;

кц

Здесь переменные a, b и с - строкового типа; переменные n, m, k – целые. В алгоритме используются следующие функции:

Длина(х) – возвращает количество символов в строке х. Имеет тип «целое».

Извлечь(х,i) – возвращает i-й символ слева в строке х. Имеет строковый тип.

Склеить(х,у) – возвращает строку, в которой записаны подряд сначала все символы
строки х, а затем все символы строки у. Имеет строковый тип.

Значения строк записываются в кавычках (одинарных), например x:='школа'.

Какое значение примет переменная b после выполнения этого фрагмента алгоритма,

если переменная а имела значение 'КАРА'?

1) ‘КАРАТ’ 2) ‘ТАРА’ 3) ‘КРАТ’ 4) ‘ТКАРА’

  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

ПОКА <снизу свободно> вниз

ПОКА <справа свободно> вправо

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <справа свободно> вправо

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

ПОКА <снизу свободно> вниз

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <снизу свободно> вниз

ПОКА <слева свободно> влево

ПОКА <сверху свободно> вверх

ПОКА <справа свободно> вправо

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <справа свободно> вправо

ПОКА <снизу свободно> вниз

ПОКА <слева свободно> влево

ПОКА <сверху свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

ПОКА <снизу свободно> вниз

ПОКА <справа свободно> вправо

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <снизу свободно> вниз

ПОКА <справа свободно> вправо

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <слева свободно> вниз

ПОКА <снизу свободно> вправо

ПОКА <справа свободно> вверх

ПОКА <сверху свободно> влево

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <слева свободно> вниз

ПОКА <снизу свободно> вправо

ПОКА <справа свободно> вверх

ПОКА <сверху свободно> влево

КОНЕЦ








6







5







4







3







2







1

A

B

C

D

E

F




  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.











































































































































































Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену?

1) 0 2) 5 3) 15 4) 25

НАЧАЛО

ПОКА <слева свободно> влево

ПОКА <справа свободно> вправо

вверх

вправо

КОНЕЦ



  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.













































































































































































Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену)?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вверх

ПОКА <слева свободно> влево

вверх

влево

КОНЕЦ



  1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.













































































































































































Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену)?

1) 10 2) 14 3) 3 4) 22

НАЧАЛО

ПОКА <снизу свободно> вниз

ПОКА <справа свободно> вправо

вверх

вправо

КОНЕЦ










1 Т.Е. Чуркина. ЕГЭ. Информатика. Практикум по выполнению типовых тестовых заданий ЕГЭ.М.: Экзамен, 2010.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Крылов С.С. ЕГЭ-2010. Информатика: сборник экзаменационных заданий. – М.: Эксмо, 2009.

  4. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  5. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  6. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

  7. Т.Е. Чуркина. ЕГЭ. Информатика. Практикум по выполнению типовых тестовых заданий ЕГЭ.М.: Экзамен, 2010.

32 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Интернет-маркетолог

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A2B1 Решения.doc

isa.muschanov.70.95@yandex.ru



А

Основное отличие между задачами A2 и B1 состоит в том, что в B1 не даны варианты ответа.

2 (повышенный уровень, время – 3 мин)

B1 (базовый уровень, время – 1 мин)

Тема: Вычисление информационного объема сообщения.

Что нужно знать:

  • с помощью K бит можно закодировать hello_html_m5933c490.gifразличных вариантов (чисел)

  • таблица степеней двойки, она же показывает, сколько вариантов Q можно закодировать с помощью K бит:

    K, бит

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    Q, вариантов

    2

    4

    8

    16

    32

    64

    128

    256

    512

    1024

  • при измерении количества информации принимается, что в одном байте 8 бит, а в одном килобайте (1 Кбайт) – 1024 байта, в мегабайте (1 Мбайт) – 1024 Кбайта1

  • чтобы найти информационный объем сообщения (текста) I, нужно умножить количество символов (отсчетов) N на число бит на символ (отсчет) K: hello_html_m3622b753.gif

  • две строчки текста не могут занимать 100 Кбайт в памяти

  • мощность алфавита M – это количество символов в этом алфавите

  • если алфавит имеет мощность M, то количество всех возможных «слов» (символьных цепочек) длиной N (без учета смысла) равно hello_html_m58cdc44.gif; для двоичного кодирования (мощность алфавита M – 2 символа) получаем известную формулу: hello_html_m1f20d19e.gif

Пример задания:

В велокроссе участвуют 119 спортсменов. Специальное устройство регистрирует прохождение каждым из участников промежуточного финиша, записывая его номер с использованием минимально возможного количества бит, одинакового для каждого спортсмена. Каков информационный объем сообщения, записанного устройством, после того как промежуточный финиш прошли 70 велосипедистов?

1) 70 бит 2) 70 байт 3) 490 бит 4) 119 байт

Решение:

  1. велосипедистов было 119, у них 119 разных номеров, то есть, нам нужно закодировать 119 вариантов

  2. по таблице степеней двойки находим, что для этого нужно минимум 7 бит (при этом можно закодировать 128 вариантов, то есть, еще есть запас); итак, 7 бит на один отсчет

  3. когда 70 велосипедистов прошли промежуточный финиш, в память устройства записано 70 отсчетов

  4. поэтому в сообщении 70*7 = 490 бит информации (ответ 3).

Возможные ловушки:

  • дано число, которое есть в условии (неверные ответы 70 бит, 70 байт, 119 байт), чтобы сбить случайное угадывание

  • указано правильное число, но другие единицы измерения (мог быть вариант 490 байт)

  • расчет на невнимательное чтение условия: можно не заметить, что требуется определить объем только 70 отсчетов, а не всех 119 (мог быть вариант 119*7=833 бита)

Еще пример задания:

Объем сообщения, содержащего 4096 символов, равен 1/512 части Мбайта. Какова мощность алфавита, с помощью которого записано это сообщение?

1) 8 2) 16 3) 4096 4) 16384

Большие числа. Что делать?

Обычно (хотя и не всегда) задачи, в условии которых даны большие числа, решаются достаточно просто, если выделить в этих числах степени двойки. На эту мысль должны сразу наталкивать такие числа как

128 = 27, 256 = 28, 512 = 29 , 1024 = 210,

2048 = 211, 4096 = 212 , 8192 = 213, 16384 = 214, 65536 = 216 и т.п.

Нужно помнить, что соотношение между единицами измерения количества информации также представляют собой степени двойки:

1 байт = 8 бит = 23 бит,

1 Кбайт = 1024 байта = 210 байта

= 210 · 23 бит = 213 бит,

1 Мбайт = 1024 Кбайта = 210 Кбайта

= 210 · 210 байта = 220 байта

= 220 · 23 бит = 223 бит.

Правила выполнения операций со степенями:

  • при умножении степени при одинаковых основаниях складываются

hello_html_1e5c8a8b.gif

  • … а при делении – вычитаются:

hello_html_m2ec04f9.gif

Решение (вариант 1):

  1. в сообщении было 4096 = 212 символов

  2. объем сообщения

1/512 Мбайта = 223 / 512 бита = 223 / 29 бита = 214 бита (= 16384 бита!)

  1. место, отведенное на 1 символ:

214 бита / 212 символов = 22 бита на символ = 4 бита на символ

  1. 4 бита на символ позволяют закодировать 24 = 16 разных символов

  2. поэтому мощность алфавита – 16 символов

  3. правильный ответ – 2.


Возможные ловушки:

  • дано число, которое есть в условии (неверный ответ 4096), чтобы сбить случайное угадывание

  • расчет на то, что увидев «правильное» число в ходе вычислений, учащийся не будет доводить расчет до конца (неверный ответ 16384)

  • легко запутаться, если выполнять вычисления «в лоб», не через степени двойки

Решение (вариант 2, предложен В.Я. Лаздиным):

  1. объем сообщения

1/512 Мбайт = 1024/512 Кбайт = 2 Кбайт = 2048 байт

  1. на 1 символ приходится 2048 байт / 4096 = 1/2 байта = 4 бита

  2. 4 бита на символ позволяют закодировать 24 = 16 разных символов

  3. поэтому мощность алфавита – 16 символов

  4. правильный ответ – 2.

Возможные проблемы:

  • не всегда удобно работать с дробными числами (1/2 байта)

  • метод разработан специально для этой задачи, где он хорошо работает; в других задачах может быть не так гладко

Еще пример задания:

В зоопарке 32 обезьяны живут в двух вольерах, А и Б. Одна из обезьян – альбинос (вся белая). Сообщение «Обезьяна-альбинос живет в вольере А» содержит 4 бита информации. Сколько обезьян живут в вольере Б?

1) 4 2) 16 3) 28 4) 30

Решение (вариант 1):

  1. информация в 4 бита соответствует выбору одного из 16 вариантов, …

  2. … поэтому в вольере А живет 1/16 часть всех обезьян (это самый важный момент!)

  3. всего обезьян – 32, поэтому в вольере А живет

32/16 = 2 обезьяны

  1. поэтому в вольере Б живут все оставшиеся

32 – 2 = 30 обезьян

  1. правильный ответ – 4.

Возможные ловушки:

  • неверный ответ 1 (4 обезьяны) сбивает случайное угадывание «в лоб», по исходным данным

  • можно сделать неверный вывод о том, что в вольере А живет 4 обезьяны (столько же, сколько бит информации мы получили), следовательно, в вольере Б живут оставшиеся 28 обезьян (неверный ответ 3)

  • после п. 1 можно сделать (неверный) вывод о том, что в вольере А живет 16 обезьян, следовательно, в вольере Б – тоже 16 (неверный ответ 2)


Решение (вариант 2, использование формулы Шеннона2):

  1. обезьяна-альбинос может жить в вольере А (событие 1) или в вольере Б (событие 2)

  2. по формуле Шеннона количество информации в сообщении о произошедшем событии с номером hello_html_52908ad7.gif равно hello_html_4d842b4c.gif, где hello_html_1fb446aa.gif – вероятность этого события; таким образом, получаем вероятность того, что обезьяна-альбинос живет в вольере А:

hello_html_mbe13fba.gif.

  1. у нас не было никакой предварительной информации о том, где живет альбинос, поэтому можно считать, что вероятность определяется количеством обезьян в вольере – если вероятность равна 1/16, то в вольере живет 1/16 часть всех обезьян:

32/16 = 2 обезьяны

  1. поэтому в вольере Б живут все оставшиеся

32 – 2 = 30 обезьян

  1. правильный ответ – 4.

Еще пример задания:

В корзине лежат 32 клубка шерсти, из них 4 красных. Сколько бит информации несет сообщение о том, что достали клубок красной шерсти?

1) 2 2) 3 3) 4 4) 32

Решение (вариант 1):

  1. красные клубки шерсти составляют 1/8 от всех, …

  2. поэтому сообщение о том, что первый вынутый клубок шерсти – красный, соответствует выбору одного из 8 вариантов

  3. выбор 1 из 8 вариантов – это информация в 3 бита (по таблице степеней двойки)

  4. правильный ответ – 2.

Решение (вариант 2, использование формулы Шеннона):

  1. красные клубки шерсти составляют 1/8 от всех, поэтому вероятность hello_html_m32c1d251.gif того, что первый вынутый клубок шерсти – красный, равна 1/8

  2. по формуле Шеннона находим количество информации в битах:

hello_html_5c92a938.gifбита.

  1. правильный ответ – 2.

Еще пример задания:

В некоторой стране автомобильный номер длиной 7 символов составляется из заглавных букв (всего используется 26 букв) и десятичных цифр в любом порядке. Каждый символ кодируется одинаковым и минимально возможным количеством бит, а каждый номер – одинаковым и минимально возможным количеством байт. Определите объем памяти, необходимый для хранения 20 автомобильных номеров.

1) 20 байт 2) 105 байт 3) 120 байт 4) 140 байт

Решение:

  1. всего используется 26 букв + 10 цифр = 36 символов

  2. для кодирования 36 вариантов необходимо использовать 6 бит, так как hello_html_m7ab02680.gif, т.е. пяти бит не хватит (они позволяют кодировать только 32 варианта), а шести уже достаточно

  3. таким образом, на каждый символ нужно 6 бит (минимально возможное количество бит)

  4. полный номер содержит 7 символов, каждый по 6 бит, поэтому на номер требуется hello_html_m3c17ec6a.gifбита

  5. по условию каждый номер кодируется целым числом байт (в каждом байте – 8 бит), поэтому требуется 6 байт на номер (hello_html_m53e6bac5.gif), пяти байтов не хватает, а шесть – минимально возможное количество

  6. на 20 номеров нужно выделить hello_html_m60a1ecee.gifбайт

  7. правильный ответ – 3.

Возможные ловушки:

  • неверный ответ 1 (20 байт) сбивает случайное угадывание «в лоб», по исходным данным

  • если не обратить внимание на то, что каждый номер кодируется целым числом БАЙТ, получаем неверный ответ 2 (hello_html_m2787df7b.gifбит = 105 байт)

  • если по невнимательности считать, что каждый СИМВОЛ кодируется целым числом байт, получаем 7 байт на символ и всего 140 байт (неверный ответ 4)

  • если «забыть» про цифры, получим всего 26 символов, 5 бит на символ, 35 бит (5 полных байт) на каждый номер и неверный ответ 100 байт (на 20 номеров)

Еще пример задания:

Какое наименьшее число символов должно быть в алфавите, чтобы при помощи всевозможных трехбуквенных слов, состоящих из символов данного алфавита, можно было передать не менее 9 различных сообщений?

1) 1 2) 2 3) 3 4) 4

Решение:

  1. здесь используется только одна формула: если алфавит имеет мощность M, то количество всех возможных «слов» длиной N равно hello_html_m58cdc44.gif

  2. в данном случае нужно закодировать 9 сигналов (hello_html_mecea51c.gif) с помощью трехбуквенных слов (hello_html_m45dcb50b.gif)

  3. таким образом, нужно найти наименьшее целое M, такое что hello_html_79f7bae6.gif (куб числа не меньше 9)

  4. проще всего использовать метод подбора: при hello_html_m267b1d0e.gif получаем hello_html_m53740c32.gif (с помощью трех двоичных сигналов можно закодировать только 8 вариантов), но уже при hello_html_meefe042.gif имеем hello_html_m6de1da83.gif, поэтому нужно брать hello_html_60fc118e.gif

  5. таким образом, правильный ответ – 3.

Возможные проблемы:

  • нас интересуют только трехбуквенные слова (одно- и двухбуквенные слова учитывать не нужно)

Еще пример задания:

Каждая ячейка памяти компьютера, работающего в троичной системе счисления, может принимать три различных значения (-1, 0, 1). Для хранения некоторой величины отвели 4 ячейки памяти. Сколько различных значений может принимать эта величина?

Решение:

  1. непривычность этой задачи состоит в том, что используется троичная система

  2. фактически мы имеем дело с языком, алфавит которого содержит M=3 различных символа

  3. поэтому количество всех возможных «слов» длиной N равно hello_html_1479f6c2.gif

  4. для hello_html_cd69cfd.gif получаем hello_html_m22241175.gif

  5. таким образом, правильный ответ – 81.

Возможные ловушки:

  • если не осознать, что используется троичная (а не двоичная!) система, можно «по инерции» получить неправильный ответ

Задачи для тренировки3:

  1. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из трех состояний («включено», «выключено» или «мигает»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 18 различных сигналов?

1) 6 2) 5 3) 3 4) 4

  1. Метеорологическая станция ведет наблюдение за влажностью воздуха. Результатом одного измерения является целое число от 0 до 100 процентов, которое записывается при помощи минимально возможного количества бит. Станция сделала 80 измерений. Определите информационный объем результатов наблюдений.

1) 80 бит 2) 70 байт 3) 80 байт 4) 560 байт

  1. Обычный дорожный светофор без дополнительных секций подает шесть видов сигналов (непрерывные красный, желтый и зеленый, мигающие желтый и зеленый, красный и желтый одновременно). Электронное устройство управления светофором последовательно воспроизводит записанные сигналы. Подряд записано 100 сигналов светофора. В байтах данный информационный объем составляет

1) 37 2) 38 3) 50 4) 100

(Условие некорректно, имеется в виду количество целых байтов.)

  1. Сколько существует различных последовательностей из символов «плюс» и «минус», длиной ровно в пять символов?

1) 64 2) 50 3) 32 4) 20

  1. Шахматная доска состоит 8 столбцов и 8 строк. Какое минимальное количество бит потребуется для кодирования координат одного шахматного поля?

1) 4 2) 5 3) 6 4) 7

  1. Два текста содержат одинаковое количество символов. Первый текст составлен в алфавите мощностью 16 символов, а второй текст – в алфавите из 256 символов. Во сколько раз количество информации во втором тексте больше, чем в первом?

1) 12 2) 2 3) 24 4) 4

  1. Какое минимальное количество бит потребуется для кодирования положительных чисел, меньших 60?

1) 1 2) 6 3) 36 4) 60

  1. Двое играют в «крестики-нолики» на поле 4 на 4 клетки. Какое количество информации получил второй игрок, узнав ход первого игрока?

1) 1 бит 2) 2 бита 3) 4 бита 4) 16 бит

  1. Объем сообщения – 7,5 Кбайт. Известно, что данное сообщение содержит 7680 символов. Какова мощность алфавита?

1) 77 2) 256 3) 156 4) 512

  1. Дан текст из 600 символов. Известно, что символы берутся из таблицы размером 16 на 32. Определите информационный объем текста в битах.

1) 1000 2) 2400 3) 3600 4) 5400

  1. Мощность алфавита равна 256. Сколько Кбайт памяти потребуется для сохранения 160 страниц текста, содержащего в среднем 192 символа на каждой странице?

1) 10 2) 20 3) 30 4) 40

  1. Объем сообщения равен 11 Кбайт. Сообщение содержит 11264 символа. Какова мощность алфавита?

1) 64 2) 128 3) 256 4) 512

  1. Для кодирования секретного сообщения используются 12 специальных значков-символов. При этом символы кодируются одним и тем же минимально возможным количеством бит. Чему равен информационный объем сообщения длиной в 256 символов?

1) 256 бит 2) 400 бит 3) 56 байт 4) 128 байт

  1. Мощность алфавита равна 64. Сколько Кбайт памяти потребуется, чтобы сохранить 128 страниц текста, содержащего в среднем 256 символов на каждой странице?

1) 8 2) 12 3) 24 4) 36

  1. Для кодирования нотной записи используется 7 значков-нот. Каждая нота кодируется одним и тем же минимально возможным количеством бит. Чему равен информационный объем сообщения, состоящего из 180 нот?

1) 180 бит 2) 540 бит 3)100 байт 4) 1 Кбайт

  1. В корзине лежат 8 черных шаров и 24 белых. Сколько бит информации несет сообщение о том, что достали черный шар?

1) 2 бита 2) 4 бита 3) 8 бит 4) 24 бита

  1. В коробке лежат 64 цветных карандаша. Сообщение о том, что достали белый карандаш, несет 4 бита информации. Сколько белых карандашей было в коробке?

1) 4 2) 8 3) 16 4) 32

  1. За четверть Василий Пупкин получил 20 оценок. Сообщение о том, что он вчера получил четверку, несет 2 бита информации. Сколько четверок получил Василий за четверть?

1) 2 2) 4 3) 5 4) 10

  1. В корзине лежат черные и белые шары. Среди них 18 черных шаров. Сообщение о том, что достали белый шар, несет 2 бита информации. Сколько всего шаров в корзине?

1) 18 2) 24 3) 36 4) 48

  1. В закрытом ящике находится 32 карандаша, некоторые из них синего цвета. Наугад вынимается один карандаш. Сообщение «этот карандаш – НЕ синий» несёт 4 бита информации. Сколько синих карандашей в ящике?

1) 16 2) 24 3) 30 4) 32

  1. Некоторый алфавит содержит 4 различных символа. Сколько трехбуквенных слов можно составить из символов этого алфавита, если символы в слове могут повторяться?

1) 4 2) 16 3) 64 4) 81

  1. В некоторой стране автомобильный номер длиной 6 символов составляется из заглавных букв (всего используется 12 букв) и десятичных цифр в любом порядке. Каждый символ кодируется одинаковым и минимально возможным количеством бит, а каждый номер – одинаковым и минимально возможным количеством байт. Определите объем памяти, необходимый для хранения 32 автомобильных номеров.

1) 192 байта 2) 128 байт 3) 120 байт 4) 32 байта

  1. В некоторой стране автомобильный номер длиной 5 символов составляется из заглавных букв (всего используется 30 букв) и десятичных цифр в любом порядке. Каждый символ кодируется одинаковым и минимально возможным количеством бит, а каждый номер – одинаковым и минимально возможным количеством байт. Определите объем памяти, необходимый для хранения 50 автомобильных номеров.

1) 100 байт 2) 150 байт 3) 200 байт 4) 250 байт

  1. Световое табло состоит из светящихся элементов, каждый из которых может гореть одним из трех различных цветов. Сколько различных сигналов можно передать с помощью табло, состоящего из четырех таких элементов (при условии, что все элементы должны гореть)?

1) 4 2) 16 3) 64 4) 81

  1. В некоторой стране автомобильный номер длиной 6 символов составляется из заглавных букв (всего используется 19 букв) и десятичных цифр в любом порядке. Каждый символ кодируется одинаковым и минимально возможным количеством бит, а каждый номер – одинаковым и минимально возможным количеством байт. Определите объем памяти, необходимый для хранения 40 автомобильных номеров.

1) 120 байт 2) 160 байт 3) 200 байт 4) 240 байт

  1. В некоторой стране автомобильный номер длиной 6 символов составляется из заглавных букв (всего используется 26 букв) и десятичных цифр в любом порядке. Каждый символ кодируется одинаковым и минимально возможным количеством бит, а каждый номер – одинаковым и минимально возможным количеством байт. Определите объем памяти, необходимый для хранения 20 автомобильных номеров.

1) 160 байт 2) 120 байт 3) 100 байт 4) 80 байт

  1. Для передачи сигналов на флоте используются специальные сигнальные флаги, вывешиваемые в одну линию (последовательность важна). Какое количество различных сигналов может передать корабль при помощи четырех сигнальных флагов, если на корабле имеются флаги трех различных видов (флагов каждого вида неограниченное количество)?

  2. Для передачи сигналов на флоте используются специальные сигнальные флаги, вывешиваемые в одну линию (последовательность важна). Какое количество различных сигналов может передать корабль при помощи пяти сигнальных флагов, если на корабле имеются флаги четырех различных видов (флагов каждого вида неограниченное количество)?

  3. В велокроссе участвуют 678 спортсменов. Специальное устройство регистрирует прохождение каждым из участников промежуточного финиша, записывая его номер с использованием минимально возможного количества бит, одинакового для каждого спортсмена. Каков информационный объем сообщения, записанного устройством, после того как промежуточный финиш прошли 200 велосипедистов?

1) 200 бит 2) 200 байт 3) 220 байт 4) 250 байт

  1. В некоторой стране автомобильный номер длиной 7 символов составляется из заглавных букв (всего используется 18 букв) и десятичных цифр в любом порядке. Каждый символ кодируется одинаковым и минимально возможным количеством бит, а каждый номер – одинаковым и минимально возможным количеством байт. Определите объем памяти, необходимый для хранения 60 автомобильных номеров.

1) 240 байт 2) 300 байт 3) 360 байт 4) 420 байт

  1. Некоторое сигнальное устройство за одну секунду передает один из трех сигналов. Сколько различных сообщений длиной в четыре секунды можно передать при помощи этого устройства?


  1. В базе данных хранятся записи, содержащие информацию о датах. Каждая запись содержит три поля: год (число от 1 до 2100), номер месяца (число от 1 до 12) и номер дня в месяце (число от 1 до 31). Каждое поле записывается отдельно от других полей с помощью минимально возможного числа бит. Определите минимальное количество бит, необходимых для кодирования одной записи.



  1. Вася и Петя передают друг другу сообщения, используя синий, красный и зеленый фонарики. Это они делают, включая по одному фонарику на одинаковое короткое время в некоторой последовательности. Количество вспышек в одном сообщении – 3 или 4, между сообщениями – паузы. Сколько различных сообщений могут передавать мальчики?



  1. Для кодирования 300 различных сообщений используются 5 последовательных цветовых вспышек. Вспышки одинаковой длительности, для каждой вспышки используется одна лампочка определенного цвета. Лампочки скольких цветов должны использоваться при передаче (укажите минимально возможное количество)?



  1. Каждая клетка поля 8×8 кодируется минимально возможным и одинаковым количеством бит. Решение задачи о прохождении «конем» поля записывается последовательностью кодов посещенных клеток . Каков объем информации после 11 сделанных ходов? (Запись решения начинается с начальной позиции коня).

1) 64 бит 2) 9 байт 3) 12 байт 4) 96 байт

  1. Каждая клетка поля 5×5 кодируется минимально возможным и одинаковым количеством бит. Решение задачи о прохождении «конем» поля записывается последовательностью кодов посещенных клеток . Каков объем информации после 15 сделанных ходов? (Запись решения начинается с начальной позиции коня).

1) 10 байт 2) 25 бит 3) 16 байт 4) 50 байт

  1. Учитель, выставляя в журнал четвертные оценки по биологии за третью четверть (3, 4, 5), обратил внимание, что комбинация из трех четвертных оценок по этому предмету у всех учеников различна. Какое может быть максимальное количество учеников в этом классе?

  2. Некоторый алфавит содержит четыре различных символа. Сколько слов длиной ровно в 4 символа можно составить из слов данного алфавита (символы в слове могут повторяться)?

  3. В некоторой стране автомобильный номер длиной 10 символов составляется из заглавных букв (всего используется 21 буква) и десятичных цифр в любом порядке. Каждый символ кодируется одинаковым и минимально возможным количеством бит, а каждый номер – одинаковым и минимально возможным количеством байт. Определите объем памяти, необходимый для хранения 81 автомобильного номера.

1) 810 байт 2) 567 байт 3) 486 байт 4) 324 байта

  1. Квадратное световое табло 22 состоит из светящихся элементов, каждый из которых может гореть одним из четырех различных цветов. Сколько различных сигналов можно передать с помощью табло, состоящего из четырех таких элементов (при условии, что все элементы должны гореть)?

  2. Световое табло состоит из светящихся элементов, каждый из которых может гореть одним из восьми различных цветов. Сколько различных сигналов можно передать с помощью табло, состоящего из трех таких элементов (при условии, что все элементы должны гореть)?

1 Часто килобайт обозначают «Кб», а мегабайт – «Мб», но в демо-тестах разработчики ЕГЭ привели именно такие обозначения.

2 Фактически это не другой способ решения, а более строгое обоснование предыдущего алгоритма.

3 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  4. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

  5. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

11 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Технолог-калькулятор общественного питания

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A3.doc

isa.muschanov.70.95@yandex.ru



А3 (базовый уровень, время – 1 мин)

Тема: Кодирование текстовой информации. Кодировка ASCII. Основные кодировки кириллицы.

Что нужно знать:

  • все символы кодируются одинаковым числом бит1 (алфавитный подход)

  • чаще всего используют кодировки, в которых на символ отводится 8 бит (8-битные) или 16 бит (16-битные)

  • при измерении количества информации принимается, что в одном байте 8 бит, а в одном килобайте (1 Кбайт) – 1024 байта, в мегабайте (1 Мбайт) – 1024 Кбайта2

  • после знака препинания внутри (не в конце!) текста ставится пробел

  • чтобы найти информационный объем текста I, нужно умножить количество символов N на число бит на символ K: hello_html_m3622b753.gif

  • две строчки текста не могут занимать 100 Кбайт в памяти

Пример задания:

Определите информационный объем текста

Бамбарбия! Кергуду!

1) 38 бит 2) 144 бита 3) 152 бита 4) 19 бит

Решение:

  1. в этом тексте 19 символов (обязательно считать пробелы и знаки препинания)

  2. если не дополнительной информации, считаем, что используется 8-битная кодировка (чаще всего явно указано, что кодировка 8- или 16-битная)

  3. поэтому в сообщении 19*8 = 152 бита информации (ответ 3).

Возможные ловушки:

  • указано правильное число, но другие единицы измерения (объем текста 19 байт, а один из неверных ответов – 19 бит)

  • расчет на то, что «забудут» пробел, в этом случае получается 18*8 = 144 бита (ответ 2, неверный)

  • в 16-битной кодировке объем текста – 38 байт, а один из неверных ответов – 38 бит.

Еще пример задания:

Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку КОИ-8. При этом информационное сообщение уменьшилось на 480 бит. Какова длина сообщения в символах?

1) 30 2) 60 3) 120 4) 480

Решение:

  1. обозначим количество символов через N

  2. при 16-битной кодировке объем сообщения – 16*N бит

  3. когда его перекодировали в 8-битный код, его объем стал равен– 8*N бит

  4. таким образом, сообщение уменьшилось на 16*N – 8*N = 8*N = 480 бит

  5. отсюда находим N = 480/8 = 60 символов (ответ 2).

Еще пример задания:

В таблице ниже представлена часть кодовой таблицы ASCII:

Символ

1

5

A

B

Q

a

b

Десятичный код

49

53

65

66

81

97

98

Шестнадцатеричный код

31

35

41

42

51

61

62

Каков шестнадцатеричный код символа «q» ?

1) 7116 2) 8316 3) A116 4) B316

Решение:

  1. в кодовой таблице ASCII (American Standard Code for Information Interchange, американский стандартный код для обмена информацией) все заглавные латинские буквы A-Z расставлены по алфавиту, начиная с символа с кодом 65=4116

  2. все строчные латинские буквы a-z расставлены по алфавиту, начиная с символа с кодом 97=6116

  3. отсюда следует, что разница кодов букв «q» и «a» равна разнице кодов букв «Q» и «A», то есть, 5116 – 4116=1016

  4. тогда шестнадцатеричный код символа «q» равен коду буквы «a» плюс 1016

  5. отсюда находим 6116 + 1016=7116 (ответ 1).

Задачи для тренировки3:

  1. Считая, что каждый символ кодируется одним байтом, определите, чему равен информационный объем следующего высказывания Жан-Жака Руссо:

Тысячи путей ведут к заблуждению, к истине – только один.

1) 92 бита 2) 220 бит 3) 456 бит 4) 512 бит

  1. Считая, что каждый символ кодируется одним байтом, определите, чему равен информационный объем следующего высказывания Алексея Толстого:

Не ошибается тот, кто ничего не делает, хотя это и есть его основная ошибка.

1) 512 бит 2) 608 бит 3) 8 Кбайт 4) 123 байта

  1. Считая, что каждый символ кодируется одним байтом, определите, чему равен информационный объем следующего высказывания Рене Декарта:

Я мыслю, следовательно, существую.

1) 28 бит 2) 272 бита 3) 32 Кбайта 4) 34 бита

  1. В кодировке Unicode на каждый символ отводится два байта. Определите информационный объем слова из двадцати четырех символов в этой кодировке.

1) 384 бита 2) 192 бита 3) 256 бит 4) 48 бит

  1. Считая, что каждый символ кодируется 16-ю битами, оцените информационный объем следующей пушкинской фразы в кодировке Unicode:

Привычка свыше нам дана: Замена счастию она.

1) 44 бита 2) 704 бита 3) 44 байта 4) 704 байта

  1. Считая, что каждый символ кодируется одним байтом, оцените информационный объем следующего предложения из пушкинского четверостишия:

Певец-Давид был ростом мал, Но повалил же Голиафа!

1) 400 бит 2) 50 бит 3) 400 байт 4) 5 байт

  1. Считая, что каждый символ кодируется одним байтом, оцените информационный объем следующего предложения:

Мой дядя самых честных правил, Когда не в шутку занемог, Он уважать себя заставил И лучше выдумать не мог.

1) 106 бит 2) 848 бит 3) 106 Кбайт 4) 848 Кбайт

  1. Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 8-битном коде, в 16-битную кодировку Unicode. При этом информационное сообщение увеличилось на 2048 байт. Каков был информационный объем сообщения до перекодировки?

1) 1024 байт 2) 2048 бит 3) 2 Кбайта 4) 2 Мбайта

  1. Считая, что каждый символ кодируется 16-ю битами, оцените информационный объем следующей фразы в кодировке Unicode:

В шести литрах 6000 миллилитров.

1) 1024 байта 2) 1024 бита 3) 512 байт 4) 512 бит

  1. Считая, что каждый символ кодируется 16-ю битами, оцените информационный объем следующего предложения:

Блажен, кто верует, тепло ему на свете!

1) 78 бит 2) 80 байт 3) 312 бит 4) 624 бита

  1. Считая, что каждый символ кодируется одним байтом, оцените информационный объем следующего предложения:

Белеет Парус Одинокий В Тумане Моря Голубом!

1) 352 бита 2) 44 бита 3) 352 байта 4) 88 байт

  1. Автоматическое устройство осуществило перекодировку информационного сообщения на русском языке, первоначально записанного в 16-битном коде Unicode, в 8-битную кодировку
    КОИ-8. При этом информационное сообщение уменьшилось на 800 бит. Какова длина сообщения в символах?

1) 50 2) 100 3) 200 4) 800

  1. В таблице ниже представлена часть кодовой таблицы ASCII:

Символ

1

5

J

K

P

j

k

Десятичный код

49

53

74

75

80

106

107

Шестнадцатеричный код

31

35

4A

4B

50

6A

6B

Каков шестнадцатеричный код символа «p» ?

1) 7016 2) 8516 3) 6F16 4) СЕ16

  1. В таблице ниже представлена часть кодовой таблицы:

Символ

С

Т

У

Я

с

т

у

Десятичный код

145

146

147

159

225

226

227

Шестнадцатеричный код

91

92

93

9F

E1

E2

E3

Каков шестнадцатеричный код символа «я» ?

1) 2A116 2) DF16 3) EF16 4) 18016



1 В самом деле, есть кодировки с переменным количеством бит на символ, например, кодировка UTF-8, но они не изучаются в школе.

2 Чаще всего килобайт обозначают «Кб», а мегабайт – «Мб», но в демо-тестах ЕГЭ разработчики привели именно такие обозначения.

3 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

4 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Технолог-калькулятор общественного питания

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A4.doc

isa.muschanov.70.95@yandex.ru



А4 (базовый уровень, время – 2 мин)

Тема: Выполнение арифметических операций в двоичной, восьмеричной и шестнадцатеричной системах счисления.

Что нужно знать:

  • перевод чисел между десятичной, двоичной, восьмеричной и шестнадцатеричной системами счисления (см. презентацию «Системы счисления»)

  • выполнение сложения (вычитания, умножения) в этих системах

Пример задания:

Чему равна сумма чисел hello_html_m1150b751.gif и hello_html_d9aa340.gif?

1) 1218 2) 1718 3)6916 4) 10000012

Общий подход:

перевести оба исходных числа и ответы в одну (любую!) систему счисления, и выполнить сложение

Решение (вариант 1, через десятичную систему):

  1. hello_html_m3f7e0d9.gif

  2. hello_html_m3ce5c36d.gif

  3. сложение: 35 + 86 = 121

  1. переводим результат во все системы, в которых даны ответы (пока не найдем нужный):

121 = 11110012 = 1718 = 7916

  1. или переводим все ответы в десятичную систему

1218 = 81, 1718 = 121, 6916 = 105, 10000012 = 65

  1. таким образом, верный ответ – 2 .

Возможные ловушки и проблемы:

  • дана верная запись числа, но в другой системе счисления (неверный ответ 1218)

  • арифметические ошибки при переводе из других систем в десятичную

Решение (вариант 2, через двоичную систему):

  1. hello_html_m2f3a1ca3.gif(каждая цифра восьмеричной системы отдельно переводится в три двоичных – триаду, старшие нули можно не писать)

  2. hello_html_m5b3b7996.gif (каждая цифра шестнадцатеричной системы отдельно переводится в четыре двоичных – тетраду)

  3. складываем

1000112

hello_html_7022e7b0.gif+ 10101102

11110012

  1. переводим все ответы в двоичную систему

1218 = 001 010 0012 = 10100012 (по триадам)

1718 = 001 111 0012 = 11110012 (по триадам)

6916 = 0110 10012 = 11010012 (по тетрадам)

10000012 не нужно переводить

  1. правильный ответ – 2.


Возможные проблемы:

      • много вычислений

      • запись двоичных чисел однородна, содержит много одинаковых символов – нулей и единиц, поэтому легко запутаться и сделать ошибку.

Решение (вариант 3, через восьмеричную систему):

  1. hello_html_m1150b751.gif, никуда переводить не нужно

  2. hello_html_345c1f2e.gif(сначала перевели в двоичную систему, потом двоичную запись числа разбили на триады справа налево, каждую триаду перевели отдельно в десятичную систему, так как для чисел от 0 до 7 их восьмеричная запись совпадает с десятичной)

  3. складываем

438

hello_html_7022e7b0.gif+ 1268

1718

  1. видим, что такой ответ есть, это ответ 2.

Возможные проблемы:

  • нужно помнить двоичную запись чисел от 0 до 15 (или переводить эти числа в двоичную систему при решении).

  • при сложении в восьмеричной системе нужно помнить, что перенос в следующий разряд идет тогда, когда сумма больше или равна 8, а не 10.

Решение (вариант 4, через шестнадцатеричную систему):

  1. hello_html_m10fdca4c.gif (сначала перевели в двоичную систему, потом двоичную запись числа разбили на тетрады справа налево, каждую тетраду перевели в шестнадцатеричную систему; при этом тетрады можно переводить из двоичной системы в десятичную, а затем заменить все числа, большие 9, на буквы – A, B, C, D, E, F)

  2. hello_html_m2a877095.gif, никуда переводить не нужно

  3. складываем

2316

hello_html_7022e7b0.gif+ 5616

7916

  1. переводим в шестнадцатеричную систему все ответы:

1218 = 001 010 0012 = 0101 00012 = 5116 (перевели в двоичную систему по триадам, разбили на тетрады справа налево, каждую тетраду перевели отдельно в десятичную систему, все числа, большие 9, заменили на буквы – A, B, C, D, E, F)

171 2 = 001 111 0012 = 0111 10012 = 7916,

6916, переводить не нужно

10000012 = 0100 00012 = 4116

  1. таким образом, верный ответ – 2 .

Возможные проблемы:

  • нужно помнить двоичную запись чисел от 0 до 15 (или переводить эти числа в двоичную систему при решении)

  • при сложении в шестнадцатеричной системе нужно помнить, что перенос в следующий разряд идет тогда, когда сумма больше или равна 16, а не 10.


Выводы:

  • есть несколько способов решения, «каждый выбирает для себя»

  • при переводе всех чисел в десятичную систему можно легко ошибиться, однако складывать в десятичной системе проще и привычнее

  • работая в двоичной системе, также легко ошибиться, например, «потерять» цифру или перепутать цифры местами при списывании; сложение в двоичной системе также не совсем безобидно

  • видимо, наиболее простой вариант в данной задаче – использовать восьмеричную систему, нужно просто запомнить двоичные записи чисел от 0 до 15 и аккуратно все сделать

  • для того, чтобы выбрать систему счисления, в которой будет удобнее работать, можно посмотреть, в каких системах даны исходные данные и ответы, и выбрать ту, которая чаще всего встречается (обычно в ней легче считать)

  • никто не будет спрашивать, как вы считали, важно получить верный результат

  • возможно, если в задании будет вычитание или умножение, вычисления будет проще сделать в десятичной системе счисления

Еще пример задания:

Чему равна разность чисел hello_html_m7f72183a.gif и hello_html_m4cf6cf5c.gif?

1) 1001112 2) 1101112 3)1011112 4) 1011012

Общий подход:

для выполнения операций оба исходных числа должны быть в одной системе счисления;

в этой задаче оба числа и все результаты уже даны в двоичной системе;

вероятность сделать ошибку выше всего при выполнении сложения и вычитания в двоичной системе, поэтому…

может иметь смысл перевести их в другую систему, а потом перевести результат обратно.

Решение (вариант 1, через двоичную систему):

  1. просто выполняем вычитание:

11011102

hello_html_7022e7b0.gif- 1111112

1011112

  1. таким образом, ответ – 3.

Возможные проблемы:

  • высокая вероятность ошибки при вычитании в двоичной системе

Решение (вариант 2, через десятичную систему):

  1. переводим в десятичную систему

11011102 = 26 + 25 + 23 + 22 + 21 = 64 + 32 + 8 + 4 + 2 = 110

1111112 = 25 + 24 + 23 + 22 + 21 + 20

= 32 + 16 + 8 + 4 + 2 + 1 = 63

  1. выполняем вычитание: 110 – 63 = 47

  2. переводим результат в двоичную систему:

47 = 32 + 8 + 4 + 2 + 1 = 25 + 23 + 22 + 21 + 20= 1011112

  1. таким образом, ответ – 3.


Возможные проблемы:

  • очень трудоемко, высокая вероятность ошибки

Решение (вариант 3, через восьмеричную систему):

  1. переводим в восьмеричную систему (разбиваем на триады справа налево)

11011102 = 1 101 1102 = 1568

1111112 = 111 1112 = 778

  1. выполняем вычитание:

1568

- 778

hello_html_57b0b79.gif578

  1. переводим результат в двоичную систему (заменяем каждую восьмеричную цифру триадой):

578 = 101 1112

  1. таким образом, ответ – 3.

Возможные проблемы:

  • возможна ошибка при вычитании в восьмеричной системе; нужно не забыть, что заем добавляет в текущий разряд 8, а не 10

Решение (вариант 4, через шестнадцатеричную систему):

  1. переводим в восьмеричную систему (разбиваем на тетрады справа налево)

11011102 = 110 11102 = 6E16

1111112 = 11 11112 = 3F16

  1. выполняем вычитание:

6E16

- 3F16

hello_html_57b0b79.gif2F16

  1. переводим результат в двоичную систему (заменяем каждую шестнадцатеричную цифру тетрадой):

2F16 = 10 11112

  1. таким образом, ответ – 3.

Возможные проблемы:

  • возможна ошибка при вычитании в шестнадцатеричной системе; нужно не забыть, что заем добавляет в текущий разряд 16, а не 10

Задачи для тренировки1:

  1. Вычислите сумму чисел x и y, при x = A616, y = 758. Результат представьте в двоичной системе счисления.

1) 110110112 2) 111100012 3) 111000112 4) 100100112

  1. Значение выражения 1016 + 108 • 102 в двоичной системе счисления равно

1) 10102 2) 110102 3) 1000002 4) 1100002

  1. Вычислите сумму двоичных чисел x и y, если x = 10101012 и y = 10100112

1) 101000102 2) 101010002 3) 101001002 4) 101110002

  1. Вычислите значение суммы 102 + 108 +1016 в двоичной системе счисления.

1) 101000102 2) 111102 3) 110102 4) 101002

  1. Вычислите сумму чисел x и y, при x = 2718, y = 111101002. Результат представьте в шестнадцатеричной системе счисления.

1) 15116 2) 1AD16 3) 41216 4) 10B16

  1. Вычислите сумму чисел x и y, при x = A116, y = 11012. Результат представьте в десятичной системе счисления.

1) 204 2) 152 3) 183 4) 174

  1. Вычислите сумму чисел x и y, при x = 568, y = 11010012. Результат представьте в двоичной системе счисления.

1) 111101112 2) 100101112 3) 10001112 4) 110011002

  1. Вычислите сумму чисел x и y, при x = 5A16, y = 10101112. Результат представьте в восьмеричной системе счисления.

1) 1518 2) 2618 3) 4338 4) 7028

  1. Вычислите сумму чисел x и y, при x = 1278, y = 100101112. Результат представьте в десятичной системе счисления.

1) 214 2) 238 3) 183 4) 313

  1. Вычислите A8116 + 37716. Результат представьте в той же системе счисления.

1) 21B16 2) DF816 3) C9216 4) F4616

  1. Чему равна разность чисел 10116 и 1101112?

1) 3128 2) 128 3) 3216 4) 6416

  1. Чему равна разность чисел 1248 и 5216?

1) 112 2) 102 3) 1002 4) 1102

  1. Чему равна сумма чисел 278 и 3416?

1) 1138 2) 638 3) 5116 4) 1100112

  1. Чему равна сумма чисел 438 и 5616?

1) 7916 2) A316 3) 1258 4) 10101012

  1. Вычислите сумму чисел x и y, при x = 1101112, y = 1358. Результат представьте в двоичном виде.

1) 110101002 2) 101001002 3) 100100112 4) 100101002

  1. Чему равно произведение чисел 138 и 516?

1) 678 2) Е216 3) 658 4) 1000012

  1. Чему равно произведение чисел 158 и 516?

1) 758 2) 10010012 3) 2018 4) 4116

  1. Чему равна разность чисел hello_html_6c5a3495.gif и hello_html_m3f3c6463.gif?

1) 110102 2) 101002 3)100102 4) 101012

  1. Чему равна разность чисел hello_html_40dd4644.gif и hello_html_m30b4dde3.gif?

1) 448 2) 2348 3)3616 4) 6016


1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

6 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Секретарь-администратор

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A5.doc

isa.muschanov.70.95@yandex.ru



А5 (базовый уровень, время – 2 мин)

Тема: Оператор присваивания в языке программирования1.

Что нужно знать:

  • переменная – это величина, которая имеет имя, тип и значение; переменная может изменяться во время выполнения программы

  • оператор присваивания служит для записи значения в переменную

  • если в переменную записывают новое значение, старое стирается

  • знаки +, -, *, / используются для обозначения операций сложения, вычитания, умножения и деления

  • запись вида a div b означает результат целочисленного деления a на b (остаток отбрасывается)

  • запись вида a mod b означает остаток от деления a на b

  • запись вида a := b + 2*c + 3; означает «вычислить значения выражения справа от знака присваивания := и записать результат в переменную a»; при этом значения других переменных (кроме a) не изменяются

  • для многократного выполнения одинаковых операций используют циклы;

  • цикл с переменной выполняется N раз, в этом примере переменная i принимает последовательно все значения от 1 до N с шагом 1

for i:=1 to N do begin

{ что-то делаем }

end;

  • цикл с условием выполняется до тех пор, пока условие в заголовке цикла не нарушится;

while { условие } do begin

{ что-то делаем }

end;

  • главная опасность при использовании цикла с условием – зацикливание; эта такая ситуация, когда цикл работает бесконечно долго из-за того, что условие все время остается истинным

Пример задания:

Определите значение переменной c после выполнения следующего фрагмента программы.

a := 5;

a := a + 6;

b := –a;

c := a 2*b;

1) c = –11 2) c = 15 3) c = 27 4) c = 33

Решение:

  1. для решения нужно использовать «ручную прокрутку» программы, то есть, выполнить вручную все действия

  2. наиболее удобно и наглядно это получается при использовании таблицы, где в первом столбце записаны операторы программы, а в остальных показаны изменения переменных при выполнении этих операторов

  3. здесь используются три переменные: a, b, c; до выполнения программы их значения анм неизвестны, поэтому ставим в таблице знаки вопроса:


    a

    b

    c


    ?

    ?

    ?

  4. после выполнения оператора a := 5; изменяется значение переменной a:


    a

    b

    c


    ?

    ?

    ?

    a := 5;

    5



  5. оператор a := a + 6; означает «вычислить значение выражения a + 6 используя текущее значение a (равное 5), и записать результат обратно в переменную a»; таким образом, новое значение равно 5 + 6 = 11:


    a

    b

    c


    ?

    ?

    ?

    a := 5;

    5



    a := a + 6;

    11



  6. следующий оператор, a := a + 6, изменяет значение переменной b, записывая в нее a; учитывая, что в a записано число 11, находим, что b будет равно –11:


    a

    b

    c


    ?

    ?

    ?

    a := 5;

    5



    a := a + 6;

    11



    b := –a;


    –11


  7. последняя команда, c := a 2*b, изменяет значение переменной c; при текущих значениях a = 11 и b = –11 результат выражения равен 11 – 2*(–11) = 33, это число и будет записано в переменную c:


    a

    b

    c


    ?

    ?

    ?

    a := 5;

    5



    a := a + 6;

    11



    b := –a;


    –11


    c := a 2*b;



    33

  8. таким образом, правильный ответ – 4.

Возможные ловушки и проблемы:

  • можно перепутать нужную переменную, и, увидев в ответах число –11, выбрать его (поскольку b = –11)

  • нельзя забывать про знак переменных и про то, что «минус на минус дает плюс»

Еще пример задания:

В результате выполнения фрагмента программы

while n < > 0 do begin

write ( 2*(n mod 10)+1);

n := n div 10;

end;

на экран выведено число 13717. Какое число хранилось до этого в переменной n?

1) 716 2) 638 3) 386 4) 836



Решение (вариант 1):

  1. прежде всего, заметим, что для вывода используется оператор write, который не переходит на следующую строку; поэтому числа в цикле будут выводиться в одной строке «вплотную» друг к другу, без промежутков

  2. для решения можно использовать «ручную прокрутку» программы, то есть, выполнить программу вручную для всех приведенных ответов

  3. вспомним, что n mod 10 – остаток от деления числа на 10 – это последняя цифра числа в десятичной системе счисления;

  4. операция n div 10 (деление нацело на 10) равносильна отбрасыванию последней цифры в десятичной системе счисления

  5. эти две операции выполняются пока значение переменной n не станет равно нулю

  6. теперь можно построить таблицу ручной прокрутки; рассмотрим первый из ответов, 716:


n

n mod 10

вывод на экран


716



n <> 0?




write(2*(n mod 10)+1);


6

13

n := n div 10;

71



n <> 0?




write(2*(n mod 10)+1);


1

3

n := n div 10;

7



n <> 0?




write(2*(n mod 10)+1);


7

15

n := n div 10;

0



n <> 0?




здесь зеленым фоном выделено истинное условие цикла, а красным – ложное (при котором цикл будет завершен);
видим, что в этом случае на экран будет выведена цепочка 13315, не равная заданной (13717)

  1. аналогично проверяем все остальные предложенные ответы и выясняем, что для последнего числа, 836, на экран выводится цепочка 13717, совпадающая с заданной

  2. таким образом, правильный ответ – 4.

Возможные ловушки и проблемы:

  • большой объем работы (нужно составить 4 таблицы)


Решение (вариант 2):

  1. анализируя алгоритм, можно придти выводу, что этот фрагмент программы выводит на экран числа hello_html_m4cfa0e5d.gif, где hello_html_m5f955698.gif – это hello_html_52908ad7.gif-ая цифра с конца числа

  2. теперь можно без таблицы построить такие цепочки для всех четырех ответов

716: 13315

638: 17713

386: 13177

836: 13717 совпадает с заданной

  1. таким образом, правильный ответ – 4.

Возможные ловушки и проблемы:

  • нужно уметь анализировать работу алгоритма, «прокручивать» его в уме

  • можно забыть, что цифры числа обрабатываются в обратном порядке, начиная с последней, на это рассчитан неправильный ответ 2 (638)

  • можно попробовать раскодировать заданную цепочку 13717 «прямым ходом» (стараясь получить один из заданных ответов), но нужно учитывать, что может быть несколько вариантов такого раскодирования; цепочку 13717, например, дают еще и числа 30310, 3036.

Задачи для тренировки2:

  1. Определите значение целочисленных переменных a и b после выполнения фрагмента программы:

a := 3 + 8*4;

b := (a div 10) + 14;

a := (b mod 10) + 2;

1) a = 0, b = 18 2) a = 11, b = 19 3) a = 10, b = 18 4) a = 9, b = 17

  1. Определите значение целочисленных переменных a и b после выполнения фрагмента программы:

a := 1819;

b := (a div 100)*10+9;

a := (10*b–a) mod 100;

1) a = 81, b = 199 2) a = 81, b = 189 3) a = 71, b = 199 4) a = 71, b = 189

  1. Определите значение целочисленных переменных a и b после выполнения фрагмента программы:

a := 42;

b := 14;

a := a div b;

b := a*b;

a := b div a;

1) a = 42, b = 14 2) a = 1, b = 42 3) a = 0, b = 588 4) a = 14, b = 42

  1. Определите значение целочисленных переменных x, y и t после выполнения фрагмента программы:

x := 5;

y := 7;

t := x;

x := y mod x;

y := t;

1) x=2, y=5, t=5 2) x=7, y=5, t=5 3) x=2, y=2, t=2 4) x=5, y=5, t=5

  1. Определите значение целочисленных переменных a и b после выполнения фрагмента программы:

а :=6*12 + 3;

b :=(a div 10)+ 5;

a :=(b mod 10)+ 1;

1) a = 1, b = 10 2) a = 3, b = 12 3) a = 4, b = 16 4) a = 10, b = 20

  1. Определите значение целочисленных переменных x и y после выполнения фрагмента программы:

x := 336

У := 8;

x := x div y;

y := х mod у;

1) x = 42, y = 2 2) x = 36, y = 12 3) x = 2, y = 24 4) x = 24, y = 4

  1. Определите значение целочисленных переменных a и b после выполнения фрагмента программы:

а :=1686;

b :=(a div 10) mod 5;

а := а - 200*b;

1) a = 126, b = 5 2) a = 526, b = 5 3) a = 1086, b = 3 4) a = 1286, b = 3

  1. Определите значение целочисленных переменных x и y после выполнения фрагмента программы:

х := 11;

у := 5;

t := y;

у := х mod у;

x := t;

у := у + 2*t;

1) x = 11, y = 5 2) x = 5, y = 11 3) x = 10, y = 5 4) x = 5, y = 10

  1. Определите значение целочисленных переменных x и y после выполнения фрагмента программы:

х := 19;

у := 3;

z := у*2;

у := х mod у;

х := х - z;

у := у + z;

1) x = 10, y = 9 2) x = 13, y = 7 3) x = 16, y = 8 4) x = 18, y = 2

  1. Определите значение целочисленных переменных x, y и z после выполнения фрагмента программы:

х := 13;

у := 3;

z := x;

x := z div у;

у := х;

1) x = 13, y = 4, z = 4 2) x = 13, y = 13, z = 13
3) x = 4, y = 4, z = 13 4) x = 4, y = 3, z = 13

  1. В результате выполнения фрагмента программы

while n < > 0 do begin

write ( 2*(n mod 5 + 3) );

n := n div 10;

end;

на экран выведено число 10614. Какое число хранилось до этого в переменной n?

1) 529 2) 259 3) 952 4) 925

  1. Определите значение переменной b после выполнения следующего фрагмента программы, где a и b – вещественные (действительные) переменные:

a := -5;

b := 5 + 7 * a;

b := b / 2 * a;

1) 3 2) –3 3) 75 4) –75

  1. Определите значение переменной b после выполнения следующего фрагмента программы, где a и b – вещественные (действительные) переменные:

a := 5;

b := 5 - 3 * a;

b := b / 2 * a;

1) 1 2) 1 3) 25 4) 25

  1. Определите значение переменной b после выполнения следующего фрагмента программы, где a и b – вещественные (действительные) переменные:

a := 5;

b := 5 + 5 * a;

b := b / 2 * a;

1) 3 2) 5 3) 75 4) 125

  1. Определите значение переменной b после выполнения следующего фрагмента программы, где a и b – вещественные (действительные) переменные:

a := 7;

b := 7 + 3 * a;

b := b / 2 * a;

1) 2 2) 5 3) 98 4) 245

  1. Определите значение переменной c после выполнения следующего фрагмента программы:

a := 100;

b := 30;

a := a – b*3;

if a > b then

c := a – b

else c := b – a;

1) 20 2) 70 3) –20 4) 180

  1. Определите значение переменных a и b после выполнения следующего фрагмента программы:

a := 2468;

b := (a mod 1000)*10;

a := a div 1000 + b;

1) a=22, b=20 2) a=4682, b=4680 3) a=8246, b=246 4) a=470, b=468

  1. Определите значение переменной c после выполнения следующего фрагмента программы:

a := 6;

b := 15;

a := b – a*2;

if a > b then

c := a + b

else c := b – a;

1) –3 2) 33 3) 18 4) 12

  1. Определите значение переменной c после выполнения следующего фрагмента программы:

a := -5;

b := 14;

b := b + a*2;

if a > b then

c := a + b

else c := b – a;

1) –1 2) 23 3) 13 4) 9

  1. Определите значение переменной c после выполнения следующего фрагмента программы:

a := -5;

b := 3;

a := a - b*2;

if a > b then

c := b - a

else c := a – b;

1) 14 2) –14 3) 6 4) –6

  1. Определите значение переменной c после выполнения следующего фрагмента программы:

a := -5;

b := -3;

a := a - b*3;

if a > b then

c := b + a

else c := a – b;

1) 1 2) –9 3) 3 4) –11

  1. Определите значение переменной c после выполнения следующего фрагмента программы:

a := -2;

b := -3;

a := b + a*3;

if a < b then

c := a - b

else c := b – a;

1) 12 2) –6 3) 6 4) –12



1 Здесь рассматривается только язык Паскаль, который является наиболее распространенным в школах России.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

10 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Интернет-маркетолог

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A6.doc

isa.muschanov.70.95@yandex.ru



А6 (повышенный уровень, время – 4 мин)

Тема: Работа с массивами и матрицами в языке программирования1.

Что нужно знать:

  • работу цикла for (цикла с переменной)

  • массив – это набор однотипных элементов, имеющих общее имя и расположенных в памяти рядом

  • для обращения к элементу массива используют квадратные скобки, запись A[i] обозначает элемент массива A с номером (индексом) i

  • матрица (двухмерный массив) – это прямоугольная таблица однотипных элементов

  • если матрица имеет имя A, то обращение A[i,k] обозначает элемент, расположенный на пересечении строки i и столбца k

  • элементы, у которых номера строки и столбца совпадают, расположены на главной диагонали2

    A[1,1]





    A[2,2]





    A[3,3]





    A[4,4]

  • выше главной диагонали расположены элементы, у которых номер строки меньше номера столбца:


    A[1,2]

    A[1,3]

    A[1,4]



    A[2,3]

    A[2,4]




    A[3,4]





  • ниже главной диагонали расположены элементы, у которых номер строки больше номера столбца:





A[2,1]




A[3,1]

A[3,2]



A[4,1]

A[4,2]

A[4,3]


Пример задания:

Дан фрагмент программы, обрабатывающей двухмерный массив A размера n×n.

k := 1;

for i:=1 to n do begin

c := A[i,i];

A[i,i] := A[k,i];

A[k,i] := c;

end

Представим массив в виде квадратной таблицы, в которой для элемента массива A[i,j] величина i является номером строки, а величина j – номером столбца, в котором расположен элемент. Тогда данный алгоритм меняет местами

1) два столбца в таблице

2) две строки в таблице

3) элементы диагонали и k-ой строки таблицы

4) элементы диагонали и k-го столбца таблицы

Решение:

  1. сначала разберемся, что происходит внутри цикла; легко проверить (хотя бы ручной прокруткой, если вы сразу не узнали стандартный алгоритм), что операторы

c := A[i,i];

A[i,i] := A[k,i];

A[k,i] := c;

меняют местами значения A[i,i] и A[k,i], используя переменную c в качестве вспомогательной ячейки;

  1. элемент матрицы A[i,i], у которого номера строки и столбца одинаковые, стоит на главной диагонали; элемент A[k,i] стоит в том же столбце i, но в строке с номером k; это значит, что в столбце i меняются местами элемент на главной диагонали и элемент в строке k




    i


    k



    hello_html_m4d53226a.gifA[k,i]







    i



    A[i,i]







  2. так как эти операторы находятся в цикле, где переменная i принимает последовательно все значения от 1 до n, обмен выполняется для всех столбцов матрицы; то есть, все элементы главной диагонали меняются с соответствующими элементами строки k

  3. перед циклом стоит оператор присваивания k := 1;, а после него переменная k не меняется; поэтому в программе элементы главной диагонали обмениваются с первой строкой

  4. таким образом, правильный ответ – 3.

Возможные ловушки и проблемы:

  • сложность этой задачи в том, что все действия нужно «прокручивать в уме» (или на бумаге), не используя компьютер для отладки

  • главная проблема – не перепутать столбцы и строки; номер строки – это (по соглашению) первый индекс элемента матрицы, а номер столбца – второй



Совет:

  • чтобы понять, что делает программа, часто бывает полезно сделать ручную прокрутку на матрице небольшого размера, например, 3 на 3 или 4 на 4.

  • если матрица небольшая (скажем, 5 на 5) можно (а иногда и нужно) вообще сделать все вычисления вручную и посмотреть, что получится

Еще пример задания:

Значения двух массивов A[1..100] и B[1..100] задаются с помощью следующего фрагмента программы:

for n:=1 to 100 do

A[n] := (n-80)*(n-80);

for n:=1 to 100 do

B[101-n] := A[n];

Какой элемент массива B будет наибольшим?

1) B[1] 2) B[21] 3) B[80] 4) B[100]


Решение:

  1. здесь два цикла, в первом из них заполняется массив А, во втором – массив В

  2. в элемент массива A[n] записывается квадрат числа n-80; все элементы массива А неотрицательны (как квадраты чисел)

  3. посмотрим чему равны некоторые элементы массива А:

A[1] = (1–80)2 = (–79)2 = 792 A[2] = (2–80)2 = (–78)2 = 782

...

A[80] = (80–80)2 = (0)2 = 0A[81] = (81–80)2 = (1)2 = 1

...

A[99] = (99–80)2 = 192 A[100] = (100–80)2 = 202

  1. таким образом, при увеличении n от 1 до 80 значение A[n] уменьшается от 792 до нуля, а потом (для n > 80) возрастает до 202

  2. отсюда следует, что максимальное значение в массиве A – это A[1] = 792

  3. во втором цикле для всех номеров n от 1 до 100 выполняется оператор

B[101-n] := A[n];

который просто переписывает элементы массива A в массив В, «развертывая» массив в обратном порядке (элемент A[1] будет записан в B[100], а A[100] – в B[1])

  1. A[1], наибольший элемент массива А, будет записан в B[100], поэтому B[100] – наибольший элемент в массиве В

  2. таким образом, правильный ответ – 4.

Еще пример задания:

Значения элементов двухмерного массива A[1..10,1..10] задаются с помощью следующего фрагмента программы:

for i:=1 to 10 do

for k:=1 to 10 do

if i > k then

A[i,k] := 1

else A[i,k] := 0;

Чему равна сумма элементов массива после выполнения этого фрагмента программы?

1) 45 2) 50 3) 90 4) 100

Решение:

  1. в программе есть вложенный цикл, в котором переменная i обозначает строку, а k – столбец матрицы

  2. элементы, для которых i=k – это главная диагональ матрицы, поэтому элементы, для которых i > k (только они будут равны 1), находятся под главной диагональю

  3. в первой строке единичных элементов нет, во второй есть один такой элемент, в третьей – 2, в последней (10-ой) их 9, поэтому сумма элементов массива равна

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

  1. таким образом, правильный ответ – 1.

  2. при большом размере массива (например, 100 на 100) суммирование может оказаться трудоемким, поэтому лучше вспомнить формулу для вычисления суммы элементов арифметической прогрессии (именно такая прогрессия у нас, с шагом 1):

hello_html_m667f4ec5.gif,

где hello_html_m18068b.gif - количество элементов, а hello_html_5f3b43c9.gifи hello_html_m5aa4f62e.gif – соответственно первый и последний элементы последовательности; в данном случае имеем

hello_html_68be60ed.gif.

  1. если приведенная выше формула прочно забыта, можно попытаться сгруппировать слагаемые в пары с равной суммой (как сделал, будучи школьником, великий математик К.Ф. Гаусс), например:

hello_html_m5d634e33.gif

Еще пример задания:

Значения элементов двухмерного массива A[1..10,1..10] сначала равны 5. Затем выполняется следующий фрагмент программы:

for i:=1 to 5 do

for j:=1 to 4 do begin

A[i,j]:=A[i,j]+5; { 1 }

A[j,i]:=A[j,i]+5; { 2 }

end;

Сколько элементов массива будут равны 10?

1) 8 2) 16 3) 24 4) 0

Решение (вариант 1, анализ алгоритма):


  1. 1

    2

    3

    4

    5

    6

    7

    1








    2








    3








    4








    5








    6








    7








    обратим внимание, что в двойном цикле переменная i изменяется от 1 до 5, а j – от 1 до 4 (на 1 шаг меньше)
  2. внутри цикла в операторе, отмеченном цифрой 1 в комментарии, в записи A[i,j] переменная i – это строка, а j – столбец, поэтому по одному разу обрабатываются все элементы массива, выделенные зеленым цветом:


  3. 1

    2

    3

    4

    5

    6

    7

    1








    2








    3








    4








    5








    6








    7








    это значит, что если оставить только один первый оператор внутри цикла, все выделенные элементы увеличиваются на 5 и станут равны 10
  4. теперь рассмотрим второй оператор внутри цикла: в записи A[j,i] переменная i – это столбец, а j – строка, поэтому по одному разу обрабатываются (увеличиваются на 5 ) все элементы массива, выделенные рамкой красного цвета на рисунке справа

  5. теперь хорошо видно, что левый верхний угол массива (квадрат 4 на 4, синяя область) попадает в обе области, то есть, эти 16 элементов будут дважды увеличены на 5: они станут равны 15 после выполнения программы

  6. элементы, попавшие в зеленый и красный «хвостики» обрабатываются (увеличиваются на 5) по одному разу, поэтому они-то и будут равны 10

  7. всего таких элементов – 8 штук

  8. таким образом, правильный ответ – 1.

Решение (вариант 2, прокрутка небольшого массива):

  1. понятно, что в программе захватывается только левый верхний угол массива, остальные элементы не меняются

  2. сократим размер циклов так, чтобы можно было легко выполнить программу вручную; при этом нужно сохранить важное свойство: внутренний цикл должен содержать на 1 шаг меньше, чем внешний:

for i:=1 to 3 do

for j:=1 to 2 do begin

A[i,j]:=A[i,j]+5; { 1 }

A[j,i]:=A[j,i]+5; { 2 }

end;

  1. выполняя вручную этот вложенный цикл, получаем


    1

    2

    3

    4

    5

    1

    15

    15

    10

    5

    5

    2

    15

    15

    10

    5

    5

    3

    10

    10

    5

    5

    5

    4

    5

    5

    5

    5

    5

    5

    5

    5

    5

    5

    5

  2. видим, что в самом углу получился квадрат 2 на 2 (по количеству шагов внутреннего цикла), в котором все элементы равны 15; по сторонам этого квадрата стоят 4 элемента, равные 10, их количество равно удвоенной стороне квадрата

  3. в исходном варианте внутренний цикл выполняется 4 раза, поэтому угловой квадрат будет иметь размер 4 на 4; тогда 8 элементов, граничащих с его сторонами, будут равны 10

  4. таким образом, правильный ответ – 1.

Возможные проблемы:

  • упрощая задачу, нельзя потерять ее существенные свойства: например, здесь было важно, что внутренний цикл содержит на 1 шаг меньше, чем внешний

Задачи для тренировки3:

  1. Значения двух массивов A[1..100] и B[1..100] задаются с помощью следующего фрагмента программы:

for n:=1 to 100 do

A[n] := n - 10;

for n:=1 to 100 do

B[n] := A[n]*n;

Сколько элементов массива B будут иметь положительные значения?

1) 10 2) 50 3) 90 4) 100

  1. Все элементы двумерного массива A размером 10х10 элементов первоначально были равны 0. Затем значения элементов меняются с помощью вложенного оператора цикла в представленном фрагменте программы:

for n:=1 to 4 do

for k:=n to 4 do begin

A[n,k] := A[n,k] + 1;

A[k,n] := A[k,n] + 1;

end;

Сколько элементов массива в результате будут равны 1?

1) 0 2) 16 3) 12 4) 4

  1. Значения двумерного массива задаются с помощью вложенного оператора цикла в представленном фрагменте программы:

for n:=1 to 5 do

for k:=1 to 5 do

B[n,k] := n + k;

Чему будет равно значение B(2,4)?

1) 9 2) 8 3) 7 4) 6

  1. Дан фрагмент:

for n:=l to 6 do

for m:=l to 5 do begin

C[n,m]:=C[n,m]+(2*n-m);

end;

Чему будет равно значение С[4,3], если перед этими командами значение С[4,3]=10?

1) 5 2) 10 3) 15 4) 25

  1. Значения элементов двух массивов А и В размером 1 х 100 задаются с помощью следующего фрагмента программы:

for i:=1 tо 100 do

A[i] := 50 – i;

for i:=1 tо 100 do

B[i] := A[i] + 49;

Сколько элементов массива В будут иметь отрицательные значения?

1) 1 2) 10 3) 50 4) 100

  1. Значения элементов двумерного массива А были равны 0. Затем значения некоторых элементов были изменены (см. представленный фрагмент программы):

n := 0;

for i:=1 tо 5 do

for j:=1 tо 6-i do begin

n := n + 1;

A[i,j] := n;

end;

Какой элемент массива будет иметь в результате максимальное значение?

1) A[1,1] 2) A[1,5] 3) A[5,1] 4) A[5,5]

  1. Значения элементов двумерного массива А размером 5x5 задаются с помощью вложенного цикла в представленном фрагменте программы:

for i:=1 tо 5 do

for j:=1 tо 5 do begin

A[i,j] := i*j;

end;

Сколько элементов массива будут иметь значения больше 10?

1) 12 2) 8 3) 10 4) 4

  1. Значения элементов двумерного массива А размером 5x5 задаются с помощью вложенного цикла в представленном фрагменте программы:

for i:=1 tо 5 do

for j:=1 tо 5 do begin

A[i,j] := i + j;

end;

Сколько элементов массива будут иметь значения больше 5?

1) 5 2) 20 3) 10 4) 15

  1. Дан фрагмент программы:

for n:=1 tо 5 do

for m:=1 tо 5 do

C[n,m] := (mn)*(mn);

Сколько элементов массива С будут равны 1?

1) 5 2) 2 3) 8 4) 14

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do

A[i]:= i + 1;

for i:=1 to 10 do

A[i]:= A[i-1];

Как изменяются элементы этого массива?

1) все элементы, кроме последнего, сдвигаются на 1 элемент вправо

2) все элементы, кроме первого, сдвигаются на 1 элемент влево

3) все элементы окажутся равны 1

4) все элементы окажутся равны своим индексам

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do

A[i]:= i + 1;

for i:=10 downto 0 do

A[i]:= A[10-i];

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 11 10 9 8 7 6 5 4 3 2 1

3) 11 10 9 8 7 6 7 8 9 10 11

4) 1 2 3 4 5 6 5 4 3 2 1

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do

A[i]:= i + 1;

for i:=0 to 10 do

A[i]:= A[10-i];

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 11 10 9 8 7 6 5 4 3 2 1

3) 11 10 9 8 7 6 7 8 9 10 11

4) 10 9 8 7 6 5 6 7 8 9 10


  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do

A[i]:= i - 1;

for i:=1 to 10 do

A[i-1]:= A[i];

A[10] := 10;

Как изменяются элементы этого массива?

1) все элементы, кроме последнего, окажутся равны между собой

2) все элементы окажутся равны своим индексам

3) все элементы, кроме последнего, сдвигаются на один элемент вправо

4) все элементы, кроме последнего, уменьшаются на единицу

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do

A[i]:= i;

for i:=1 to 11 do

A[i-1]:= A[11-i];

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 11 10 9 8 7 6 5 4 3 2 1

3) 10 9 8 7 6 5 6 7 8 9 10

4) 11 10 9 8 7 6 7 8 9 10 11

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 10 do begin

A[10-i]:=A[i];

A[i]:=A[10-i];

end;

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 0 1 2 3 4 5 6 7 8 9 10

3) 10 9 8 7 6 5 6 7 8 9 10

4) 0 1 2 3 4 5 4 3 2 1 0

  1. Элементы двухмерного массива A размером NN первоначально были равны 1000. Затем значения некоторых из них меняют с помощью следующего фрагмента программы:

k := 0;

for i:=1 to N do

for j:=N-i+1 to N do begin

k:= k + 1;

A[i,j]:= k;

end;

Какой элемент массива в результате будет иметь минимальное значение?

1) A[1,1] 2) A[1,N] 3) A[N,1] 4) A[N,N]

  1. Элементы двухмерного массива A размером 99 задаются с помощью следующего фрагмента программы:

for n:=1 to 9 do

for k:=1 to 9 do

A[n,k]:=n+k+1;

Сколько элементов массива A будут принимать четные значения?

1) 36 2) 40 3) 41 4) 45

  1. Значения элементов двух массивов A[1..100] и B[1..100] задаются с помощью следующего фрагмента программы:

for n:=1 to 100 do

A[n] := n – 50;

for n:=1 to 100 do

B[101-n]:=A[n]*A[n];

Какой элемент массива B будет наименьшим?

1) B[1] 2) B[50] 3) B[51] 4) B[100]

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=10 downto 0 do begin

k:=A[10-i];

A[10-i]:=A[i];

A[i]:=k;

end;

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 0 1 2 3 4 5 6 7 8 9 10

3) 10 9 8 7 6 5 6 7 8 9 10

4) 0 1 2 3 4 5 4 3 2 1 0

  1. Элементы двухмерного массива A размером 44 первоначально были равны 0. Затем они изменяются с помощью следующего фрагмента программы:

for n:=1 to 4 do

for k:=n to 4 do

A[n,k]:=1;

Сколько элементов массива A будут равны 1?

1) 4 2) 8 3) 10 4) 16

  1. Элементы двухмерного массива A размером 1010 первоначально были равны 1. Затем значения некоторых из них меняют с помощью следующего фрагмента программы:

for n:=1 to 4 do

for k:=1 to n+1 do begin

A[n,k]:=A[n,k]-1;

A[n,k+1]:=A[n,k]-1;

end;

Сколько элементов массива в результате будут равны 0?

1) 0 2) 4 3) 8 4) 16


  1. Дан фрагмент программы, обрабатывающий массив А из 10 элементов:

n := 10;

for i:=1 tо n do A[i] := i;

j := 1;

for i:=1 tо n-1 do

if A[i] < A[i+1] then j := j + 1;

Чему будет равно значение переменной j после выполнения этого алгоритма?

1) 1 2) 2 3) 10 4) 11

  1. Значения элементов двухмерного массива A[1..100,1..100] задаются с помощью следующего фрагмента программы:

for i:=1 to 100 do

for k:=1 to 100 do

if i = k then

A[i,k] := 1

else A[i,k] := -1;

Чему равна сумма элементов массива после выполнения этого фрагмента программы?

1) 0 2) 9800 3) 9900 4) 10000


  1. Значения элементов двухмерного массива A[1..100,1..100] задаются с помощью следующего фрагмента программы:

for i:=1 to 100 do

for k:=1 to 100 do

if i > k then

A[i,k] := 1

else A[i,k] := -1;

Чему равна сумма элементов массива после выполнения этого фрагмента программы?

1) 0 2) 100 3) -100 4) -200


  1. Значения элементов двухмерного массива A[1..100,1..100] задаются с помощью следующего фрагмента программы:

for i:=1 to 100 do

for k:=1 to 100 do

if i > k then

A[i,k] := i

else A[i,k] := -k;

Чему равна сумма элементов массива после выполнения этого фрагмента программы?

1) 5000 2) 0 3) -5000 4) -5050


  1. Дан фрагмент программы, обрабатывающий массив А из 10 элементов:

j := 1;

for i:=1 tо 10 do

if A[i] = A[j] then j := i;

s := j;

Чему будет равно значение переменной s после выполнения этого алгоритма?

1) 1

2) 10

3) индексу элемента, равного первому, и имеющему наибольший индекс

4) индексу элемента, равного последнему, и имеющему наименьший индекс


  1. Значения элементов двухмерного массива A[1..10,1..10] сначала равны 4. Затем выполняется следующий фрагмент программы:

for i:=1 to 6 do

for j:=1 to 5 do begin

A[i,j]:=A[i,j]+6;

A[j,i]:=A[j,i]+6;

end;

Сколько элементов массива будут равны 10?

1) 30 2) 25 3) 10 4) 0

  1. Значения элементов двухмерного массива A[1..10,1..10] сначала равны 4. Затем выполняется следующий фрагмент программы:

for i:=1 to 4 do

for j:=1 to 5 do begin

A[i,j]:=A[i,j]+4;

A[j,i]:=A[j,i]+5;

end;

Сколько элементов массива будут равны 9?

1) 20 2) 16 3) 5 4) 4

  1. Значения элементов двухмерного массива A[1..10,1..10] сначала равны 0. Затем выполняется следующий фрагмент программы:

for i:=1 to 4 do

for j:=2 to 5 do begin

A[i,j]:=A[i,j]+4;

A[j,i]:=A[j,i]+5;

end;

Сколько элементов массива будут равны 9?

1) 20 2) 16 3) 9 4) 4

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 4 do begin

k:=A[i];

A[i]:=A[10-i];

A[10-i]:=k;

end;

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 0 1 2 3 4 5 6 7 8 9 10

3) 0 1 2 3 4 5 4 3 2 1 0

4) 10 9 8 7 6 5 6 7 8 9 10

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 10 do begin

k:=A[i];

A[i]:=A[10-i];

k:=A[10-i];

end;

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 0 1 2 3 4 5 6 7 8 9 10

3) 0 1 2 3 4 5 4 3 2 1 0

4) 10 9 8 7 6 5 6 7 8 9 10

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 4 do begin

k:=A[10-i];

A[10-i]:=A[i];

k:=A[i];

end;

Чему будут равны элементы этого массива?

1) 10 9 8 7 6 5 4 3 2 1 0

2) 0 1 2 3 4 5 6 7 8 9 10

3) 0 1 2 3 4 5 4 3 2 1 0

4) 10 9 8 7 6 5 6 7 8 9 10

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленная переменная i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 9 do begin

A[i]:=A[i+1];

end;

Чему будут равны элементы этого массива?

1) 10 0 1 2 3 4 5 6 7 8 9

2) 1 2 3 4 5 6 7 8 9 10 10

3) 0 0 1 2 3 4 5 6 7 8 9

4) 1 2 3 4 5 6 7 8 9 10 0

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

k:=A[10];

for i:=0 to 9 do

A[i]:=A[i+1];

A[0]:=k;

Чему будут равны элементы этого массива?

1) 10 0 1 2 3 4 5 6 7 8 9

2) 10 2 3 4 5 6 7 8 9 10 10

3) 1 2 3 4 5 6 7 8 9 10 10

4) 1 2 3 4 5 6 7 8 9 10 0

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 4 do begin

k:=A[2*i];

A[2*i]:=A[2*i+1];

A[2*i+1]:=k;

end;

Чему будут равны элементы этого массива?

1) 5 6 7 8 9 0 1 2 3 4 10

2) 10 9 8 7 6 5 4 3 2 1 0

3) 0 1 2 3 4 5 4 3 2 1 0

4) 1 0 3 2 5 4 7 6 9 8 10

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 4 do begin

k:=A[i];

A[i]:=A[i+5];

A[i+5]:=k;

end;

Чему будут равны элементы этого массива?

1) 5 6 7 8 9 0 1 2 3 4 10

2) 10 9 8 7 6 5 4 3 2 1 0

3) 0 1 2 3 4 5 4 3 2 1 0

4) 1 0 3 2 5 4 7 6 9 8 10

  1. В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном ниже фрагменте программы массив сначала заполняется, а потом изменяется:

for i:=0 to 10 do A[10-i]:=i;

k:=A[9];

for i:=0 to 9 do

A[10-i]:=A[9-i];

A[1]:=k;

Чему будут равны элементы этого массива?

1) 9 8 7 6 5 4 3 2 1 0 10

2) 10 1 9 8 7 6 5 4 3 2 1

3) 0 10 9 8 7 6 5 4 3 2 1

4) 10 0 9 8 7 6 5 4 3 2 1


1 Здесь рассматривается только язык Паскаль, который является наиболее распространенным в школах России.

2 В этом примере используется стандартная нумерация для Паскаля: индексы начинаются с единицы.

3 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Крылов С.С. ЕГЭ-2010. Информатика: сборник экзаменационных заданий. – М.: Эксмо, 2009.

  4. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  5. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  6. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

  7. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

15 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Менеджер по туризму

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A7-2.doc

isa.muschanov.70.95@yandex.ru



A7 (повышенный уровень, время – 3 мин)

Тема: Основные понятия математической логики.

Про обозначения

К сожалению, обозначения логических операций И, ИЛИ и НЕ, принятые в «серьезной» математической логике (,, ¬), неудобны, интуитивно непонятны и никак не проявляют аналогии с обычной алгеброй. Автор, к своему стыду, до сих пор иногда путает и . Поэтому на его уроках операция «НЕ» обозначается чертой сверху, «И» – знаком умножения (поскольку это все же логическое умножение), а «ИЛИ» – знаком «+» (логическое сложение).
В разных учебниках используют разные обозначения. К счастью, в начале задания ЕГЭ приводится расшифровка закорючек (,, ¬), что еще раз подчеркивает проблему. Далее во всех решениях приводятся два варианта записи.

Что нужно знать:

  • условные обозначения логических операций

¬ A, hello_html_m3da5f95b.gif не A (отрицание, инверсия)

A B, hello_html_m617d34e5.gifA и B (логическое умножение, конъюнкция)

A B, hello_html_m5222bd0.gif A или B (логическое сложение, дизъюнкция)

A B импликация (следование)

  • таблицы истинности логических операций «И», «ИЛИ», «НЕ», «импликация» (см. презентацию «Логика»)

  • операцию «импликация» можно выразить через «ИЛИ» и «НЕ»:

A B = ¬ A B или в других обозначениях A B = hello_html_m29aec133.gif

  • если в выражении нет скобок, сначала выполняются все операции «НЕ», затем – «И», затем – «ИЛИ», и самая последняя – «импликация»

  • иногда полезны формулы де Моргана1:

¬ (A B) = ¬ A ¬ B hello_html_508b3332.gif

¬ (A B) = ¬ A ¬ B hello_html_6e7cbcf0.gif

Пример задания:

Для какого из указанных значений X истинно высказывание ¬((X > 2)(X > 3))?

1) 1 2) 2 3) 3 4) 4

Решение (вариант 1, прямая подстановка):

  1. определим порядок действий: сначала вычисляются результаты отношений в скобках, затем выполняется импликация (поскольку есть «большие» скобки), затем – отрицание (операция «НЕ») для выражения в больших скобках

  2. выполняем операции для всех приведенных возможных ответов (1 обозначает истинное условие, 0 – ложное); сначала определяем результаты сравнения в двух внутренних скобках:

    X

    X > 2

    X > 3

    (X > 2)(X > 3)

    ¬((X > 2)(X > 3))

    1

    0

    0



    2

    0

    0



    3

    1

    0



    4

    1

    1



  3. по таблице истинности операции «импликация» находим третий столбец (значение выражения в больших скобках), применив операцию «импликация» к значениям второго и третьего столбцов (в каждой строке):

    X

    X > 2

    X > 3

    (X > 2)(X > 3)

    ¬((X > 2)(X > 3))

    1

    0

    0

    1


    2

    0

    0

    1


    3

    1

    0

    0


    4

    1

    1

    1


  4. значение выражения равно инверсии третьего столбца (меняем 1 на 0 и наоборот):

    X

    X > 2

    X > 3

    (X > 2)(X > 3)

    ¬((X > 2)(X > 3))

    1

    0

    0

    1

    0

    2

    0

    0

    1

    0

    3

    1

    0

    0

    1

    4

    1

    1

    1

    0

  5. таким образом, ответ – 3.

Возможные ловушки и проблемы:

  • можно «забыть» отрицание (помните, что правильный ответ – всего один!)

  • можно перепутать порядок операций (скобки, «НЕ», «И», «ИЛИ», «импликация»)

  • нужно помнить таблицу истинности операции «импликация», которую очень любят составители тестов2

  • этот метод проверяет только заданные числа и не дает общего решения, то есть не определяет все множество значений X, при которых выражение истинно

Решение (вариант 2, упрощение выражения):

  1. обозначим простые высказывания буквами:

A = X > 2, B = X > 3

  1. тогда можно записать все выражение в виде

¬(A B) или hello_html_40194b4d.gif

  1. выразим импликацию через «ИЛИ» и «НЕ» (см. выше):

¬(A B)= ¬(¬A B) или hello_html_65e4d875.gif

  1. раскрывая по формуле де Моргана операцию «НЕ» для всего выражения, получаем

¬(¬A B)= A ¬B или hello_html_7fa3e498.gif

  1. таким образом, данное выражение истинно только тогда, когда A истинно (X > 2), а B – ложно (X 3), то есть для всех X, таких что 2 < X 3

  2. из приведенных чисел только 3 удовлетворяет этому условию,

  3. таким образом, ответ – 3.

Возможные проблемы:

  • нужно помнить законы логики (например, формулы де Моргана)

  • при использовании формул де Моргана нужно не забыть заменить «И» на «ИЛИ» и наоборот

  • нужно не забыть, что инверсией (отрицанием) для выражения X > 3 является X 3, а не X < 3

Выводы:

  1. в данном случае, наверное, проще первый вариант решения (прямая подстановка всех предложенных ответов)

  2. второй вариант позволяет не только проверить заданные значения, но и получить общее решение – все множество X, для которых выражение истинно; это более красиво для человека, обладающего математическим складом ума.

Задачи для тренировки3:

  1. Для какого из указанных значений числа X истинно высказывание

((X < 5)(X < 3)) ((X < 2)(X < 1))

1) 1 2) 2 3) 3 4) 4

  1. Для какого числа X истинно высказывание ((X > 3)(X < 3))(X < 1)

1) 1 2) 2 3) 3 4) 4

  1. Для какого числа X истинно высказывание X > 1 ((X < 5)(X < 3))

1) 1 2) 2 3) 3 4) 4

  1. Для какого имени истинно высказывание:

¬ (Первая буква имени гласная Четвертая буква имени согласная)?

1) ЕЛЕНА 2) ВАДИМ 3) АНТОН 4) ФЕДОР

  1. Для какого символьного выражения неверно высказывание:

Первая буква гласная¬ (Третья буква согласная)?

1)abedc 2)becde 3) babas 4) abcab

  1. Для какого числа X истинно высказывание (X > 2)(X > 5)(X < 3)

1) 5 2) 2 3) 3 4) 4

  1. Для какого из значений числа Z высказывание ((Z > 2)(Z > 4))(Z > 3) будет ложным?

1) 1 2) 2 3) 3 4) 4

  1. Для какого имени истинно высказывание:

¬ (Первая буква имени согласная Третья буква имени гласная)?

1) ЮЛИЯ 2) ПЕТР 3) АЛЕКСЕЙ 4) КСЕНИЯ

  1. Для какого из значений числа Y высказывание (Y < 5) ((Y > 1) (Y > 5)) будет истинным?

1) 1 2) 2 3) 3 4) 4

  1. Для какого символьного выражения верно высказывание:

¬ (Первая буква согласная) ¬ (Вторая буква гласная)?

1) abcde 2) bcade 3) babas 4) cabab



  1. Для какого имени истинно высказывание:

(Вторая буква гласная Первая буква гласная) Последняя буква согласная?

1) ИРИНА 2) МАКСИМ 3) МАРИЯ 4) СТЕПАН

  1. Для какого имени истинно высказывание:

¬ (Первая буква согласная Последняя буква гласная) Вторая буква согласная?

1) ИРИНА 2) СТЕПАН 3) МАРИНА 4) ИВАН

  1. Для какого имени истинно высказывание:

(Первая буква согласная Вторая буква согласная) Последняя буква гласная?

1) КСЕНИЯ 2) МАКСИМ 3) МАРИЯ 4) СТЕПАН

  1. Для какого имени истинно высказывание:

¬ (Вторая буква гласная Первая буква гласная) Последняя буква согласная?

1) ИРИНА 2) МАКСИМ 3) МАРИЯ 4) СТЕПАН

  1. Для какого имени истинно высказывание:

¬ (Первая буква согласная Последняя буква согласная) Вторая буква согласная?

1) ИРИНА 2) СТЕПАН 3) МАРИЯ 4) КСЕНИЯ

  1. Для какого имени истинно высказывание:

¬ (Первая буква гласная Вторая буква гласная) Последняя буква гласная?

1) ИРИНА 2) МАКСИМ 3) АРТЕМ 4) МАРИЯ

  1. Для какого названия животного ложно высказывание:

Заканчивается на согласную В слове 7 букв ¬(Третья буква согласная)?

1) Верблюд 2) Страус 3) Кенгуру 4) Леопард

  1. Для какого названия животного ложно высказывание:

В слове 4 гласных буквы ¬ (Пятая буква гласная) В слове 5 согласных букв?

1) Шиншилла 2) Кенгуру 3) Антилопа 4) Крокодил

  1. Для какого названия животного ложно высказывание:

Четвертая буква гласная ¬ (Вторая буква согласная)?

1) Собака 2) Жираф 3) Верблюд 4) Страус

  1. Для какого слова ложно высказывание:

Первая буква слова согласная → (Вторая буква имени гласная Последняя буква слова согласная)?

1) ЖАРА 2) ОРДА 3) ОГОРОД 4) ПАРАД

  1. Для какого числа X истинно высказывание (X(X-16) > -64)(X > 8)

1) 5 2) 6 3) 7 4) 8

  1. Для какого числа X истинно высказывание (X(X-8) > -25 + 2X)(X > 7)

1) 4 2) 5 3) 6 4) 7

  1. Для какого символьного набора истинно высказывание:

Вторая буква согласная (В слове 3 гласных буквы Первая буква согласная)?

1) УББОШТ 2) ТУИОШШ 3) ШУБВОИ 4) ИТТРАО

  1. Для какого имени ложно высказывание:

(Первая буква гласная Последняя буква согласная) ¬(Третья буква согласная)?

1) ДМИТРИЙ 2) АНТОН 3) ЕКАТЕРИНА 4) АНАТОЛИЙ

  1. Для какого имени истинно высказывание:

Первая буква гласная Четвертая буква согласная В слове четыре буквы?

1) Сергей 2) Вадим 3) Антон 4) Илья

  1. Для какого числа X истинно высказывание
    (
    (X < 4)(X < 3)) ((X < 3)(X < 1))

1) 1 2) 2 3) 3 4) 4



1 Огастес (Август) де Морган – шотландский математик и логик.

2 … но которая, к сожалению, почти не нужна на практике.

3 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М: Экзамен, 2010.

  4. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

  5. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

6 isa.muschanov.70@yandex.ru



Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A8.doc

isa.muschanov.70.95@yandex.ru



A8 (базовый уровень, время – 1 мин)

Тема: Преобразование логических выражений. Формулы де Моргана.

Про обозначения

К сожалению, обозначения логических операций И, ИЛИ и НЕ, принятые в «серьезной» математической логике (,, ¬), неудобны, интуитивно непонятны и никак не проявляют аналогии с обычной алгеброй. Автор, к своему стыду, до сих пор иногда путает и . Поэтому на его уроках операция «НЕ» обозначается чертой сверху, «И» – знаком умножения (поскольку это все же логическое умножение), а «ИЛИ» – знаком «+» (логическое сложение).
В разных учебниках используют разные обозначения. К счастью, в начале задания ЕГЭ приводится расшифровка закорючек (,, ¬), что еще раз подчеркивает проблему.

Что нужно знать:

  • условные обозначения логических операций

¬ A, hello_html_m3da5f95b.gif не A (отрицание, инверсия)

A B, hello_html_m617d34e5.gifA и B (логическое умножение, конъюнкция)

A B, hello_html_m5222bd0.gif A или B (логическое сложение, дизъюнкция)

A B импликация (следование)

  • операцию «импликация» можно выразить через «ИЛИ» и «НЕ»:

A B = ¬ A B или в других обозначениях A B = hello_html_m29aec133.gif

  • если в выражении нет скобок, сначала выполняются все операции «НЕ», затем – «И», затем – «ИЛИ», и самая последняя – «импликация»

  • правила преобразования логических выражений (слайд из презентации «Логика»):

hello_html_m706108c7.png

  • фактически это задание на применение законов де Моргана (хотя об этом нигде не говорится):

¬ (A B) = ¬ A ¬ B hello_html_508b3332.gif

¬ (A B) = ¬ A ¬ B hello_html_6e7cbcf0.gif

Пример задания:

Укажите, какое логическое выражение равносильно выражению A ¬(¬B C).

1) ¬A ¬B ¬C 2) A ¬B ¬C 3) A B ¬C 4) A ¬B C

Решение (вариант 1, использование законов де Моргана):

  1. перепишем заданное выражение и ответы в других обозначениях:
    заданное выражение hello_html_m1b75a27b.gif
    ответы: 1) hello_html_40cf5c1a.gif 2) hello_html_m5c5ce064.gif 3) hello_html_dc3e4e4.gif 4) hello_html_483598c4.gif

  2. посмотрев на заданное выражение, видим инверсию (операцию «НЕ») для сложного выражения в скобках, которую раскрываем по формуле де Моргана,

hello_html_7a30c8b0.gif

а затем используем закон двойного отрицания по которому hello_html_57e5ba8a.gif:

hello_html_507defad.gif

  1. таким образом, правильный ответ – 3 .

Возможные ловушки и проблемы:

  • серьезные сложности представляет применяемая в заданиях ЕГЭ форма записи логических выражений с «закорючками», поэтому рекомендуется сначала внимательно перевести их в «удобоваримый» вид; при этом сразу становится понятно, что ответы 1 и 2 заведомо неверные

  • при использовании законов де Моргана часто забывают, что нужно заменить «И» на «ИЛИ» и «ИЛИ» на «И» (возможный неверный ответ hello_html_m25904c3f.gif)

  • расчет на то, что при использовании законов де Моргана инверсия сложного выражения по ошибке «просто пропадет», и все сведется к замене «ИЛИ» на «И» (неверный ответ hello_html_483598c4.gif)

  • иногда для решения нужно упростить не только исходное выражение, но и заданные ответы, если они содержат импликацию или инверсию сложных выражений

Решение (вариант 2, через таблицы истинности, если забыли формулы де Моргана):

  1. перепишем заданное выражение в других обозначениях:
    заданное выражение hello_html_m1b75a27b.gif
    ответы: 1) hello_html_40cf5c1a.gif 2) hello_html_m5c5ce064.gif 3) hello_html_dc3e4e4.gif 4) hello_html_483598c4.gif

  2. для доказательства равносильности двух логических выражений достаточно показать, что они принимают равные значения при всех возможных комбинациях исходных данных; поэтому можно составить таблицы истинности для исходного выражения и всех ответов и сравнить их

  3. здесь 3 переменных, каждая из которых принимает два возможных значения (всего 8 вариантов, которые в таблице истинности записывают по возрастанию двоичных кодов – см. презентацию «Логика»)

  4. исходное выражение hello_html_m1b75a27b.gif истинно только тогда, когда hello_html_m4c320aea.gif и hello_html_7feaaedb.gif, то есть только при hello_html_37e8789f.gif. (в таблице истинности одна единица, остальные – нули)

  5. выражение hello_html_40cf5c1a.gif истинно, если хотя бы одна из переменных равна нулю, то есть, оно будет ложно только при hello_html_13744aca.gif (в таблице истинности один нуль, остальные – единицы)

  6. аналогично выражение hello_html_m5c5ce064.gif ложно только при hello_html_m60e75eee.gif, а в остальных случаях – истинно

  7. выражение hello_html_dc3e4e4.gif истинно только при hello_html_m40b90e12.gif, а в остальных случаях – ложно

  8. выражение hello_html_m5e607dd9.gif истинно только при hello_html_2383a7e5.gif, а в остальных случаях – ложно

  9. объединяя все эти результаты в таблицу, получаем:

A

B

C

hello_html_m1b75a27b.gif

hello_html_40cf5c1a.gif

hello_html_m5c5ce064.gif

hello_html_dc3e4e4.gif

hello_html_483598c4.gif

0

0

0

0

1

1

0

0

0

0

1

0

1

1

0

0

0

1

0

0

1

1

0

0

0

1

1

0

1

0

0

0

1

0

0

0

1

1

0

0

1

0

1

0

1

1

0

1

1

1

0

1

1

1

1

0

1

1

1

0

0

1

0

0


  1. видим, что таблицы истинности исходного выражения и hello_html_dc3e4e4.gif совпали во всех строчках

  2. таким образом, правильный ответ – 3 .

Возможные проблемы:

  • сравнительно большой объем работы

Выводы:

  1. очевидно, что проще использовать первый вариант решения (упрощение исходного выражения и, если нужно, ответов), но для этого нужно помнить формулы

  2. если формулы забыты, всегда есть простой (хотя и более трудоемкий) вариант решения через таблицы истинности.

Еще пример задания1:

Укажите, какое логическое выражение равносильно выражению
¬(A ¬B) ¬(A B) A B

1) ¬B A 2) A B ¬B 3) A B ¬A 4) ¬A

Решение (вариант 1, использование законов де Моргана):

  1. перепишем заданное выражение в других обозначениях:
    заданное выражение hello_html_25f7f9b6.gif
    ответы: 1) hello_html_m4df0b15f.gif 2) hello_html_68373bb2.gif 3) hello_html_m26f621c5.gif 4) hello_html_m2caecbd8.gif

  2. проще всего упростить заданное выражение; сначала раскрываем инверсию сложных выражений, используя законы де Моргана:

hello_html_1cd8d22a.gif

  1. выносим за скобки hello_html_m2caecbd8.gif в первых двух слагаемых и используем закон исключения третьего hello_html_3ca3e3ac.gif:

hello_html_10d564e6.gif

  1. наконец, применяем распределительный закон для операции «И» и еще раз закон исключения третьего hello_html_5eaf2d80.gif:

hello_html_38e437ce.gif

  1. дальше уже не упрощается…

  2. теперь замечаем, что такого ответа нет среди предложенных вариантов!

  3. это означает, что ответы тоже можно упростить; упрощаем ответы 2 и 3, применяя распределительный закон и закон исключения третьего

ответы: 2) hello_html_1a9435e6.gif
3) hello_html_368c5167.gif

  1. видим, что упрощенное выражение для ответа 3 совпало с упрощенным исходным выражением

  2. таким образом, правильный ответ – 3

  3. заметим, что этот пример можно также решать через таблицы истинности, но это более трудоемко.

Возможные проблемы:

  • нужно хорошо помнить законы алгебры логики, которые не имеют аналога в математике (и «математическая» интуиция отказывает), но часто используются при упрощении логических выражений:

законы де Моргана: hello_html_m2dc94810.gif, hello_html_508b3332.gif

распределительный закон: hello_html_m392abe89.gif

закон поглощения: hello_html_2459542a.gif, hello_html_m145207da.gif

закон исключения третьего: hello_html_5eaf2d80.gif, hello_html_m58e564e.gif






Задачи для тренировки2:

  1. Укажите, какое логическое выражение равносильно выражению ¬(A ¬B C) ?

1) ¬A B ¬C 2) A ¬B C 3) ¬A ¬B ¬C 4) ¬A B ¬C



  1. Какое логическое выражение равносильно выражению ¬ (A B) ¬C ?

1) ¬A B ¬C 2)(¬A ¬B) ¬C 3)(¬A ¬B) C 4) ¬A ¬B ¬C


  1. Укажите, какое логическое выражение равносильно выражению ¬ (¬А B)?

1) A ¬B 2) ¬A B 3) B ¬A 4) A ¬B


  1. Какое логическое выражение равносильно выражению ¬(А ¬B) ?

1) A B 2) A B 3) ¬A ¬B 4) ¬A B


  1. Какое логическое выражение эквивалентно выражению ¬(¬A ¬B) C ?

1) (A ¬B) C 2) A B C 3) (A ¬B) C 4) ¬(A ¬B) C


  1. Какое логическое выражение эквивалентно выражению A ¬(¬B ¬C)?

1) A B C 2) A B ¬C 3) A (B C) 4) (A ¬B) ¬C


  1. Какое логическое выражение эквивалентно выражению ¬(A B) ¬C?

1) (A B) ¬C 2) (A B) C 3) (¬A ¬B) ¬C 4) (A B) C


  1. Какое логическое выражение эквивалентно выражению ¬(A ¬B) ¬C?

1) A B C 2) ¬(A B) C 3) ¬(A C) B 4) ¬(A C) B


  1. Какое логическое выражение эквивалентно выражению ¬(¬A B) ¬C?

1) (A B) ¬C 2) (A B) C 3) (A ¬B) ¬C 4) (A ¬B) ¬C


  1. Какое логическое выражение эквивалентно выражению ¬(A B) C?

1) ¬A B C 2) A B C 3) ¬(A B) C 4) ¬A ¬B ¬C


  1. Какое логическое выражение эквивалентно выражению ¬(¬ A ¬ B) C?

1) ¬ A B ¬ C 2) A ¬ B) ¬C 3) (A B) C 4) A B C


  1. Какое логическое выражение эквивалентно выражению A ¬(B ¬ C)?

1) A ¬B C 2) A ¬B ¬C 3) A ¬B ¬C 4) A ¬B C


  1. Какое логическое выражение эквивалентно выражению ¬(¬A B) C?

1) ¬A B ¬C 2) (A ¬B) C 3) (A B) C 4) A ¬B C


  1. Какое логическое выражение эквивалентно выражению ¬(A ¬B ¬C)?

1) ¬A B C 2) ¬A B ¬C 3) ¬A B C 4) A B ¬C

  1. Какое логическое выражение эквивалентно выражению ¬(¬A ¬B) C?

1) ¬A B ¬C 2) A B C 3) (A B) C 4)( ¬A ¬B) ¬C

  1. Какое логическое выражение эквивалентно выражению ¬(¬A (¬B C))?

1) ¬A ¬B C 2) A ¬B ¬C 3) A B ¬C 4) A ¬B C

  1. Какое логическое выражение эквивалентно выражению ¬(A ¬B C)?

1) ¬A B ¬C 2) ¬A B ¬C 3) ¬A (B C) 4) ¬A B ¬A ¬C

  1. Какое логическое выражение эквивалентно выражению ¬A ¬(¬B ¬¬C) D?

1) ¬A ¬B C D 2) ¬A ¬B ¬C D

3) ¬A B ¬C D 4) ¬A B C D

  1. Какое логическое выражение эквивалентно выражению ¬(A ¬B) ¬C D?

1) A ¬B C ¬D 2) A ¬B C D

3) ¬A B ¬C D 4) ¬A B ¬C D

  1. Какое логическое выражение эквивалентно выражению ¬(¬B ¬C) ¬A?

1) ¬A (B C) 2) ¬A ¬B C 3) ¬A B ¬C 4) ¬A (B C)

  1. Какое логическое выражение эквивалентно выражению A B C)?

1) A ¬B C 2) A ¬B C A 3) A ¬B C 4) A B A ¬C

  1. Какое логическое выражение эквивалентно выражению ¬(A ¬B C)?

1) ¬A B ¬C 2) ¬A B ¬C 3) ¬A (B C) 4) ¬A B ¬A ¬C

  1. Какое логическое выражение эквивалентно выражению ¬(¬¬A ¬B C)?

1) A ¬B C 2) ¬A B ¬C 3) ¬A B ¬C 4) A ¬B C


1 Самылкина Н.Н., Островская Е.М. Информатика: тренировочные задания. – М.: Эксмо, 2009.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Самылкина Н.Н., Островская Е.М. Информатика: тренировочные задания. – М.: Эксмо, 2009.

  4. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  5. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

6 isa.muschanov.70@yandex.ru



Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Менеджер по туризму

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ A9.doc

isa.muschanov.70@yandex.ru



A9 (базовый уровень, время – 2 мин)

Тема: Построение таблиц истинности логических выражений.

Про обозначения

К сожалению, обозначения логических операций И, ИЛИ и НЕ, принятые в «серьезной» математической логике (,, ¬), неудобны, интуитивно непонятны и никак не проявляют аналогии с обычной алгеброй. Автор, к своему стыду, до сих пор иногда путает и . Поэтому на его уроках операция «НЕ» обозначается чертой сверху, «И» – знаком умножения (поскольку это все же логическое умножение), а «ИЛИ» – знаком «+» (логическое сложение).
В разных учебниках используют разные обозначения. К счастью, в начале задания ЕГЭ приводится расшифровка закорючек (,, ¬), что еще раз подчеркивает проблему.

Что нужно знать:

  • условные обозначения логических операций

¬ A, hello_html_m3da5f95b.gif не A (отрицание, инверсия)

A B, hello_html_m617d34e5.gifA и B (логическое умножение, конъюнкция)

A B, hello_html_m5222bd0.gif A или B (логическое сложение, дизъюнкция)

A B импликация (следование)

  • операцию «импликация» можно выразить через «ИЛИ» и «НЕ»:

A B = ¬ A B или в других обозначениях A B = hello_html_m29aec133.gif

  • иногда для упрощения выражений полезны формулы де Моргана:

¬ (A B) = ¬ A ¬ B hello_html_508b3332.gif

¬ (A B) = ¬ A ¬ B hello_html_6e7cbcf0.gif

  • если в выражении нет скобок, сначала выполняются все операции «НЕ», затем – «И», затем – «ИЛИ», и самая последняя – «импликация»

  • таблица истинности выражения определяет его значения при всех возможных комбинациях исходных данных

  • если известна только часть таблицы истинности, соответствующее логическое выражение однозначно определить нельзя, поскольку частичной таблице могут соответствовать несколько разных логических выражений (не совпадающих для других вариантов входных данных);

  • количество разных логических выражений, удовлетворяющих неполной таблице истинности, равно hello_html_m51083ad2.gif, где hello_html_m5faf1d98.gif – число отсутствующих строк; например, полная таблица истинности выражения с тремя переменными содержит 23=8 строчек, если заданы только 6 из них, то можно найти 28-6=22=4 разных логических выражения, удовлетворяющие этим 6 строчкам (но отличающиеся в двух оставшихся)

  • логическая сумма A + B + C + … равна 0 (выражение ложно) тогда и только тогда, когда все слагаемые одновременно равны нулю, а в остальных случаях равна 1 (выражение истинно)

  • логическое произведение A · B · C · … равно 1 (выражение истинно) тогда и только тогда, когда все сомножители одновременно равны единице, а в остальных случаях равно 0 (выражение ложно)

П

X

Y

Z

F

1

0

0

1

0

0

0

1

1

1

1

0



ример задания:

Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F:

Какое выражение соответствует F?

1) ¬X ¬Y ¬Z 2) X Y Z 3) X Y Z 4) ¬X ¬Y ¬Z

Решение (основной вариант):

  1. нужно для каждой строчки подставить заданные значения X, Y и Z во все функции, заданные в ответах, и сравнить результаты с соответствующими значениями F для этих данных

  2. если для какой-нибудь комбинации X, Y и Z результат не совпадает с соответствующим значением F, оставшиеся строчки можно не рассматривать, поскольку для правильного ответа все три результата должны совпасть со значениями функции F

  3. перепишем ответы в других обозначениях:
    1) hello_html_1a4110e3.gif 2) hello_html_3cfbe7cd.gif 3) hello_html_m389a3f56.gif 4) hello_html_m180ace5.gif

  4. первое выражение, hello_html_1a4110e3.gif, равно 1 только при hello_html_1ede7b63.gif, поэтому это неверный ответ (первая строка таблицы не подходит)

  5. второе выражение, hello_html_3cfbe7cd.gif, равно 1 только при hello_html_7fc5582e.gif, поэтому это неверный ответ (первая и вторая строки таблицы не подходят)

  6. третье выражение,hello_html_m389a3f56.gif, равно нулю при hello_html_1ede7b63.gif, поэтому это неверный ответ (вторая строка таблицы не подходит)

  7. наконец, четвертое выражение, hello_html_m180ace5.gif равно нулю только тогда, когда hello_html_7fc5582e.gif, а в остальных случаях равно 1, что совпадает с приведенной частью таблицы истинности

  8. таким образом, правильный ответ – 4 ; частичная таблица истинности для всех выражений имеет следующий вид:

X

Y

Z

F

hello_html_1a4110e3.gif

hello_html_3cfbe7cd.gif

hello_html_m389a3f56.gif

hello_html_m180ace5.gif

1

0

0

1

0 ×

0 ×

1

1

0

0

0

1

   0 ×

1

1

1

1

0

0

(красный крестик показывает, что значение функции не совпадает с F, а знак «–» означает, что вычислять оставшиеся значения не обязательно).

Возможные ловушки и проблемы:

  • серьезные сложности представляет применяемая в заданиях ЕГЭ форма записи логических выражений с «закорючками», поэтому рекомендуется сначала внимательно перевести их в «удобоваримый» вид;

  • расчет на то, что ученик перепутает значки и (неверный ответ 1)

  • в некоторых случаях заданные выражения-ответы лучше сначала упростить, особенно если они содержат импликацию или инверсию сложных выражений (как упрощать – см. разбор задачи А8)

Решение (вариант 2):

  1. часто правильный ответ – это самая простая функция, удовлетворяющая частичной таблице истинности, то есть, имеющая единственный нуль или единственную единицу в полной таблице истинности

  2. в этом случае можно найти такую функцию и проверить, есть ли она среди данных ответов

  3. в приведенной задаче в столбце F есть единственный нуль для комбинации hello_html_m2a629d04.gif

  4. выражение, которое имеет единственный нуль для этой комбинации, это hello_html_m5b7326ca.gif, оно есть среди приведенных ответов (ответ 4)

  5. таким образом, правильный ответ – 4


Возможные проблемы:

  • метод применим не всегда, то есть, найденная в п. 4 функция может отсутствовать среди ответов

Е

X

Y

Z

F

1

0

0

1

0

0

0

0

1

1

1

0



ще пример задания:

Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F:

Какое выражение соответствует F?

1) ¬X ¬Y ¬Z 2) X Y Z 3) X ¬Y ¬Z 4) X ¬Y ¬Z

Решение (вариант 2):

  1. перепишем ответы в других обозначениях:
    1) hello_html_1a4110e3.gif 2) hello_html_3cfbe7cd.gif 3) hello_html_226d29f8.gif 4) hello_html_m180ace5.gif

  2. в столбце F есть единственная единица для комбинации hello_html_m63b34d0d.gif, простейшая функция, истинная (только) для этого случая, имеет вид hello_html_226d29f8.gif, она есть среди приведенных ответов (ответ 3)

  3. таким образом, правильный ответ – 3.

З

X

Y

Z

F

1

1

1

1

1

1

0

1

1

0

1

1



адачи для тренировки1:
  1. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X ¬Y Z 2) X Y Z 3) X Y ¬Z 4) ¬X Y ¬Z

X

Y

Z

F

0

1

0

0

1

1

0

1

1

0

1

0





  1. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) ¬X Y ¬Z 2) X Y ¬Z 3) ¬X ¬Y Z 4) X ¬Y Z

X

Y

Z

F

0

0

0

1

0

0

1

0

0

1

0

0





  1. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) ¬X ¬Y Z 3) X Y ¬Z 4) ¬X ¬Y ¬Z

X

Y

Z

F

0

0

0

1

0

0

1

0

0

1

0

1





  1. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) ¬X ¬Y Z 2) ¬X ¬Y Z 3) X Y ¬Z 4) X Y Z

A

B

F

0

0

1

0

1

1

1

0

1

1

1

0





  1. Символом F обозначена логическая функция от двух аргументов (A и B), заданная таблицей истинности. Какое выражение соответствует F?

1) A (¬A ¬B) 2) A B 3) ¬A B 4) ¬A ¬B





X

Y

Z

F

0

0

0

0

1

1

0

1

1

0

0

1





  1. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) ¬X Y ¬Z 3) X (Y Z) 4) (X Y) ¬Z

X

Y

Z

F

0

0

0

1

0

0

1

1

0

1

0

1





  1. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) X Y Z 3) X Y Z 4) ¬X ¬Y ¬Z

X

Y

Z

F

0

0

0

1

0

0

1

1

0

1

0

1

1



  1. Символом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) ¬(X Y) Z 2) ¬(X ¬Y) Z 3) ¬(X Y) Z 4) (X Y) Z



  1. С

    X

    Y

    Z

    F

    0

    0

    0

    0

    1

    0

    1

    1

    0

    1

    0

    1



    имволом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) ¬X Y ¬Z 3) X Y Z 4) X Y ¬Z

A

B

F

0

0

0

0

1

1

1

0

1

1

1

1





  1. Символом F обозначена логическая функция от двух аргументов (A и B), заданная таблицей истинности. Какое выражение соответствует F?

1) A (¬(A ¬B)) 2) A B 3) ¬A B 4) ¬A B





  1. С

    X

    Y

    Z

    F

    1

    1

    1

    1

    1

    1

    0

    1

    1

    0

    1

    1

    0

    имволом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) ¬X ¬Y Z 3) X Y Z 4) X Y ¬Z



  1. С

    X

    Y

    Z

    F

    1

    0

    0

    0

    0

    0

    0

    1

    1

    0

    1

    1



    имволом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) ¬X Y Z 2) X Y ¬Z 3) ¬X ¬Y Z 4) X ¬Y ¬ Z



  1. С

    X

    Y

    Z

    F

    0

    1

    1

    1

    0

    1

    0

    0

    1

    0

    1

    0



    имволом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) ¬X Y ¬Z 2) ¬X Y Z 3) X ¬Y ¬Z 4) ¬X ¬Y Z



  1. С

    X

    Y

    Z

    F

    1

    0

    0

    0

    0

    0

    1

    1

    0

    0

    0

    1



    имволом F обозначено одно из указанных ниже логических выражений от трех аргументов: X, Y, Z. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) ¬X Y Z 2) X ¬Y ¬Z 3) X ¬Y ¬Z 4) ¬X Y Z



  1. Д

    X

    Y

    Z

    F

    1

    1

    1

    1

    1

    1

    0

    1

    1

    0

    1

    1



    ан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) ¬X ¬Y Z 3) X Y Z 4) X Y ¬Z





  1. Д

    X

    Y

    Z

    F

    0

    0

    0

    1

    1

    1

    0

    0

    0

    1

    1

    1



    ан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) ¬X ¬Y ¬Z 3) (X Y) ¬Z 4) (X Y) Z





  1. Д

    X

    Y

    Z

    F

    0

    0

    0

    0

    0

    1

    1

    1

    1

    0

    0

    1



    ан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) (X ¬Y) Z 2) (X Y) ¬Z 3) X (¬Y Z) 4) X Y ¬Z





  1. Д

    X

    Y

    Z

    F

    1

    1

    0

    1

    1

    0

    1

    0

    0

    0

    1

    1



    ан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) (X Y) ¬Z 3) (¬X Y) Z 4) X ¬Y Z





  1. Д

    X

    Y

    Z

    F

    0

    1

    0

    1

    1

    1

    1

    1

    1

    1

    0

    0



    ан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) (X Y) Z 2) X (Y Z) 3) ¬X Y Z 4) X Y ¬Z





  1. Д

    X

    Y

    Z

    F

    0

    0

    1

    1

    1

    0

    1

    0

    1

    1

    1

    1



    ан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) (¬X ¬Y) Z 2) X Y Z 3) (X Y) Z 4) X (Y Z)





  1. Д

    X

    Y

    Z

    F

    0

    1

    1

    0

    1

    0

    0

    1

    1

    1

    0

    0



    ан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) (X Z) Y 2) X Y Z 3) X Y Z 4) X (Y Z)





X

Y

Z

F

1

1

0

1

1

0

1

0

0

0

1

1





  1. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) X Y Z 2) (X Y) ¬Z 3) (¬X Y) Z 4) X (¬Y Z)



X

Y

Z

F

0

0

0

0

0

1

1

1

1

0

0

1





  1. Дан фрагмент таблицы истинности выражения F (см. таблицу справа). Какое выражение соответствует F?

1) (X ¬Y) Z 2) (X Y) ¬Z 3) X (¬Y Z) 4) X Y ¬Z







1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

8 isa.muschanov.70@yandex.ru




Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Методист-разработчик онлайн-курсов

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B10.doc

isa.muschanov.70@yandex.ru

B10 (повышенный уровень, время – 5 мин)

Тема: Составление запросов для поисковых систем с использованием логических выражений.

Что нужно знать:

  • таблицы истинности логических операций «И», «ИЛИ», «НЕ» (см. презентацию «Логика»)

  • если в выражении нет скобок, сначала выполняются все операции «НЕ», затем – «И», затем – «ИЛИ»

  • логическое произведение ABC∙… равно 1 (выражение истинно) только тогда, когда все сомножители равны 1 (а в остальных случаях равно 0)

  • логическая сумма A+B+C+… равна 0 (выражение ложно) только тогда, когда все слагаемые равны 0 (а в остальных случаях равна 1)

  • правила преобразования логических выражений (слайд из презентации «Логика»):

hello_html_m706108c7.png

  • ввод какого-то слова (скажем, кергуду) в запросе поисковой системы означает, что пользователь ищет Web-страницы, на которых встречается это слово

  • операция «И» всегда ограничивает поиск, то есть, в ответ на запрос кергуду И бамбарбия поисковый сервер выдаст меньше страниц, чем на запрос кергуду, потому что будет искать страницы, на которых есть оба этих слова одновременно

  • операция «ИЛИ» всегда расширяет поиск, то есть, в ответ на запрос
    кергуду ИЛИ бамбарбия поисковый сервер выдаст больше страниц, чем на запрос кергуду, потому что будет искать страницы, на которых есть хотя бы одно из этих слов (или оба одновременно)

  • если в запросе вводится фраза в кавычках, поисковый сервер ищет страницы, на которых есть в точности эта фраза, а не просто отдельные слова; взятие словосочетания в кавычки ограничивает поиск, то есть, в ответ на запрос "кергуду бамбарбия" поисковый сервер выдаст меньше страниц, чем на запрос кергуду бамбарбия, потому что будет искать только те страницы, на которых эти слова стоят одно за другим

Пример задания:

В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1) принтеры & сканеры & продажа

2) принтеры & продажа

3) принтеры | продажа

4) принтеры | сканеры | продажа

Решение (вариант 1, рассуждение с использованием свойств операций «И» и «ИЛИ»):

  1. меньше всего результатов выдаст запрос с наибольшими ограничениями – первый (нужны одновременно принтеры, сканеры и продажа)

  2. на втором месте – второй запрос (одновременно принтеры и сканеры)

  3. далее – третий запрос (принтеры или сканеры)

  4. четвертый запрос дает наибольшее количество результатов (принтеры или сканеры или продажа)

  5. таким образом, верный ответ – 1234 .

Возможные проблемы:

  • нужно внимательно читать условие, так как в некоторых задачах требуется перечислить запросы в порядке убывания количества результатов, а в некоторых – в порядке возрастания

  • можно ошибиться в непривычных значках: «И» = &, «ИЛИ» = | (эти обозначения привычны для тех, кто программирует на языке Си)

  • можно перепутать значение операций «И» и «ИЛИ», а также порядок выполнения цепочки операций (сначала – «И», потом – «ИЛИ»)

  • для сложных запросов не всегда удастся так просто расположить запросы по возрастанию (или убыванию) ограничений

Решение (вариант 2, через таблицы истинности):

  1. каждое из условий можно рассматривать как сложное высказывание

  2. обозначим отдельные простые высказывания буквами:

A: принтеры (на странице есть слово «принтеры»)

B: сканеры

C: продажа

  1. запишем все выражения-запросы через логические операции

hello_html_m4a4bb6e8.gif, hello_html_7b6ee3d5.gif, hello_html_m55b2a3b9.gif, hello_html_45540a53.gif

  1. здесь присутствуют три переменные, А, B и C (хотя второе и третье выражения от С не зависят!), поэтому для составления таблицы истинности нужно рассмотреть 8 = 232333 всевозможных комбинаций этих логических значений

  2. выражение hello_html_m4a4bb6e8.gif равно 1 (истинно) только при hello_html_13744aca.gif, в остальных случаях – равно 0 (ложно)

  3. выражение hello_html_7b6ee3d5.gif равно 1 только при hello_html_me79f91d.gif, в остальных случаях – равно 0

  4. выражение hello_html_m55b2a3b9.gif равно 0 только при hello_html_m74643c49.gif, в остальных случаях – равно 1

  5. выражение hello_html_45540a53.gif равно 0 только при hello_html_m42e06ca3.gif, в остальных случаях –  1

  6. запишем результаты пп. 5-8 в виде таблицы истинности

    A

    B

    C

    hello_html_m4a4bb6e8.gif

    hello_html_7b6ee3d5.gif

    hello_html_m55b2a3b9.gif

    hello_html_45540a53.gif

    0

    0

    0

    0

    0

    0

    0

    0

    0

    1

    0

    0

    0

    1

    0

    1

    0

    0

    0

    1

    1

    0

    1

    1

    0

    0

    1

    1

    1

    0

    0

    0

    0

    1

    1

    1

    0

    1

    0

    0

    1

    1

    1

    1

    0

    0

    1

    1

    1

    1

    1

    1

    1

    1

    1

    1

  7. по таблице видим, что наименьшая «область действия» у первого выражения, поисковый сервер выдаст наименьшее число запросов

  8. область, где hello_html_f7c19fa.gif, включает в себя1 всю область, где hello_html_6a039dba.gif и еще один вариант, поэтому «поисковик» выдаст больше запросов, чем для первого случая

  9. аналогично делаем вывод, что область hello_html_m51725fdb.gif включает всю область hello_html_336a7e04.gif и расширяет ее, а область hello_html_65344ad3.gif – это расширение области hello_html_m51725fdb.gif

  10. таким образом, верный ответ – 1234 .

Возможные проблемы:

  • решение достаточно громоздко, хотя позволяет с помощью простых операций решить задачу, не рискуя ошибиться при вычислениях «в уме» в сложных случаях

  • если переменных более трех, таблица получается большая, хотя заполняется несложно

Решение (вариант 3, через диаграммы):

  1. запишем все ответы через логические операции

hello_html_m4a4bb6e8.gif, hello_html_7b6ee3d5.gif, hello_html_m55b2a3b9.gif, hello_html_45540a53.gif

  1. покажем области, определяемые этими выражениями, на диаграмме с тремя областями

hello_html_6b9198f3.gif

  1. сравнивая диаграммы, находим последовательность областей в порядке увеличения: (1,2,3,4), причем каждая следующая область в этом ряду охватывает целиком предыдущую (как и предполагается в задании, это важно!)

  2. таким образом, верный ответ – 1234 .

Возможные проблемы:

  • получается громоздкий рисунок, если используется более трех переменных (более трех кругов)

Еще пример задания:

Некоторый сегмент сети Интернет состоит из 1000 сайтов. Поисковый сервер в автоматическом режиме составил таблицу ключевых слов для сайтов этого сегмента. Вот ее фрагмент:

Ключевое слово

Количество сайтов, для которых данное слово является ключевым

сканер

200

принтер

250

монитор

450

Сколько сайтов будет найдено по запросу

(принтер | сканер) & монитор

если по запросу принтер | сканер было найдено 450 сайтов, по запросу принтер & монитор – 40, а по запросу сканер & монитор – 50.

Решение (вариант 1, рассуждение с использованием свойств операций «И» и «ИЛИ»):

  1. обратим внимание на такой факт2 (справа указано количество сайтов по каждому запросу)

сканер 200

принтер 250

принтер | сканер 450

поскольку последнее число равно сумме двух предыдущих, можно сразу же придти к выводу, что в этом сегменте сети нет сайтов, на которых ключевыми словами являются одновременно принтер и сканер:

принтер & сканер 0

  1. с этого момента все просто: для того, чтобы определить, сколько сайтов удовлетворяют заданному условию

достаточно просто сложить числа, соответствующие запросам принтер & монитор и
сканер & монитор

  1. таким образом, правильный ответ: 40 + 50 = 90.

Возможные проблемы:

  • обратите внимание, что в условии была лишняя информация: мы нигде не использовали количество сайтов в данном сегменте Интернета (1000) и количество сайтов с ключевым словом монитор (450)

  • не всегда удается «раскрутить» задачу в уме, здесь это несложно благодаря «удачному» условию

Решение (вариант 2, таблицы истинности):

  1. для сокращения записи обозначим через C, П, М высказывания «ключевое слово на сайте – сканер» (соответственно принтер, монитор)

  2. если рассматривать задачу с точки зрения математической логики, здесь есть три переменных, с помощью которых можно составить всего 8 запросов, выдающих различные результаты


  3. С

    П

    М

    ?

    0

    0

    0

    ?

    0

    0

    1

    ?

    0

    1

    0

    ?

    0

    1

    1

    ?

    1

    0

    0

    ?

    1

    0

    1

    ?

    1

    1

    0

    ?

    1

    1

    1

    всего

    200

    250

    450

    составим таблицу истинности, в которую добавим левый столбец и последнюю строку, где будем записывать количество сайтов, удовлетворяющих условиям строки и столбца (см. рисунок справа); например, первая строка соответствует сайтам, на которых нет ни одного из заданных ключевых слов; такая схема непривычна, но она существенно упрощает дело
  4. сумма в последней строчке получается в результате сложения всех чисел из тех строк первого столбца, где в данном столбце стоят единицы. Например, сумма в столбце С – складывается из четырех чисел в последних четырех строчках первого столбца. Мы пока не знаем, сколько результатов возвращает каждый из восьми запросов отдельно, поэтому в первом столбце стоят знаки вопроса

  5. добавим в таблицу истинности остальные запросы, которые есть в условии, в том числе и тот, который нас интересует:

П | С = принтер | сканер 450

П & М = принтер & монитор 40

C & М = сканер & монитор 50

(П | C) & М = (принтер | сканер) & монитор ?


С

П

М

П | С

П | М

C | М

(П | C) & М

?

0

0

0

0




?

0

0

1

0




?

0

1

0

1




?

0

1

1

1




?

1

0

0

1




?

1

0

1

1




0

1

1

0

1




0

1

1

1

1




всего

200

250

450

450




  1. проанализируем столбец П | С в этой таблице: его сумма (450) складывается из суммы столбцов С (200) и П (250) – выделены ярким зеленым цветом – плюс последние две строчки (голубой фон), то есть, 450 = 200 + 250 + X, откуда сразу получаем, что X = 0, то есть, последним двум строчкам (запросам) не удовлетворяет ни одного сайта

  2. теперь составим таблицы истинности для остальных запросов, отбросив заведомо «нулевые» варианты:


С

П

М

П | С

П | М

C | М

(П | C) & М

?

0

0

0

0

0

0

0

?

0

0

1

0

0

0

0

?

0

1

0

1

0

0

0

40

0

1

1

1

1

0

1

?

1

0

0

1

0

0

0

50

1

0

1

1

0

1

1

всего

200

250

450

450

40

50

90

из оставшихся шести строк таблицы запросы П | М и С | М затрагивают только по одной строчке, поэтому сразу можем вписать соответствующие числа в первый столбец; в последнем запросе, который нас интересует, присутствуют именно эти две строки, то есть, для получения нужно сложить 40 и 50

  1. таким образом, правильный ответ: 40 + 50 = 90.

Рhello_html_m7b193043.gifешение (вариант 3, через диаграммы):

  1. для сокращения записи обозначим через C, П, М высказывания «ключевое слово на сайте – сканер» (соответственно принтер, монитор) и нарисуем эти области виде диаграммы (кругов Эйлера); интересующему нас запросу (П | C) & M соответствует объединение областей 4, 5 и 6 («зеленая зона» на рисунке)

  2. количество сайтов, удовлетворяющих запросу в области i, будем обозначать через Ni

  3. составляем уравнения, которые определяют запросы, заданные в условии:

сканер N1 + N2 + N4 + N5 = 200

принтер N2 + N3 + N5 + N6 = 250

принтер | сканер N1 + N2 + N4 + N5 + N3 + N6 = 450

из первого и третьего уравнений сразу следует

200 + N3 + N6 = 450 N3 + N6 = 250

далее из второго уравнения

N2 + N5 + 250 = 250 N2 + N5 = 0

поскольку количество сайтов не может быть отрицательной величиной, N2 = N5 = 0

  1. посмотрим, что еще мы знаем (учитываем, что N5 = 0):

принтер & монитор N5 + N6 = 40 N6 = 40

сканер & монитор N4 + N5 = 50 N4 = 50

  1. окончательный результат:

(принтер | сканер) & монитор N4+ N5+ N6= N4+ N6= 40 + 50 = 90

  1. таким образом, правильный ответ 90.

Возможные проблемы:

  • внимательнее с индексами переменными, очень легко по невнимательности написать N5 вместо N6 и получить совершенно другой результат

  • этот метод ярко демонстрирует, что в общем случае мы получаем систему уравнения с семью неизвестными (или даже с восемью, если задействована еще и область вне всех кругов); решать такую систему вручную достаточно сложно, поэтому на экзамене всегда будет какое-то условие, сильно упрощающее дело, ищите его

Задачи для тренировки3:

Во всех задачах для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – символ &.

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу.

А) физкультура

Б) физкультура & подтягивания & отжимания

В) физкультура & подтягивания

Г) физкультура | фитнесс

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу.

А ) волейбол | баскетбол | подача

Б) волейбол | баскетбол | подача | блок

В) волейбол | баскетбол

Г) волейбол & баскетбол & подача

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу.

A ) чемпионы | (бег & плавание)

Б ) чемпионы & плавание

В ) чемпионы | бег | плавание

Г) чемпионы & Европа & бег & плавание

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу.

А ) музыка | классика | Моцарт | серенада

Б) музыка | классика

В) музыка | классика | Моцарт

Г) музыка & классика & Моцарт

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу.

А) реферат | математика | Гаусс

Б) реферат | математика | Гаусс | метод

В) реферат | математика

Г) реферат & математика & Гаусс

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Ответ запишите в виде последовательности соответствующих букв.

a) Америка | путешественники | Колумб

b) Америка | путешественники | Колумб | открытие

c) Америка | Колумб

d) Америка & путешественники & Колумб

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке убывания количества страниц, которые найдет поисковый сервер по каждому запросу. Ответ запишите в виде последовательности соответствующих букв.

а ) Информатика & уроки & Excel

b ) Информатика | уроки | Excel | диаграмма

с) Информатика | уроки | Excel

d) Информатика | Excel

  1. В таблице приведены запросы к поисковому серверу, условно обозначенные буквами от А до Г. Расположите запросы в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Ответ запишите в виде последовательности соответствующих букв.

А ) Гренландия & Климат & Флора & Фауна

Б ) Гренландия & Флора

В ) (Гренландия & Флора) | Фауна

Г) Гренландия & Флора & Фауна

  1. В таблице приведены запросы к поисковому серверу. Расположите обозначения запросов в порядке убывания количества страниц, которые найдет поисковый сервер по каждому запросу.

а) спорт | футбол

b) спорт | футбол | Петербург | Зенит

с) спорт | футбол | Петербург

d) спорт & футбол & Петербург & Зенит

  1. Каким условием нужно воспользоваться для поиска в сети Интернет информации о цветах, растущих на острове Тайвань или Хонсю

1) цветы & (Тайвань | Хонсю)

2) цветы & Тайвань & Хонсю

3) цветы | Тайвань | Хонсю

4) цветы & (остров | Тайвань | Хонсю)

  1. Некоторый сегмент сети Интернет состоит из 1000 сайтов. Поисковый сервер в автоматическом режиме составил таблицу ключевых слов для сайтов этого сегмента. Вот ее фрагмент:

Ключевое слово

Количество сайтов, для которых данное слово является ключевым

сомики

250

меченосцы

200

гуппи

500

Сколько сайтов будет найдено по запросу

сомики | меченосцы | гуппи

если по запросу сомики & гуппи было найдено 0 сайтов, по запросу
сомики & меченосцы – 20, а по запросу меченосцы & гуппи – 10.

  1. Некоторый сегмент сети Интернет состоит из 1000 сайтов. Поисковый сервер в автоматическом режиме составил таблицу ключевых слов для сайтов этого сегмента. Вот ее фрагмент:

Ключевое слово

Количество сайтов, для которых данное слово является ключевым

сомики

250

меченосцы

200

гуппи

500

Сколько сайтов будет найдено по запросу

(сомики & меченосцы) | гуппи

если по запросу сомики | гуппи было найдено 750 сайтов, по запросу сомики & меченосцы – 100, а по запросу меченосцы & гуппи – 0.

  1. Некоторый сегмент сети Интернет состоит из 1000 сайтов. Поисковый сервер в автоматическом режиме составил таблицу ключевых слов для сайтов этого сегмента. Вот ее фрагмент:

Ключевое слово

Количество сайтов, для которых данное слово является ключевым

сканер

200

принтер

250

монитор

450

Сколько сайтов будет найдено по запросу

принтер | сканер | монитор

если по запросу принтер | сканер было найдено 450 сайтов, по запросу принтер & монитор – 40, а по запросу сканер & монитор – 50.

  1. В таблице приведены запросы к поисковому серверу, условно обозначенные буквами от А до Г. Расположите запросы в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Ответ запишите в виде последовательности соответствующих букв.

А ) (огурцы & помидоры) & (прополка | поливка)

Б ) огурцы | помидоры

В ) огурцы

Г) огурцы & помидоры

  1. В таблице приведены запросы к поисковому серверу, условно обозначенные буквами от А до Г. Расположите запросы в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Ответ запишите в виде последовательности соответствующих букв.

А ) экзамен | тестирование

Б ) (физика | химия) & (экзамен | тестирование)

В ) физика & химия & экзамен & тестирование

Г) физика | химия | экзамен | тестирование

  1. В таблице приведены запросы к поисковому серверу, условно обозначенные буквами от А до Г. Расположите запросы в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Ответ запишите в виде последовательности соответствующих букв.

А ) сомики | меченосцы | содержание

Б ) сомики & содержание

В ) сомики & меченосцы & разведение & содержание

Г) (сомики | меченосцы) & содержание

  1. В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1 ) канарейки | щеглы | содержание

2 ) канарейки & содержание

3 ) канарейки & щеглы & содержание

4) разведение & содержание & канарейки & щеглы

  1. В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке убывания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1 ) барокко | (классицизм & ампир)

2 ) барокко | классицизм

3 ) барокко | ампир | классицизм

4) классицизм & ампир

  1. В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке убывания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1 ) барокко | (классицизм & ампир)

2 ) барокко | классицизм

3 ) (классицизм & ампир) | (барокко & модерн)

4) барокко | ампир | классицизм

  1. В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке убывания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1 ) зайцы & кролики

2 ) зайцы & (кролики | лисицы)

3 ) зайцы & кролики & лисицы

4) кролики | лисицы

  1. В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1 ) кролики | лисицы

2 ) (зайцы & кролики) | (лисицы & волки)

3 ) зайцы & кролики & лисицы & волки

4) зайцы & кролики

  1. В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке возрастания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1 ) шкафы | столы | стулья

2 ) шкафы | (стулья & шкафы)

3 ) шкафы & столы

4) шкафы | стулья

  1. В таблице приведены запросы к поисковому серверу. Расположите номера запросов в порядке убывания количества страниц, которые найдет поисковый сервер по каждому запросу. Для обозначения логической операции «ИЛИ» в запросе используется символ |, а для логической операции «И» – &.

1 ) яблоки | сливы

2 ) сливы | (сливы & груши)

3 ) яблоки | груши | сливы

4) (яблоки | груши) & сливы


1 Каждая следующая область в полученном решении должна полностью включать предыдущую. Если это не так, тогда или вы ошиблись при построении таблицы истинности, или (не дай Бог!) в условии есть ошибка.

2 Как мы увидим далее, при использовании других методов решения, это условие принципиально облегчает решение данной задачи. Во всех известных автору вариантах подобных задач такое упрощающее условие было.

3 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

11 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Фитнес-тренер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B2.doc

isa.muschanov.70@yandex.ru



B2 (базовый уровень, время – 1 мин)

Тема: Блок-схемы алгоритмов. Переменные, присваивание значений. Ветвления. Организация циклов с помощью блока «ветвление».

Что нужно знать:

  • переменная – это величина, которая имеет имя, тип и значение; переменная может изменяться во время выполнения программы

  • оператор присваивания (в Паскале обозначается сочетанием символов «:=») служит для записи нового значения в переменную (для изменения ее значения)

  • если в переменную записывают новое значение, старое стирается

  • знаки +, -, *, / используются для обозначения операций сложения, вычитания, умножения и деления

  • запись вида a := a + 2; – это не уравнение, а команда «прочитать текущее значение переменной a, добавить к нему 2 и записать результат обратно в переменную a»;

  • для наглядной записи небольших алгоритмов используют блок-схемы; они состоят из блоков разного назначения и соединительных линий со стрелками, которые показывают порядок выполнения блоков

  • в задачах ЕГЭ встречаются два блока: процесс (выполнение некоторых действий) и ветвление (условие, в зависимости от которого выполнение алгоритма продолжается по одной или другой «ветке» )

hello_html_26dfe5e4.gifhello_html_11e5f5bd.gif

  • с помощью ветвления можно организовать цикл (многократное выполнение одинаковых действий), в этом случае в блок-схеме будет соединительная линия, идущая «в обратном направлении» (петля, замкнутый контур)

  • цикл на рисунке (выделен зеленым фоном) закончится только тогда, когда выполнится условие a = 256

hello_html_m38fd611b.gif




Пример задания:

Запишите значение переменной b после выполнения фрагмента алгоритма:

hello_html_75be5628.gif

Решение (вариант 1, ручная прокрутка):

  1. по схеме видим, что алгоритм содержит цикл (есть петля, контур)

  2. ручную прокрутку удобнее всего выполнять в виде таблицы, в первом столбце будем записывать выполняемые команды, во втором и третьем – изменение значений переменных
    a и b

  3. после выполнения первого блока получаем


a

b

a:=1;

1

?

b:=1;


1

знак вопроса означает, что после выполнения первого оператора значение b не определено

  1. затем выполняется проверка условия; поскольку а не равно 256, ответ на вопрос «a = 256?» будет «нет»:


    a

    b

    a:=1;

    1

    ?

    b:=1;


    1

    a = 256?

    нет

  2. далее алгоритм уходит на выполнение тела цикла; здесь сначала меняется переменная a, а потом – b, причем нужно помнить, что для вычисления b используется новое значение a, равное 2, поэтому новое значение b равно 1 + 2 = 3:


    a

    b

    a:=1;

    1

    ?

    b:=1;


    1

    a = 256?

    нет

    a:=a*2;

    2


    b:=b+a;


    3

  3. после этого по стрелке переходим на проверку условия; поскольку a = 2, ответ на вопрос «a = 256?» снова будет «нет», и выполняется очередной шаг цикла:


    a

    b

    a:=1;

    1

    ?

    b:=1;


    1

    a = 256?

    нет

    a:=a*2;

    2


    b:=b+a;


    3

    a = 256?

    нет

    a:=a*2;

    4


    b:=b+a;


    7

  4. аналогично можно выполнить вручную все шаги цикла, результаты последнего из них выглядят так:


a

b

a:=a*2;

256


b:=b+a;


511

a = 256?

да

как только значение a стало равно 256, цикл завершает работу

  1. таким образом, верный ответ – 511 .

Возможные проблемы:

  • таблица получается длинной, много вычислений, можно запутаться

  • нужно не забыть, что при выполнении двух операторов в теле цикла к значению b добавляется уже новое значение a, полученное в предыдущей строке

  • не перепутайте переменную, значение которой нужно определить (можно по ошибке вписать в ответ полученное значение a)

Решение (вариант 2, анализ алгоритма):

  1. «прокрутив» начало алгоритма, можно заметить, что последовательные значения a – это степени двойки
    a = 1, 2, 4, 8, … 256

  2. поскольку оператор b:=b+a означает «взять текущее значение b, прибавить к нему текущее значение a и результат записать обратно в b», изменение b сводится к тому, что эти степени двойки складываются:
    b = 1 + 2 + 4 + 8 + … + 256

  3. теперь можно, конечно, сложить эти числа вручную (их всего 9), но можно заметить (или вспомнить), что сумма всех последовательных степеней двойки, начиная с 1, на единицу меньше, чем следующая степень двойки1 (первая, не вошедшая в сумму, здесь – 512); это легко проверяется по начальной части таблицы

  4. таким образом, верный ответ 512 – 1 = 511 .

Возможные проблемы:

  • для такого анализа требуется некоторое напряжение ума, здесь не обойтись формальным выполнением каких-то заученных действий

  • не всегда удается найти короткое решение, «свернув» алгоритм таким образом (в этом случае поможет ручная прокрутка)

Еще пример задания:

Запишите значение переменной s после выполнения фрагмента алгоритма:

hello_html_m153ec033.gif

Решение (анализ алгоритма):

  1. «прокрутив» начало алгоритма, можно заметить, что в переменной s суммируются все четные числа от 0 до 100 включительно:
    s = 0 + 2 + 4 + ... + 98 + 100

  2. теперь можно подсчитать эту сумму вручную, но можно легко ошибиться в расчетах

  3. попробуем сгруппировать числа по парам2:
    0 и 100, 2 и 98, 4 и 96, ..., 48 и 52

без пары остается только число 50

  1. заметим, что сумма двух чисел в каждой паре равна 100

  2. очевидно, что таких пар – 25 штук (первое число изменяется от 0 до 48 с шагом 2, это все равно, что от 0 до 24 с шагом 1)

  3. теперь остается перемножить 24 на 100 и добавить 50

  1. таким образом, верный ответ 10025+50=2550.

  2. заметим, что можно было составить пары иначе:

2 и 100, 4 и 98, 6 и 96, ..., 50 и 52

сумма чисел в каждой паре – 102, всего 25 пар, поэтому сумма равна 10225=2550.

Возможные проблемы:

  • если использовать ручную прокрутку при большом количестве шагов цикла, велик шанс ошибиться в арифметике; в этом случае нужно постараться найти способ «свернуть» вычисления, свести их к формуле или как-то сгруппировать слагаемые

Задачи для тренировки3:

  1. Определите значение переменной m после выполнения фрагмента алгоритма.

hello_html_m43a4d04f.gif

  1. Определите значение переменной a после выполнения фрагмента алгоритма.

hello_html_m80b83a5.gif

  1. Определите значение переменной x после выполнения фрагмента алгоритма.

hello_html_m55cd8c01.gif

  1. Определите значения переменных x и y после выполнения фрагмента алгоритма.

hello_html_m6c8fc869.gif


В ответ запишите номер правильного варианта:

1) x=15, y=16 2) x=20, y=13 3) x=16, y=15 4) x=13, y=20

  1. Определите значение переменной a после выполнения фрагмента алгоритма.

hello_html_3969da34.gif

  1. Определите значение переменной n после выполнения фрагмента алгоритма.

hello_html_m3a846814.gif

  1. Определите значения переменных x и y после выполнения фрагмента алгоритма.

hello_html_c5a6ea9.gif

В ответ запишите номер правильного варианта:

1) x=25, y=25 2) x=20, y=30 3) x=30, y=20 4) x=30, y=30

  1. Определите значение переменной x после выполнения фрагмента алгоритма.

hello_html_2706bf75.gif

  1. Определите значения переменных x и y после выполнения фрагмента алгоритма.

hello_html_164fe4dd.gif

В ответ запишите номер правильного варианта:

1) x=5, y=15 2) x=3, y=12 3) x=10, y=5 4) x=9, y=15













  1. Определите значение переменной b после выполнения фрагмента алгоритма.

hello_html_m76c6e8dd.gif

  1. Определите значение переменной b после выполнения фрагмента алгоритма.

hello_html_m10b8c110.gif

  1. Определите значение переменной k после выполнения фрагмента алгоритма.

hello_html_b2722d1.gif

  1. Определите значение переменной s после выполнения фрагмента алгоритма.

hello_html_mdf44677.gif

  1. Определите значение переменной b после выполнения фрагмента алгоритма.

hello_html_5b91658e.gif

  1. Запишите значение переменной s после выполнения фрагмента алгоритма:

hello_html_34a96087.gif



  1. Определите значение переменной b после выполнения фрагмента алгоритма:

hello_html_7e88b383.gif

  1. Определите значение переменной b после выполнения фрагмента алгоритма:

hello_html_43e871e1.gif

  1. Определите значение переменной b после выполнения фрагмента алгоритма.

hello_html_31e021c6.gif

  1. Определите значение переменной b после выполнения фрагмента алгоритма.

hello_html_m1b57ff6b.gif


  1. Определите значение переменной b после выполнения фрагмента алгоритма.

hello_html_126fc900.gif

  1. Определите значение переменной b после выполнения фрагмента алгоритма.

hello_html_5d70c2a6.gif


1 Попробуйте доказать это, используя знания по теме «Двоичная система счисления».

2 Согласно легенде, такой прием использовал, будучи школьником, великий немецкий математик К.Ф. Гаусс. Составители ЕГЭ считают, что вы так же талантливы.

3 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

12 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

HR-менеджер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B3.doc

isa.muschanov.70@yandex.ru



B3 (повышенный уровень, время – 5 мин)

Тема: Кодирование чисел. Системы счисления.

Что нужно знать:

  • принципы кодирования чисел в позиционных системах счисления

  • чhello_html_m4a09a0ba.gifтобы перевести число, скажем, 12345N, из системы счисления с основанием hello_html_m18068b.gif в десятичную систему, нужно умножить значение каждой цифры на hello_html_m18068b.gif в степени, равной ее разряду:

4 3 2 1 0 разряды

1 2 3 4 5N = 1·N4 + 2·N3 + 3·N2 + 4·N1 + 5·N0

  • последняя цифра записи числа в системе счисления с основанием hello_html_m18068b.gif – это остаток от деления этого числа на hello_html_m18068b.gif

  • две последние цифры – это остаток от деления на hello_html_dc434d6.gif, и т.д.

Пример задания:

Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 25, запись которых в системе счисления с основанием четыре оканчивается на 11?

Общий подход:

  • вспомним алгоритм перевода числа из десятичной системы в систему с основанием hello_html_m18068b.gif (см. презентацию), из него следует, что младшая цифра результата – это остаток от деления исходного числа на hello_html_m18068b.gif, а две младших цифры – это остаток от деления на hello_html_dc434d6.gif и т.д.

  • в данном случае hello_html_cd69cfd.gif, остаток от деления числа на hello_html_m14658ea0.gif должен быть равен 114 = 5

  • потому задача сводится к тому, чтобы определить все числа, которые меньше или равны 25 и дают остаток 5 при делении на 16

Решение (вариант 1, через десятичную систему):

  1. общий вид чисел, которые дают остаток 5 при делении на 16:

hello_html_m4f025525.gif

где hello_html_m5faf1d98.gif – целое неотрицательное число (0, 1, 2, …)

  1. среди всех таких чисел нужно выбрать те, что меньше или равны 25 («не превосходят 25»); их всего два: 5 (при hello_html_mde2f4f7.gif) и 21 (при hello_html_m5a4b0a5e.gif)

  2. таким образом, верный ответ – 5, 21 .

Возможные ловушки и проблемы:

  • выражение «не превосходящие hello_html_7ba38183.gif» означает «меньшие или равные hello_html_7ba38183.gif», а не строго меньшие hello_html_7ba38183.gif

  • остаток, состоящий из нескольких цифр (здесь – 114), нужно не забыть перевести в десятичную систему

  • найденные числа нужно записать именно в порядке возрастания, как требуется

Решение (вариант 2, через четверичную систему, предложен О.А. Тузовой):

  1. переведем 25 в четверичную систему счисления: 25 = 1214, все интересующие нас числа не больше этого значения

  2. из этих чисел выделим только те, которые заканчиваются на 11, таких чисел всего два:
    это 114 = 5 и 1114 = 21

  3. таким образом, верный ответ – 5, 21 .



Возможные ловушки и проблемы:

  • есть риск случайно «забыть» какое-то число или найти «лишнее» (в данном случае – большее 25)

  • можно сделать ошибки при переводе чисел из четверичной системы в десятичную или вообще «забыть» перевести

Еще пример задания:

Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 23 оканчивается на 2.

Общий подход:

  • здесь обратная задача – неизвестно основание системы счисления, мы обозначим его через hello_html_m18068b.gif

  • поскольку последняя цифра числа – 2, основание должно быть больше 2, то есть hello_html_m2e1bbb14.gif

  • вспомним алгоритм перевода числа из десятичной системы в систему с основанием hello_html_m18068b.gif (см. презентацию), из него следует, что младшая цифра результата – это остаток от деления исходного числа на hello_html_m18068b.gif

Решение:

  1. итак, нужно найти все целые числа hello_html_79b096bd.gif, такие что остаток от деления 23 на hello_html_m18068b.gif равен 2, или (что то же самое)

hello_html_m4a520c22.gif (*)

где hello_html_m5faf1d98.gif – целое неотрицательное число (0, 1, 2, …);

  1. сложность в том, что и hello_html_m5faf1d98.gif, и hello_html_m18068b.gif неизвестны, однако здесь нужно «играть» на том, что это натуральные числа

  2. из формулы (*) получаем hello_html_m7d5fabb5.gif, так что задача сводится к тому, чтобы найти все делители числа 21, которые больше 2

  3. в этой задаче есть только три таких делителя: hello_html_bc37cd2.gif и hello_html_2d1c59f6.gif

  4. таким образом, верный ответ – 3, 7, 21 .

Возможные ловушки и проблемы:

  • нужно учесть, что основание системы счисления должно быть больше любой цифры числа, поэтому делитель hello_html_m4186be87.gif не подходит (должно быть hello_html_m2e1bbb14.gif)

  • числа нужно записывать в ответе в порядке возрастания, как требуется по условию

Еще пример задания:

Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 31 оканчивается на 11.

Общий подход:

  • неизвестно основание системы счисления, мы обозначим его через hello_html_m18068b.gif

  • пока будем считать, что запись числа 31 в системе с основанием hello_html_m18068b.gif состоит из трех цифр, причем две младшие (11) нам даны, а одну (обозначим ее через hello_html_m5faf1d98.gif) нужно найти:

2 1 0 разряды

31 = k 1 1N = k·N2 + N1 + N0 = k·N2 + N + 1

  • можно показать, что при большем количестве разрядов эта формула также верна, то есть, число 31 можно представить как hello_html_m7ba50e7b.gif при некотором целом hello_html_m5faf1d98.gif; например, для числа с пятью разрядами получаем:

4 3 2 1 0 разряды

31 = k4 k3 k2 1 1N = k4·N4 + k3·N3 + k2·N2 + N1 + N0

= k·N2 + N + 1

для hello_html_m37ed9195.gif (из первых трех слагаемых вынесли общий множитель hello_html_dc434d6.gif)

Решение:

  1. итак, нужно найти все целые числа hello_html_md714d61.gif, такие что

hello_html_m7ba50e7b.gif (**)

где hello_html_m5faf1d98.gif – целое неотрицательное число (0, 1, 2, …);

  1. сложность в том, что и hello_html_m5faf1d98.gif, и hello_html_m18068b.gif неизвестны, однако здесь нужно «играть» на том, что это натуральные числа

  2. из формулы (**) получаем hello_html_4626059a.gif, так что задача сводится к тому, чтобы найти все делители hello_html_m18068b.gif числа 30 и отобрать только те из них, для которых уравнение (**) разрешимо при целом hello_html_m5faf1d98.gif, то есть, hello_html_m59699064.gif – целое число

  3. выпишем все делители числа 30, большие или равные 2: 2, 3, 5, 6, 10, 15, 30

  4. из всех этих делителей только для 2, 3, 5 и 30 значение hello_html_m59699064.gif – целое число (оно равно соответственно 7, 3, 1 и 0)

  5. таким образом, верный ответ – 2, 3, 5, 30.

Еще пример задания:

Укажите, сколько всего раз встречается цифра 2 в записи чисел 10, 11, 12, …, 17 в системе счисления с основанием 5.

Решение (вариант 1):

  1. запишем первое и последнее число в заданном диапазоне в системе счисления с основанием 5:

10 = 205, 17 = 325 .

  1. заметим, что оба они содержат цифру 2, так что, 2 цифры мы уже нашли

  2. между 205 и 325 есть еще числа

215, 225, 235, 245, 305, 315.

  1. в них 5 цифр 2 (в числе 225 – сразу две двойки), поэтому всего цифра 2 встречается 7 раз

  2. таким образом, верный ответ – 7.

Возможные ловушки и проблемы:

  • нужно не забыть, что в системе счисления с основанием 5 старшая цифра – 4, то есть, вслед за 245 следует 305

  • помните, что нужно определить не количество чисел, в которых есть двойка, а количество самих двоек

  • можно не обратить внимание на то, что в числе 225 цифра 2 встречается 2 раза

Решение (вариант 2):

  1. переведем все указанные числа в систему счисления с основанием 5:

10 = 205, 11 = 215, 12 = 225, 13 = 235, 14 = 245, 15 = 305, 16 = 315, 17 = 325 .

  1. считаем цифры 2 – получается 7 штук

  2. таким образом, верный ответ – 7 .

Еще пример задания:

Укажите наименьшее основание системы счисления, в которой запись числа 30 трехзначна.

Решение:

  1. обозначим через hello_html_m18068b.gif неизвестное основание системы счисления, тогда запись числа 30 в этой системе имеет вид

hello_html_53c69513.gif

  1. вспомним алгоритм перевода числа из системы счисления с основанием hello_html_m18068b.gifв десятичную систему: расставляем сверху номера разрядов и умножаем каждую цифру на основание в степени, равной разряду:

hello_html_m7532fb95.gif

  1. поскольку запись трехзначная, hello_html_m6642661e.gif, поэтому hello_html_m5de4b5f3.gif

  2. с другой стороны, четвертой цифры нет, то есть, в третьем разряде – ноль, поэтому hello_html_m64fcd318.gif

  3. объединяя последние два условия, получаем, что искомое основание hello_html_m18068b.gif удовлетворяет двойному неравенству

hello_html_1295d281.gif

  1. учитывая, что hello_html_m18068b.gif – целое число, методом подбора находим целые решения этого неравенства; их два – 4 и 5:

hello_html_1f2c0ea4.gif

hello_html_m766a634e.gif

  1. минимальное из этих значений – 4

  2. таким образом, верный ответ – 4 .

Решение (без подбора):

  1. выполним п.1-4 так же, как и в предыдущем варианте решения

  2. найдем первое целое число, куб которого больше 30; это 4, так как

hello_html_m6559bbc6.gif

  1. проверяем второе неравенство: hello_html_m5a1ed65c.gif, поэтому в системе счисления с основанием 4 запись числа 30 трехзначна

  2. таким образом, верный ответ – 4 .

Еще пример задания:

Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 30, запись которых в системе счисления с основанием 5 начинается на 3?

Решение:

  1. нас интересуют числа от 1 до 29

  2. сначала определим, сколько цифр может быть в этих числах, записанных в системе счисления с основанием 5

  3. поскольку hello_html_5be123cf.gif, в интересующих нас числах может быть от 1 до 3 цифр

  4. рассмотрим трехзначные числа, начинающиеся на 3 в системе с основанием 5:

hello_html_46e4b2a7.gif

все они заведомо не меньше hello_html_342fdc3f.gif, поэтому в наш диапазон не попадают;

  1. таким образом, остается рассмотреть только однозначные и двухзначные числа

  2. есть всего одно однозначное число, начинающееся на 3, это 3

  3. общий вид всех двузначных чисел, начинающихся на 3 в системе с основанием 5:

hello_html_m2cedd6fd.gif

где hello_html_m5faf1d98.gif – целое число из множества {0, 1, 2,3,4} (поскольку система счисления имеет основание 5 и цифр, больших 4, в записи числа быть не может)

  1. используя эту формулу, находим интересующие нас двузначные числа – 15, 16, 17, 18 и 19

  2. таким образом, верный ответ – 3, 15, 16, 17, 18, 19 .


Задачи для тренировки1:

  1. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 22 оканчивается на 4.

  2. В системе счисления с некоторым основанием число 12 записывается в виде 110. Укажите это основание.

  3. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 39 оканчивается на 3.

  4. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 29 оканчивается на 5.

  5. В системе счисления с некоторым основанием десятичное число 129 записывается как 1004. Укажите это основание.

  6. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 40 оканчивается на 4.

  7. В системе счисления с некоторым основанием число десятичное 25 записывается как 100. Найдите это основание.

  8. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 27 оканчивается на 3.

  9. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 26, запись которых в троичной системе счисления оканчивается на 22?

  10. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 30, запись которых в четверичной системе счисления оканчивается на 31?

  11. Укажите через запятую в порядке возрастания все десятичные натуральные числа, не превосходящие 17, запись которых в троичной системе счисления оканчивается на две одинаковые цифры?

  12. Укажите, сколько всего раз встречается цифра 3 в записи чисел 19, 20, 21, …, 33 в системе счисления с основанием 6.

  13. Укажите, сколько всего раз встречается цифра 1 в записи чисел 12, 13, 14, …, 31 в системе счисления с основанием 5.

  14. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 23 оканчивается на 1.

  15. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 63 оканчивается на 23.

  16. Десятичное число, переведенное в восьмеричную и в девятеричную систему, в обоих случаях заканчивается на цифру 0. Какое минимальное натуральное число удовлетворяет этому условию?

  17. В системе счисления с некоторым основанием десятичное число 49 записывается в виде 100. Укажите это основание.

  18. Укажите наименьшее основание системы счисления, в которой запись числа 70 трехзначна.

  19. Укажите наименьшее основание системы счисления, в которой запись числа 50 двузначна.

  20. Сколько значащих цифр в записи десятичного числа 357 в системе счисления с основанием 7?

  21. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 25, запись которых в системе счисления с основанием 6 начинается на 4?

  22. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 20, запись которых в системе счисления с основанием 3 начинается на 2?

  23. Какое десятичное число при записи в системе счисления с основанием 5 представляется как 12345?

  24. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 25, запись которых в двоичной системе счисления оканчивается на 101?

  25. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 30 оканчивается на 8.

  26. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 31 оканчивается на 4.

  27. В системе счисления с некоторым основанием десятичное число 83 записывается в виде 123. Укажите это основание.

  28. В системе счисления с некоторым основанием десятичное число 144 записывается в виде 264. Укажите это основание.

  29. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 32 оканчивается на 4.

  30. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 27, запись которых в двоичной системе счисления оканчивается на 110?

  31. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 25, запись которых в троичной системе счисления оканчивается на 21?

  32. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 45, запись которых в двоичной системе счисления оканчивается на 1010?






1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Самылкина Н.Н., Островская Е.М. Информатика: тренировочные задания. – М.: Эксмо, 2009.

  4. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М: Экзамен, 2010.

  5. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  6. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

7 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

HR-менеджер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B4.doc

isa.muschanov.70@yandex.ru



B4 (высокий уровень, время – 10 мин)

Тема: Преобразование логических выражений.

Про обозначения

К сожалению, обозначения логических операций И, ИЛИ и НЕ, принятые в «серьезной» математической логике (,, ¬), неудобны, интуитивно непонятны и никак не проявляют аналогии с обычной алгеброй. Автор, к своему стыду, до сих пор иногда путает и . Поэтому на его уроках операция «НЕ» обозначается чертой сверху, «И» – знаком умножения (поскольку это все же логическое умножение), а «ИЛИ» – знаком «+» (логическое сложение).
В разных учебниках используют разные обозначения. К счастью, в начале задания ЕГЭ приводится расшифровка закорючек (,, ¬), что еще раз подчеркивает проблему.

Что нужно знать:

  • условные обозначения логических операций

¬ A, hello_html_m3da5f95b.gif не A (отрицание, инверсия)

A B, hello_html_m617d34e5.gifA и B (логическое умножение, конъюнкция)

A B, hello_html_m5222bd0.gif A или B (логическое сложение, дизъюнкция)

A B импликация (следование)

A B эквиваленция (эквивалентность, равносильность)

  • таблицы истинности логических операций «И», «ИЛИ», «НЕ», «импликация», «эквиваленция» (см. презентацию «Логика»)

  • операцию «импликация» можно выразить через «ИЛИ» и «НЕ»:

A B = ¬ A B или в других обозначениях A B = hello_html_m29aec133.gif

  • операцию «эквиваленция» также можно выразить через «ИЛИ» и «НЕ»:

A B = ¬ A ¬ B A B или в других обозначениях A B = hello_html_6e5dcc8a.gif

  • если в выражении нет скобок, сначала выполняются все операции «НЕ», затем – «И», затем – «ИЛИ», и самая последняя – «импликация»

  • логическое произведение ABC∙… равно 1 (выражение истинно) только тогда, когда все сомножители равны 1 (а в остальных случаях равно 0)

  • логическая сумма A+B+C+… равна 0 (выражение ложно) только тогда, когда все слагаемые равны 0 (а в остальных случаях равна 1)

  • правила преобразования логических выражений (слайд из презентации «Логика»):

hello_html_m706108c7.png

Пример задания:

Каково наибольшее целое число X, при котором истинно высказывание

(50 < X·X) (50 > (X+1)·(X+1))

Решение (вариант 1):

  1. это операция импликации между двумя отношениями hello_html_48f427c2.gif и hello_html_m21d82102.gif

  2. попробуем сначала решить неравенства

hello_html_m3e1a17ca.gif, hello_html_m44b51a85.gif

  1. обозначим эти области на оси X:


hello_html_7746104c.gif

на рисунке фиолетовые зоны обозначают область, где истинно выражение hello_html_718f0f76.gif, голубая зона – это область, где истинно hello_html_m63aa4fa9.gif

  1. вспомним таблицу истинности операции «импликация»:

    A

    B

    A B

    0

    0

    1

    0

    1

    1

    1

    0

    0

    1

    1

    1

  2. согласно таблице, заданное выражение истинно везде, кроме областей, где hello_html_m4c320aea.gif и hello_html_13c7f419.gif; область истинности выделена зеленым цветом

  3. поэтому наибольшее целое число, удовлетворяющее условию – это первое целое число, меньшее hello_html_685bf688.gif, то есть, 7

  4. таким образом, верный ответ – 7 .

Возможные проблемы:

  • в этом примере потребовалось применить знания не только (и не столько) из курса информатики, но и умение решать неравенства

  • нужно не забыть правила извлечения квадратного корня из обеих частей неравенства (операции с модулями)

Решение (вариант 2, преобразование выражения):

  1. сначала можно преобразовать импликацию, выразив ее через «ИЛИ» и «НЕ»:

hello_html_220c476d.gif

  1. это значит, что выражение истинно там, где hello_html_m1e2b4c8.gif или hello_html_5e174a37.gif

  2. дальнейшие действия точно такие же, как и в варианте 1.

Возможные проблемы:

  • нужно помнить формулу для преобразования импликации

Еще пример задания:

Каково наибольшее целое число X, при котором истинно высказывание

(10 < X·(X+1)) (10 > (X+1)·(X+2))

Решение (в целых числах):

  1. это операция импликации между двумя отношениями:

hello_html_m325d61f6.gif и hello_html_m4092210f.gif

  1. конечно, здесь можно применить тот же способ, что и в предыдущем примере, однако при этом понадобится решать квадратные уравнения (не хочется…)

  2. заметим, что по условию нас интересуют только целые числа, поэтому можно попытаться как-то преобразовать исходное выражение, получив равносильное высказывание (как понятно из предыдущего примера, точные значения корней нас совершенно не интересуют!)

  3. рассмотрим неравенство hello_html_m325d61f6.gif: очевидно, что hello_html_7ba38183.gifможет быть как положительным, так и отрицательным числом;

  4. легко проверить, что в области hello_html_77bbbc11.gif высказывание hello_html_7191321e.gif истинно при всех целых hello_html_m67a06446.gif, а в области hello_html_m9579229.gif – при всех целых hello_html_69ab9698.gif (чтобы не запутаться, удобнее использовать нестрогие неравенства, hello_html_m7ceebba.gif и hello_html_m78774d40.gif, вместо hello_html_ff8aec9.gif и hello_html_fdcf8c7.gif)

  5. поэтому для целых hello_html_7ba38183.gif можно заменить hello_html_7191321e.gif на равносильное выражение

hello_html_767636ad.gif

  1. область истинности выражения hello_html_718f0f76.gif – объединение двух бесконечных интервалов:

hello_html_m213da80b.gif

  1. теперь рассмотрим второе неравенство hello_html_m4092210f.gif: очевидно, что hello_html_7ba38183.gifтак же может быть как положительным, так и отрицательным числом;

  2. в области hello_html_77bbbc11.gif высказывание hello_html_m87a12fc.gif истинно при всех целых hello_html_m397f6398.gif, а в области hello_html_m9579229.gif – при всех целых hello_html_d86e75d.gif, поэтому для целых hello_html_7ba38183.gif можно заменить hello_html_m87a12fc.gif на равносильное выражение

hello_html_m18ed5717.gif

  1. область истинности выражения hello_html_m63aa4fa9.gif – закрытый интервал, обозначенный голубой полоской

hello_html_m22d220df.gif

  1. вспомним таблицу истинности операции «импликация»:

    A

    B

    A B

    0

    0

    1

    0

    1

    1

    1

    0

    0

    1

    1

    1

  2. согласно таблице, заданное выражение истинно везде, кроме областей, где hello_html_m4c320aea.gif и hello_html_13c7f419.gif; область истинности выделена на рисунке зеленым цветом;

  3. обратите внимание, что значение hello_html_m4717a23d.gif уже не входит в зеленую зону, потому что там hello_html_m4c320aea.gif и hello_html_m1dd35503.gif, то есть импликация дает 0

  4. по схеме видно, что максимальное целое число в зеленой области – 2

  5. таким образом, верный ответ – 2.

Возможные проблемы:

  • нужно помнить, что мы рассматриваем значения выражения только для целых hello_html_7ba38183.gif, при этом появляются свои особенности: может появиться желание продлить зеленую область до точки hello_html_m4717a23d.gif, что приведет к неверному ответу, потому что там уже hello_html_m4c320aea.gif и hello_html_m6368086f.gif

Еще пример задания:

Сколько различных решений имеет уравнение

((K L) (L M N)) = 0

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа Вам нужно указать количество таких наборов.

Решение (вариант 1, разделение на части):

  1. перепишем уравнение, используя более простые обозначения операций:

((K + L) (L · M · N)) = 0

  1. из таблицы истинности операции «импликация» (см. первую задачу) следует, что это равенство верно тогда и только тогда, когда одновременно

K + L = 1 и L · M · N = 0

  1. из первого уравнения следует, что хотя бы одна из переменных, K или L, равна 1 (или обе вместе); поэтому рассмотрим три случая

  2. если K = 1 и L = 0, то второе равенство выполняется при любых М и N; поскольку существует 4 комбинации двух логических переменных (00, 01, 10 и 11), имеем 4 разных решения

  3. если K = 1 и L = 1, то второе равенство выполняется при М · N = 0; существует 3 таких комбинации (00, 01 и 10), имеем еще 3 решения

  4. если K = 0, то обязательно L = 1 (из первого уравнения); при этом второе равенство выполняется при М · N = 0; существует 3 таких комбинации (00, 01 и 10), имеем еще 3 решения

  5. таким образом, всего получаем 4 + 3 + 3 = 10 решений.

Совет:

  • лучше начинать с того уравнения, где меньше переменных



Возможные проблемы:

  • есть риск потерять какие-то решения при переборе вариантов

Решение (вариант 2, через таблицы истинности):

  1. перепишем уравнение, используя более простые обозначения операций:

((K + L) (L · M · N)) = 0

  1. построим таблицу для логического выражения

X = ((K + L) (L · M · N))

и подсчитаем, сколько в ней нулей, это и будет ответ

  1. наше выражение зависит от четырех переменных, поэтому в таблице будет 24= 16 строчек (16 возможных комбинация четырех логических значений)

  2. подставляем различные комбинации в формулу для X; несмотря на большое количество вариантов, таблица строится легко: достаточно вспомнить, что выражение K + L ложно только при K = L = 0, а выражение L·M·N истинно только при L = M = N = 1.

    K

    L

    M

    N

    K+L

    L·M·N

    X

    0

    0

    0

    0

    0

    0

    1

    0

    0

    0

    1

    0

    0

    1

    0

    0

    1

    0

    0

    0

    1

    0

    0

    1

    1

    0

    0

    1

    0

    1

    0

    0

    1

    0

    0

    0

    1

    0

    1

    1

    0

    0

    0

    1

    1

    0

    1

    0

    0

    0

    1

    1

    1

    1

    1

    1

    1

    0

    0

    0

    1

    0

    0

    1

    0

    0

    1

    1

    0

    0

    1

    0

    1

    0

    1

    0

    0

    1

    0

    1

    1

    1

    0

    0

    1

    1

    0

    0

    1

    0

    0

    1

    1

    0

    1

    1

    0

    0

    1

    1

    1

    0

    1

    0

    0

    1

    1

    1

    1

    1

    1

    1

  3. в последнем столбце 10 нулей; это значит, что есть 10 разных комбинаций, при которых выражение X равно нулю, то есть исходное уравнение имеет 10 решений

  4. таким образом, всего 10 решений.



Возможные проблемы:

  • нужно строить таблицу истинности функции от 4 переменных, это трудоемко, легко ошибиться

Еще пример задания:

Укажите значения переменных К, L, M, N, при которых логическое выражение

(¬(М L) К) (¬К ¬М) N)

ложно. Ответ запишите в виде строки из 4 символов: значений переменных К, L, М и N (в указанном порядке). Так, например, строка 1101 соответствует тому, что К=1, L=1, M=0, N=1.

Решение (вариант 1, анализ исходного выражения):

  1. запишем уравнение, используя более простые обозначения операций (условие «выражение ложно» означает, что оно равно логическому нулю):

hello_html_m207c67ca.gif

  1. из формулировки условия следует, что выражение должно быть ложно только для одного набора переменных

  2. из таблицы истинности операции «импликация» (см. первую задачу) следует, что это выражение ложно тогда и только тогда, когда одновременно

hello_html_23263dc1.gif и hello_html_52c7c00d.gif

  1. первое равенство (логическое произведение равно 1) выполняется тогда и только тогда, когда hello_html_807fb7e.gifи hello_html_64b90137.gif; отсюда следует hello_html_6ab44bc3.gif(логическая сумма равна нулю), что может быть только при hello_html_73641b4c.gif; таким образом, три переменных мы уже определили

  2. из второго условия, hello_html_52c7c00d.gif, при hello_html_807fb7e.gif и hello_html_35553f7.gif получаем hello_html_m7ae85c25.gif

  3. таким образом, правильный ответ – 1000.



Возможные проблемы:

  • переменные однозначно определяются только для ситуаций «сумма = 0» (все равны 0) и «произведение = 1» (все равны 1), в остальных случаях нужно рассматривать разные варианты

  • не всегда выражение сразу распадается на 2 (или более) отдельных уравнения, каждое из которых однозначно определяет некоторые переменные

Решение (вариант 2, упрощение выражения):

  1. запишем уравнение, используя более простые обозначения операций:

hello_html_m207c67ca.gif

  1. заменим импликацию по формуле hello_html_m671ed162.gif:

hello_html_m48f48957.gif

  1. раскроем инверсию сложного выражения по формуле де Моргана hello_html_m3a887441.gif:

hello_html_m2539def8.gif

  1. упростим выражение hello_html_m3b2e5049.gif:

hello_html_m7ca7d4fa.gif

  1. мы получили уравнение вида «сумма = 0», в нем все слагаемые должны быть равны нулю

  2. поэтому сразу находим hello_html_4e4e748.gif

  3. таким образом, правильный ответ – 1000.



Замечание:

  • этот способ работает всегда и дает более общее решение; в частности, можно легко обнаружить, что уравнение имеет несколько решений (тогда оно не сведется к форме «сумма = 0» или «произведение = 1»)



Возможные проблемы:

  • нужно помнить правила преобразования логических выражений и хорошо владеть этой техникой

Еще пример задания:

Составьте таблицу истинности для логической функции

X = (А B) ¬(A (B C))

в которой столбец значений аргумента А представляет собой двоичную запись числа 27, столбец значений аргумента В – числа 77, столбец значений аргумента С – числа 120. Число в столбце записывается сверху вниз от старшего разряда к младшему. Переведите полученную двоичную запись значений функции X в десятичную систему счисления.

Решение (вариант 1):

  1. запишем уравнение, используя более простые обозначения операций:

hello_html_m627fa19d.gif

  1. это выражение с тремя переменными, поэтому в таблице истинности будет 23=8 строчек; следовательно, двоичная запись чисел, по которым строятся столбцы таблицы А, В и С, должна состоять из 8 цифр

  2. А

    В

    С

    X

    0

    0

    0


    0

    1

    1


    0

    0

    1


    1

    0

    1


    1

    1

    1


    0

    1

    0


    1

    0

    0


    1

    1

    0


    переведем числа 27, 77 и 120 в двоичную систему, сразу дополняя запись до 8 знаков нулями в начале чисел

27 = 000110112 77 = 010011012 120 = 011110002

  1. теперь можно составить таблицу истинности (см. рисунок справа), в которой строки переставлены в сравнении с традиционным порядком1; зеленым фоном выделена двоичная записи числа 27 (биты записываются сверху вниз), синим – запись числа 77 и розовым – запись числа 120:

  2. вряд ли вы сможете сразу написать значения функции Х для каждой комбинации, поэтому удобно добавить в таблицу дополнительные столбцы для расчета промежуточных результатов (см. таблицу ниже)

  3. заполняем столбцы таблицы:

А

В

С

hello_html_m9eb1b6d.gif

hello_html_4daea0b4.gif

hello_html_m205f516c.gif

hello_html_m3d8461e4.gif

X

0

0

0

1

0

1

0

1

0

1

1

0

1

1

0

0

0

0

1

1

1

1

0

1

1

0

1

0

1

1

0

0

1

1

1

1

1

1

0

1

0

1

0

0

1

1

0

0

1

0

0

0

0

0

1

1

1

1

0

1

1

1

0

1

значение hello_html_m9eb1b6d.gif равно 1 только в тех строчках, где А = В

значение hello_html_4daea0b4.gifравно 1 только в тех строчках, где В = 1 или С = 1

значение hello_html_m205f516c.gifравно 0 только в тех строчках, где А = 1 и В + С = 0

значение hello_html_m3d8461e4.gifэто инверсия предыдущего столбца (0 заменяется на 1, а 1 – на 0)

результат Х (последний столбец) – это логическая сумма двух столбцов, выделенных фиолетовым фоном

  1. чтобы получить ответ, выписываем биты из столбца Х сверху вниз: Х = 101010112

  2. переводим это число в десятичную систему: 101010112 = 27 + 25 + 23 + 21 + 20 = 171

  3. таким образом, правильный ответ – 171.



Возможные проблемы:

  • нужно помнить таблицы истинности логических операций

  • легко запутаться в многочисленных столбцах с однородными данными (нулями и единицами)

Решение (вариант 2, преобразование логической функции):

  1. выполним пп. 1-5 так же, как и в предыдущем способе

  2. запишем уравнение, используя более простые обозначения операций:

hello_html_m627fa19d.gif

  1. раскроем импликацию через операции И, ИЛИ и НЕ (hello_html_220c476d.gif):

hello_html_44913661.gif

  1. раскроем инверсию для выражения hello_html_44913661.gif по формуле де Моргана:

hello_html_4e5d15.gif

  1. таким образом, выражение приобретает вид hello_html_m2848f87f.gif

  2. отсюда сразу видно, что Х = 1 только тогда, когда А = В или (А = 1 и В = С = 0):

    А

    В

    С

    X

    Примечание

    0

    0

    0

    1

    А = В

    0

    1

    1

    0


    0

    0

    1

    1

    А = В

    1

    0

    1

    0


    1

    1

    1

    1

    А = В

    0

    1

    0

    0


    1

    0

    0

    1

    А = 1, В = С = 0

    1

    1

    0

    1

    А = В

  3. чтобы получить ответ, выписываем биты из столбца Х сверху вниз: Х = 101010112

  4. переводим это число в десятичную систему: 101010112 = 27 + 25 + 23 + 21 + 20 = 171

  5. таким образом, правильный ответ – 171.



Возможные проблемы:

  • нужно помнить правила преобразования логических выражений и хорошо владеть этой техникой


Еще пример задания:

A, B и С – целые числа, для которых истинно высказывание

¬(А = B) ((A > B)(B > C)) ((B > A) > B))

Чему равно В, если A = 45 и C = 43?.

Решение (вариант 1):

  1. обратим внимание, что это сложное высказывание состоит из трех простых

¬(А = B)

(A > B)(B > C)

(B > A) > B)

  1. эти простые высказывания связаны операцией (И, конъюнкция), то есть, они должны выполняться одновременно

  2. из ¬(А = B)=1 сразу следует, что А B

  3. предположим, что A > B, тогда из второго условия получаем 1(B > C)=1; это выражение может быть истинно тогда и только тогда, когда B > C = 1

  4. поэтому имеем A > B > C, этому условию соответствует только число 44

  5. на всякий случай проверим и вариант A < B, тогда из второго условия получаем
    0 →(B > C)=1; это выражение истинно при любом B;
    теперь смотрим третье условие: получаем 1 > B)=1; это выражение может быть истинно тогда и только тогда, когда C > B, и тут мы получили противоречие, потому что нет такого числа B, для которого C > B > A

  6. таким образом, правильный ответ – 44.

Решение (вариант 2, интуитивный):

  1. заметим, что между A и C расположено единственное число 44, поэтому можно предполагать, что именно это и есть ответ

  2. проверим догадку, подставив в заданное выражение A = 45, B = 44 и C = 43

¬(45 = 44) ((45 > 44)(44 > 43)) ((44 > 45)(43 > 44))

  1. заменим истинные условия на 1, а ложные – на 0:

¬(0) (11) (00)

  1. вычисляем по таблице результаты операций ¬ (НЕ, отрицание) и → (импликация):

1 1 1

  1. остается применить операцию (И, конъюнкция) – получаем 1, то есть, выражение истинно, что нам и нужно

  2. таким образом, правильный ответ – 44.



Возможные проблемы:

  • не всегда удается сразу догадаться

Еще пример задания:

Сколько различных решений имеет уравнение

(K L M) (¬L ¬M N)) = 0

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа Вам нужно указать количество таких наборов.

Решение (поиск неподходящих комбинаций):

  1. перепишем уравнение, используя более простые обозначения операций:

hello_html_9256188.gif

  1. здесь используется сложение двух логических произведений, которое равно 1 если одно из двух слагаемых истинно

  2. поскольку произведения включают много переменных, можно предположить, что они равны 1 в небольшом числе случаев, поэтому мы попытаемся найти количество решений «обратного» уравнения

hello_html_3276e397.gif (*)

а потом вычесть это число из общего количества комбинаций значений переменных K, L, M, N (для четырех логических переменных, принимающих два значения (0 или 1), существует 24=16 различных комбинаций)

  1. уравнение hello_html_5b67a1f1.gif имеет два решения: требуется, чтобы hello_html_m1c5f7b0e.gif, а hello_html_m18068b.gif может принимать любые (логические) значения, то есть, 0 или 1; эти два решения – 1110 и 1111

  2. уравнение hello_html_1adf79a5.gif также имеет два решения: требуется, чтобы hello_html_f4c9a03.gif, hello_html_m4186be87.gif, а hello_html_3eb40b6c.gif может быть равно 0 или 1; эти два решения – 0001 и 1001

  3. среди полученных четырех решений нет одинаковых, поэтому уравнение (*) имеет 4 решения

  4. это значит, что исходное уравнение истинно для всех остальных 16-4=12 комбинаций переменных K, L, M, N

  5. таким образом, правильный ответ – 12.



Возможные проблемы:

  • не всегда удается догадаться, что неверных комбинаций меньше

  • нужно проверять, что среди найденных решений нет одинаковых


Еще пример задания:

Каково наибольшее целое положительное число X, при котором истинно высказывание:

(X·(X + 3) > X·X + 7) (X·(X + 2) ≤ X·X + 11)

Решение (преобразование выражений):

  1. несмотря на страшный вид, эта задача решается очень просто; сначала раскроем скобки в обеих частях импликации:

(X·X + 3·X > X·X + 7) (X·X + 2·XX·X + 11)

  1. теперь в каждой части вычтем X·X из обеих частей неравенства:

(3·X > 7) (2·X ≤ 11)

  1. в целых числах это равносильно:

(X ≥ 3) (X ≤ 5)

  1. вспомним, как раскрывается импликация через операции ИЛИ и НЕ: hello_html_220c476d.gif

  2. учитывая, что hello_html_m5c9981e6.gif, имеем hello_html_4b00963d.gif, следовательно

(X < 3) или (X ≤ 5)

  1. это равносильно высказыванию (X ≤ 5)

  2. таким образом, ответ – 5.

Задачи для тренировки2:

  1. Каково наибольшее целое число X, при котором истинно высказывание

(90 < X·X) (X < (X-1))

  1. Сколько различных решений имеет уравнение

(K L M) (¬L ¬M N) = 1

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.

  1. Укажите значения переменных K, L, M, N, при которых логическое выражение

(¬K M) (¬L M N)

ложно. Ответ запишите в виде строки из четырех символов: значений переменных K, L, M и N (в указанном порядке). Так, например, строка 1101 соответствует тому, что K=1, L=1, M=0, N=1.

  1. Каково наименьшее целое положительное число X, при котором высказывание:

(4 > -(4 + XX)) (30 > X·X)

будет ложным.

  1. Каково наибольшее целое положительное число X, при котором истинно высказывание:

((X - 1) < X) (40 > X·X)

  1. Укажите значения переменных K, L, M, N, при которых логическое выражение

(M L) K) ((¬K ¬M) N)

ложно. Ответ запишите в виде строки из четырех символов: значений переменных K, L, M и N (в указанном порядке). Так, например, строка 1101 соответствует тому, что K=1, L=1, M=0, N=1.

  1. Каково наименьшее натуральное число X, при котором высказывание

¬(X·X < 9) (X >(X + 2))

будет ложным?

  1. Укажите значения логических переменных Р, Q, S, Т, при которых логическое выражение

¬Q) (Q (S Т))

ложно. Ответ запишите в виде строки из четырех символов: значений переменных Р, Q, S, T (в указанном порядке).

  1. Каково наибольшее целое положительное число X, при котором высказывание:

((X + 6)·X + 9 > 0) (X·X > 20)

будет ложным?

  1. Составьте таблицу истинности для логической функции

X = (А B) (C ¬(B A))

в которой столбец значений аргумента А представляет собой двоичную запись числа 226, столбец значений аргумента В – числа 154, столбец значений аргумента С – числа 75. Число в столбце записывается сверху вниз от старшего разряда к младшему. Переведите полученную двоичную запись значений функции X в десятичную систему счисления.

  1. Составьте таблицу истинности для логической функции

X = ¬(А B) (B ¬(C A))

в которой столбец значений аргумента А представляет собой двоичную запись числа 216, столбец значений аргумента В – числа 30, столбец значений аргумента С – числа 170. Число в столбце записывается сверху вниз от старшего разряда к младшему. Переведите полученную двоичную запись значений функции X в десятичную систему счисления.


  1. Известно, что для чисел X, Y и Z истинно высказывание

(Z < X Z < Y) ¬(Z+1 < X) ¬(Z+1 < Y)

Чему равно Z, если X=25 и Y=48?


  1. Укажите значения переменных K, L, M, N, при которых логическое выражение

(K M) (L K) ¬N

ложно. Ответ запишите в виде строки из четырех символов: значений переменных K, L, M и N (в указанном порядке). Так, например, строка 1101 соответствует тому, что K=1, L=1, M=0, N=1.


  1. Укажите значения переменных K, L, M, N, при которых логическое выражение

(K M) (K ¬M) K (M ¬L N))

истинно. Ответ запишите в виде строки из четырех символов: значений переменных K, L, M и N (в указанном порядке). Так, например, строка 1101 соответствует тому, что K=1, L=1, M=0, N=1.

  1. A, B и C – целые числа, для которых истинно высказывание:

(C<A C<B) ¬(C+1 < A) ¬(C+1 < B)

Чему равно C, если A=45 и B=18?

  1. Сколько различных решений имеет уравнение

J ¬K L ¬M (N ¬N) = 0

где J, K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений J, K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.

  1. A, B и С – целые числа, для которых истинно высказывание

¬(А = B) ((B < A)(2C > A)) ((A < B)(A > 2C))

Чему равно A, если C = 8 и B = 18?.

  1. Сколько различных решений имеет уравнение

(K L) (M N) = 1

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.

  1. Каково наибольшее целое положительное число X, при котором истинно высказывание:

(X·X - 1 > 100) (X·(X-1)< 100)

  1. Каково наибольшее целое положительное число X, при котором ложно высказывание:

(8·X - 6 < 75) (X·(X-1)> 65)

  1. Каково наибольшее целое положительное число X, при котором ложно высказывание:

(X·(X+1) > 55) (X·X > 50)

  1. Каково наибольшее целое положительное число X, при котором истинно высказывание:

(X·(X+1) > X·X + 7) (X·(X+1) X·X + 7)

  1. Сколько различных решений имеет уравнение

(K L M) (¬L ¬M N) = 1

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.

  1. Сколько различных решений имеет уравнение

(K L M) (¬M N) = 1

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.

  1. Сколько различных решений имеет уравнение

(K L)(M N) = 1

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.

  1. Сколько различных решений имеет уравнение

((A B) C) (D ¬D)= 1,

где A, B, C, D – логические переменные? В ответе не нужно перечислять все различные наборы значений A, B, C, D, при которых выполнено данное равенство. В качестве ответа вам нужно указать количество таких наборов.

  1. Каково наибольшее целое положительное число X, при котором ложно высказывание:

(X·(X + 1)> 55) (X·X > 50)

  1. Каково наибольшее целое положительное число X, при котором истинно высказывание:

(X·(X + 1) > X·X + 7) (X·(X + 1) ≤ X·X + 7)

  1. Каково наибольшее целое положительное число X, при котором истинно высказывание:

(X·X - 7 > 15) (X·X + 8 < 35)

  1. Каково наибольшее целое положительное число X, при котором ложно высказывание:

(9·X + 5 > 60) (X·X > 80)

  1. Сколько различных решений имеет уравнение

¬M K ¬N ¬J (L ¬L) = 0

где J, K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений J, K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.

  1. Каково наибольшее целое число X, при котором истинно высказывание:

(X·X - 1 > 100) (X·(X1) < 100)

  1. Укажите значения переменных K, L, M, N, при которых логическое выражение

(K ¬M) L M K) ¬N

ложно. Ответ запишите в виде строки из четырех символов: значений переменных K, L, M и N (в указанном порядке). Так, например, строка 1101 соответствует тому, что K=1, L=1, M=0, N=1.

  1. Сколько различных решений имеет уравнение

(¬K ¬L ¬M) (L ¬M ¬N) = 0

где K, L, M, N – логические переменные? В ответе не нужно перечислять все различные наборы значений K, L, M и N, при которых выполнено данное равенство. В качестве ответа вам нужно указать только количество таких наборов.



1 Проверьте, что обычно (когда комбинации располагаются по возрастанию соответствующих двоичных чисел), столбец значений аргумента А представляет собой двоичную запись числа 15 = 11112, столбец значений аргумента В – числа 51 = 1100112, столбец значений аргумента С – числа 85 = 101010102.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Крылов С.С. ЕГЭ-2010. Информатика: сборник экзаменационных заданий. – М.: Эксмо, 2009.

  4. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  5. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

  6. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

16 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Технолог-калькулятор общественного питания

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B5.doc

isa.muschanov.70@yandex.ru



B5 (повышенный уровень, время – 10 мин)

Тема: Поиск алгоритма минимальной длины для исполнителя.

Что нужно знать:

  • каких-либо особых знаний из курса информатики не требуется, задача решаема на уровне 6-7 класса простым перебором вариантов, просто его нужно организовать оптимальным образом

  • исполнитель – это человек, группа людей, животное, машина или другой объект, который может понимать и выполнять некоторые команды

Пример задания:

У исполнителя Калькулятор две команды, которым присвоены номера:

1. прибавь 3

2. умножь на 4

Выполняя первую из них, Калькулятор прибавляет к числу на экране 3, а выполняя вторую, умножает его на 4. Запишите порядок команд в программе получения из числа 3 числа 57, содержащей не более 6 команд, указывая лишь номера команд.

(Например, программа 21211 это программа

умножь на 4

прибавь 3

умножь на 4

прибавь 3

прибавь 3

которая преобразует число 2 в 50.)

Решение (вариант 1, «прямой ход»):

  1. обратим внимание, что в условии ограничено число команд, поэтому неявно ставится задача написать самую короткую программу для решения задачи

  2. начнем решать задачу, «отталкиваясь» от начального числа

  3. на первом шаге с помощью имеющихся команд из числа 3 можно получить 6 или 12;

  4. на втором шаге из 6 можно получить 9 и 12, а из 12 – 15 и 48, и т.д., получается такая схема (структура «дерево»), цифры около стрелок показывает номер выполненной команды:

hello_html_m74d15c93.gif

  1. уhello_html_2594d877.gifже чувствуется, что дерево сильно разрастается, на следующем уровне будет уже 8 вариантов, потом – 16 и т.д. (на каждом следующем уровне – в 2 раза большем, чем на предыдущем)

  2. нужно выбрать такой план дальнейшего перебора вариантов, который может быстрее всего привести к цели (числу 57)

  3. видим, что после второй операции ближе всего к результату оказалось число 48, попробуем начать анализ с этой ветки; если не получится – возьмем число 24 и т.д.

  4. ветка дерева, начиная от числа 48, построена на рисунке справа; красный крестик показывает, что полученное значение превышает 57

  5. итак, мы вышли на число 57 в результате такой последовательности команд: 22111, ее длина равна 5, что удовлетворяет условию задачи.

  6. таким образом, правильный ответ – 22111.

Возможные ловушки и проблемы:

  • большую схему неудобно рисовать, в ней легко запутаться

  • не всегда можно сразу угадать нужную ветку «дерева», то есть, ту, которая быстрее всего приведет к успеху


Решение (вариант 2, «обратный ход»):

  1. нам нужно увеличить число (с 3 до 57), для этого в большинстве случаев умножение эффективнее сложения, поэтому нужно постараться максимально использовать умножение, а сложение – только в крайних случаях

  2. попробуем решить задачу «обратным ходом», начав с числа 57;

  3. очевидно, что последней командой не может быть умножение на 4 (57 на 4 не делится), поэтому последняя команда – сложение (прибавь 3), над стрелкой записан номер команды:

hello_html_m53b155e9.gif

  1. число 54 также не делится на 4, поэтому предыдущая команда – тоже сложение:

hello_html_4ff8eb10.gif

  1. аналогично для числа 51:

hello_html_m715ee9f9.gif

  1. число 48 делится на 4, поэтому используем умножение:

hello_html_2beff38c.gif

  1. наконец, добавив в начало программы еще одно умножение, получаем полную цепочку:

hello_html_m4ad8399e.gif

  1. таким образом, правильный ответ – 22111, эта программа состоит из 5 команд.

Возможные ловушки и проблемы:

  • иногда может потребоваться «откат» назад, например, если исходное число – 6, то применив деление на 4 для 12 мы «проскакиваем» его (получаем 12/4=3<6), поэтому нужно возвращаться обратно к 12 и дважды применять сложение; в этом случае ответ будет такой:

hello_html_81c5556.gif

Почему здесь «обратный ход» лучше?:

  • обратим внимание, что когда мы «шли» в обратном направлении, от конечного числа к начальному, часто очередную операцию удавалось определить однозначно (когда число не делилось на 4)

  • это связано с тем, что среди допустимых команд есть «не всегда обратимая» операция – умножение: умножить целое число на 4 можно всегда, а разделить нацело – нет; в подобных случаях результат быстрее получается именно «обратным ходом», во время которого сразу отбрасываются невозможные варианты

Еще пример задания:

У исполнителя, который работает с положительными однобайтовыми двоичными числами, две команды, которым присвоены номера:

1. сдвинь влево

2. вычти 1

Выполняя первую из них, исполнитель сдвигает число на один двоичный разряд влево, а выполняя вторую, вычитает из него 1. Исполнитель начал вычисления с числа 104 и выполнил цепочку команд 11221. Запишите результат в десятичной системе.

Решение:

  1. важно, что числа однобайтовые – на число отводится 1 байт или 8 бит

  2. главная проблема в этой задаче – разобраться, что такое «сдвиг влево»; так называется операция, при которой все биты числа в ячейке (регистре) сдвигаются на 1 бит влево, в младший бит записывается нуль, а старший бит попадает в специальную ячейку – бит переноса:



7

6

5

4

3

2

1

0


?


0

0

1

0

1

1

0

1

= 45

hello_html_32632bdb.gif

hello_html_m1fbaee3.gif


hello_html_m1fbaee3.gifhello_html_m1fbaee3.gif


hello_html_m1fbaee3.gifhello_html_m1fbaee3.gif


hello_html_m1fbaee3.gif


hello_html_8e48005.gif

0

0


0

1

0

1

1

0

1

0

= 90

бит
переноса

мhello_html_m1fbaee3.gifожно доказать, что в большинстве случаев результат этой операции – умножение числа на 2, однако есть исключение: если в старшем (7-ом) бите исходного числа x была 1, она будет «выдавлена» в бит переноса, то есть потеряна1, поэтому мы получим остаток от деления числа 2x на 28=256

  1. попутно заметим, что при сдвиге вправо2 в старший бит записывается 0, а младший «уходит» в бит переноса; это равносильно делению на 2 и отбрасыванию остатка

  2. таким образом, фактически команда сдвинь влево означает умножь на 2

  3. поэтому последовательность команд 11221 выполняется следующим образом

    Код команды

    Действие

    Результат

    Примечание



    104


    1

    умножь на 2

    208


    1

    умножь на 2

    160

    остаток от деления 208*2 на 256

    2

    вычти 1

    159


    2

    вычти 1

    158


    1

    умножь на 2

    60

    остаток от деления 158*2 на 256

  4. правильный ответ – 60.

Еще пример задания:

Исполнитель Робот действует на клетчатой доске, между соседними клетками которой могут стоять стены. Робот передвигается по клеткам доски и может выполнять команды 1 (вверх), 2 (вниз), 3 (вправо) и 4 (влево), переходя на соседнюю клетку в направлении, указанном в скобках. Если в этом направлении между клетками стоит стена, то Робот разрушается. Робот успешно выполнил программу

3233241

Какую последовательность из трех команд должен выполнить Робот, чтобы вернуться в ту клетку, где он был перед началом выполнения программы, и не разрушиться вне зависимости от того, какие стены стоят на поле?

Решение:

  1. фактически заданная программа движения Робота, которую он успешно выполнил, показывает нам свободный путь, на котором стенок нет

  2. поэтому для того, чтобы не разрушиться на обратном пути, Робот должен идти точно по тому же пути в обратном направлении

  3. нарисуем путь Робота, который выполнил программу 323341:

?

?

?

?

?

?

?

hello_html_d9a61e8.gifhello_html_m7dfe3159.gifhello_html_61f902a8.gif


?

?

?

?

?




?

?

?

?



?

?

?

?

?

?

?

Робот начал движение из клетки, отмеченной красной точкой, и закончил в клетке, где стоит синяя точка

  1. чтобы вернуться в исходную клетку (с красной точкой) по пройденному пути, Роботу нужно сделать шаг влево (команда 4), затем шаг вверх (команда 1) и еще один шаг влево (команда 4)

  2. таким образом, ответ – 414.


Еще пример задания:

Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу:

вправо

вверх

влево

влево

вниз

вниз

вправо

вправо

вправо

вниз

влево

Укажите наименьшее возможное число команд в программе, переводящей Робота из той же начальной клетки в ту же конечную.

Решение (способ 1, моделирование движения Робота):

  1. отметим, что в условии ничего не говорится о стенках, то есть, молчаливо предполагаем, что их нет

  2. можно повторить все движения Робота на бумажке и посмотреть, куда он уйдет; на схеме исходная точка обозначена красной точкой, а конечная – синей, синяя линия показывает путь Робота:

    hello_html_m13277de3.gif






    hello_html_m232984aa.gifhello_html_m58d4614b.gifhello_html_354c9982.gif



















  3. поскольку Робот не может ходить по диагонали, для перехода из начальной точки в конечную кратчайшим путем ему нужно выполнить, например, такую программу (см. штриховые линии на рисунке):

    вниз

    вниз

    вправо

  4. есть и другие варианты (попробуйте их найти!), но все они содержат 3 команды: одну команду вправо и две команды вниз

  5. таким образом, ответ – 3.

Решение (способ 2, анализ программы):

  1. можно решить задачу без повторения движений Робота

  2. обратим внимание, что пары команд «вперед-назад» и «влево-вправо» дают нулевой эффект, то есть, не перемещают Робота, поэтому все такие пары можно выкинуть из программы

  3. поскольку стенок нет, все равно где стоят парные команды в программе, вычеркиваем их:

вhello_html_6ef7fe22.gifправо

вhello_html_m67310062.gifhello_html_m67310062.gifверх

влево

влево

вниз

вниз

вправо

вправо

вhello_html_6ef7fe22.gifправо

вниз

влево

  1. смотрим, какие команды остались (они отмечены желтым маркером), их всего 3

  2. таким образом, ответ – 3.

Задачи для тренировки3:

  1. У исполнителя Утроитель две команды, которым присвоены номера:

1. вычти 2

2. умножь на три

Первая из них уменьшает число на экране на 2, вторая – утраивает его. Запишите порядок команд в программе получения из 11 числа 13, содержащей не более 5 команд, указывая лишь номера команд. (Например, 21211 – это программа:

умножь на три

вычти 2

умножь на три

вычти 2

вычти 2,

которая преобразует число 2 в 8). (Если таких программ более одной, то запишите любую из них.)


  1. У исполнителя Калькулятор две команды, которым присвоены номера:

1. прибавь 2

2. умножь на 3

Выполняя первую из них, Калькулятор прибавляет к числу на экране 2, а выполняя вторую, утраивает его. Запишите порядок команд в программе получения из 0 числа 28, содержащей не более 6 команд, указывая лишь номера команд. (Например, программа 21211 – это программа:

умножь на 3

прибавь 2

умножь на 3

прибавь 2

прибавь 2,

которая преобразует число 1 в 19).


  1. У исполнителя УТРОИТЕЛЬ две команды, которым присвоены номера:

1. вычти 1

2. умножь на 3

Первая из них уменьшает число на экране на 1, вторая – увеличивает его в три раза.

Запишите порядок команд в программе получения из числа 3 числа 16, содержащей не более 5 команд, указывая лишь номера команд.

(Например, программа 21211 это программа

умножь на 3

вычти 1

умножь на 3

вычти 1

вычти 1

которая преобразует число 1 в 4.)



  1. Имеется исполнитель Кузнечик, который живет на числовой оси. Система команд Кузнечика:

Вперед N (Кузнечик прыгает вперед на N единиц);

Назад M (Кузнечик прыгает назад на M единиц).

Переменные N и M могут принимать любые целые положительные значения. Известно, что Кузнечик выполнил программу из 50 команд, в которой команд “Назад 2” на 12 больше, чем команд “Вперед 3”. Других команд в программе не было. На какую одну команду можно заменить эту программу, чтобы Кузнечик оказался в той же точке, что и после выполнения программы?


  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

1. Умножь на 2

2. Вычти 2

Выполняя команду номер 1, КАЛЬКУЛЯТОР умножает число на экране на 2, а выполняя

команду номер 2, вычитает из числа на экране 2. Напишите программу, содержащую не

более 5 команд, которая из числа 7 получает число 44. Укажите лишь номера команд.

Например, программа 11221 – это программа:

Умножь на 2;

Умножь на 2;

Вычти 2;

Вычти 2;

Умножь на 2,

которая преобразует число 5 в число 32.

  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

1. умножь на 3

2. вычти 2

Выполняя команду номер 1, КАЛЬКУЛЯТОР умножает число на экране на 3, а выполняя

команду номер 2, вычитает из числа на экране 2. Напишите программу, содержащую не

более 5 команд, которая из числа 1 получает число 23. Укажите лишь номера команд.

Например, программа 11221 – это программа:

умножь на 3

умножь на 3

вычти 2

вычти 2

умножь на 3,

которая преобразует число 1 в число 15.


  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

1. Вычти 3

2. Умножь на 2

Выполняя команду номер1, КАЛЬКУЛЯТОР вычитает из числа на экране 3, а выполняя

команду номер 2, умножает число на экране на 2. Напишите программу, содержащую не

более 5 команд, которая из числа 5 получает число 25. Укажите лишь номера команд.

Например, программа 22221 – это программа:

Умножь на 2

Умножь на 2

Умножь на 2

Умножь на 2

Вычти 3,

которая преобразует число 1 в число 13.



  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

1. Умножь на 2

2. Вычти 1

Выполняя команду номер 1, КАЛЬКУЛЯТОР умножает число на экране на 2, а выполняя

команду номер 2, вычитает из числа на экране 1. Напишите программу, содержащую не

более 4 команд, которая из числа 7 получает число 52. Укажите лишь номера команд.

Например, программа 12121 - это программа:

Умножь на 2

Вычти 1

Умножь на 2

Вычти 1

Умножь на 2

которая преобразует число 5 в число 34.


  1. Исполнитель Чертежник имеет перо, которое можно поднимать, опускать и перемещать. При перемещении опущенного пера за ним остается след в виде прямой линии. У исполнителя существуют следующие команды:

Сместиться на вектор (а, Ь) – исполнитель перемещается в точку, в которую можно попасть из данной, пройдя а единиц по горизонтали и b – по вертикали.

Запись: Повторить 5[ Команда 1 Команда 2] означает, что последовательность команд в квадратных скобках повторяется 5 раз.

Чертежник находится в начале координат. Чертежнику дан для исполнения следующий алгоритм:

Сместиться на вектор (5,2)

Сместиться на вектор (-3, 3)

Повторить 3[Сместиться на вектор (1,0)]

Сместиться на вектор (3, 1)

На каком расстоянии от начала координат будет находиться исполнитель Чертежник в результате выполнения данного алгоритма?


  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

Умножь на 2

Прибавь 1

Выполняя команду номер 1, КАЛЬКУЛЯТОР умножает число на экране на 2, а выполняя

команду номер 2, прибавляет к числу на экране 1. Напишите программу, содержащую не

более 5 команд, которая из числа 6 получает число 33. Укажите лишь номера команд.

Например, программа 12122 -это программа:

Умножь на 2

Прибавь 1

Умножь на 2

Прибавь 1

Прибавь 1

которая преобразует число 5 в число 24.


  1. У исполнителя, который работает с положительными однобайтовыми двоичными числами, две команды, которым присвоены номера:

1. сдвинь влево

2. вычти 1

Выполняя первую из них, исполнитель сдвигает число на один двоичный разряд влево, а выполняя вторую, вычитает из него 1. Исполнитель начал вычисления с числа 91 и выполнил цепочку команд 112112. Запишите результат в десятичной системе.


  1. У исполнителя, который работает с положительными однобайтовыми двоичными числами, две команды, которым присвоены номера:

1. сдвинь вправо

2. прибавь 4

Выполняя первую из них, исполнитель сдвигает число на один двоичный разряд вправо, а выполняя вторую, добавляет к нему 4. Исполнитель начал вычисления с числа 191 и выполнил цепочку команд 112112. Запишите результат в десятичной системе.


  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

  1. Вычти 1

  2. Умножь на 2

Выполняя команду номер 1, КАЛЬКУЛЯТОР вычитает из числа на экране 1, а выполняя

команду номер 2, умножает число на экране на 2. Напишите программу, содержащую не

более 4 команд, которая из числа 3 получает число 16. Укажите лишь номера команд.

Например, программа 21211 это программа:

Умножь на 2

Вычти 1

Умножь на 2

Вычти 1

Вычти 1

которая преобразует число 1 в число 0.


  1. Исполнитель КВАДРАТОР имеет только две команды, которым присвоены номера:

  1. Возведи в квадрат

  2. Прибавь 1

Выполняя команду номер 1, КВАДРАТОР возводит число на экране в квадрат, а выполняя

команду номер 2, прибавляет к этому числу 1. Напишите программу, содержащую не

более 4 команд, которая из числа 2 получает число 36. Укажите лишь номера команд.

Например, программа 12122 – это программа:

Возведи в квадрат

Прибавь 1

Возведи в квадрат

Прибавь 1

Прибавь 1

которая преобразует число 1 в число 6.


  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

1. Вычти 1

2. Умножь на 2

Выполняя команду номер1, КАЛЬКУЛЯТОР вычитает из числа на экране 1, а выполняя

команду номер 2, умножает число на экране на 2. Напишите программу, содержащую не

более 4 команд, которая из числа 2 получает число 14. Укажите лишь номера команд.

Например, программа 21211 – это программа:

Умножь на 2

Вычти 1

Умножь на 2

Вычти 1

Вычти 1,

которая преобразует число 1 в число 0.

  1. Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу:

влево
вверх
вверх
влево
вниз
вправо
вправо
вправо

Укажите наименьшее возможное число команд в программе, Робота из той же начальной клетки в ту же конечную.


  1. На экране есть два окна, в каждом из которых записано по числу. Исполнитель СУММАТОР имеет только две команды, которым присвоены номера:

  1. Запиши сумму чисел в первое окно

  2. Запиши сумму чисел во второе окно

Выполняя команду номер 1, СУММАТОР складывает числа в двух окнах и записывает результат в первое окно, а выполняя команду номер 2, заменяет этой суммой число во втором окне. Напишите программу, содержащую не более 5 команд, которая из пары чисел 1 и 2 получает пару чисел 13 и 4. Укажите лишь номера команд.

Например, программа 21211 – это программа:

Запиши сумму чисел во второе окно

Запиши сумму чисел в первое окно

Запиши сумму чисел во второе окно

Запиши сумму чисел в первое окно

Запиши сумму чисел в первое окно

которая преобразует пару чисел 1 и 0 в пару чисел 8 и 3.

  1. Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:

  1. Вычти 1

  2. Умножь на 3

Выполняя команду номер 1, КАЛЬКУЛЯТОР вычитает из числа на экране 1, а выполняя

команду номер 2, умножает число на экране на 3. Напишите программу, содержащую не

более 5 команд, которая из числа 3 получает число 16. Укажите лишь номера команд.

Например, программа 21211 – это программа:

Умножь на 3

Вычти 1

Умножь на 3

Вычти 1

Вычти 1

которая преобразует число 1 в число 4.

  1. У исполнителя Калькулятор две команды, которым присвоены номера:

1. прибавь 3

2. умножь на 2

Выполняя первую из них, Калькулятор прибавляет к числу на экране 3, а выполняя вторую, удваивает его. Запишите порядок команд в программе получения из 1 числа 47, содержащей не более 6 команд, указывая лишь номера команд. (Например, программа 21211 – это программа:

умножь на 2

прибавь 3

умножь на 2

прибавь 3

прибавь 3,

которая преобразует число 1 в 6).


  1. Исполнитель Робот действует на клетчатой доске, между соседними клетками которой могут стоять стены. Робот передвигается по клеткам доски и может выполнять команды 1 (вверх), 2 (вниз), 3 (вправо) и 4 (влево), переходя на соседнюю клетку в направлении, указанном в скобках. Если в этом направлении между клетками стоит стена, то Робот разрушается. Робот успешно выполнил программу

1132432

Какую последовательность из трех команд должен выполнить Робот, чтобы вернуться в ту клетку, где он был перед началом выполнения программы, и не разрушиться вне зависимости от того, какие стены стоят на поле?


  1. Исполнитель Робот действует на клетчатой доске, между соседними клетками которой могут стоять стены. Робот передвигается по клеткам доски и может выполнять команды 1 (вверх), 2 (вниз), 3 (вправо) и 4 (влево), переходя на соседнюю клетку в направлении, указанном в скобках. Если в этом направлении между клетками стоит стена, то Робот разрушается. Робот успешно выполнил программу

33233241

Какую последовательность из четырех команд должен выполнить Робот, чтобы вернуться в ту клетку, где он был перед началом выполнения программы, и не разрушиться вне зависимости от того, какие стены стоят на поле?


  1. Имеется исполнитель Кузнечик, который живет на числовой оси. Система команд Кузнечика:

Вперед N – Кузнечик прыгает вперед на N единиц

Назад MКузнечик прыгает назад на M единиц

Переменные N и M могут принимать любые целые положительные значения. Кузнечик выполнил программу из 50 команд, в которой команд «Назад 2» на 12 больше, чем команд «Вперед 3» (других команд в программе нет). На какую одну команду можно заменить эту программу?


  1. Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу:

вверх

влево

влево

вниз

вниз

вправо

вправо

вниз

вправо

вверх

Укажите наименьшее возможное число команд в программе, переводящей Робота из той же начальной клетки в ту же конечную.

  1. Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу:

вправо

вниз

вправо

вверх

влево

вверх

вверх

влево

Укажите наименьшее возможное число команд в программе, переводящей Робота из той же начальной клетки в ту же конечную.

  1. Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу:

вниз

влево

вниз

влево

вверх

вправо

вверх

Укажите наименьшее возможное число команд в программе, переводящей Робота из той же начальной клетки в ту же конечную.

  1. Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу:

вверх

влево

влево

вверх

вправо

вверх

вправо

Укажите наименьшее возможное число команд в программе, переводящей Робота из той же начальной клетки в ту же конечную.

  1. Исполнитель Робот действует на клетчатой доске, между соседними клетками которой могут стоять стены. Робот передвигается по клеткам доски и может выполнять команды 1 (вверх), 2 (вниз), 3 (вправо) и 4 (влево), переходя на соседнюю клетку в направлении, указанном в скобках. Если в этом направлении между клетками стоит стена, то Робот разрушается. Робот успешно выполнил программу

2324142

Какую последовательность из трех команд должен выполнить Робот, чтобы вернуться в ту клетку, где он был перед началом выполнения программы, и не разрушиться вне зависимости от того, какие стены стоят на поле?

  1. У исполнителя Калькулятор две команды, которым присвоены номера:

1. прибавь 2

2. умножь на 3

Выполняя первую из них, Калькулятор прибавляет к числу на экране 3, а выполняя вторую, утраивает его. Запишите порядок команд в программе получения из 0 числа 56, содержащей не более 5 команд, указывая лишь номера команд. (Например, программа 21211 – это программа:

умножь на 3

прибавь 2

умножь на 3

прибавь 2

прибавь 2,

которая преобразует число 2 в 28).


1 Используя ассемблер (язык машинных кодов с символьными командами), можно добраться до бита переноса и использовать его.

2 Кроме логического сдвига вправо, о котором идет речь, есть еще арифметический, при котором старший бит не меняется.

3 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

15isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Методист-разработчик онлайн-курсов

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B6.doc

isa.muschanov.70@yandex.ru

B6 (повышенный уровень, время – 8 мин)

Тема: Решение логических задач методом рассуждений.

Построение и преобразование логических выражений.

Что нужно знать:

  • таблицы истинности логических операций «И», «ИЛИ», «НЕ» (см. презентацию «Логика»)

  • логическое произведение ABC∙… равно 1 (выражение истинно) только тогда, когда все сомножители равны 1 (а в остальных случаях равно 0)

  • логическая сумма A+B+C+… равна 0 (выражение ложно) только тогда, когда все слагаемые равны 0 (а в остальных случаях равна 1)

  • правила преобразования логических выражений (слайд из презентации «Логика»):

hello_html_m706108c7.png

Пример задания:

Классный руководитель пожаловался директору, что у него в классе появилась компания из 3-х учеников, один из которых всегда говорит правду, другой всегда лжет, а третий говорит через раз то ложь, то правду. Директор знает, что их зовут Коля, Саша и Миша, но не знает, кто из них правдив, а кто – нет. Однажды все трое прогуляли урок астрономии. Директор знает, что никогда раньше никто из них не прогуливал астрономию. Он вызвал всех троих в кабинет и поговорил с мальчиками. Коля сказал: «Я всегда прогуливаю астрономию. Не верьте тому, что скажет Саша». Саша сказал: «Это был мой первый прогул этого предмета». Миша сказал: «Все, что говорит Коля, – правда». Директор понял, кто из них кто. Расположите первые буквы имен мальчиков в порядке: «говорит всегда правду», «всегда лжет», «говорит правду через раз». (Пример: если бы имена мальчиков были Рома, Толя и Вася, ответ мог бы быть: РТВ)

Решение (вариант 1, метод рассуждений):

  1. во-первых, есть «точная» информация, которая не подвергается сомнению:

(*) все трое прогуляли урок астрономии в первый раз

  1. запишем высказывания мальчиков:

Коля: 1. Я всегда прогуливаю астрономию.

2. Саша врет.

Саша: 1. Я в первый раз прогулял астрономию.

Миша: 1. Коля говорит правду.

  1. известно, что один из них все время лжет, второй ­– говорит правду, а третий говорит правду через раз (то есть, из двух его высказываний одно истинно, а второе – ложно; если у нас есть только одно высказывание «полу-лжеца», оно может быть как истинным, так и ложным)

  2. сопоставив первое высказывание Коли и высказывание Саши с «точной» информацией (*), сразу определяем, то тут Коля соврал, а Саша сказал правду; это значит, что второе высказывание Коли – тоже неверно, поэтому мальчик Коля всегда лжет

  3. тогда один из оставшихся, Саша или Миша, говорит правду всегда, а второй – через раз

  4. Мишино высказывание неверно, поскольку мы уже определили, что Коля лжет; это значит, что Миша не всегда говорит правду, он – «полу-лжец»

  5. тогда получается, что Саша всегда правдив, и действительно, его высказывание верно

  6. таким образом, верный ответ – СКМ (Саша – правдив, Коля – лжец, Миша – «полу-лжец» ).

Возможные проблемы:

  • длинное запутанное условие, из которого нужно выделить действительно существенную информацию и формализовать ее

  • легко по невнимательности перепутать порядок букв в ответе (здесь сначала правдивый, потом – лжец, потом – «полу-лжец»)

Еще пример задания:

Классный руководитель пожаловался директору, что у него в классе появилась компания из 3-х учеников, один из которых всегда говорит правду, другой всегда лжет, а третий говорит через раз то ложь, то правду. Директор знает, что их зовут Коля, Саша и Миша, но не знает, кто из них правдив, а кто – нет. Встретив однажды всех троих в коридоре, директор решил поговорить с мальчиками. Коля сказал: «Саша всегда лжет». Саша сказал: «Коля прав». Директору стало все понятно. Расположите первые буквы имен мальчиков в порядке: «говорит всегда правду», «всегда лжет», «говорит правду через раз». Например: если бы имена мальчиков были Рома, Толя и Вася, ответ мог бы быть: РТВ.

Решение (вариант 1, метод рассуждений):

  1. в отличие от предыдущей задачи, здесь нет точной информации

  2. у нас всего два высказывания мальчиков:

Коля: Саша всегда лжет

Саша: Коля прав

  1. в отличие от предыдущей задачи, второе высказывание связано с первым: Сашино утверждение относится к данному конкретному высказыванию Коли, а не к честности Коли вообще

  2. в такой ситуации нужно предположить, что истинно одно из высказываний и проверить, не приводит ли это к противоречию

  3. предположим, что Коля сказал правду; тогда получается, что Саша (который всегда лжет) солгал и на этот раз; однако если Саша солгал, то получается, что Коля сказал неправду, то есть, мы пришли к противоречию, и Коля в самом деле солгал

  4. если Коля солгал, то получается, что Саша тоже солгал, то есть, оба мальчика сказали неправду; отсюда следует, что один из них – лжец, а второй «полу-лжец», тогда как Миша (ничего не сказавший) говорит всегда правду

  5. остается определить, кто из двоих (Коля или Саша) лжец, а кто – «полу-лжец»

  6. с первого взгляда кажется, что это невозможно сделать, но ложные утверждения двух мальчиков разные: Коля говорит (неправду) о том, что Саша всегда лжет, а Саша говорит только о последнем (предыдущем) утверждении Коли; на этой разнице и основано решение

  7. мы уже выяснили, что Коля солгал, то есть Саша не всегда лжет, он – «полу-лжец»; тогда сразу получается, что Коля – лжец

  8. таким образом, верный ответ – МКС (Миша – правдив, Коля – лжец, Саша – «полу-лжец»).

Возможные проблемы:

  • в этой задаче нет точной информации, поэтому приходится предполагать истинность того или другого высказывания и проверять, не противоречат ли этому предположению остальные утверждения

  • если мы выяснили, что высказывание «Саша всегда лжет» ложно, это не означает, что Саша всегда говорит правду; Саша не всегда лжет, то есть, он может быть и правдивым, и «полу-лжецом»

  • легко по невнимательности перепутать порядок букв в ответе (здесь сначала правдивый, потом – лжец, потом – «полу-лжец»)

Еще пример задания:

Перед началом Турнира Четырех болельщики высказали следующие предположения по поводу своих кумиров:

А) Макс победит, Билл – второй;

В) Билл – третий, Ник – первый;

С) Макс – последний, а первый – Джон.

Когда соревнования закончились, оказалось, что каждый из болельщиков был прав только в одном из своих прогнозов. Какое место на турнире заняли Джон, Ник, Билл, Макс? (В ответе перечислите подряд без пробелов места участников в указанном порядке имен.)

Решение (вариант 1, табличный метод):

  1. запишем высказывания трех болельщиков в форме таблицы (заголовок строки обозначает место в турнирной таблице):


    A

    B

    C

    1

    Макс

    Ник

    Джон

    2

    Билл



    3


    Билл


    4



    Макс

  2. считая, что два человека не могут оказаться на одном месте, начнем «раскручивать» эту таблицу с той строчки, где больше всего информации (в данном случае – с первой)

  3. предположим, что Макс действительно занял первое место, как и сказал «A»; в этом случае

  • «C» ошибся, поставив на первое место Джона;

  • учитывая, что каждый один раз угадал, а второй ошибся, получается, что «C» угадал, что Макс будет на четвертом месте;

  • но мы предположили, что Макс – на первом месте (а не на четвертом), следовательно, получили противоречие; это значит, что Макс все-таки не на первом месте

  • таким образом, в первом прогнозе «А» ошибся, это значит, что во втором он угадал, и Билл действительно занял второе место:


    A

    B

    C

    1

    Макс

    Ник

    Джон

    2

    Билл



    3


    Билл


    4



    Макс

  • так как Билл – второй, он не может быть на третьем месте, поэтому из прогноза «Б» следует, что Ник – первый:


    A

    B

    C

    1

    Макс

    Ник

    Джон

    2

    Билл



    3


    Билл


    4



    Макс

  • если Ник на первом месте, там не может быть Джон, поэтому из ответов «С» (среди которых должен быть один верный, и один неверный), сразу находим, что Макс занял четвертое место:


A

B

C

1

Макс

Ник

Джон

2

Билл



3


Билл


4



Макс

  1. осталось только определиться с Джоном – ему досталось единственное «свободное» третье место; окончательный список победителей:

1. Ник 2. Билл 3. Джон 4. Макс

  1. места победителей в порядке их перечисления в тексте вопроса: Джон – 3 , Ник – 1,
    Билл – 2, Макс - 4

  2. таким образом, правильный ответ 3124.

Возможные ловушки и проблемы:

  • из-за невнимательности есть риск записать места не в том порядке

  • из-за невнимательности можно записать не места (как сказано в этом задании), а первые буквы имен (здесь это будет неверный ответ, а в каких-то задачах – наоборот, верный); так что читайте внимательно условие

Решение (вариант 2, преобразование логических выражений):

  1. применим к этой задаче формальный аппарат математической логики

  2. каждый из трех болельщиков высказал два утверждения, всего получилось 6; обозначим их так:

A: М1 = «Макс – первый», Б2 = «Билл – второй»

B: Н1 = «Ник – первый», Б3 = «Билл – третий»

C: Д1 = «Джон – первый», М4 = «Макс – четвертый»

  1. теперь как-то нужно записать, что у каждого одно высказывание верно, а второе неверно; скажем, для «A» это равносильно двум следующим условиям, которые должны выполняться одновременно:

A: М1 + Б2 = 1, (по крайней мере одно из двух условий истинно)

М1 · Б2 = 0 (по крайней мере одно из двух условий ложно)

аналогично для остальных болельщиков1

B: Н1 + Б3 = 1, Н1 · Б3 = 0

С: Д1 + М4 = 1, Д1 · М4 = 0

  1. перемножим первые условия из каждой пары; поскольку все эти суммы равны 1, получаем

(М1 + Б2) · (Н1 + Б3) · (Д1 + М4) = 1

  1. раскроем произведение первых двух скобок

(М1 · Н1 + М1 · Б3 + Б2 · Н1 + Б2 · Б3) · (Д1 + М4) = 1

  1. попробуем упростить «большую» скобку»; во-первых, два человека (Макс и Ник) не могут одновременно находиться на первом месте, поэтому М1 · Н1 = 0

  2. во-вторых, один человек (Билл) не может одновременно находиться и на втором, и на третьем месте, поэтому Б2 · Б3 = 0, так что

(М1 · Б3 + Б2 · Н1) · (Д1 + М4) = 1

  1. снова перемножим скобки и получим

М1 · Б3 · Д1 + М1 · Б3 · М4 + Б2 · Н1 · Д1 + Б2 · Н1 · М4 = 1

  1. так же, как и в п. 6-7, находим, что М1 · Д1 = 0, М1 · М4 = 0 и Н1 · Д1 = 0, так что

Б2 · Н1 · М4 = 1 (*)

  1. из последнего уравнения следует, что Б2 = 1 (Билл на втором месте), Н1 = 1 (Ник – на первом) и М4 = 1 (Макс – на четвертом), а Джону осталось третье

  2. таким образом, правильный ответ 3124

  3. обратите внимание, что вторые условия (М1 · Б2 = 0, Н1 · Б3 = 0 и Д1 · М4 = 0 ) мы даже нигде не использовали, все получилось «само собой», поскольку уравнение (*) имеет единственное решение.

Возможные проблемы:

  • легко запутаться в обозначениях, например, вместо Б1 написать М1 и т.п.

  • преобразования хотя и простые, но длинные, поэтому можно легко запутаться в них, особенно в условиях стресса

Решение (вариант 3, метод графов2):

  1. каждый из трех болельщиков высказал два утверждения, всего получилось 6:

A: «Макс – первый», «Билл – второй»

B: «Ник – первый», «Билл – третий»

C: «Джон – первый», «Макс – четвертый»

  1. фактически эти утверждения обозначают связи между участниками соревнования и занятыми местами, которые можно нарисовать в виде (двудольного) графа, в первую группу вершин включим всех участников, а во вторую – места

  2. высказывания болельщика А обозначим сплошной линией, высказывания болельщика B – штриховой, а высказывания болельщика С – двойной сплошной:

    Дhello_html_1608e0c5.gifhello_html_54304061.gifhello_html_6f907022.gifhello_html_6f907022.gifжон


    1

    Нhello_html_mc808b70.gifик


    2

    Бhello_html_m305f23f0.gifилл


    3

    Макс


    4

  3. поскольку у каждого болельщика одно высказывание верно, а второе – нет, из каждой пары линий нужно оставить одну, то есть, должна остаться одна сплошная, одна штриховая и одна двойная

  4. поскольку каждый участник занял ровно одно место и каждое место занято ровно одним участников, оставшиеся линии не должны соединяться концами

  5. перебором находим, что единственный вариант, удовлетворяющий всем условиям, этот тот, который изображен на рисунке ниже:



Дhello_html_54304061.gifhello_html_6f907022.gifжон


1

Нhello_html_mc808b70.gifик


2

Билл


3

Макс


4

  1. по рисунку видно, что Ник занял первое место, Билл – второе, Макс – четвертое, а для Джона осталось третье место

  2. таким образом, правильный ответ 3124

Возможные проблемы:

  • в «боевой» обстановке неудобно рисовать линии разного типа, в них легко запутаться

  • неудобно делать перебор вариантов (нужно зачеркивать линии)

Еще пример задания:

Мама, прибежавшая на звон разбившейся вазы, застала всех трех своих сыновей в совершенно невинных позах: Саша, Ваня и Коля делали вид, что происшедшее к ним не относится. Однако футбольный мяч среди осколков явно говорил об обратном.

Кто это сделал? – спросила мама.

Коля не бил по мячу, – сказал Саша. – Это сделал Ваня.

Ваня ответил: – Разбил Коля, Саша не играл в футбол дома.

Так я и знала, что вы друг на дружку сваливать будете, рассердилась мама. Ну, а ты что скажешь? – спросила она Колю.

Не сердись, мамочка! Я знаю, что Ваня не мог этого сделать. А я сегодня еще не сделал уроки, – сказал Коля.

Оказалось, что один из мальчиков оба раза солгал, а двое в каждом из своих заявлений говорили правду. Кто разбил вазу?

Решение (вариант 1, метод рассуждений):

  1. запишем высказывания трех мальчиков в краткой форме:

Саша: 1. это не Коля 2. это Ваня

Ваня: 1. это Коля 2. это не Саша

Коля: 1. это не Ваня

обратите внимание, что у Коли всего одно высказывание, которое «относится к делу»; то, что он сделал или не сделал уроки, никак не проясняет ситуацию с разбитой вазой

  1. итак, двое мальчиков сказали правду;

  • это не могут быть Саша и Ваня, потому что их первые высказывания противоречат одно другому

  • это не могут быть Саша и Коля, поскольку высказывание Коли противоречит второму высказыванию Саши

  • поэтому правду сказали Ваня и Коля, а Саша – соврал

  1. таким образом, вазу разбил Коля

Решение (вариант 2, преобразование логических выражений):

  1. применим к этой задаче формальный аппарат математической логики; введем высказывания:

С: вазу разбил Саша

В: вазу разбил Ваня

К: вазу разбил Коля

  1. запишем с помощью этих обозначений утверждения мальчиков:

Саша: 1. hello_html_m57a6b47d.gif 2. hello_html_m63aa4fa9.gif

Ваня: 1. hello_html_3eb40b6c.gif 2. hello_html_6b398ca2.gif

Коля: 1. hello_html_mc01181f.gif

  1. читаем условие: «один из мальчиков оба раза солгал, а двое в каждом из своих заявлений говорили правду»;

  2. как записать «Саша два раза солгал»? в этом случае оба его утверждения неверны, поэтому hello_html_m16b5e881.gif и hello_html_m1dd35503.gif, что равносильно hello_html_51fd1f82.gif

  3. как записать «Саша два раза сказал правду»? в этом случае оба его утверждения неверны, поэтому hello_html_m390242cf.gif и hello_html_m57bfbe7c.gif, что равносильно hello_html_4feca4df.gif

  4. если Коля солгал, а Саша и Ваня сказали правду, то

hello_html_m75ebce1e.gif и hello_html_7c761b72.gif и hello_html_m2d87e6ba.gif

заменив «И» на умножение, получаем hello_html_m728b521b.gif; учитывая, что hello_html_20da5844.gif, получаем в левой части равенства ноль; так как в правой части – единица, этого не может быть (равенство ложно при любых значениях hello_html_mea53d95.gif)

  1. если Ваня солгал, а Саша и Коля сказали правду, то

hello_html_m75ebce1e.gif и hello_html_7995ab26.gif и hello_html_3edc9c1a.gif

заменив «И» на умножение, получаем hello_html_m38647e56.gif; учитывая, что hello_html_m551004d1.gif, получаем, что это равенство ложно при любых значениях hello_html_mea53d95.gif (этого не может быть)

  1. остается последний возможный вариант: если Саша оба раза солгал, а Ваня и Коля сказали правду, то

hello_html_51fd1f82.gif и hello_html_7c761b72.gif и hello_html_7a46e455.gif

заменив «И» на умножение, получаем hello_html_a762776.gif; упростив это выражение с учетом равенств hello_html_6690e3a8.gif и hello_html_m4340711f.gif, получим hello_html_m20f1a212.gif; то есть, при этом предположении вазу разбил Коля, а не Ваня и не Саша;

  1. таким образом, вазу разбил Коля

  2. при несколько измененном условии нам, возможно, пришлось бы использовать дополнительные условия hello_html_5b61cf58.gif (вазу разбил только один из мальчиков, а не два и не три), но здесь они не пригодились

Решение (вариант 3, метод подбора, автор идеи – А. Сидоров, ЭПИ МИСИС):

  1. запишем высказывания трех мальчиков в краткой форме:

Саша: 1. Коля не разбивал 2. Ваня разбил

Ваня: 1. Коля разбил 2. Саша не разбивал

Коля: 1. Ваня не разбивал

  1. оформим эти данные в виде таблицы, где в строках записаны высказывания мальчиков, а в столбцах – информация, которая в них содержится:



Саша разбил

Ваня разбил

Коля разбил

Саша


1

0

Ваня

0


1

Коля


0


Например, из первой строки следует, что Саша сказал, что вазу разбил Ваня, а Коля не разбивал. Пустые клетки означают, что информации нет: например, Коля ничего не говорил о Саше (последняя строка).

  1. подумаем, как выглядела бы таблица, если бы все мальчики сказали правду; очевидно, что все они указали бы на одного, который и разбил вазу; это значит, что в одном столбце были бы только единицы (и, возможно, пустые ячейки), а в остальных – только нули

  2. мы знаем, что один мальчик соврал, а двое остальных сказали оба раза правду; по таблице видим, что соврал Саша или Ваня, потому что в их строчках единицы стоят в разных столбцах

  3. поскольку один мальчик соврал оба раза, для получения «правильной» таблицы (один столбец с единицами, а остальные – с нулями) нужно инвертировать одну строку (построить инверсию, заменить все единицы на нули и наоборот)3

  4. инверсия первой строчки дает такое решение (во последнем столбце все единицы, в остальных – все нули):


    Саша разбил

    Ваня разбил

    Коля разбил

    Саша


    1 0  

    0 1  

    Ваня

    0


    1

    Коля


    0


  5. таким образом, вазу разбил Коля

  6. заметим, что если инвертировать вторую строку, единицы снова оказываются в разных столбцах (в первом и во втором) поэтому этот вариант не проходит и решение единственно

Вывод:

  • есть несколько способов решения, «каждый выбирает для себя»

  • поскольку на ЕГЭ не нужно демонстрировать «крутизну» и умение оперировать логическими формулами, а нужно просто получить правильный ответ за короткое время, автор предпочел бы простейшие варианты (метод рассуждений, таблицы истинности), которые могут применить даже школьники младших классов.

Еще пример задания:

На одной улице стоят в ряд 4 дома, в каждом из них живет по одному человеку. Их зовут Василий, Семен, Геннадий и Иван. Известно, что все они имеют разные профессии: скрипач, столяр, охотник и врач. Известно, что

(1) Столяр живет правее охотника.

(2) Врач живет левее охотника.

(3) Скрипач живет с краю.

(4) Скрипач живет рядом с врачом.

(5) Семен не скрипач и не живет рядом со скрипачом.

(6) Иван живет рядом с охотником.

(7) Василий живет правее врача.

(8) Василий живет через дом от Ивана.

Определите, кто где живет, и запишите начальные буквы имен жильцов всех домов слева направо. Например, если бы в домах жили (слева направо) Кирилл, Олег, Мефодий и Пафнутий, ответ был бы КОМП.

Эта задача представляет собой упрощенный вариант Задачи Эйнштейна4.

Решение (вариант 1, метод рассуждений с таблицами):

  1. из условий (1) и (2) следует, что охотник живет не с краю, потому что справа от него живет столяр, а слева – врач;

  2. скрипач по условию (3) живет с краю, он может жить как слева, так и справа от них:






    скрипач?

    врач

    охотник

    столяр

    скрипач?






  3. по условию (4) скрипач живет рядом с врачом, поэтому он занимает крайний дом слева:

    1

    2

    3

    4

    скрипач

    врач

    охотник

    столяр





  4. профессии жильцов определили, остается разобраться с именами

  5. из условия (5) «Семен не скрипач и не живет рядом со скрипачом» следует, что Семен – охотник или столяр:

    1

    2

    3

    4

    скрипач

    врач

    охотник

    столяр



    Семен?

    Семен?

  6. из условия (6) «Иван живет рядом с охотником» следует, что он – врач или столяр:

    1

    2

    3

    4

    скрипач

    врач

    охотник

    столяр



    Семен?

    Семен?


    Иван?


    Иван?

  7. из условия (7) «Василий живет правее врача» определяем, что Василий – охотник или столяр

    1

    2

    3

    4

    скрипач

    врач

    охотник

    столяр



    Семен?

    Семен?


    Иван?


    Иван?



    Василий?

    Василий?

  8. из условия (8) «Василий живет через дом от Ивана» находим, что Иван – врач, а Василий –столяр:

    1

    2

    3

    4

    скрипач

    врач

    охотник

    столяр


    Иван

    Семен?

    Василий

  9. тогда сразу получается, что Семен – охотник, а Геннадий должен занять оставшееся свободное место, он ­– скрипач:

    1

    2

    3

    4

    скрипач

    врач

    охотник

    столяр

    Геннадий

    Иван

    Семен

    Василий

  10. таким образом, ответ ГИСВ

Решение (вариант 2, метод рассуждений с таблицами):

  1. пронумеруем дома слева направо (от 1 до 4);

  2. находим наиболее точное условие: это условие (3) ­«Скрипач живет с краю»; таким образом, скрипач может жить в доме 1 или в доме 4

    1

    2

    3

    4

    скрипач?

    ?

    ?

    скрипач?





  3. по условию (4) скрипач живет рядом с врачом, но врач живет левее охотника (условие (2)), поэтому скрипач не может жить в доме (4), так как тогда получается врач, живущий с ним рядом, живет правее охотника, что противоречит условию (2); таким образом, скрипач живет в доме 1, а врач – рядом с ним

    1

    2

    3

    4

    скрипач

    врач

    ?

    ?





  4. из условий (1) и (2) следует, что в домах 3 и 4 живут соответственно охотник и столяр

    1

    2

    3

    4

    скрипач

    врач

    охотник

    столяр





  5. далее можно рассуждать так же, как и в предыдущем варианте решения

  6. таким образом, ответ ГИСВ

Вывод:

  • в таких задачах нужно начинать с наиболее ограничивающих (точных) условий

  • если одного такого условия нет, нужно найти несколько условий, которые рассматривают одно и то же с разных сторон (например, условия (1) и (2) дают информацию об охотнике, а (3)-(5) – о скрипаче)

  • рисование таблиц существенно упрощает решение

Еще пример задания:

В состав экспедиции входят Ренат, Сергей и Виктор. На обсуждении распределения обязанностей с руководителем проекта были высказаны предположения, что командиром будет назначен Ренат, Сергей не будет механиком, а Виктор будет утвержден радистом, но командиром не будет.

Позже выяснилось, что только одно из этих четырех утверждений оказалось верным. Перечислите, кто занял должности командира, механика и радиста, записав первые буквы имен членов экипажа в указанном порядке.

Решение (метод рассуждений с таблицами):

  1. будем использовать первые буквы названий должностей: К – командир, М – механик, Р – радист

  2. запишем высказывания в виде таблицы:


    Ренат

    Сергей

    Виктор

    1

    К



    2


    не М


    3



    Р

    4



    не К

  3. сразу заметим, что высказывание 3 (Виктор – радист) неверно, потому что иначе оказывается верным и высказывание 4, чего не может быть по условию (верно только одно высказывание)

  4. если Ренат – командир (высказывание 1 верно), то остальные высказывания – неверны; поэтому Сергей – механик (из 2) и Виктор – не радист (из 3), а командир; но тогда получается, что некому быть радистом и в экипаже 2 командира; значит, это предположение неверно

  5. теперь предположим, что Сергей – не механик; отсюда следует, что Ренат – не командир (из 1), а Виктор – командир (из 4) и не радист (из 3); это может быть, если Ренат – механик, а Сергей – радист; скорее всего, мы получили правильный ответ ВРС (Виктор – командир, Ренат – механик, Сергей – радист)

  6. на всякий случай проверим последний вариант – предположим, что Виктор – не командир (высказывание 4 истинно, а остальные – ложны); сразу получаем, что Виктор – не радист (из 3), Сергей – механик (из 2), а Ренат – не командир (из 1); в этом случае два претендента на должность механика (Сергей и Виктор), а командира нет вообще, поэтому это неверный вариант

  7. таким образом, правильный ответ – ВРС

Еще пример задания:

Восемь школьников оставались в классе на перемене, и один из них разбил окно. На вопрос директора, кто это сделал, были получены следующие ответы:

Егор: «Разбил Андрей»!

Света: «Вика разбила»!

Оля: «Разбила Света».

Миша: «Это кто-то с улицы»!

Надя: «Да, Оля права».

Коля: «Это либо Вика, либо Света»!

Андрей: «Ни Вика, ни Света этого не делали»!

Вика: «Андрей не бил»!

Кто разбил окно, если известно, что из этих высказываний истинно ровно три. Ответ запишите в виде первой буквы имени.

Решение (табличный метод):

  1. заметим, что по условию высказывание Миши («Это кто-то с улицы») заведомо ложно, поскольку окно разбил кто-то из перечисленных детей, поэтому его можно вообще не учитывать

  2. проще всего решить эту задачу с помощью таблицы; в первом столбце запишем все высказывания, а в остальных будем отмечать, истинно высказывание или ложно (1 или 0), если окно разбил ученик, имя которого записано в заголовке столбца

  3. например, если предположить что окно разбил Егор, получается так:


Егор

Разбил Андрей

0

Разбила Вика

0

Разбила Света

0

Оля права = Разбила Света

0

Разбила Вика или Света

0

Это не Вика и не Света

1

Это не Андрей

1

видим, что истинны только два высказывания, а не три (как нужно по условию); следовательно, это не Егор

  1. строим таблицу для случаев, предполагая, что окно разбила Света, затем – Оля и т.д.:


    Егор

    Света

    Оля

    Миша

    Надя

    Коля

    Андрей

    Вика

    Разбил Андрей

    0

    0

    0

    0

    0

    0

    1

    0

    Разбила Вика

    0

    0

    0

    0

    0

    0

    0

    1

    Разбила Света

    0

    1

    0

    0

    0

    0

    0

    0

    Оля права = Разбила Света

    0

    1

    0

    0

    0

    0

    0

    0

    Разбила Вика или Света

    0

    1

    0

    0

    0

    0

    0

    1

    Это не Вика и не Света

    1

    0

    1

    1

    1

    1

    1

    0

    Это не Андрей

    1

    1

    1

    1

    1

    1

    0

    1

  2. только в последнем столбце ровно три единицы (три высказывания истинны), поэтому окно разбила Вика

  3. таким образом, ответ – В.

Возможные проблемы:

  • получив в очередном столбце нужное количество единиц (верное решение), не поленитесь заполнить все остальные столбцы, они не должны соответствовать условию

Еще пример задания5:

В бюро переводов приняли на работу троих сотрудников: Диму, Сашу и Юру. Каждый из них знает ровно два иностранных языка из следующего набора: немецкий, японский, шведский, японский, китайский, французский и греческий. Известно, что

(1) Ни Дима, ни Юра не знают японского

(2) Переводчик со шведского старше переводчика с немецкого

(3) Переводчик с китайского, переводчик с французского и Саша родом из одного города

(4) Переводчик с греческого, переводчик с немецкого и Юра учились втроем в одном
институте

(5) Дима – самый молодой из всех троих, и он не знает греческого

(6) Юра знает два европейских языка

В ответе запишите первую букву имени переводчика со шведского языка и, через запятую, первую букву имени переводчика с китайского языка.

Решение (табличный метод):

  1. составим таблицу, где каждая строка соответствует переводчику, а столбец – языку


    Немецкий

    Шведский

    Японский

    Китайский

    Французский

    Греческий

    Дима







    Юра







    Саша







  2. знание языка будем отмечать в таблице единицей, а незнание – нулем

  3. по условию каждый переводчик знает ровно 2 языка, поэтому в каждой строке должно быть две единицы;

  4. также по условию каждый язык знает только один переводчик, поэтому в каждом столбце должна быть только одна единица

  5. из (1) следует, что японский знает Саша


    Немецкий

    Шведский

    Японский

    Китайский

    Французский

    Греческий

    Дима



    0




    Юра



    0




    Саша



    1




  6. из (2) и (5) следует, что Дима не знает ни шведского, ни греческого:


    Немецкий

    Шведский

    Японский

    Китайский

    Французский

    Греческий

    Дима


    0

    0



    0

    Юра



    0




    Саша



    1




  7. из (3) следует, что Саша не знает ни китайского, ни французского:


    Немецкий

    Шведский

    Японский

    Китайский

    Французский

    Греческий

    Дима


    0

    0



    0

    Юра



    0




    Саша



    1

    0

    0


  8. из (4) следует, что Юра не знает ни греческого, ни немецкого; отсюда сразу следует, что греческий знает Саша; поскольку он знает всего два языка, немецкий и шведский он не знает:


    Немецкий

    Шведский

    Японский

    Китайский

    Французский

    Греческий

    Дима


    0

    0



    0

    Юра

    0


    0



    0

    Саша

    0

    0

    1

    0

    0

    1

  9. далее сразу получаем, что Дима знает немецкий, а Юра – шведский:


    Немецкий

    Шведский

    Японский

    Китайский

    Французский

    Греческий

    Дима

    1

    0

    0



    0

    Юра

    0

    1

    0



    0

    Саша

    0

    0

    1

    0

    0

    1

  10. из (6) находим, что второй (европейский!) язык Юры – французский; тогда Диме остается китайский:


    Немецкий

    Шведский

    Японский

    Китайский

    Французский

    Греческий

    Дима

    1

    0

    0

    1

    0

    0

    Юра

    0

    1

    0

    0

    1

    0

    Саша

    0

    0

    1

    0

    0

    1

  11. таким образом, ответ Ю,Д

Еще пример задания:

На кольцевой трассе автогонок расположены 4 препятствия («болото», «трамплин», «крутой поворот», «скользкая дорога»). В судейском протоколе 4 этапа обозначены буквами А, Б, В, Г. Известно, что этап Б расположен между этапом А и «крутым поворотом». Этап В – это не «крутой поворот» и не «скользкая дорога». Он расположен между этапами «трамплин» и Г. Установите соответствие между этапами.

В ответ запишите, какими буквами в судейском протоколе обозначены соответственно этапы «болото», «трамплин», «крутой поворот», «скользкая дорога». (Например, если этап «болото» обозначен буквой А, этап «трамплин» – буквой Б, этап «крутой поворот» – В, а этап «скользкая дорога» – Г, то в ответ нужно записать АБВГ)

Решение (табличный метод):

  1. обратим внимание, что трасса кольцевая, это будет важно!

  2. выделим явно полезную информацию в виде высказываний:

(1) этап Б расположен между этапом А и «крутым поворотом»

(2) этап В – это не «крутой поворот» и не «скользкая дорога»

(3) этап В расположен между этапами «трамплин» и Г

  1. составим таблицу, где каждая строка соответствует букве-обозначению, а столбец – препятствию

  2. из (1) следует, что «крутой поворот» – это не А и не Б


    болото

    трамплин

    крутой

    скользкая

    А



    0


    Б



    0


    В





    Г





  3. из (2) следует, что «крутой поворот» и «скользкая дорога» – это не В, поэтому «крутой поворот обозначается буквой Г:


    болото

    трамплин

    крутой

    скользкая

    А



    0


    Б



    0


    В



    0

    0

    Г

    0

    0

    1

    0

  4. из (3) следует, что В – это не трамплин, отсюда сразу получаем, что В – болото:






болото

трамплин

крутой

скользкая

А

0


0


Б

0


0


В

1

0

0

0

Г

0

0

1

0

  1. осталось неясно, где трамплин, а где скользкая дорога; для этого нужно использовать информацию о том, какие этапы где расположены (между чем и чем);

  2. из (1) следует, что этап Б расположен между А и Г, поэтому схема должна быть такой (или зеркально симметричной, но это не меняет дела):

hello_html_m36889c0e.gif

  1. из (3) следует, что этап В расположен между этапами «трамплин» и Г, поэтому (с учетом кольца!) этап А – это трамплин, тогда получается, что Б – это скользкая дорога:


    болото

    трамплин

    крутой

    скользкая

    А

    0

    1

    0

    0

    Б

    0

    0

    0

    1

    В

    1

    0

    0

    0

    Г

    0

    0

    1

    0

  2. таким образом, ответ – ВАГБ.

Еще пример задания:

Три ученика, Саша, Коля и Вова, прогуляли информатику. Когда их спросили, кому пришла в голову эта идея, они ответили следующее:

Саша: «Я никогда не призывал к прогулу, это была идея Коли».

Коля: «Я никогда не предложил бы это первым, во всем виноват Вова».

Вова: «Эта идея пришла в голову Коле. Я просто пошел за компанию».

Внутренним чутьем учитель почувствовал, что двое учеников говорят правду наполовину, а один – лжет. Кто из учеников был инициатором прогула? Ответ дайте в виде первой буквы имени.

Решение (вариант 1, метод рассуждений):

  1. у каждого мальчика два высказывания, запишем их в более формальном виде:

Саша: 1. Это не Саша. 2. Это Коля.

Коля: 1. Это не Коля. 2. Это Вова.

Вова: 1. Это Коля. 2. Это не Вова.

  1. теперь предположим, что зачинщик – Саша; составим таблицу, где отметим истинность каждого высказывания единицей, а ложность – нулем:


    если это Саша

    если это Коля

    если это Вова

    Саша

    0 0



    Коля

    1 0



    Вова

    0 1



  2. этот вариант уже подходит, потому что Саша оба раза солгал, а остальные сказали один раз правду, а второй – нет;

  3. на всякий случай проверяем остальные варианты


    если это Саша

    если это Коля

    если это Вова

    Саша

    0 0

    1 1

    1 0

    Коля

    1 0

    0 0

    1 1

    Вова

    0 1

    1 1

    0 0

  4. таким образом, Саша первым предложил прогулять урок, ответ – С.


Задачи для тренировки6:

  1. В школьном первенстве по настольному теннису в четверку лучших вошли девушки: Наташа, Маша, Люда и Рита. Самые горячие болельщики высказали свои предположения о распределении мест в дальнейших состязаниях. Один считает, что первой будет Наташа, а Маша будет второй. Другой болельщик на второе место прочит Люду, а Рита, по его мнению, займет четвертое место. Третий любитель тенниса с ними не согласился. Он считает, что Рита займет третье место, а Наташа будет второй. Когда соревнования закончились, оказалось, что каждый из болельщиков был прав только в одном из своих прогнозов. Какое место на чемпионате заняли Наташа, Маша, Люда, Рита? (В ответе перечислите подряд без пробелов числа, соответствующие местам девочек в указанном порядке имен.)


  1. Когда сломался компьютер, его хозяин сказал «Память не могла выйти из строя». Его сын предположил, что сгорел процессор, а винчестер исправен. Пришедший специалист по обслуживанию сказал, что, скорее всего, с процессором все в порядке, а память неисправна. В результате оказалось, что двое из них сказали все верно, а третий – все неверно. Что же сломалось?


  1. Три молодые мамы Анна, Ирина и Ольга, гуляя в парке со своими малышами, встретили свою четвертую подругу. На вопрос, как зовут малышей, желая подшутить над подружкой, они ответили:

Анна: моего малыша зовут Денис, а Кирилл – сын Ирины.

Ирина: моего сыночка зовут Максим, а Кирилл – сын Анны.

Ольга: мой мальчик – Кирилл, а сына Анны зовут Максим.

Каждая из них один раз сказала правду и один раз солгала. Как зовут мальчиков Анны, Ирины и Ольги? В ответе перечислите подряд без пробелов буквы, соответствующие именам мальчиков

в указанном порядке имен их мам, например КМД.


  1. В первом туре школьного конкурса «Эрудит» в четверку лучших вошли: Дима, Катя, Миша и Нина. И конечно, болельщики высказывали свои предположения о распределении мест во втором, финальном туре. Один считал, что первым будет Дима, а Миша будет вторым. Другой болельщик выразил надежду на то, что Катя займет четвертое место, а второе место достанется Нине. Третий же был уверен в том, что Катя займет третье место, а на втором месте будет Дима. В результате оказалось, что каждый из болельщиков был прав только в одном из своих прогнозов. Какие места заняли Дима, Катя, Миша, Нина? В ответе перечислите подряд без пробелов числа, соответствующие местам в указанном порядке имен.


  1. Алеша, Витя и Игорь после уроков нашли на полу в кабинете физики маленькую гирьку. Каждый из них, рассматривая находку, высказал два предположения. Алеша сказал: «Это гирька из латуни, и весит она, скорей всего, 5 г», Витя предположил, что гирька сделана из меди и весит 3 г. Игорь же считал, что гирька не из латуни и вес ее – 4 г. Учитель физики обрадовался, что пропажа нашлась, и сказал ребятам, что каждый из них прав только наполовину. Из какого металла – латуни (Л) или меди (М) – изготовлена гирька, и каков ее вес? В ответе запишите первую букву названия металла, а затем цифру, соответствующую весу гирьки, например, Л4.


  1. Три ученика из разных школ на вопрос, в какой школе учатся, ответили:

Артем: я учусь в школе №534, а Кирилл – в школе №76.

Кирилл: я учусь в школе №534, а Артем – в школе №105.

Максим: я учусь в школе №534, а Артем – в школе №76.

Каждый из них один раз сказал правду и один раз солгал. В каких школах учатся Артем, Кирилл и Максим? В ответе перечислите подряд без пробелов числа, соответствующие номерам школ

в указанном порядке имен, например 53410576.


  1. На перекрестке произошло дорожно-транспортное происшествие, в котором участвовали автобус (А), грузовик (Г), легковой автомобиль (Л) и маршрутное такси (М). Свидетели происшествия дали показания инспектору ГИБДД. Первый свидетель считал, что первым на перекресток выехал автобус, а маршрутное такси было вторым. Другой свидетель полагал, что последним на перекресток выехал легковой автомобиль, а вторым был грузовик. Третий свидетель уверял, что автобус выехал на пере­кресток вторым, а следом за ним – легковой автомобиль. В результате оказалось, что каж­дый из свидетелей был прав только в одном из своих утверждений. В каком порядке выехали машины на перекресток? В ответе перечислите подряд без пробелов первые буквы названий транспортных средств в порядке их выезда на перекресток, например АМЛГ.


  1. Три друга Олег, Борис и Арсений, закончив институт, разъехались по разным городам. И вот спустя несколько лет, они, встретившись на вечере встречи выпускников, решили разыграть своего товарища. На его вопрос, где они теперь живут, друзья ответили:

Олег: я живу в Екатеринбурге, а Борис - в Мурманске.

Борис: я живу в Волгограде, а Олег - в Мурманске.

Арсений: я живу в Мурманске, а Олег - в Волгограде.

Каждый из них один раз сказал правду и один раз солгал. Где живут Арсений, Борис и Олег? В ответе перечислите подряд без пробелов первые буквы названий городов, соответствующие именам друзей в указанном порядке, например ВМЕ.


  1. Классный руководитель пожаловался директору, что у него в классе появилась компания из 3-х учеников, один из которых всегда говорит правду, другой всегда лжет, а третий говорит через раз то ложь, то правду. Директор знает, что их зовут Коля, Саша и Миша, но не знает, кто из них правдив, а кто – нет. Встретив однажды всех троих в коридоре, директор решил поговорить с мальчиками. Саша сказал: «Коля всегда говорит правду». Коля сказал: «Саша лжет». Директору стало все понятно. Расположите первые буквы имен мальчиков в порядке: «говорит всегда правду», «всегда лжет», «говорит правду через раз». Например: если бы имена мальчиков были Рома, Толя и Вася, ответ мог бы быть: РТВ.


  1. Три школьника, Миша (М), Коля (К) и Сергей (С), остававшиеся в классе на перемене, были вызваны к директору по поводу разбитого в это время окна в кабинете. На вопрос директора о том, кто это сделал, мальчики ответили следующее:

Миша: «Я не бил окно, и Коля тоже…»

Коля: «Миша не разбивал окно, это Сергей разбил футбольным мячом!»

Сергей: «Я не делал этого, стекло разбил Миша».

Стало известно, что один из ребят сказал чистую правду, второй в одной части заявления соврал, а другое его высказывание истинно, а третий оба факта исказил. Зная это, директор смог докопаться до истины. Кто разбил стекло в классе? В ответе запишите только первую букву имени.

  1. На одной улице стоят в ряд 4 дома, в каждом из них живет по одному человеку. Их зовут Алексей, Егор, Виктор и Михаил. Известно, что все они имеют разные профессии: рыбак, пчеловод, фермер и ветеринар. Известно, что

(1) Фермер живет правее пчеловода.

(2) Рыбак живет правее фермера.

(3) Ветеринар живет рядом с рыбаком.

(4) Рыбак живет через дом от пчеловода.

(5) Алексей живет правее фермера.

(6) Виктор – не пчеловод.

(7) Егор живет рядом с рыбаком.

(8) Виктор живет правее Алексея.

Определите, кто где живет, и запишите начальные буквы имен жильцов всех домов слева направо. Например, если бы в домах жили (слева направо) Кирилл, Олег, Мефодий и Пафнутий, ответ был бы КОМП.


  1. На одной улице стоят в ряд 4 дома, в которых живут 4 человека: Алексей, Егор, Виктор и Михаил. Известно, что у них у всех разные профессии: пекарь, слесарь, химик и физик, но неизвестно, кто какой и неизвестно, кто в каком доме живет. Однако, известно, что:

(1) У физика два соседа.

(2) Химик живет левее пекаря.

(3) Слесарь живет с краю.

(4) Химик живет рядом со слесарем.

(5) Алексей живет левее физика.

(6) Виктор — не пекарь.

(7) Михаил живет рядом с химиком.

(8) Виктор живет рядом со слесарем.

Определите, кто где живет, и запишите начальные буквы имен жильцов всех домов слева направо. Например, если бы в домах жили (слева направо) Кирилл, Олег, Мефодий и Пафнутий, ответ был бы КОМП.


  1. На судне рядом расположены 4 каюты, в которых живут 4 матроса: Виталий, Степан, Федот и Игнат. Известно, что каждый из них владеет ровно одной из следующих морских профессий: моторист, рулевой, врач и кок, но неизвестно, кто какой и неизвестно, кто в какой каюте живет. Однако, известно, что:

(1) Врач живет рядом с коком.

(2) Кок живет правее рулевого.

(3) Моторист живет рядом с врачом и рулевым.

(4) Виталий живет рядом с мотористом.

(5) Степан не живет рядом с врачом.

(6) Игнат живет левее Виталия.

Определите, кто где живет, и запишите начальные буквы имен жильцов всех кают слева направо. Например, если бы в каютах жили (слева направо) Кирилл, Олег, Мефодий и Пафнутий, ответ был бы КОМП.


  1. На одной улице стоят в ряд 4 дома, в которых живут 4 человека: Алексей, Егор, Виктор и Михаил. Известно, что каждый из них владеет ровно одной из следующих профессий: Токарь, Столяр, Хирург и Окулист, но неизвестно, кто какой и неизвестно, кто в каком доме живет. Однако, известно, что:

(1) Токарь живет левее Столяра

(2) Хирург живет правее Окулиста

(3) Окулист живет рядом со Столяром

(4) Токарь живет не рядом со Столяром

(5) Виктор живет правее Окулиста

(6) Михаил не Токарь

(7) Егор живет рядом со Столяром

(8) Виктор живет левее Егора

Выясните, кто какой профессии, и кто где живет, и дайте ответ в виде заглавных букв имени людей, в порядке слева направо. Например, если бы в домах жили (слева направо) Константин, Николай, Роман и Олег, ответ был бы: КНРО.


  1. На олимпиаде по информатике участвовало пятеро учеников: Вася (В), Гриша (Г), Иван (И), Саша (С) и Юра (Ю). Об итогах олимпиады имеется 5 высказываний:

(1) Выиграл Вася, а Юра поднялся на второе место.

(2) Саша занял только второе место, а Вася был последним.

(3) Второе место занял Иван, а Гриша оказался третьим.

(4) На первом месте был Гриша, а Юра был четвертым.

(5) Юра был четвертым, а Иван вторым.

Известно, что в каждом высказывании одно утверждение верно, а второе – нет. Определите, кто занял второе место и на каком месте был Иван. Ответ запишите в виде первой буквы имени второго призера и, через запятую, места, занятого Иваном.


  1. Классный руководитель пожаловался директору, что у него в классе появилась компания из 3-х учениц, одна из которых всегда говорит правду, другая всегда лжет, а третья говорит через раз то ложь, то правду. Директор знает, что их зовут Катя, Соня и Маша, но не знает, кто из них правдив, а кто – нет. Встретив однажды всех троих в коридоре, директор решил поговорить с девочками. Маша сказала: «Катя никогда не обманывает. А вот от Сони, наоборот, никогда не услышишь правды». Катя сказала: «Маша говорит про меня правду». Директору стало все понятно. Расположите первые буквы имен девочек в порядке: «говорит всегда правду», «всегда лжет», «говорит правду через раз». Например: если бы имена мальчиков были Рита, Тая и Валя, ответ мог бы быть: РТВ.


  1. На одной улице стоят в ряд 4 дома, в которых живут 4 человека: Иван, Борис, Михаил и Андрей. Известно, что каждый из них владеет ровно одной из следующих профессий: Врач, Учитель, Слесарь и Парикмахер, но неизвестно, кто какой и неизвестно, кто в каком доме живет. Однако, известно, что:

(1) Слесарь живет левее Учителя

(2) Парикмахер живет правее Учителя

(3) Врач живет с краю

(4) Врач живет рядом с Парикмахером

(5) Борис не Врач и не живет рядом с Врачом

(6) Андрей живет рядом с Учителем

(7) Иван живет левее Парикмахера

(8) Иван живет через дом от Андрея

Выясните, кто какой профессии, и кто где живет, и дайте ответ в виде пар заглавных букв «Профессия-Имя», разделенных запятыми, в порядке слева направо. Например, если бы в домах жили (слева направо) Врач Константин, Учитель Николай, Слесарь Роман и Парикмахер Олег, ответ был бы: ВК,УН,СР,ПО.


  1. В бюро переводов приняли на работу троих сотрудников: Ивана, Антона и Петра. Каждый из них знает ровно два иностранных языка из следующего набора: немецкий, японский, шведский, японский, китайский, французский и греческий. Известно, что

(1) Петр – самый высокий

(2) Переводчик с французского ниже ростом переводчика со шведского

(3) Переводчик со шведского, переводчик с французского и Антон родом из одного города

(4) Переводчик с японского, переводчик с китайского и Петр учились втроем в одном институте

(5) Антон не знает ни китайского, ни греческого

В ответе запишите первую букву имени переводчика с немецкого языка и, через запятую, первую букву имени переводчика с греческого языка.


  1. Пять человек (Артур, Максим, Настя, Олег и Рита) убирались в кабинете. Когда учитель их спросила, кто догадался протереть подоконники, ученики ответили следующее:

Максим: «Ни я, ни Олег подоконники не мыли».

Артур: «Их помыли Максим или Настя».

Рита: «Один из ребят сказал правду, а другой обманул».

Олег: «Нет, Рита, ты не права».

Настя: «Это был Олег».

Учитель знает, что трое учеников всегда говорят правду, а двое лгут. Кто протер подоконники? (в ответе укажите имя ученика).


  1. На одной улице стоят в ряд 4 дома, в которых живут 4 человека: Семен, Николай, Артур и Роман. Известно, что каждый из них владеет ровно одной из следующих профессий: Врач, Художник, Егерь и Тренер, но неизвестно, кто какой и неизвестно, кто в каком доме живет. Однако, известно, что:

(1) Врач живет левее Егеря

(2) Художник живет рядом с Тренером

(3) Художник живет правее Врача

(4) Тренер живет рядом с Врачом

(5) Артур живет правее Тренера

(6) Семен живет через дом от Николая

(7) Роман живет правее Семена

(8) Николай – не Врач

Выясните, кто какой профессии, и кто где живет, и дайте ответ в виде заглавных букв имени людей, в порядке слева направо. Например, если бы в домах жили (слева направо) Константин, Тарас, Руслан и Олег, ответ был бы: КТРО.


  1. На одной улице стоят в ряд 4 дома, в которых живут 4 человека: Семен, Николай, Артур и Роман. Известно, что каждый из них владеет ровно одной из следующих профессий: Врач, Художник, Егерь и Тренер, но неизвестно, кто какой и неизвестно, кто в каком доме живет. Однако, известно, что:

(1) Художник живет рядом с Тренером

(2) Врач живет рядом с Художником

(3) Егерь живет левее Врача

(4) Тренер живет не рядом с Егерем

(5) Художник живет правее Семена

(6) Роман – не Тренер

(7) Семен живет рядом с Николаем

(8) Артур живет не рядом с Романом

Выясните, кто какой профессии, и кто где живет, и дайте ответ в виде заглавных букв имени людей, в порядке слева направо. Например, если бы в домах жили (слева направо) Константин, Тарас, Руслан и Олег, ответ был бы: КТРО.


  1. На одной улице стоят в ряд 4 дома, в которых живут 4 человека: Семен, Николай, Артур и Роман. Известно, что каждый из них владеет ровно одной из следующих профессий: Врач, Художник, Егерь и Тренер, но неизвестно, кто какой и неизвестно, кто в каком доме живет. Однако, известно, что:

(1) Егерь живет левее Тренера

(2) Врач живет правее Тренера

(3) Художник живет не с краю

(4) Егерь живет рядом с Художником

(5) Роман живет рядом с Тренером

(6) Семен – не Егерь

(7) Артур живет правее Романа

(8) Семен живет не рядом с Романом

Выясните, кто какой профессии, и кто где живет, и дайте ответ в виде заглавных букв имени людей, в порядке слева направо. Например, если бы в домах жили (слева направо) Константин, Тарас, Руслан и Олег, ответ был бы: КТРО.


  1. На одной улице стоят в ряд 4 дома, в которых живут 4 человека: Семен, Николай, Артур и Роман. Известно, что каждый из них владеет ровно одной из следующих профессий: Врач, Художник, Егерь и Тренер, но неизвестно, кто какой и неизвестно, кто в каком доме живет. Однако, известно, что:

(1) Врач живет с краю

(2) Тренер живет левее Егеря

(3) Художник живет рядом с Врачом

(4) Врач живет левее Художника

(5) Роман живет правее Семена

(6) Роман живет левее Тренера

(7) Артур – не Егерь

Выясните, кто какой профессии, и кто где живет, и дайте ответ в виде заглавных букв имени людей, в порядке слева направо. Например, если бы в домах жили (слева направо) Константин, Тарас, Руслан и Олег, ответ был бы: КТРО.


  1. Три ученика, Саша, Коля и Вова, прогуляли информатику. Когда их спросили, кому пришла в голову эта идея, они ответили следующее:

Саша: «Я никогда не призывал к прогулу, это была идея Коли».

Коля: «Я никогда не предложил бы это первым, во всем виноват Вова».

Вова: «Эта идея пришла в голову Коле. Я просто пошел за компанию».

Внутренним чутьем учитель почувствовал, что один ученик говорит правду, второй говорит правду только наполовину, а третий – лжет. Кто из учеников был инициатором прогула? Ответ дайте в виде первой буквы имени.


  1. Классный руководитель пожаловался директору, что у него в классе появилась компания из 3-х учеников, один из которых всегда говорит правду, другой всегда лжет, а третий говорит через раз то ложь, то правду. Директор знает, что их зовут Коля, Саша и Миша, но не знает, кто из них правдив, а кто – нет. Однажды все трое прогуляли урок труда. Директор знает, что никогда раньше никто из них не прогуливал труд. Он вызвал всех троих в кабинет и поговорил с мальчиками. Коля сказал: «Я всегда лгу». Миша сказал: «Коля прав». Директор понял, кто из них кто. Расположите первые буквы имен мальчиков в порядке: «говорит всегда правду», «всегда лжет», «говорит правду через раз». (Пример: если бы имена мальчиков были Рома, Толя и Вася, ответ мог бы быть: РТВ)


1 Строго говоря, выражение «одно из двух высказываний верно, а второе – неверно» соответствует логической операции «исключающее ИЛИ». Поэтому вместо двух условий для болельщика «А» можно записать одно: hello_html_m4f7a7a98.gif. Однако при этом и так непростое решение еще больше усложнится…

2 Вовк Е.Т. (ред.) Информатика: пособие для подготовки к ЕГЭ. М.: Кудиц-образ, 2009.

3 Если какой-то мальчик один раз сказал правду, а второй раз соврал, нужно сделать инверсию для одного из его высказываний, а второе оставить без изменений.

5 Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

6 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М.: Экзамен, 2010.

  4. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  5. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

20 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B7.doc

isa.muschanov.70@yandex.ru

B7 (повышенный уровень, время – 3 мин)

Тема: Определение скорости передачи информации при заданной пропускной способности канала.

Что нужно знать:

  • «физический» аналог задачи:

hello_html_m75fc016b.gif

hello_html_mfa3b400.gifhello_html_mfa3b400.gif

лимонад

лимонад

пропускная способность – 10 л/мин





сколько лимонада перекачается по трубе за 1 час?
ответ: 10 л/мин · 60 мин = 600 л

  • любой канал связи имеет ограниченную пропускную способность (скорость передачи информации), это число ограничивается свойствами аппаратуры и самой линии (кабеля)

  • объем переданной информации hello_html_4e3dd032.gif вычисляется по формуле hello_html_m5f52c9e9.gif, где hello_html_m1fdb6466.gif – пропускная способность канала (в битах в секунду или подобных единицах), а hello_html_25ca66e5.gif – время передачи

Пример задания:

Скорость передачи данных через ADSL-соединение равна 128000 бит/c. Через данное соединение передают файл размером 625 Кбайт. Определите время передачи файла в секундах.

Большие числа. Что делать?

Обычно (хотя и не всегда) задачи, в условии которых даны большие числа, решаются достаточно просто, если выделить в этих числах степени двойки. На эту мысль должны сразу наталкивать такие числа как

128 = 27, 256 = 28, 512 = 29 , 1024 = 210,

2048 = 211, 4096 = 212 , 8192 = 213, 16384 = 214, 65536 = 216 и т.п.

Нужно помнить, что соотношение между единицами измерения количества информации также представляют собой степени двойки:

1 байт = 8 бит = 23 бит,

1 Кбайт = 1024 байта = 210 байта

= 210 · 23 бит = 213 бит,

1 Мбайт = 1024 Кбайта = 210 Кбайта

= 210 · 210 байта = 220 байта

= 220 · 23 бит = 223 бит.

Правила выполнения операций со степенями:

  • при умножении степени при одинаковых основаниях складываются

hello_html_1e5c8a8b.gif

  • … а при делении – вычитаются:

hello_html_m2ec04f9.gif

Решение:

  1. выделим в заданных больших числах степени двойки и переведем размер файла в биты, чтобы «согласовать» единиц измерения:

hello_html_78836ae2.gif 128000 бит/c = 128 · 1000 бит/с = 27 · 125 · 8 бит/с = 27 · 53 · 23 бит/с = 210· 53 бит/с

hello_html_m4450d430.gif625 Кбайт = 5Кбайт = 54 · 213 бит

  1. чтобы найти время передачи в секундах, нужно разделить размер файла на скорость передачи:

hello_html_7713642.gif

  1. таким образом, ответ – 40 с .

Возможные проблемы:

  • вычисления с большими числами (лучше делать через степени двойки)

  • несогласованность единиц измерения, например, скорость в битах/с, а размер файла в байтах или Кбайтах; согласованные единицы измерения:
    биты/с – биты, байты/с – байты, Кбайты/с – Кбайты

  • чтобы не перепутать, где нужно делить, а где умножать, проверяйте размерность полученной величины

Еще пример задания:

Скорость передачи данных через ADSL-соединение равна 512 000 бит/c. Передача файла через это соединение заняла 1 минуту. Определить размер файла в килобайтах.

Решение:

  1. выделим в заданных больших числах степени двойки; переведем время в секунды (чтобы «согласовать» единицы измерения), а скорость передачи – в Кбайты/с, поскольку ответ нужно получить в Кбайтах:

hello_html_m7e7644cc.gif1 мин = 60 с = 4 · 15 с = 22 · 15 с

hello_html_78836ae2.gif 512000 бит/c = 512 · 1000 бит/с = 29 · 125 · 8 бит/с = 29 · 53 · 23 бит/с
= 212· 53 бит/с = 29· 53 байт/с = hello_html_m2197417a.gif Кбайт/с = hello_html_1693aa92.gif Кбайт/с

  1. чтобы найти время объем файла, нужно умножить время передачи на скорость передачи:

hello_html_m2abfbd9c.gifКбайт hello_html_7c0e5c68.gifКбайтhello_html_26da46b7.gifКбайт

  1. таким образом, ответ – 3750 Кбайт.

Еще пример задания:

У Васи есть доступ к Интернет по высокоскоростному одностороннему радиоканалу, обеспечивающему скорость получения им информации 256 Кбит в секунду. У Пети нет скоростного доступа в Интернет, но есть возможность получать информацию от Васи по низкоскоростному телефонному каналу со средней скоростью 32 Кбит в секунду. Петя договорился с Васей, что тот будет скачивать для него данные объемом 5 Мбайт по высокоскоростному каналу и ретранслировать их Пете по низкоскоростному каналу. Компьютер Васи может начать ретрансляцию данных не раньше, чем им будут получены первые 512 Кбайт этих данных. Каков минимально возможный промежуток времени (в секундах), с момента начала скачивания Васей данных, до полного их получения Петей? В ответе укажите только число, слово «секунд» или букву «с» добавлять не нужно.

Решение:

  1. сначала нарисуем схему:

hello_html_46255e8e.gifhello_html_794b40d1.gif

256 Кбит/с

hello_html_3174b70.gifhello_html_16602e42.gifhello_html_m7ec0fa7c.gifhello_html_794b40d1.gifhello_html_7dbe8011.gifhello_html_491dcee8.gifhello_html_491dcee8.gif

32 Кбит/с






  1. фактически нужно определить, сколько времени будет передаваться файл объемом 5 Мбайт по каналу со скоростью передачи данные 32 Кбит/с; к этому времени нужно добавить задержку файла у Васи (пока он не получит 512 Кбайт данных по каналу со скоростью 256 Кбит/с)

  2. согласовываем единицы измерения, находим объем файла в Кбитах:

hello_html_m2d4a3e0a.gifКбайтhello_html_m494324da.gif Кбит

  1. время «чистой» передачи файла от Васи к Пете со скоростью hello_html_m5e5b59d9.gifКбит/с:

hello_html_5710616b.gifс

  1. определяем, сколько Кбит должен скачать Вася до начала передачи Пете:

hello_html_790b6c0c.gifКбайтhello_html_4263abe4.gif Кбит

  1. задержка файла у Васи = время скачивания файла объемом 512 Кбайт со скоростью hello_html_d924b59.gifКбит/с:

hello_html_555b8fa.gifс

  1. общее время hello_html_2dcce2c7.gifс

  2. таким образом, ответ – 1296 с.

Возможные проблемы и ловушки:

  • длинное и запутанное условие, сложная словесная формулировка

  • несогласованность единиц измерения, например, скорость в битах/с, а размер файла в байтах или Кбайтах; согласованные единицы измерения:
    биты/с – биты, байты/с – байты, Кбайты/с – Кбайты

Задачи для тренировки1:

  1. Скорость передачи данных через ADSL-соединение равна 1024000 бит/c. Передача файла через данное соединение заняла 5 секунд. Определите размер файла в килобайтах.

  2. Скорость передачи данных через ADSL-соединение равна 256000 бит/c. Передача файла через это соединение заняла 2 минуты. Определите размер файла в килобайтах.

  3. Сколько секунд потребуется обычному модему, передающему сообщения со скоростью 28800 бит/с, чтобы передать цветное растровое изображение размером 640х480 пикселей, при условии, что цвет каждого пикселя кодируется тремя байтами?

  4. Скорость передачи данных через модемное соединение равна 51 200 бит/с. Передача текстового файла через это соединение заняла 10 с. Определите, сколько символов содержал переданный текст, если известно, что он был представлен в 16-битной кодировке Unicode.

  5. Скорость передачи данных через ADSL-соединение равна 128000 бит/с. Передача текстового файла через это соединение заняла 1 минуту. Определите, сколько символов содержал переданный текст, если известно, что он был представлен в 16-битной кодировке Unicode.

  6. Информационное сообщение объемом 2.5 Кбайт передается со скоростью 2560 бит/мин. За сколько минут будет передано данное сообщение?

  7. Модем передает данные со скоростью 7680 бит/с. Передача текстового файла заняла 1,5 мин. Определите, сколько страниц содержал переданный текст, если известно, что он был представлен в 16-битной кодировке Unicode, а на одной странице – 400 символов.

  8. Средняя скорость передачи данных с помощью модема равна 36 864 бит/с. Сколько секунд понадобится модему, чтобы передать 4 страницы текста в 8-битной кодировке КОИ8, если считать, что на каждой странице в среднем 2 304 символа?

  9. Скорость передачи данных через модемное соединение равна 4096 бит/с. Передача текстового файла через это соединение заняла 10 с. Определите, сколько символов содержал переданный текст, если известно, что он был представлен в 16-битной кодировке Unicode.

  10. Передача данных через ADSL-соединение заняла 2 минуты. За это время был передан файл, размер которого 3 750 Кбайт. Определите минимальную скорость (бит/c), при которой такая передача возможна.

  11. Сколько секунд потребуется модему, передающему сообщения со скоростью 14 400 бит/с, чтобы передать сообщение объемом 225 Кбайт?

  12. Сколько секунд потребуется модему, передающему сообщения со скоростью 28 800 бит/с, чтобы передать 100 страниц текста в 30 строк по 60 символов каждая, при условии, что каждый символ кодируется 1 байтом?

  13. Предположим, что длительность непрерывного подключения к сети Интернет с помощью модема для некоторых АТС не превышает 10 минут. Определите максимальный размер файла в Кбайтах, который может быть передан за время такого подключения, если модем передает информация в среднем со скоростью 32 килобита/с.

  14. Скорость передачи данных через ADSL-соединение равна 128000 бит/с. Сколько времени (в секундах) займет передача файла объемом 500 Кбайт по этому каналу?

  15. Скорость передачи данных через ADSL-соединение равна 512000 бит/с. Передача файла по этому каналу занимает 16 сек. Определите объем файла в килобайтах.

  16. Через ADSL соединение файл размером 2500 Кбайт передавался 40 с. Сколько секунд потребуется для передачи файла размером 2750 Кбайт.

  17. Скорость передачи данных через ADSL-соединение равна 128000 бит/с. Передача файла через данное соединение заняла 120 с. Каков объем файла в Кбайтах (впишите в бланк только число)?

  18. Скорость передачи данных через ADSL-соединение равна 64000 бит/с. Сколько времени (в секундах) займет передача файла объемом 375 Кбайт по этому каналу?

  19. Сколько секунд потребуется модему, передающему сообщения со скоростью 14400 бит/с, чтобы передать цветное растровое изображение размером 640 на 480 пикселей, при условии, что цвет каждого пикселя кодируется 24 битами?

  20. Скорость передачи данных через ADSL-соединение равна 128000 бит/с. Сколько времени (в секундах) займет передача файла объемом 625 Кбайт по этому каналу?

  21. Скорость передачи данных через ADSL-соединение равна 256000 бит/с. Передача файла через данное соединение заняла 40 с. Каков объем файла в Кбайтах (впишите в бланк только число)?

  22. Сколько секунд потребуется модему, передающему сообщения со скоростью 19200 бит/с, чтобы передать цветное растровое изображение размером 1280 на 800 пикселей, при условии, что цвет каждого пикселя кодируется 24 битами?


1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2010 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

5 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Менеджер по туризму

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B8.doc

isa.muschanov.70@yandex.ru

B8 (повышенный уровень, время – 10 мин)

Тема: Анализ алгоритма построения последовательности.

Что нужно знать:

  • в некоторых задачах (на RLE-кодирование, см. далее) нужно знать, что такое бит и байт, что байт равен 8 бит, что такое старший бит, как переводить числа из двоичной системы в десятичную

  • в классических задачах (на символьные цепочки) каких-либо особых знаний из курса информатики, кроме умения логически мыслить, не требуется

Пример задания:

Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней справа дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) BAA

(3) CBAABAA

(4) DCBAABAACBAABAA

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите семь символов подряд, стоящие в восьмой строке со 126-го по 132-е место (считая слева направо).

Решение:

  1. используя приведенное правило, можно построить следующие строки:

(5) EDCBAABAACBAABAADCBAABAACBAABAA

(6) FEDCBAABAACBAABAADCBAABAACBAABAAEDCBAABAACBAABAADCBAA
BAACBAABAA

...

  1. мы быстро убедимся, что следующие строки получаются достаточно длинные, и легко запутаться, отсчитывая символы с номерами 126-132 в восьмой строке

  2. попробуем найти закономерности, позволяющие решить задачу без выписывания 8-ой строки;

  3. прежде всего, заметим, что длины первых строк 1, 3, 7, 15, … – это числа вида 2i-1, где i – номер строки; таким образом, длина 7-ой строки – 127, а длина восьмой – 255 символов

  4. восьмая строка строится так: восьмая буква латинского алфавита (H) и затем – два раза седьмая строка (сверху написаны номера символов)

    1

    2

    128

    129

    255

    H

    GFEDC…

    ...AABAA

    GFEDC…

    ...AABAA

  5. символы 126-132 находятся на границе двух цепочек, повторяющих 7-ую строку; заметим, что в соответствии с заданным алгоритмом можно легко определить первые символы в 7-ой строке (GFEDC) и последние символы (AABAA)

  6. далее сразу находим, что интересующая нас часть 8-ой строки имеет вид

    125

    126

    127

    128

    129

    130

    131

    132

    133

    A

    B

    A

    A

    G

    F

    E

    D

    C

  7. таким образом, правильный ответ – BAAGFED.



Возможные ловушки и проблемы:

  • можно, конечно, попробовать выписать заданную строку и выделить нужные символы, но этот подход очень трудоемкий и чреват случайными ошибками

  • чаще всего заданная цепочка находится на границе, где соединяются две части строки (например, в этом задании – на границе двух последовательностей, совпадающих с 7-ой строкой)

  • в задачах этого типа часто встречается игра на последовательностях вида

2k: 1, 2, 4, 8, 16, …

2k-1: 1, 3, 7, 15, 31, …

полезно помнить формулу, которая «сворачивает» сумму степеней двойки:

1 + 2 + 4 + 8 + … + 2k = 2k+1 - 1

(для доказательства используйте тот факт, что двоичное число, состоящее только из единиц, имеет вид 2n-1)

Еще пример задания:

Упаковка информации методом RLE-кодирования состоит в следующем. Упакованная последовательность содержит управляющие байты, за каждым управляющим байтом следует один или несколько байтов данных. Если старший бит управляющего байта равен 1, то следующий за управляющим байт данных при распаковке нужно повторить столько раз, сколько записано в оставшихся 7 битах управляющего байта. Если же старший бит управляющего байта равен 0, то надо взять несколько следующих байтов данных без изменения. Сколько именно – записано в оставшихся 7 битах управляющего байта. Например, управляющий байт 10000111 говорит о том, что следующий за ним байт надо повторить 7 раз, а управляющий байт 00000100 – о том, что следующие за ним 4 байта надо взять без изменений.
После кодирования методом RLE получилась следующая последовательность байтов (первый байт – управляющий):

10000011 10101010 00000010 10101111 11111111 10000101 10101010.

Сколько байт будет содержать данная последовательность после распаковки? Впишите в бланк только число.

Решение:

  1. обратите внимание, что в этой задаче НЕ нужно распаковывать последовательность, а нужно просто определить ее длину

  2. проанализируем первый управляющий байт, 10000011; он начинается с 1 – это команда на повторение следующего символа; количество повторений записано в семи младших битах: 112 = 3 раза; значит, раскодирование первых двух байт дает 3 символа

  3. следующий управляющий байт – третий, 00000010; его старший бит 0 говорит о том, что следующие 102 = 2 символа повторяются 1 раз; получаем еще 2 символа

  4. следующий управляющий байт – шестой, 10000101; он говорит о том, что следующий за ним символ нужно повторить 1012 =5 раз; получаем еще 5 символов

  5. полная длина распакованной последовательности равна 3 + 2 + 5 = 10 символов

  6. вот итог нашего анализа:

    управляющий

    байты 1-3

    управляющий

    байт 4

    байт 5

    управляющий

    байты 6-10

    10000011

    10101010

    00000010

    10101111

    11111111

    10000101

    10101010

  7. таким образом, правильный ответ – 10.

Еще пример задания:

Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней справа дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) BAA

(3) CBAABAA

(4) DCBAABAACBAABAA

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Сколько в восьмой строке букв, отличных от буквы «А»?

Решение (1 вариант):

  1. попробуем найти закономерность в изменении количества букв, отличных от буквы «A»

  2. в первой строке 0 таких букв, во второй – 1 (удвоили число букв «не A» в предыдущей строке и добавили 1, поскольку в начало строки дописана буква «B»)

  3. аналогично находим, что в третьей строке – 3 нужных буквы, в 4-ой – 7 и т.д.

  4. продолжим последовательность, каждый раз умножай предыдущее число на 2 и добавляя единицу:

5 строка – 15

6 строка – 31

7 строка – 63

8 строка – 127

  1. «умные и ленивые» могут сообразить, эти числа задаются общей формулой hello_html_m35aeed7.gif, где N – номер строки, подстановка hello_html_m6a82ad0c.gif дает hello_html_45a814cc.gif, что совпадает с полученным выше результатом

  2. таким образом, правильный ответ – 127.

Решение (2 вариант):

  1. можно поступить иначе: сначала найти количество букв «A», а затем вычесть его из общей длины восьмой строки

  2. видно, что длины строк задаются уже знакомой последовательностью 1, 3, 7, 15, …, или а общем виде – hello_html_5c03b157.gif, где N – номер строки; подстановка hello_html_686dd836.gif дает hello_html_77d896ca.gif

  3. количество букв «A» с каждой строкой увеличивается в 2 раза: 1, 2, 4, …; это степени двойки, hello_html_m507460a0.gif, где N – номер строки; для 8-ой строки получаем hello_html_m531bf5a1.gif букв «A»

  4. итак, в 8-ой строке всего 255 символов, из них 128 – это буквы «А»

  5. теперь находим количество букв, отличных от буквы «A»: hello_html_m4982f6f4.gif

  6. таким образом, правильный ответ – 127.

Еще пример задания:

Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала дважды подряд записывается предыдущая строка, а потом справа приписывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита). Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) AAB

(3) AABAABC

(4) AABAABCAABAABCD

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите шесть символов подряд, стоящие в восьмой строке со 101-го по 106-е место (считая слева направо).

Решение:

  1. сначала подсчитаем общую длину 8-ой строки; длины строк изменяются согласно последовательности 1, 3, 7, 15, … (каждое следующее число равно удвоенному предыдущему плюс 1); таким образом, для 8-ой строки получаем длину 255 (можно было также использовать формулу hello_html_m3932f422.gif, где N – номер строки)

  2. вспомним, как строится 8-ая строка: сначала дважды записана 7-ая строка, а затем – буква «H» (8-ой символ латинского алфавита)

    1

    127

    128

    254

    255

    AABAA…

    ...CDEFG

    AABAA…

    ...CDEFG

    H

  3. видим, что символы 101-106 находятся внутри первой части, она состоит из двух 6-х строк и буквы G:

    1

    63

    64

    126

    127

    AABAA…

    ...BCDEF

    AABAA…

    ...BCDEF

    G

  4. символы 101-106 находятся во второй копии 6-ой строки, которая состоит из двух 5-х строк и буквы F

    64

    94

    95

    125

    126

    AABAA…

    ...ABCDEF

    AABAA…

    ...ABCDE

    F

  5. символы 101-106 находятся во второй копии 5-ой строки, которая, в свою очередь, состоит из двух 4-х строк и буквы E

  6. рассмотрим копию 4-ой строки, которая в 8-ой строке начинается с символа 95:

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    A

    A

    B

    A

    A

    B

    C

    A

    A

    B

    A

    A

    B

    C

  7. интересующие нас символы выделены зеленым цветом

  8. таким образом, правильный ответ – CAABAA.

Решение (2 вариант):

  1. так же, как и в предыдущем варианте решения, сначала подсчитаем общую длину 8-ой строки; она равна 255

  2. вспомним, как строится 8-ая строка: сначала дважды записана 7-ая строка (длиной 127 символов), а затем – буква «H» (8-ой символ латинского алфавита), поэтому для решения задачи нужно найти символы 101-106 в 7-ой строке

  3. 7-ая строка находятся состоит из двух 6-х строк и буквы G:

    1

    63

    64

    126

    127

    AABAA…

    ...BCDEF

    AABAA…

    ...BCDEF

    G

  4. символы 101-106 находятся во второй копии 6-ой строки, которая начинается с позиции 64; таким образом, нужно найти символы 38-43 в 6-ой строке (из номеров 101-106 вычли 63 – длину первой копии 6-ой строки)

  5. 6-ая строка состоит из двух 5-х строк (длиной 31 символ) и буквы F

    1

    31

    32

    62

    63

    AABAA…

    ...ABCDEF

    AABAA…

    ...ABCDE

    F

  6. символы 38-43 находятся во второй копии 5-ой строки, которая начинается с позиции 32, таким образом, нужно найти символы 7-12 в 5-ой строке (из номеров 38-43 вычли 31 – длину первой копии 5-ой строки)

  7. 5-ая строка состоит из двух 4-х строк (длиной 15 символов) и буквы E; символы 7-12 находятся в первой копии 4-ой строки, то есть, нужно найти символы 7-12 в 4-ой строке

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    A

    A

    B

    A

    A

    B

    C

    A

    A

    B

    A

    A

    B

    C

  8. интересующие нас символы выделены зеленым цветом

  9. таким образом, правильный ответ – CAABAA.

Возможные проблемы:

  • главное – не запутаться в номерах символов, разбирая «вложение» строк




Задачи для тренировки1:

  1. Цепочки символов (строки) создаются по следующему правилу: Первая строка состоит из одного символа – цифры «1». Каждая из последующих цепочек создается такими действиями: в начало записывается число – номер строки по порядку (для i-й строки ставится число «i»), далее дважды подряд записывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) 1

(2) 211

(3) 3211211

(4) 432112113211211

Сколько раз встречается цифра «1» в первых семи строках (суммарно)?


  1. Цепочки символов (строки) создаются по следующему правилу. Первая строка состоит из одного символа – цифры «1». Каждая из последующих цепочек создается следующим действием: в очередную строку дважды записывается предыдущая цепочка цифр (одна за другой, подряд), а в конец приписывается еще одно число – номер строки по порядку (на i-м шаге дописывается число «i»). Вот первые 4 строки, созданные по этому правилу:

(1) 1

(2) 112

(3) 1121123

(4) 112112311211234

Сколько раз в общей сложности встречаются в восьмой строке четные цифры (2, 4, 6, 8)?


  1. Записано 7 строк, каждая имеет свой номер – от «0»- до «6»-й. В начальный момент в строке записана цифра 0 (ноль). На каждом из последующих 6 шагов выполняется следующая операция: в очередную строку записывается удвоенная предыдущая строка, а в конец строки приписывается очередная цифра (на i-м шаге приписывается цифра i). Для удобства в скобках пишется номер строки (начиная с 0). Ниже показаны первые строки, сформированные по описанному правилу:

(0) 0

(1) 001

(2) 0010012

(3) 001001200100123

Какая цифра стоит в последней строке на 123-м месте (считая слева направо)?


  1. Цепочки символов (строки) создаются по следующему правилу: первая строка состоит из одного символа, это цифра 1. Каждая из следующих цепочек создается так: сначала записывается порядковый номер данной строки, далее дважды записывается вся цепочка цифр из предыдущей строки. Первые 4 строки, созданные по этому правилу, выглядят следующим образом:

1

211

3211211

432112113211211

Сколько раз в общей сложности встречаются в 10-й строке нечетные цифры (1,3, 5, 7,9)?


  1. Первая строка состоит из одного символа, это цифра 1. Каждая из следующих цепочек создается так. Сначала записывается порядковый номер данной строки, далее дважды записывается вся цепочка цифр из предыдущей строки. Первые 4 строки, созданные по этому правилу, выглядят следующим образом:

1

211

3211211

432112113211211

Сколько раз в общей сложности встречаются в 10-й строке четные цифры (0, 2, 4, 6, 8)?


  1. Цепочки символов (строки) создаются по следующему правилу: в начальный момент в строке записана цифра 0 (ноль). На каждом из последующих 9 шагов выполняется следующая операция: в очередную строку дважды записывается предыдущая строка, а в конец строки приписывается очередная цифра (на n-м шаге приписывается цифра n.). Ниже показаны первые строки, сформированные по описанному правилу (в скобках записан номер строки, начиная с 0).

(0)0

(1)001

(2)0010012

(3)001001200100123

Сколько раз встретится цифра 1 в последней строке?

  1. В начальный момент в строке записана цифра 0 (ноль). На каждом из последующих 9 шагов выполняется следующая операция: в очередную строку дважды записывается предыдущая строка, а в конец строки приписывается очередная цифра (на i-м шаге приписывается цифра i). Ниже показаны первые строки, сформированные по описанному правилу (в скобках записан номер строки, начиная с 0).

(0) 0

(1) 001

(2) 0010012

(3) 001001200100123

Какая цифра стоит в последней строке на 1022-м месте?


  1. Упаковка информации методом RLE-кодирования состоит в следующем. Упакованная последовательность содержит управляющие байты, за каждым управляющим байтом следует один или несколько байтов данных. Если старший бит управляющего байта равен 1, то следующий за управляющим байт данных при распаковке нужно повторить столько раз, сколько записано в оставшихся 7 битах управляющего байта. Если же старший бит управляющего байта равен 0, то надо взять несколько следующих байтов данных без изменения. Сколько именно – записано в оставшихся 7 битах управляющего байта. Например, управляющий байт 10000111 говорит о том, что следующий за ним байт надо повторить 7 раз, а управляющий байт 00000100 – о том, что следующие за ним 4 байта надо взять без изменений.
    После кодирования методом RLE получилась следующая последовательность байтов (первый байт – управляющий):

00000011 10101010 00000010 10101111 10001111 11111111.

Сколько байт будет содержать данная последовательность после распаковки? Впишите в бланк только число.

  1. Цепочки символов (строки) создаются по следующему правилу. Первая строка состоит из одного символа, это цифра 1. Каждая из следующих цепочек создается так. Сначала записывается порядковый номер данной строки, далее дважды записывается вся цепочка цифр из предыдущей строки. Первые 4 строки, созданные по этому правилу, выглядят следующим образом:

1

211

3211211

432112113211211

Сколько раз в общей сложности встречается в 9-й строке цифра 1?


  1. Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней слева дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) AAB

(3) AABAABC

(4) AABAABCAABAABCD

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите семь символов подряд, стоящие в седьмой строке со 118-го по 124-е место (считая слева направо).

  1. Строки (цепочки символов из букв русского алфавита) создаются по следующему правилу. Первая строка состоит из одного символа – буквы «А». Каждая из последующих цепочек создается следующим действием: в очередную строку дважды записывается предыдущая строка (цепочка за цепочкой, подряд), а в конец приписывается еще один символ – чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге дописывается «i»-я буква алфавита). Вот первые 4 строки, созданные по этому правилу:

(1) А

(2) ААБ

(3) ААБААБВ

(4) ААБААБВААБААБВГ

Начальная часть русского алфавита (для справки): А Б В Г Д Е Ё Ж З И Й К …

Сколько раз в общей сложности встречаются в восьмой строке согласные буквы

(Б, В, Г, Д, Ж, З, К, …)?

  1. Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней слева дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) AAB

(3) AABAABC

(4) AABAABCAABAABCD

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите шесть символов подряд, стоящие в седьмой строке со 120-го по 125-е место (считая слева направо).

  1. Строки (цепочки латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней слева дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) AAB

(3) AABAABC

(4) AABAABCAABAABCD

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите шесть символов подряд, стоящие в седьмой строке со 117-го по 122-е место (считая слева направо).

  1. Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней справа дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) BAA

(3) CBAABAA

(4) DCBAABAACBAABAA

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Сколько в восьмой строке букв, отличных от буквы «B»?

  1. Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней справа дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) BAA

(3) CBAABAA

(4) DCBAABAACBAABAA

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Сколько букв «C» в седьмой строке?

  1. Строки (цепочки латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней слева дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) AAB

(3) AABAABC

(4) AABAABCAABAABCD

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите шесть символов подряд, стоящие в восьмой строке с 72-го по 77-е место (считая слева направо).

  1. Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней справа дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) BAA

(3) CBAABAA

(4) DCBAABAACBAABAA

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите шесть символов подряд, стоящие в восьмой строке с 62-го по 67-е место (считая слева направо).

  1. Строки (цепочки латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней слева дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) AAB

(3) AABAABC

(4) AABAABCAABAABCD

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Запишите шесть символов подряд, стоящие в восьмой строке с 100-го по 105-е место (считая слева направо).

  1. Строки (цепочки латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней слева дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) AAБ

(3) AAБAAБВ

(4) AAБAAБВAAБAAБВГ

Начальная часть русского алфавита (для справки): АБВГДЕЁЖЗИКЛМ…

Сколько раз в общей сложности встречаются в седьмой строке гласные буквы (А, Е, Ё, И, …).

  1. Строки (цепочки символов латинских букв) создаются по следующему правилу. Первая строка состоит из одного символа – латинской буквы «А». Каждая из последующих цепочек создается такими действиями: в очередную строку сначала записывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i-м шаге пишется «i»-я буква алфавита), к ней справа дважды подряд приписывается предыдущая строка. Вот первые 4 строки, созданные по этому правилу:

(1) A

(2) BAA

(3) CBAABAA

(4) DCBAABAACBAABAA

Латинский алфавит (для справки): ABCDEFGHIJKLMNOPQRSTUVWXYZ

Сколько в восьмой строке букв, отличных от буквы «A»?


1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Якушкин П.А., Лещинер В.Р., Кириенко Д.П. ЕГЭ 2010. Информатика. Типовые тестовые задания. — М: Экзамен, 2010.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

11 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Фитнес-тренер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ B9.doc

isa.muschanov.70@yandex.ru

B9 (базовый уровень, время – 3 мин)

Тема: Компьютерные сети. Адресация в Интернете.

Что нужно знать:

  • каждый компьютер, подключенный к сети Интернет, должен иметь собственный адрес, который называют IP-адресом (IP = Internet Protocol)

  • IP-адрес состоит из четырех чисел, разделенных точками; каждое из этих чисел находится в интервале 0…255, например: 192.168.85.210

  • адрес документа в Интернете (URL = Uniform Resource Locator) состоит из следующих частей:

    • протокол, чаще всего http (для Web-страниц) или ftp (для файловых архивов)

    • знаки ://, отделяющие протокол от остальной части адреса

    • доменное имя (или IP-адрес) сайта

    • каталог на сервере, где находится файл

    • имя файла

  • принято разделять каталоги не обратным слэшем «\» (как в Windows), а прямым «/», как в системе UNIX и ее «родственниках», например, в Linux

  • пример адреса (URL)

http://www.vasya.ru/home/user/vasya/qu-qu.zip

здесь желтым маркером выделен протокол, фиолетовым – доменное имя сайта, голубым – каталог на сайте и серым – имя файла

Пример задания:

Петя записал IP-адрес школьного сервера на листке бумаги и положил его в карман куртки. Петина мама случайно постирала куртку вместе с запиской. После стирки Петя обнаружил в кармане четыре обрывка с фрагментами IP-адреса. Эти фрагменты обозначены буквами А, Б, В и Г. Восстановите IP-адрес. В ответе укажите последовательность букв, обозначающих фрагменты, в порядке, соответствующем IP-адресу.

hello_html_m66173b0c.png

Решение:

  1. самое главное – вспомнить, что каждое из 4-х чисел в IP-адресе должно быть в интервале от 0 до 255

  2. поэтому сразу определяем, что фрагмент А – самый последний, так как в противном случае одно из чисел получается больше 255 (643 или 6420)

  3. фрагмент Г (число 20) может быть только первым, поскольку варианты 3.1320 и 3.13320 дают число, большее 255

  4. из фрагментов Б и В первым должен быть Б, иначе получим 3.1333.13 (1333 > 255)

  5. таким образом, верный ответ – ГБВА.

Возможные проблемы:

  • если забыть про допустимый диапазон 0..255, то может быть несколько «решений» (все, кроме одного – неправильные)



Еще пример задания:

A

/

Б

com

В

.edu

Г

://

Д

.net

Е

htm

Ж

ftp

Доступ к файлу htm.net, находящемуся на сервере com.edu, осуществляется по протоколу ftp. В таблице фрагменты адреса файла закодированы буквами от А до Ж. Запишите последовательность этих букв, кодирующую адрес указанного файла в сети Интернет.

Решение:

  1. адрес файла начинается с протокола, после этого ставятся знаки «://», имя сервера, каталог и имя файла

  2. каталог здесь не указан, поэтому сразу получаем

ftp://com.edu/htm.net

  1. такой адрес можно собрать из приведенных в таблице «кусков»

ftp://com.edu/htm.net

  1. таким образом, верный ответ – ЖГБВАЕД.

Возможные проблемы:

  • существуют домены первого уровня com и net, а здесь com – это домен второго уровня, а net – расширение имени файла, все это сделано специально, чтобы запутать отвечающего

  • htm – это обычно расширение файла (Web-страницы), а здесь оно используется как первая часть имени файла

  • поскольку в ответе требуется написать не адрес файла, а последовательность букв, есть риск ошибиться при таком кодировании

Задачи для тренировки1:

  1. A

    .net

    Б

    ftp

    В

    ://

    Г

    http

    Д

    /

    Е

    .org

    Ж

    txt

    Доступ к файлу ftp.net , находящемуся на сервере txt.org, осуществляется по протоколу http. В таблице фрагменты адреса файла закодированы буквами от А до Ж. Запишите последовательность этих букв, кодирующую адрес указанного файла в сети Интернет.






  1. A

    ://

    Б

    http

    В

    ftp

    Г

    .net

    Д

    .txt

    Е

    /

    Ж

    www

    Доступ к файлу http.txt, находящемуся на сервере www.net осуществляется по протоколу ftp. В таблице фрагменты адреса файла закодированы буквами от А до Ж. Запишите последовательность этих букв, кодирующую адрес указанного файла.



  1. Идентификатор некоторого ресурса сети Интернет имеет следующий вид: http://www.ftp.ru/index.html
    Какая часть этого идентификатора указывает на протокол, используемый для передачи ресурса?

1) www 2) ftp 3) http 4) html

a

info

b

list

c

://

d

.doc

e

ftp

f

.edu

g

/


  1. На сервере info.edu находится файл list.doc, доступ к которому осуществляется по протоколу ftp. Фрагменты адреса данного файла закодированы буквами а, Ь, с... g (см. таблицу). Запишите последовательность этих букв, которая кодирует адрес указанного файла в Интернете.



  1. A

    test

    Б

    demo

    В

    ://

    Г

    /

    Д

    http

    Е

    .edu

    Ж

    .net

    На сервере test.edu находится файл demo.net, доступ к которому осуществляется по протоколу http. Фрагменты адреса данного файла закодированы буквами А, Б ... Ж (см. таблицу). Запишите последовательность этих букв, которая кодирует адрес указанного файла в Интернете.




  1. a

    info

    b

    /

    c

    .net

    d

    .edu

    e

    http

    f

    exam

    g

    ://

    На сервере info.edu находится файл exam.net, доступ к которому осуществляется по протоколу http. Фрагменты адреса данного файла закодированы буквами а, Ь, с ... g (см. таблицу). Запишите последовательность этих букв, которая кодирует адрес указанного файла в Интернете.




a

.edu

b

school

c

.net

d

/

e

rating

f

http

g

://


  1. На сервере school.edu находится файл rating.net, доступ к которому осуществляется по протоколу http. Фрагменты адреса данного файла закодированы буквами а, Ь, с... g (см. таблицу). Запишите последовательность этих букв, которая кодирует адрес указанного файла в Интернете.

A

.html

Б

www.

В

/

Г

ftp

Д

.гu

Е

http

Ж

index

З

://




  1. Доступ к файлу index.html, размещенному на сервере www.ftp.ru, осуществляется по протоколу http. В таблице приведены фрагменты адреса этого файла, обозначенные буквами от А до 3. Запишите последовательность этих букв, соответствующую адресу данного файла.



A

news

B

.txt

C

/

D

ftp

E

list

F

.edu

G

://


  1. На сервере news.edu находится файл list.txt, доступ к которому осуществляется по протоколу ftp. Фрагменты адреса данного файла закодированы буквами А, В, С ... G (см. таблицу). Запишите последовательность этих букв, которая кодирует адрес указанного файла в Интернете.



  1. Петя записал IP-адрес школьного сервера на листке бумаги и положил его в карман куртки. Петина мама случайно постирала куртку вместе с запиской. После стирки Петя обнаружил в кармане четыре обрывка с фрагментами IP-адреса. Эти фрагменты обозначены буквами А, Б, В и Г. Восстановите IP-адрес. В ответе укажите последовательность букв, обозначающих фрагменты, в порядке, соответствующем IP-адресу.

hello_html_221f59cd.png

  1. Петя записал IP-адрес школьного сервера на листке бумаги и положил его в карман куртки. Петина мама случайно постирала куртку вместе с запиской. После стирки Петя обнаружил в кармане четыре обрывка с фрагментами IP-адреса. Эти фрагменты обозначены буквами А, Б, В и Г. Восстановите IP-адрес. В ответе укажите последовательность букв, обозначающих фрагменты, в порядке, соответствующем IP-адресу.

hello_html_m71834add.png

  1. Петя записал IP-адрес школьного сервера на листке бумаги и положил его в карман куртки. Петина мама случайно постирала куртку вместе с запиской. После стирки Петя обнаружил в кармане четыре обрывка с фрагментами IP-адреса. Эти фрагменты обозначены буквами А, Б, В и Г. Восстановите IP-адрес. В ответе укажите последовательность букв, обозначающих фрагменты, в порядке, соответствующем IP-адресу.

hello_html_3367f75f.png

  1. На месте преступления были обнаружены четыре обрывка бумаги. Следствие установило, что на них записаны фрагменты одного IP-адреса. Криминалисты обозначили эти фрагменты буквами А, Б, В и Г. Восстановите IP-адрес. В ответе укажите последовательность букв, обозначающих фрагменты, в порядке, соответствующем IP-адресу.

hello_html_31bc553a.png

  1. Петя записал IP-адрес школьного сервера на листке бумаги и положил его в карман куртки. Петина мама случайно постирала куртку вместе с запиской. После стирки Петя обнаружил в кармане четыре обрывка с фрагментами IP-адреса. Эти фрагменты обозначены буквами А, Б, В и Г. Восстановите IP-адрес. В ответе укажите последовательность букв, обозначающих фрагменты, в порядке, соответствующем IP-адресу.

hello_html_d968913.png



1 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

6 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

HR-менеджер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ C1.doc

isa.muschanov.70@yandex.ru

C1 (повышенный уровень, время – 10 мин)

Тема: Исправление ошибок в простой программе с условными операторами.

Что нужно знать:

  • правила построения программы на Паскале1, Бэйсике или Си

  • правила работы с переменными (объявление, ввод, вывод, оператор присваивания)

  • ветвление – это выбор одного из двух возможных вариантов действий в зависимости от того, выполняется ли некоторое условие;

  • на блок-схеме алгоритма ветвление изображается в виде блока-ромба с одним входом и двумя выходами:

hello_html_m5cd697e5.gifhello_html_m218e2cf9.gif

  • если условие, записанное внутри ромба, истинно (ответ «да» на вопрос «a=b?»), выполняются все команды, входящие в блок-1 (ветка «да»), иначе (если условие ложно) выполняются все команды в блоке-2 (ветка «нет»)

  • в неполной форме условного оператора блок-2 пустой (отсутствует); теоретически можно сделать наоборот – так, чтобы блок-1 оказался пустой, но это очень неграмотное решение, поскольку оно осложняет понимание алгоритма, запутывает его

  • одна команда ветвления может находиться внутри другой, например, так:

hello_html_m14bb7576.gif

  • на этой схеме блок-10 выполняется, когда a=b; блок-11 – когда a=b=c, блок-21 – когда a=b, но ac и, наконец, блок-2 – когда ab

  • на этой схеме (Рисунок 3) одна команда ветвления (с условием «a=c») вложена в другую (с условием «a=b»), каждая из них – это ветвление в полной форме; если блок-12 будет пустой (отсутствует), внутреннее ветвление имеет неполную форму; аналогично, если блок-2 пустой, то внешнее ветвление имеет неполную форму

  • условный оператор ifelse служит для организации ветвления в программе на языке Паскаль

  • условный оператор может иметь полную или неполную форму; вот фрагменты программы, реализующие ветвления, показанные на рисунках 1 и 2:

полная форма:

неполная форма:

if a = b then begin

{ блок-1 }

end

else begin

{ блок-2 }

end;

if a = b then begin

{ блок-1 }

end;

здесь вместо комментариев в фигурных скобках (они выделены синим цветом) могут стоять любые операторы языка программирования (в том числе операторы присваивания, другие условные операторы, циклы, вызовы процедур и т.п.)

  • обычно при записи программы операторы, находящиеся внутри обоих блоков, сдвигают вправо на 2-3 символа (запись «лесенкой»), это позволяет сразу видеть начало и конец блока (конечно, если «лесенка» сделана правильно)

  • после else не надо (нельзя!) ставить какое-то условие, эта часть выполняется тогда, когда условие после if неверно (частая ошибка – после else пытаются написать условие, обратное тому, которое стоит после соответствующего ему if)

  • в Паскале перед else не ставится точка с запятой, поскольку это ключевое слово обозначает не начало нового оператора, а вторую часть условного оператора ifelse

  • слова begin и end (их называют также «операторные скобки») ограничивают блок-1 и блок-2; если внутри блока всего один оператор, эти «скобки» можно не писать, например, допустимы такие операторы

    if a = b then

    c:=1

    else c:=0;

    if a = b then begin

    c:=1;

    end

    else c:=0;

    if a = b then c:=1;

  • а вот такие операторы недопустимы

if a = b then begin

c:=1

else c:=0;

if a = b then

c:=1;

end

else c:=0;

if a = b then

c:=1;

d:=1;

else x:=1;

  • в первом случае есть begin, но забыли про соответствующий ему end;

  • во втором фрагменте наоборот, есть end, а begin отсутствует;

  • if a = b then begin

    c:=1;

    d:=1;

    end

    else x:=1;

    третий случай более сложный: судя по записи «лесенкой», здесь внутри блока-1 находятся 2 оператора, а операторных скобок begin-end нет; в результате получилось, что оператор c:=1 находится внутри блока-1, он выполняется только при условии a=b;
    оператор d:=1 выполняется всегда, после того, как условный оператор закончил работу; а else вообще «висит» непонятно как, тут транслятор выдаст ошибку; исправить эту программу можно так, как показано справа (добавив пару begin-end):
  • условный оператор может находиться внутри другого условного оператора, как в блоке-1, так и в блоке-2; например, схема на Рисунке 3 может быть записана на Паскале так:

    if a = b then begin

    if a = c then begin

    { блок-11 }

    end

    else begin

    { блок-12 }

    end;


    { блок-10 }

    if a = c then begin

    { блок-11 }

    end

    else begin

    { блок-12 }

    end;

    end

    else begin

    { блок-2 }

    end;

  • ключевая тема этого задания ЕГЭ – использование вложенных условных операторов, причем в тексте задания фрагмент программы обычно записан без отступов «лесенкой» или с неправильными отступами, например, так:

if a = b then begin

if a = c then

c:=1;

end

else c:=0;

if a = b then

if a = c then

c:=1

else c:=0;

чтобы разобраться с работой этих программ, нужно определить, к какому из условных операторов if относится часть else; для этого используют такое правило: «любой else относится к ближайшему if»

рассмотрим фрагмент слева, в нем перед else стоит end, поэтому для нужно найти соответствующий ему begin; таким образом определяем, что else относится к первому (внешнему) условному оператору

в правом фрагменте перед else нет end, поэтому он относится к ближайшему по тексту внутреннему условному оператору

блок-схемы для двух фрагментов показаны ниже, желтым цветом выделен «переехавший» блок:

hello_html_m4a9b27b0.gifhello_html_m383f2117.gif


  • в условных операторах можно использовать сложные условия, которые строятся из простых отношений (<, <=, >, >=, =, <>) с помощью логических операций not («НЕ», отрицание), and («И», одновременное выполнение двух условий) и or («ИЛИ», выполнение хотя бы одного из двух условий)

  • в сложном условии сначала выполняются действия в скобках, потом – not, затем – and, затем – or и, наконец, отношения;
    операции равного уровня (приоритета) выполняются последовательно слева направо

  • поскольку отношения в Паскале имеют низший приоритет, в сложном условии их приходится брать в скобки:

    if (a = b) or (b < c) and (c <> d) then begin

    ...

    end;

  • в приведенном выше примере сначала определяются результаты сравнения (выражения в скобках), затем выполняется операция and («И»), а затем – or («ИЛИ»)

Пример задания:

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

var x,y: real;

begin

readln(x,y);

if y <= 1 then

if x >= 0 then

if y >= sin(x) then

write('принадлежит')

else write('не принадлежит')

end.

Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы) .

Решение:

  1. сначала лучше отложить в сторону программу и попытаться написать условие, которым должны отвечать точки, попавшие в выделенную область

  2. заштрихованная область ограничена по координате hello_html_m5547f17b.gif, она находится

  • справа от оси hello_html_m11fb3721.gif, что равносильно условию hello_html_m1cb4eb7b.gif (с учетом границы здесь и далее получаем нестрогие неравенства)

  • слева от первого максимума функции hello_html_m35d39744.gif; из математики мы знаем, что эта функция достигает максимума при hello_html_4ea2d114.gif, поэтому получаем второе условие hello_html_4e50b8ef.gif

  1. заштрихованная область ограничена с двух сторон по координате hello_html_m11fb3721.gif: она находится

  • ниже линии hello_html_68cfcfd.gif, откуда следует третье условие hello_html_m29a49750.gif

  • выше линии hello_html_m35d39744.gif, что дает четвертое условие hello_html_24160621.gif

  1. итак, точка находится в заданной области, если все эти четыре условия выполняются одновременно; можно предположить, что в программе нужно использовать четыре вложенных условных оператора или один условный оператор, в котором четыре простых условия (отношения hello_html_m1cb4eb7b.gif, hello_html_4e50b8ef.gif, hello_html_m29a49750.gif и hello_html_24160621.gif) связаны с помощью логической операции and («И», одновременное выполнение всех условий)

  2. теперь смотрим на программу: здесь три (а не четыре!) вложенных условных оператора с простыми отношениями, поэтому явно какое-то условие не учтено; легко найти, что «забыли» условие hello_html_m7aafb015.gif

  3. оhello_html_5c239e65.gifператор write('принадлежит') помещен внутрь всех трех условных операторов, то есть, он выполнится тогда, когда три (а не четыре!) условия истинны;

  4. отметим на рисунке область, где выполняются все нужные условия, кроме hello_html_m7aafb015.gif (красная зона);

  5. для всех точек, которые находятся в «красной» зоне программа выдаст сообщение «принадлежит», хотя в самом деле эти точки не принадлежит заданной области; одна из таких точек имеет координаты hello_html_116748cb.gif

  6. теперь выясним, когда программа выдает сообщение «не принадлежит»

if y <= 1 then

if x >= 0 then

if y >= sin(x) then

write('принадлежит')

else write('не принадлежит')

  1. судя по записи «лесенкой», else относится к самому первому оператору if, однако в самом деле это не так; перед словом else нет end, поэтому ищем ближайший if: это самый внутренний оператор, правильная запись «лесенкой» выглядит так:

if y <= 1 then

if x >= 0 then

if y >= sin(x) then

write('принадлежит')

else write('не принадлежит')

  1. эhello_html_m530eb846.gifтот фрагмент программы соответствует блок-схеме, которая

    показана на рисунке справа:

  2. по схеме видим, что при hello_html_28c60e1c.gif (первое условие ложно),
    а также при hello_html_73c13b34.gif (второе условие ложно) программа
    вообще не выдает никакого сообщения, то есть,
    работает неправильно; таким образом, координаты любой точки, для которой hello_html_28c60e1c.gif или hello_html_73c13b34.gif, могут быть указаны в ответе как пример
    набора входных данных, при которых программа работает
    неправильно

  3. итак, первая часть ответа такова

примеры входных данных, на которых программа работает неверно:
(x=3.14, y=0.5) (неправильно определяет принадлежность точки области)
(x=0, y=1) или (x=-1, y=0) (не выдает вообще никакого сообщения)

  1. остается исправить эту программу;
    начнем с самого «лобового способа»: добавим в программу четвертый (вложенный) условный оператор, проверяющий условие hello_html_m7aafb015.gif, и еще три блока else, чтобы выводить строку «не принадлежит» в том случае, когда хотя бы один из них не сработал:

if x <= pi/2 then

if y <= 1 then

if x >= 0 then

if y >= sin(x) then

write('принадлежит')

else write('не принадлежит')

else write('не принадлежит')

else write('не принадлежит')

else write('не принадлежит');

обратите внимание, что точка с запятой есть только после самого последнего оператора write, так как остальные стоят перед ключевым словом else, перед которым точка с запятой не ставится

  1. хотя приведенный выше метод дает работоспособную программу, она получается слишком длинная и некрасивая для такой простой задачи; достаточно сказать, что оператор
    write('не принадлежит') повторяется в тексте 4 раза

  2. более элегантное решение формулируется на словах так: «точка принадлежит области, если выполняются одновременно 4 приведенных выше условия, а иначе – не принадлежит»; а вот реализация на Паскале (приведем программу-ответ целиком):

var x,y: real;

begin

readln(x,y);

if (x >= 0) and (x <= pi/2) and

(y <= 1) and (y >= sin(x)) then

write('принадлежит')

else write('не принадлежит');

end.

здесь использовано сложное условие, в котором 4 отношения связаны операциями and («И», требуется одновременное выполнение всех условий)


Возможные проблемы:

  • как правило, в этой задаче требуется использовать знания из курса математики (решение уравнений, графики функций, область допустимых значений, составление уравнений прямой по приведенному графику)

  • как показывает анализ опубликованных задач этого типа, нужно уметь, прежде всего, разбираться в серии вложенных условных операторов в полной и неполной форме

  • неправильная «лесенка» в записи сбивает с толку и подталкивает к неверному решению; чтобы разобраться в программе, лучше на черновике построить блок-схему алгоритма и правильную «лесенку»

  • чтобы не запутаться, к какому оператору относится else, используйте следующее правило:

  • если перед else нет слова end, нужно искать ближайший сверху условный оператор if

  • если перед else стоит end (конец блока), нужно искать парный ему begin (начало блока) и соответствующий условный оператор if ... then begin

  • проверяйте, все ли необходимые условия учтены в программе, это особенно актуально для немонотонных функций типа синуса или косинуса (немонотонные функции на некоторых участках возрастают при увеличении аргумента, а на некоторых – убывают); например, в этой задаче можно пропустить необходимость выполнения условия hello_html_m7aafb015.gif

  • не перепутайте, где нужно использовать операцию and («И», одновременное выполнение условий), а где – or («ИЛИ», хотя бы одно условие)

  • нужно внимательно проверять, всегда ли программа выдает сообщение, если заданное условие не выполняется

  • часто бывает полезно нарисовать блок-схему алгоритма, которая позволяет увидеть ход выполнения программы при всех возможных вариантах

  • проверяйте, включает ли заданная область свои границы; если включает – в отношениях будут нестрогие неравенства (<=, >=), если не включает – строгие (<, >)

  • при оценке работы можно (при абсолютно правильном решении) потерять баллы из-за синтаксических ошибок в программе (скобки, точки с запятой, неправильное написание оператора и т.п.); не забывайте, что

  • в сложном условии все простые условия (отношения) нужно брать в скобки, так как в Паскале отношения при вычислении логического выражения имеют самый низкий приоритет

  • перед else точка с запятой никогда не ставится

  • в конце программы после последнего end ставится точка


За что снимают баллы:

  • неправильно определены входные данные, при которых исходная программа работает неверно

  • исправлены не все ошибки в программе, например, легко «просмотреть», что необходимо еще условие hello_html_m7aafb015.gif

  • программа работает правильно в большем количестве случаев, чем исходная, но не для всех возможных исходных данных

  • перепутаны знаки < и >, логические операции or и and

  • неверно расставлены операторные скобки begin-end

  • синтаксические ошибки (знаки пунктуации – запятые, точки, точки с запятой; неверное написание ключевых слов); чтобы получить 3 балла, нужно при абсолютно правильном решении сделать не более одной синтаксической ошибки; на 2 балла – до двух ошибок, на 1 балл – до трех ошибок

Задачи для тренировки2:

  1. Требовалось написать программу, которая решает уравнение «hello_html_m36a728c3.gif» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно:

var a,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.

Последовательно выполните три задания: 1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу. 2) Укажите, какая часть программы является лишней. 3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).


  1. Требовалось написать программу, которая решает уравнение «hello_html_498a7320.gif» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно:

var a, b, x: real;

begin

readln(a,b,x);

if b = 0 then

write('x = 0')

else

if a = 0 then

write('нет решений')

else

write('x =',-b/a);

end.

Последовательно выполните три задания: 1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу. 2) Укажите, какая часть программы является лишней. 3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).




  1. Требовалось написать программу, которая определяет, лежит ли точка А(х00) внутри треугольной области, ограниченной осями координат и прямой hello_html_118e57a2.gif («внутри» понимается в строгом смысле, т.е. случай, когда точка А лежит на границе области, недопустим). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.

var x0, у0, у: real;

begin

readln (x0, y0);

if (x0 < 2)then begin

if (x0 > 0)then begin

у = 2 – х0;

if (y0 < у) then

writeln ('точка лежит внутри области')

else writein ('точка не лежит внутри области');

end

else writeln ('точка не лежит внутри области');

end

else writeln ('точка не лежит внутри области');

end.

Последовательно выполните задания:

  1. Приведите пример таких чисел х0 и у0, при которых программа неверно решает поставленную задачу.

  2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).

  3. Укажите, как можно доработать программу, чтобы вместо вложенных операторов IF она содержала логическую операцию AND.


  1. Требовалось написать программу, которая решает уравнение hello_html_m43349b61.gif относительно х для действительных чисел а, Ь, с, введенных с клавиатуры, о которых заведомо известно, что а0, b0 и c0. Была написана следующая программа:

var a, b, с, D, xl, x2: real;

begin

readln(a, b, с, xl, x2);

D := b*b - 4*a*c;

if D > 0

then begin

xl := (-b + sqrt(D))/(2*a);

x2 := (-b - sqrt(D))/(2*a);

write('xl =', xl);

write('x2 =', x2); end

else writeln ('действительных корней нет');

end.

Известно, что программа написана с ошибками. Последовательно выполните три задания:

  1. Приведите пример таких чисел а, Ь, с, при которых программа неверно решает поставленную задачу.

  2. Укажите, какая часть программы является лишней.

  3. Укажите, как, по-вашему мнению, нужно доработать программу, чтобы не было случаев ее неправильной работы.


  1. Требовалось написать программу, которая определяет, имеется ли среди введенных с клавиатуры положительных целых чисел а и Ь хотя бы одно четное. Была написана следующая программа:

var a, b: integer;

begin

readln(a, b);

a := a mod 2;

if a > 0 then b := b mod 2;

if b > 0 then

writeln ('четных чисел нет')

else writeln ('четное число есть');

end.

Известно, что программа написана с ошибками. Последовательно выполните три задания:

  1. приведите пример таких чисел а, b, при которых программа неверно решает поставленную задачу;

  2. укажите, как, по вашему мнению, нужно доработать программу, чтобы не было случаев ее неправильной работы;

  3. укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала логическую операцию OR.


  1. Требовалось написать программу, которая определяет, можно ли построить треугольник из отрезков с длинами х, у, z. Программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.

var х, у, z: real;

begin

readln (x, у, z);

if (x + y > z) then

begin

if (x + z > y) then

if (y + z > x) then

writeln('треугольник построить можно');

end

else writeln('треугольник построить нельзя');

end

Последовательно выполните задания:

  1. Приведите пример таких чисел х, у, z, при которых программа неверно решает поставленную задачу.

  2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать один из способов доработки исходной программы).

  3. Укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала логическую операцию AND.


  1. Требовалось написать программу, которая определяет, лежит ли точка А(х,у) внутри некоторого кольца («внутри» понимается в строгом смысле, т.е. случай, когда точка А лежит на границе кольца, недопустим). Центр кольца находится в начале координат. Для кольца заданы внутренний и внешний радиусы r1, r2; известно, что r1 отлично от r2, но неизвестно, r1 > r2 или r2 > r1. В том случае, когда точка А лежит внутри кольца, программа должна выводить соответствующее сообщение, в противном случае никакой выходной информации не выдается. Программист сделал в программе ошибки.

var x, у, rl,r2:real;

h: real;

begin

readln (x, у, rl, r2);

h := sqrt (x*x + y*y);

if (h < rl) AND (h > r2) then

writeln ('точка А лежит внутри кольца');

end.

Последовательно выполните задания:

  1. Приведите пример таких чисел х и у, при которых программа неверно решает поставленную задачу.

  2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

  3. Укажите, как можно доработать программу, чтобы она не содержала логических операций AND или OR.

Примечание: для обозначения расстояния от точки А до начала координат используется вспомогательная переменная h.


  1. Требовалось написать программу, которая определяет, лежит ли точка А(х00) внутри квадратной области, ограниченной прямыми, параллельными осям координат: у = -2, у = 2,
    х = -2, х = 2 («внутри» понимается в строгом смысле, т.е случай, когда точка А лежит на границе области, недопустим).

В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.

var x0, y0: real;

begin

readln (x0, y0)

if(x0 < 2)then

begin

if(x0 > -2)then

if (y0 < 2) then

writeln('точка лежит внутри области');

end

else writeln('точка не лежит внутри области');

end.

Последовательно выполните задания:

  1. Приведите пример таких чисел х0 и у0, при которых программа неверно решает поставленную задачу.

  2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).

  3. Укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала логическую операцию AND.


  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 (текст программы приведен ниже).

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.

Последовательно ответьте на вопросы:

  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)

  1. Видно, что программист допустил ошибку в программе. Укажите, какую доработку программы нужно провести, чтобы она соответствовала постановке задачи (такая доработка может быть проведена неединственным образом – годится любой правильный вариант доработки).


  1. Требовалось написать программу, которая решает неравенство hello_html_768ca5f8.gif относительно hello_html_m5547f17b.gif для всех ненулевых действительных чисел hello_html_508f51a5.gif и hello_html_61414ea6.gif, введенных с клавиатуры. Программист торопился и сделал в программе ошибки.

var a, b, x: real;

begin

readln(a, b, x);

if b > 0 then

write('x > ', a, ' или x < 0')

else

if a > 0 then

write('0 < x < ', a)

else

write(a, ' < x < 0');

end.

Последовательно выполните три задания:

  1. Приведите примеры таких чисел a, b, x, при которых программа неверно решает поставленную задачу.

  2. Укажите, какая часть программы является лишней?

  3. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).

hello_html_m33e336e0.gif

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

var x,y: real;

begin

readln(x,y);

if x*x+y*y >= 4 then

if x <= 2 then

if y <= x then

write('принадлежит')

else

write('не принадлежит')

end.

Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

hello_html_2df1bd7d.gif

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

var x,y: real;

begin

readln(x,y);

if y >= -1 then

if y <= sin(x) then

if y >= x-1 then

write('принадлежит')

else

write('не принадлежит')

end.

Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).


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

var x, y: real;

begin

readln(x, y);

if x*x + y*y >= 4 then

if x >= –2 then

if y <= –x then

write('принадлежит')

else

write('не принадлежит')

end.

Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).


  1. Требовалось написать программу, которая вводит три целых числа в переменные a, b и c, а потом сортирует их так, чтобы в переменной a оказалось наименьшее число, в переменной b – среднее число, а в переменной c – наибольшее число. Программист торопился и сделал в программе ошибки.

var a, b, c, x: integer;

begin

read(a, b, c, x);

if a > b then begin x:=a; a:=b; b:=x; end;

if b > c then begin x:=b; b:=c; c:=x; end;

write(a,b,c);

end.

Последовательно выполните три задания:

  1. Приведите примеры таких чисел a, b, с, при которых программа неверно решает поставленную задачу.

  2. Укажите, какая часть программы является лишней?

  3. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).


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

var x, y: real;

begin

readln(x, y);

if y <= sin(x) then

if y <= 0.5 then

if y >= 0 then

write('принадлежит')

else

write('не принадлежит');

end.

Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).






1 Далее при разборе задачи используется язык Паскаль, который наиболее распространен в школах России.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

16 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Менеджер по туризму

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ C2.doc

isa.muschanov.70@yandex.ru

C2 (высокий уровень, время – 30 мин)

Тема: Обработка массива (написать программу из 10-15 строк на языке программирования или алгоритм на естественном языке).

Что нужно знать:

  • массив – это набор однотипных элементов, имеющих общее имя и расположенных в памяти рядом

  • для обращения к элементу массива используют квадратные скобки, запись A[i] обозначает элемент массива A с номером (индексом) i

  • для обработки всех элементов массива используется цикл вида1

for i:=1 to N do begin

{ что-то делаем с элементом A[i] }

end;

переменная i обозначает номер текущего элемента массива, она меняется от 1 до N с шагом 1, то есть мы «проходим» последовательно все элементы

  • матрица (двухмерный массив) – это прямоугольная таблица однотипных элементов

  • если матрица имеет имя A, то обращение A[i,k] обозначает элемент, расположенный на пересечении строки i и столбца k



k










i


A[i,k]







  • каждая строка матрицы – это обычный (одномерный, линейный) массив; для того, чтобы обработать строку i в матрице из M столбцов, нужно использовать цикл, в котором меняется номер столбца k:

for k:=1 to M do begin

{ что-то делаем с элементом A[i,k] }

end;

  • каждый столбец матрицы – это обычный (одномерный, линейный) массив; для того, чтобы обработать столбец k в матрице из N строк, нужно использовать цикл, в котором изменяется номер строки i:

for i:=1 to N do begin

{ что-то делаем с элементом A[i,k] }

end;

Пример задания:

Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа).

Решение:

  1. даже если вы хорошо владеете программированием, сначала лучше (прежде всего, для себя) написать алгоритм на русском языке (или на псевдокоде – это нечто среднее между словесным алгоритмом и готовой программой)

  2. по условию нужно выделить в памяти два массива одинакового размера, назовем их A и B; обозначим размер массивов через N, индексы элементов изменяются от 1 до N;

  3. в цикле в каждый элемент B[i] массива B нужно записать модуль соответствующего элемента A[i] массива A, это нужно сделать для всех i от 1 до N

  4. есть небольшая сложность: запрещено использовать стандартную функцию вычисления модуля; согласно определению модуля решение может быть такое: если элемент A[i] больше или равен нулю, записываем в B[i] его значение без изменений, а если меньше нуля – меняем знак, то есть, в B[i] записываем (-A[i])

  5. решение в виде алгоритма на русском языке может выглядеть так:
    «Выделяем в памяти второй массив того же размера. В цикле рассматриваем все элементы первого массива с первого до последнего. Если текущий элемент больше нуля или равен нулю, в соответствующий элемент второго массива записываем его значение без изменений; если текущий элемент меньше нуля, во второй массив записываем значение элемента с обратным знаком. Выводим второй массив на экран».

  6. осталось написать программу, практически дословно реализующую это решение:

const N = 30;

var a, b:array[1..N] of integer;

i: integer;

begin

for i:=1 to N do { ввод всех элементов массива с клавиатуры }

read(a[i]);

for i:=1 to N do { формирование массива B }

if a[i] < 0 then

b[i]:= -a[i]

else b[i]:= a[i];

writeln('Результат:');

for i:=1 to N do { вывод всех элементов массива B }

write(b[i], ' ');

end.

  1. размер массива грамотно задавать через константу (const N = 30;), а не вписывать число в каждый цикл; тогда, если нужно будет переделать программу для массива другого размера, достаточно будет изменить всего одно число в начале программы

Возможные проблемы:

  • проверяйте правильность минимального и максимального значения переменной цикла в заголовке цикла for

  • не забывайте вывести результат в конце работы программы



Еще пример задания:

Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30.


Решение:

  1. сначала нужно понять задачу; предположим, что в массиве есть одинаковые элементы, стоящие рядом:

    1

    1

    2

    2

    1

    1

    1

    1

    3

    3

    2

    2

  2. самая длинная цепочка стоящих рядом элементов в данном случае состоит из 4-х единиц (она выделена желтым фоном)

  3. нам нужно по крайней мере две переменных: для хранения номера текущего элемента (при обработке массива в цикле) и для хранения максимального количества идущих подряд элементов (обозначим ее kMax)

  4. в целом (пока неточный) алгоритм может выглядеть так: «пройти весь массив, подсчитывая для каждого элемента длину цепочки подряд идущих одинаковых чисел, если эта длина больше kMax, то записать ее в kMax»

  5. отсюда сразу следует, что необходима еще одна переменная (обозначим ее через k), показывающая для каждого элемента массива длину цепочки одинаковых чисел, которая заканчивается на этом элементе:


    1

    1

    2

    2

    1

    1

    1

    1

    3

    3

    2

    2

    k

    1

    2

    1

    2

    1

    2

    3

    4

    1

    2

    1

    2

    kMax

    1

    2

    2

    2

    2

    2

    3

    4

    4

    4

    4

    4

  6. следующий шаг к решению: нужно понять, как изменять переменную k при проходе по массиву; можно сделать так: если очередной элемент равен предыдущему, счетчик k увеличиваем на единицу, а если не равен – записываем в него 1 (цепочка одинаковых чисел кончилась, началась новая, в ней пока один элемент)

  7. при таком подходе проблема может возникнуть при просмотре первого элемента, потому что для него нет предыдущего; поэтому описанную выше процедуру будем в цикле применять ко всем элементам массива, начиная со второго (а не с первого); в самом начале программы запишем в k и kMax по единице – таким образом, мы «вручную» (без цикла) рассмотрели первый элемент массива

  8. теперь можно написать алгоритм на русском языке:
    «Выделим две вспомогательные переменные, k и kMax, и запишем в каждую из них по единице. В цикле рассматриваем все элементы массива со второго до последнего, если очередной элемент равен предыдущему, увеличиваем k; если k > kMax, записываем в kMax значение k. В конце цикла в kMax окажется требуемое значение».

  9. этот алгоритм реализуется в такой программе:

const N =30;

var a: array[1..N] of integer;

i, k, kMax: integer;

begin

for i:=1 to N do readln(A[i]); { ввод массива }

k := 1; { обрабатываем A[1] }

kMax := 1;

for i:=2 to N do begin { а теперь в цикле A[2]...A[N} }

if A[i] = A[i-1] then { цепочка продолжается }

k := k + 1

else k := 1; { цепочка закончилась }

if k > kMax then kMax := k;

end;

writeln(kMax);

end.


Возможные проблемы:

  • как видим, основная сложность в этой задаче – не написать программу, а придумать хороший (часто еще нужно – быстрый) алгоритм

  • проверьте, что будет записано в переменные до начала цикла (определены ли их начальные значения)

  • проверяйте, не выйдет ли индекс за границу массива в начале или в конце цикла

  • будьте внимательны с «крайними» случаями, например, нужно обязательно убедиться, что программа работает, когда интересующая нас цепочка стоит в самом начале или в самом конце массива

Еще пример задания:

Дан целочисленный квадратный массив 10 х 10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы максимальных элементов из каждой строки. Напечатать значение этой суммы. Предполагается, что в каждой строке такой элемент единственный.

Решение:

  1. суть задачи: среди элементов каждой строки нужно выбрать максимальный, и все эти выбранные значения сложить

  2. несложно сразу написать алгоритм на русском языке:
    «Чтобы накапливать сумму, нужно ввести целую переменную Sum, в которую в самом начале записываем 0 ; далее в цикле просматриваем все строки, для каждой строки находим максимальный элемент и прибавляем его значение к Sum. Для определения максимального элемента в строке вводим переменную max и сначала записываем в нее значение первого элемента этой строки. Затем в цикле просматриваем все остальные элементы, начиная со второго до конца массива. Если очередной элемент больше значения max, записываем в max значение этого элемента».

  3. сначала напишем программу на псевдокоде:

const N=10;

{ ввод матрицы N на N }

Sum := 0;

for i:=1 to N do begin

{ max := максимальный элемент в i-ой строке }

Sum := Sum + max;

end;

  1. остается записать на Паскале те части, которые взяты в фигурные скобки, и до конца оформить программу; по правилам ЕГЭ можно не писать в программе команды для ввода массива, поэтому мы оставим на этом месте комментарий:

const N=10;

var A: array[1..N,1..N] of integer;

i, k, max, Sum: integer;

begin

{ ввод матрицы N на N }

Sum := 0;

for i:=1 to N do begin

max := A[i,1];

for k:=2 to N do

if A[i,k] > max then max := A[i,k];

Sum := Sum + max;

end;

writeln(Sum);

end.


Возможные проблемы:

  • проверьте, правильно ли заданы (и заданы ли вообще) начальные значения для всех переменных

  • проверьте, правильно ли расставлены операторные скобки begin-end, ограничивающие тело цикла; их обязательно нужно ставить, если в теле цикла несколько операторов

  • проверяйте, не выйдет ли индекс за границу массива в начале или в конце цикла

  • не перепутайте номер строки (это первый индекс) и номер столбца (второй индекс)

  • для надежности не рекомендуется использовать в одной программе переменные i и j, потому что они слишком похоже выглядят, вот пример ошибочного решения в этой задаче:

for i:=1 to N do begin

max := A[i,1];

for i:=2 to N do

if A[j,i] > max then max := A[i,j];

Sum := Sum + max;

end;

  • если вы все же используете переменные i и j, нужно писать их очень четко, чтобы они отличались друг от друга


Немного тактики:

  • в этом задании можно написать алгоритм на русском языке, а можно (вместо этого) написать компьютерную программу на одном из языков программирования

  • если вы хорошо умеете выражать свои мысли по-русски, собаководы эксперты рекомендуют писать только алгоритм на русском языке; дело в том, что если вы сделаете много ошибок в программе, оценка будет снижена даже при абсолютно правильном алгоритме

  • если вам сложно изъясняться на родном языке, а легче записать свои мысли на Паскале или Си – пишите программу, но тщательно проверяйте ее на предмет возможных случайных ошибок-опечаток, которые можно сделать просто по невнимательности:

  • задавайте все начальные значения для переменных

  • проверяйте правильность написания ключевых слов

  • если в теле цикла несколько операторов, заключайте их в блок begin-end (операторные скобки)

  • проверяйте начальное и конечное значение переменной цикла

  • если вы используете циклы while или repeat, проверьте, что переменная цикла изменяется в теле цикла (иначе в программе будет зацикливание, а на ЕГЭ – потерянные баллы)

  • выводите на экран именно то, что требуется по условию

  • ставьте точку с запятой в конце операторов

  • НЕ ставьте точку с запятой перед else (Паскаль)

  • ставьте точку в конце последнего оператора end (Паскаль)



За что снимают баллы:

  • задано неверное начальное значение переменных (или вообще не задано)

  • неверно указано условие завершения цикла

  • «забыли» изменять переменную цикла в цикле while (repeat)

  • перепутаны знаки < и >, логические операции or и and

  • неверно расставлены операторные скобки begin-end

  • программа не выводит результат или выводит не то, что спрашивают

  • синтаксические ошибки (знаки пунктуации – запятые, точки, точки с запятой; неверное написание ключевых слов) допускаются в разумных пределах (если они не искажают замысел автора)

Задачи для тренировки2:

  1. Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из двух последовательных элементов в целочисленном массиве из 30 элементов, сумма которых максимальна (если таких пар несколько, то можно выбрать любую из них).


  1. Опишите на русском языке или одном из языков программирования алгоритм подсчета числа элементов, равных максимальному, в числовом массиве из 30 элементов.


  1. Опишите на русском языке или одном из языков программирования алгоритм поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов.


  1. Дан прямоугольный массив целых положительных чисел 10 х 20. Опишите на русском языке или на одном из языков программирования алгоритм поиска строки с наименьшей суммой элементов. Вывести на печать номер строки и сумму ее элементов. Предполагается, что такая строка единственна.



  1. Дан квадратный массив целых положительных чисел 10 х 10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы элементов строки, в которой расположен элемент с максимальным значением. Вывести значение суммы на печать. Предполагается, что такой элемент единственный.



  1. Дан целочисленный прямоугольный массив 6x10. Опишите на русском языке или на одном из языков программирования алгоритм вычисления суммы минимальных элементов из каждой строки. Напечатать значение этой суммы. Предполагается, что в каждой строке минимальный элемент единственный.


  1. Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 0 до 100 ­– баллы, полученные на ЕГЭ. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.

Паскаль

Естественный язык

const N = 30;

var A: array[1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(A[i]);

...

end.

Объявляется массив A из 30 элементов.

Объявляются целочисленные переменные i, x и y, а также вещественная переменная s.

В цикле от 1 до 30 заполняются все элементы массива A с 1-ого по 30-ый.

...


  1. Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 160 до 200 ­– рост учащихся выпускного класса. В баскетбольную команду берут тех, чей рост не менее 180 см. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит минимальный рост игрока баскетбольной команды. Гарантируется, что хотя бы один ученик играет в баскетбольной команде. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.

Паскаль

Естественный язык

const N = 30;

var A: array[1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(A[i]);

...

end.

Объявляется массив A из 30 элементов.

Объявляются целочисленные переменные i, x и y, а также вещественная переменная s.

В цикле от 1 до 30 заполняются все элементы массива A с 1-ого по 30-ый.

...


  1. Дан целочисленный массив из 31 элемента, в котором записаны значения температуры воздуха в марте. Элементы массива могут принимать значения от (–20) до 20. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит среднюю температуру по всем дням, когда была оттепель (температура поднималась выше нуля). Гарантируется, что хотя бы один день в марте была оттепель. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.

Паскаль

Естественный язык

const N = 31;

var A: array[1..N] of integer;

i, x, y: integer;

s: real;

begin

for i:=1 to N do readln(A[i]);

...

end.

Объявляется массив A из 31 элемента.

Объявляются целочисленные переменные i, x и y, а также вещественная переменная s.

В цикле от 1 до 31 заполняются все элементы массива A с 1-ого по 31-ый.

...


  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось набрать не менее 20 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы один учащийся получил за тест положительную оценку. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, j, min: integer;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляется массив A из 30 элементов.

Объявляются целочисленные переменные i, j и min.

В цикле от 1 до 30 заполняются все элементы массива A с 1-ого по 30-ый.

...

В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Опишите на русском языке или на одном из языков программирования алгоритм суммирования положительных элементов квадратной матрицы, превышающих по величине среднее арифметическое всех элементов главной диагонали.

  2. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет найти и вывести количество учащихся, чья оценка за тест выше средней оценки в классе. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, j: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j.

Объявляем действительную переменную s.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. С клавиатуры вводится целое число X. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит наименьший номер элемента, равного X, или сообщение, что такого элемента нет. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, j, x: integer;

begin

for i:=1 to N do readln(a[i]);

readln(x);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j, x. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й. Вводим переменную X.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит второй максимум массива (элемент, который в отсортированном по невозрастанию массиве стоял бы вторым). Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, k, max, max2: integer;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, k, max, max2. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер третьего положительного элемента массива (если из массива вычеркнуть все неположительные элементы, этот элемент стоял бы в получившемся массиве на третьем месте). Если в массиве меньше, чем три положительных элемента, вывести сообщение об этом. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, j, k: integer;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j, k. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит сумму наибольшей возрастающей последовательности подряд идущих элементов. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, l, lmax, s, smax: integer;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, l, lmax, s, smax.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать любые целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер элемента массива, наименее отличающегося от среднего арифметического всех его элементов. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, k: integer;

s, min: real;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, k.

Объявляем действительные переменные s, min.

В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номера двух элементов массива, сумма которых минимальна. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, j, min, min2, s: integer;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j, min, min2, s. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

  1. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номера двух элементов массива, наименее отличающихся друг от друга. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Естественный язык

const N=30;

var a: array [1..N] of integer;

i, j, min, min2, s: integer;

begin

for i:=1 to N do readln(a[i]);

...

end.

Объявляем массив A из 30 элементов. Объявляем целочисленные переменные i, j, min, min2, s. В цикле от 1 до 30 вводим элементы массива A с 1-го по 30-й.

...

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).



1 По традиции нумерация элементов массива в Паскале обычно начинается с единицы, далее N обозначает размер массива (количество элементов).

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Самылкина Н.Н., Островская Е.М. Информатика: тренировочные задания. – М.: Эксмо, 2009.

  4. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

12 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Секретарь-администратор

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ C3.doc

isa.muschanov.70@yandex.ru

C3 (высокий уровень, время – 30 мин)

Тема: Дерево игры. Поиск выигрышной стратегии.

Что нужно знать:

  • в простых играх можно найти выигрышную стратегию, просто перебрав все возможные варианты ходов соперников

  • для примера рассмотрим такую игру: сначала в кучке лежит 5 спичек; два игрока убирают спички по очереди, причем за 1 ход можно убрать 1 или 2 спички; выигрывает тот, кто оставит в кучке 1 спичку

  • первый игрок может убрать одну спичку (в этом случае их останется 4), или сразу 2 (останется 3), эти два варианта можно показать на схеме:

hello_html_3be94eac.gif

  • если первый игрок оставил 4 спички, второй может своим ходом оставить 3 или 2; а если после первого хода осталось 3 спички, второй игрок может выиграть, взяв две спички и оставив одну:

hello_html_m7c803087.gif

  • если осталось 3 или 2 спички, то 1-ый игрок (в обеих ситуациях) выиграет своим ходом:

hello_html_10ef64f6.gif

  • простроенная схема называется «деревом игры», она показывает все возможные варианты, начиная с некоторого начального положения (для того, чтобы не загромождать схему, мы не рисовали другие варианты, если из какого-то положения есть выигрышный ход)

  • в любой ситуации у игрока есть два возможных хода, поэтому от каждого узла этого дерева отходят две «ветки», такое дерево называется двоичным (если из каждого положения есть три варианта продолжения, дерево будет троичным)

  • проанализируем эту схему; если первый игрок своим первым ходом взял две спички, то второй сразу выигрывает; если же он взял одну спичку, то своим вторым ходом он может выиграть, независимо от хода второго игрока

  • кто же выиграет при правильной игре? для этого нужно ответить на вопросы: 1) «Может ли первый игрок выиграть, независимо от действий второго?», и 2) «Может ли второй игрок выиграть, независимо от действий первого?»

  • ответ на первый вопрос – «да»; действительно, убрав всего одну спичку первым ходом, 1-ый игрок всегда может выиграть на следующем ходу

  • ответ на второй вопрос – «нет», потому что если первый игрок сначала убрал одну спичку, второй всегда проиграет, если первый не ошибется

  • таким образом, при правильной игре выиграет первый игрок; для этого ему достаточно первым ходом убрать всего одну спичку

  • в некоторых играх, например, в рэндзю (крестики-нолики на бесконечном поле) нет выигрышной стратегии, то есть, при абсолютно правильной игре обоих противников игра бесконечна (или заканчивается ничьей); кто-то может выиграть только тогда, когда его соперник по невнимательности сделает ошибку

  • полный перебор вариантов реально выполнить только для очень простых игр; например, в шахматах сделать это за приемлемое время не удается (дерево игры очень сильно разветвляется, порождая огромное количество вариантов)

  • в демо-вариантах ЕГЭ рекомендуется записывать дерево в виде таблицы (фактически, повернув его «на бок»), так получается более компактно:


1 игрок

2 игрок

1 игрок

5

4

3

1

2

1

3

1


Пример задания:

Два игрока играют в следующую игру. На координатной плоскости стоит фишка. Игроки ходят по очереди. В начале игры фишка находится в точке с координатами (5,2). Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: или в точку с координатами (x+3,y), или в точку с координатами (x,y+3), или в точку с координатами (x,y+4). Выигрывает игрок, после хода которого расстояние по прямой от фишки до точки с координатами (0,0) не меньше 13 единиц. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.

Решение (вариант 1, полное дерево игры, «поиск в ширину»):

  1. из каждой ситуации в этой игре возможно три продолжения, поэтому дерево получается троичным

  2. по теореме Пифагора расстояние L от точки с координатами (x,y) до начала координат – это квадратный корень из суммы квадратов координат: hello_html_m591b6f90.gif; чтобы избавиться от вычисления квадратного корня, нужно перейти от заданного условия hello_html_m75ae11df.gif к равносильному условию в целых числах: hello_html_m6cc7b96a.gif

  3. в начальный момент hello_html_509b58b3.gif, условие не выполнено

  4. первый игрок имеет три варианта хода, запишем их в таблицу, указывая для каждого положения координаты (в скобках) и значение hello_html_4f179816.gif(мелким шрифтом);


    I игрок

    (5,2) 29

    (8,2) 68

    (5,5) 50

    (5,6) 61

  5. видим, что одним ходом первый игрок никак не может выиграть (для всех вариантов hello_html_m107f7bb2.gif)

  6. построим следующий столбец таблицы (ход второго игрока):





  1. I игрок

    II игрок

    (5,2) 29

    (8,2) 68

    (11,2) 125

    (8,5) 89

    (8,6) 100

    (5,5) 50

    (8,5) 89

    (5,8) 89

    (5,9) 106

    (5,6) 61

    (8,6) 100

    (5,9) 106

    (5,10) 125

    второй игрок тут тоже никак не может выиграть (для всех вариантов hello_html_m107f7bb2.gif);
  2. обратите внимание на варианты, выделенные в таблице серым фоном: они уже встречались выше в этом же столбце (хотя получены в результате другой последовательности ходов), поэтому дальше не стоит их рассматривать отдельно

  3. строим таблицу для третьего хода (I-й игрок); для сокращения записи не будем выписывать все возможные ходы, если мы нашли выигрышный ход из этой позиции (выделен синим фоном):


    I игрок

    II игрок

    I игрок

    (5,2) 29

    (8,2) 68

    (11,2) 125

    (14,2) 200

    (8,5) 89

    (11,5) 146

    (8,8) 128

    (8,9) 145

    (8,6) 100

    (11,6) 157

    (8,9) 145

    (8,10) 164

    (5,5) 50

    (8,5) 89


    (5,8) 89

    (5,12) 169

    (5,9) 106

    (5,12) 169

    (5,6) 61

    (8,6) 100


    (5,9) 106


    (5,10) 125

    (5,13) 196

  4. видим, что в некоторых случаях первый игрок может выиграть уже на втором ходу, однако это не гарантируется, значит, нельзя утверждать, что первый игрок всегда выиграет

  5. легко проверить, что во всех оставшихся позициях (если первый не выиграл) второй игрок выигрывает своим следующим ходом:


    I игрок

    II игрок

    I игрок

    II игрок

    (5,2) 29

    (8,2) 68

    (11,2) 125

    (14,2) 200


    (8,5) 89

    (11,5) 146

    (14,5) 221

    (8,8) 128

    (11,8) 185

    (8,9) 145

    (11,9) 202

    (8,6) 100

    (11,6) 157

    (14,6) 232

    (8,9) 145


    (8,10) 164

    (11,10) 221

    (5,5) 50

    (8,5) 89



    (5,8) 89

    (5,12) 169


    (5,9) 106

    (5,12) 169


    (5,6) 61

    (8,6) 100



    (5,9) 106



    (5,10) 125

    (5,13) 196


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

  7. из таблицы следует, что второй игрок выигрывает (своим вторым ходом), если ему удастся свести ситуацию к положению (8,5) или (8,6)

  8. далее замечаем, что при любом ходе первого игрока второй может добиться нужной ему позиции (показаны варианты в зависимости от первого хода):

(8,2)→(8,5)

(8,2)→(8,6)

или

(5,5)→(8,5)

или

(5,6)→(8,6)

и выиграть вторым ходом

  1. таким образом, при правильной игре выиграет второй игрок, для этого при любом ходе первого игрока ему достаточно свести ситуацию к положению (8,5) или (8,6); такая возможность у него есть.

Возможные ловушки и проблемы:

  • нужно уметь правильно считать, часто в работах встречаются арифметические ошибки, которые приводят к неверному решению

  • таблица получается довольно громоздкой, чтобы не запутаться, лучше оставлять в ней только те данные, которые действительно влияют на решение (как мы делали выше)

  • обнаружив, что первый игрок выигрывает в некоторых вариантах на 2-ом ходу, можно (напрасно!) обрадоваться и записать неверный ответ (помните, что факт выигрыша в каких-то случаях, еще не означает, что этот игрок выиграет всегда)

  • необходимо проверить, при любом ли ходе первого игрока второй игрок (в нашей задаче) может получить нужную для себя ситуацию; например, мог быть вариант, когда для первого хода (5,5) при любом ходе второго игрока выигрывал первый, это означало бы, что при правильной игре первый всегда победит

  • известные примеры задач ЕГЭ этого типа показывают, что второй игрок почему-то выигрывает чаще , но на это нельзя рассчитывать, именно в вашем варианте может быть все по-другому


Как правильно оформить решение:

  • нужно обязательно написать ответ СЛОВАМИ, например, «Выиграет игрок, который делает второй ход»

  • нужно обязательно привести ВСЕ варианты ходов первого игрока и доказать, что во всех случаях у второго (в данной задаче!) есть выигрышный ход

  • в решении должна быть СЛОВАМИ описана стратегия игры второго игрока «как он должен играть, чтобы выиграть)

  • рекомендуется записывать ходы в таблицу, точно совпадающую с той, которая приводится в официальном решении демо-варианта; для эксперта этот вариант будет гарантированно понятен и привычен

Итак, у нас получилось, что выигрывает второй игрок. В ответе на каждом ходу нужно привести все возможные ходы первого игрока, и на каждый из этих ходов дать выигрышный ответ второго. В первом столбце стандартной таблицы записываем начальную позицию. Из этого положения у I-ого игрока есть 3 варианта хода, записываем их во второй столбец:


1-й ход

2-й ход

3-й ход

4-й ход

стартовая позиция

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

(5,2) 29

(8,2) 68




(5,5) 50




(5,6) 61




Обратите внимание, что мы перечислили все возможные ходы I-ого игрока, как и требуется.

Теперь на каждый возможный ход I-ого игрока во втором столбце записываем выигрышный ответ II-ого, то есть, такой ответ, который приводит второго к выигрышу, и подчеркиваем его (или как-то выделяем по-другому, чтобы показать, что это выигрышный ход):


1-й ход

2-й ход

3-й ход

4-й ход

стартовая позиция

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

(5,2) 29

(8,2) 68

(8,5) 89



(5,5) 50

(8,5) 89



(5,6) 61

 (8,6) 100










В четвертом столбце нужно перечислить все варианты (обязательно все!) второго хода I-ого игрока в ответ на указанный выигрышный ход второго:


1-й ход

2-й ход

3-й ход

4-й ход

стартовая позиция

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

(5,2) 29

(8,2) 68

(8,5) 89

(11,5) 146


(8,8) 128


(8,9) 145


(5,5) 50

(8,5) 89

(11,5) 146


(8,8) 128


(8,9) 145


(5,6) 61

 (8,6) 100

(11,6) 157


(8,9) 145


(8,10) 164















Остается добавить в последний столбец (один!) выигрышный ход II-ого игрока. Обратите внимание, что для выигрывающего игрока достаточно указать только один выигрышный ход, а для проигравшего нужно рассмотреть все ходы на каждом шаге.


1-й ход

2-й ход

3-й ход

4-й ход

стартовая позиция

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

I-й игрок (все варианты хода)

II-ой игрок, выигрышный ход

(5,2) 29

(8,2) 68

(8,5) 89

(11,5) 146

(14,5) 221

(8,8) 128

(11,8) 185

(8,9) 145

(11,9) 202

(5,5) 50

(8,5) 89

(11,5) 146

(14,5) 221

(8,8) 128

(11,8) 185

(8,9) 145

(11,9) 202

(5,6) 61

 (8,6) 100

(11,6) 157

(14,6) 232

(8,9) 145

(11,9) 202

(8,10) 164

(11,10) 221














После таблицы обязательно опишите стратегию игры словами:

«Выигрывает игрок, который делает второй ход. Таблица содержит все варианты хода первого игрока. Из нее видно, что при любом ходе первого игрока у второго есть ход, приводящий к победе».





За что снимают баллы:

  • если вы правильно указали выигрывающего игрока, но не привели никакого обоснования, эксперт поставит 0 баллов

  • не описана стратегия выигрывающего игрока (как именно ему нужно ходить)

  • не проведен полный анализ возможных ходов обоих игроков (рассмотрены не все случаи ответных ходов)

Решение (вариант 2, неполное дерево игры, «поиск в глубину»):

  1. в отличие от предыдущего способа, будем строить дерево «в глубину», то есть доходить до выигрыша одного из игроков, и только потом переходить к следующей ветке

  2. рассмотрим первый ход первого игрока:


    I игрок

    (5,2) 29

    (8,2) 68

  3. теперь рассматриваем первый возможный ответ второго игрока (увеличение x на 3):


I игрок

II игрок

(5,2) 29

(8,2) 68

(11,2) 125




  1. видим, что в этой ситуации следующим ходом I-й игрок выигрывает:


I игрок

II игрок

I игрок

(5,2) 29

(8,2) 68

(11,2) 125

(14,2) 200




таким образом, эту ветку дерева мы рассмотрели до конца

  1. теперь анализируем второй возможный ответ II-ого игрока:


I игрок

II игрок

I игрок

(5,2) 29

(8,2) 68

(11,2) 125

(14,2) 200

(8,5) 89






  1. перебор вариантов показывает, что следующим ходом первый игрок никак не может выиграть, таблице перечислены все его возможные ходы:


I игрок

II игрок

I игрок

(5,2) 29

(8,2) 68

(11,2) 125

(14,2) 200

(8,5) 89

(11,5) 146

(8,8) 128

(8,9) 145







  1. в то же время своим следующим ходом II-й игрок выигрывает при любом ответе I-ого, увеличивая координату x на 3:


I игрок

II игрок

I игрок

II игрок

(5,2) 29

(8,2) 68

(11,2) 125

(14,2) 200


(hello_html_m1cee514d.gif8,5) 89

(11,5) 146

(14,5) 221

(8,8) 128

(11,8) 185

(8,9) 145

(11,9) 202







таким образом, если II-й игрок свел ситуацию к позиции (8,5), он выиграет, потому что при любом ответе I-го игрока у второго есть выигрышный ход; поэтому (8,5) – это выигрышный ход второго игрока в том случае, когда первый игрок походил (8,2)

заметим, что в позиции (8,2) у второго игрока есть еще один ход – (8,6), но его уже можно не рассматривать, поскольку мы уже нашли один выигрышный ход – (8,5), этого достаточно

  1. теперь рассматриваем второй возможный ход первого игрока в исходной позиции:


I игрок

(5,2) 29

(5,5) 50




  1. сразу замечаем, что второй игрок, увеличив y на 3, может своим ходом сразу свести игру к позиции (8,5), которая обеспечивает его выигрыш (см. выше), поэтому дальше эту ветку можно не рассматривать


I игрок

II игрок

(5,2) 29

(5,5) 50

(hello_html_m1cee514d.gif8,5) 89




  1. остается третий возможный ход первого игрока из начального положения: (5,6)


I игрок

(5,2) 29

(5,6) 61




  1. видим, что из положения (5,6) не удается свести игру к уже рассмотренной выигрышной позиции (8,5), поэтому нужно проверить все возможные ответы второго игрока и попытаться найти среди них выигрышный ход

  2. чтобы максимально сократить перебор, сначала рассмотрим вариант хода второго игрока, который ближе всего к известной выигрышной позиции (8,5) – это ход (8,6):


I игрок

II игрок

(5,2) 29

(5,6) 61

(8,6) 100




  1. проверяем все возможные ответы первого игрока и выясняем, что он не может выиграть сразу, одним ходом:


I игрок

II игрок

I игрок

(5,2) 29

(5,6) 61

(8,6) 100

(11,6) 157

(8,9) 145

(8,10) 164





  1. а второй игрок своим следующим ходом всегда выигрывает, увеличивая x на 3:


I игрок

II игрок

I игрок

II игрок

(5,2) 29

(5,6) 61

(hello_html_m6707df08.gif8,6) 100

(11,6) 157

(14,6) 232

(8,9) 145

(11,9) 202

(8,10) 164

(11,10) 221






поэтому (8,6) – это выигрышный ход второго игрока в ответ на первый ход (5,6)

  1. таким образом, при правильной игре выиграет второй игрок, для этого при любом ходе первого игрока ему достаточно свести ситуацию к положению (8,5) или (8,6); такая возможность у него есть

  2. остается только записать ответ в виде таблицы и текстового пояснения, как показано выше


Рекомендации:

  • этот способ решения позволяет очень удобно записывать промежуточные результаты на листике, даже не строя громоздкую таблицу

0 I игрок II игрок I игрок II игрок

(5,2) 29 (8,2) 68 (11,2) 125 (14,2) 200

hello_html_4f800206.gif(8,5) 89 (11,5) 146 (14,5) 221

hello_html_m34759a61.gif(8,8) 128 (11,8) 185

(8,9) 145 (11,9) 202

(5,5) 50 (8,5) 89

(5,5) 50 (8,6) 100 (11,6) 157 (14,6) 232

(8,9) 145 (8,9) 202

(8,10) 164 (8,10) 221

  • тем не менее, окончательный ответ для эксперта желательно записать в виде «стандартной» таблицы и (обязательно!) следующего за ней текстового комментария

Решение (вариант 3, графический):

  1. в задачах на движение фишки можно применить графический метод1, немного измененный и упрощенный, в сравнении с оригинальным вариантом

  2. обозначим начальное положение точки на плоскости белым кружком:

hello_html_m6734bbd4.gif

поскольку при каждом ходе координаты увеличиваются, можно рассматривать только первый квадрант плоскости; задача – очередным ходом выйти за границу, обозначенную красной линией

  1. нанесем на плоскость точки, куда можно попасть за один ход, и обозначим их черными кружками:

hello_html_214501bb.gif

  1. дальше отметим все точки, в которые можно «допрыгнуть» за два хода; некоторые из этих точек позволяют следующим ходом «выпрыгнуть» за красную границу (или хотя бы на красную линию, например, в точку (12,5)), такие точки обозначим кружками с двойной границей – это выигрышные позиции

hello_html_me0b32d9.gif

  1. теперь отмечаем все новые (неотмеченные) точки, куда можно «допрыгнуть» за один ход из черных точек; все эти позиции выигрышные, то есть, следующим ходом очередной игрок выигрывает

hello_html_m33b9b.gif

  1. ключевой момент: находим на плоскости черные точки, из которых ВСЕ ходы ведут к выигрышным позициям; в данном случае это точки (8,5) и (8,6) – это проигрышные позиции, поскольку ЛЮБОЙ очередной ход приводит в выигрышную позицию; обводим эти точки на рисунке рамкой:

hello_html_m2d24c21d.gif

  1. теперь отмечаем двойной линией все точки, из которых можно сразу (за 1 ход) перейти (перевести игру) в одну из проигрышных (для соперника) позиций, это точки (5,5), (5,6) и (8,2)

hello_html_1d41b88a.gif

  1. все черные точки использованы, и получилось так, что ВСЕ возможные ходы первого игрока в начальной ситуации ведут в выигрышные позиции, то есть начальная позиция (5,2) – проигрышная, ее тоже можно обвести в красную рамку

  2. таким образом, при правильной игре выиграет второй игрок, для этого при любом ходе первого игрока ему достаточно свести ситуацию к положению (8,5) или (8,6); такая возможность у него есть

  3. теперь для каждого хода первого игрока нужно указать выигрышный ход второго, который переводит игру в проигрышную позицию


    I игрок

    II игрок

    (5,2)

    (8,2)

    (8,5)

    (5,5)

    (8,5)

    (5,6)

    (8,6)

  4. дальше, как и в предыдущих способах решения, обязательно нужно расписать все возможные ответы первого игрока (3-й ход) и выигрышные ходы второго игрока для этих вариантов

Возможные проблемы:

  • нужна клетчатая бумага

  • у вас может не быть циркуля, поэтому строить окружность придется по точкам

  • легко ошибиться, если есть точки на самой окружности или очень близко к ней

  • неудобно использовать при большом радиусе окружности (например, 35)

  • неудобно отмечать точки разными значками, легко запутаться



Задачи для тренировки2:

  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 1, а во второй – 2 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 3 раза число камней в какой-то куче, или добавляет 2 камня в какую-то кучу. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 17 камней. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.


  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 3, а во второй – 2 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 3 раза число камней в какой-то куче, или добавляет 1 камень в какую-то кучу. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 16 камней. Кто выигрывает при безошибочной игре – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 4, а во второй – 3 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 3 раза число камней в какой-то куче или добавляет 2 камня в какую-то кучу. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 24 камней. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Два игрока играют в следующую игру. Перед ними лежат три кучки камней, в первой из которых 2, во второй – 3, в третьей – 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в какой-то куче или добавляет по два камня в каждую из куч. Выигрывает игрок, после хода которого либо в одной из куч становится не менее 15 камней, либо общее число камней во всех трех кучах становится не менее 25. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Даны три кучи камней, содержащих соответственно 2,3 и 4 камня. За один ход разрешается или удвоить количество камней в меньшей куче (если их две – то в каждой из них), или добавить по 1 камню в каждую из всех трех куч. Выигрывает тот игрок, после хода которого во всех трех кучах суммарно становится не менее 23 камней. Игроки ходят по очереди. Выяснить, кто выигрывает при правильной игре – первый или второй игрок.



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 3, а во второй – 4 камня. У каждого игрока неограниченно много камней. Ходят игроки по очереди. Делая очередной ход, игрок или увеличивает в какой-то кучке число камней в 2 раза, или добавляет в какую-то кучку 3 камня. Выигрывает тот игрок, после хода которого общее число камней в двух кучках становится не менее 23. Кто выиграет – игрок, делающий ход первым, или игрок, делающий второй ход?



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 2, во второй – 3 камня. У каждого игрока неограниченное количество камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает число камней в какой-то куче в 3 раза, или добавляет 3 камня в любую из куч. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 33. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?



  1. Даны две горки фишек, содержащих соответственно 2 и 4 фишки. За один ход разрешается или удвоить количество фишек в какой-нибудь горке, или добавить по две фишки в каждую из двух горок. Выигрывает тот игрок, после чьего хода в двух горках суммарно становится не менее 24 фишек. Игроки ходят по очереди. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки фишек, в первой из которых 3, а во второй – 5 фишек. У каждого игрока неограниченно много фишек. Ходят игроки по очереди. Делая очередной ход, игрок или увеличивает в какой-то кучке число фишек в 2 раза, или добавляет в какую-то кучку 2 фишки. Выигрывает тот игрок, после хода которого общее число фишек в двух кучках становится не менее 21. Кто выиграет – игрок, делающий ход первым, или игрок, делающий второй ход?

  1. Даны три кучи камней, содержащие соответственно 3, 4 и 5 камней. За один ход разрешается или удвоить количество камней в меньшей куче (если таких две – то лишь в одной из них), или добавить 2 камня в большую из куч (если таких две – то лишь в одну из них). Выигрывает тот игрок, после хода которого во всех трех кучах суммарно становится не менее 23 камней. Игроки ходят по очереди. Выяснить, кто выигрывает при правильной игре – первый или второй игрок.


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами (0;1) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+3;y), (x,y+3) или (x,y+4). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 10 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?



  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (-2;-1) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+3;y), (x,y+4) или (x+2,y+2). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 9 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (3;-5) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+3;y), (x,y+4) или (x,y+5). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) не меньше 10 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (-3;2) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+5;y), (x,y+4) или (x+3,y+3). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 12 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (0;-4) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+4;y), (x,y+4) или (x+4,y+4). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 12 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (2;3) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (2x;y), (x,2y) или (x,y+2). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 13 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 1, а во второй – 2 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 3 раза число камней в какой-то куче, или добавляет 3 камня в какую-то кучу. Выигрывает игрок, после хода которого в одной из куч становится не менее 24 камней. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 5, а во второй – 3 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 2 раза число камней в какой-то куче, или добавляет 4 камня в какую-то кучу. Выигрывает игрок, после хода которого в одной из куч становится не менее 22 камней. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами (1;0) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+3;y), (x,y+3) или (x,y+4). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 13 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами (1;2) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+3;y), (x,y+3) или (x,y+4). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 13 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами (1;0) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+4;y), (x,y+4) или (x+4,y+4). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 13 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (-3;2) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x–1;y+3), (x+3,y–1) или (x+2,y+2). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 8 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (-1;2) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x–1;y+4), (x+3,y–1) или (x+2,y+3). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 11 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 3, а во второй – 6 камней. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 2 раза число камней в какой-то куче, или добавляет 2 камня в какую-то кучу. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 24. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 1, а во второй – 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 3 раза число камней в какой-то куче, или добавляет 3 камня в какую-то кучу. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 22. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 6, а во второй – 5 камней. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок увеличивает в 2 раза или в 3 раза число камней в какой-то куче. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 48. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.


  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 2, а во второй – 3 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок увеличивает в 2 раза или в 3 раза число камней в какой-то куче. Выигрывает игрок, после хода которого в одной из куч становится не менее 20 камней. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.



  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 1, а во второй – 2 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 3 раза число камней в какой-то куче, или добавляет 4 камня в какую-то кучу. Выигрывает игрок, после хода которого в одной из куч становится не менее 20 камней. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.


  1. Два игрока играют в следующую игру. Перед ними лежат две кучки камней, в первой из которых 2, а во второй – 3 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или увеличивает в 2 раза число камней в какой-то куче, или увеличивает на 3 число камней в одной из куч. Выигрывает игрок, после хода которого общее число камней в двух кучах становится не менее 17. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.


  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (3;2) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (x+3;y), (x,y+2) или (x,y+4). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 12 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?



  1. Два игрока играют в следующую игру. На координатной плоскости в точке с координатами
    (2;3) стоит фишка. Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: (2x;y), (x,y+3) или (x,y+4). Выигрывает тот игрок, после хода которого расстояние по прямой от фишки до начала координат (0,0) больше 14 единиц. Кто выигрывает – игрок, делающий ход первым, или игрок, делающий ход вторым?


1 Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. — М.: Интеллект-центр, 2010.

  4. Крылов С.С., Ушаков Д.М. ЕГЭ 2010. Информатика. Тематическая рабочая тетрадь. — М.: Экзамен, 2010.

  5. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

18 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Интернет-маркетолог

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ C4.doc

isa.muschanov.70@yandex.ru

C4 (высокий уровень, время – 60 мин)

Тема: Обработка данных, вводимых в виде символьных строк (написать программу средней сложности из 30-50 строк).

Что нужно знать:

  • символьная строка – это цепочка символов, которая может обрабатываться как единое целое

  • для обращения к символу с номером i строки s используется запись s[i], это говорит о том, что строка – особый вариант массива, в котором хранятся символы

  • знак сложения при работе с символьными строками означает сцепку, объединение двух строк в одну (добавление второй строки в конец первой), например:

s := '123' + '456'; { получили '123456' }

  • с помощью функции Ord можно получить код символа; цифры имеют коды от 48 (цифра 0) до 57 (цифра 9), например

k := Ord('1'); { получили 49 }

то же самое можно сделать с помощью преобразования типа (привести char к integer)

k := integer('1'); { получили 49 }

  • с помощью функции Chr можно сделать обратный переход: получить символ по его коду, например

c := Chr(49); { получили символ '1' }

то же самое можно сделать с помощью преобразования типа (привести integer к char)

c := char(49); { получили символ '1' }

  • для работы со строками в наиболее распространенных Паскаль-средах (Turbo Pascal, Borland Pascal, PascalABC, среда АЛГО) используют стандартные функции (здесь s – это переменная типа string, символьная строка; n и r – целые переменные)

n := Length(s);

записать длину строки s в целую переменную n

s1 := Copy(s, 2, 5);

записать в символьную строку s1 подстроку строки s, которая начинается с символа с номером 2 и состоит из 5 символов (важно – не со 2-го по 5-ый символ!)

n := Pos('Вася', s);

записать в целую переменную n номер символа, с которого в строке s начинается подстрока 'Вася' (если ее нет, в переменную n записывается 0); так же можно искать отдельные символы

(важно: сначала указываем, что ищем, а потом – где)

n := StrToInt(s);

преобразовать строку s в целое число и записать результат в переменную n (PascalABC, Delphi)

и процедуры

Delete(s, 2, 5);

удалить из строки s 5 символов, начиная со второго

Insert('Вася', s, 3);

вставить в строку s фрагмент 'Вася', начиная с третьего символа (между 3-м и 4-м)

Val(s, n, r);

преобразовать строку s в целое число и записать результат в переменную n; если при этом произошла ошибка, в переменной r будет ноль, если все нормально – ненулевое значение

  • структура (в Паскале она называется «запись», record) – это сложный тип данных, который может включать в себя несколько элементов – полей; поля могут иметь различный тип

  • записи в Паскале объявляются с помощью ключевого слова record; в простейшем случае можно выделить память под одну запись так:


var x: record

name: string;

code: integer;

end;

эта запись состоит из двух полей: символьной строки name и целого числа code

  • записи очень удобны для работы, когда все данные в целом представляют собой единый блок информации, например, данные об ученике; если не использовать записи, было бы нужно выделять в памяти отдельно символьную строку и отдельно целую переменную, причем эти данные внешне были бы никак не связаны, поэтому программа с записями часто получается логичнее и понятнее как для автора, так и для того, кто будет в ней разбираться

  • для обращения к полям записи используют точку, например x.name означает «поле name записи x»

  • можно сразу объявить массив записей:

var Info: array[1..100] of record

name: string;

code: integer;

end;

это 100 одинаковых записей, имеющих общее имя Info и расположенных в памяти рядом; в каждой структуре есть поля nаme и code; чтобы работать с полями записи с номером k используют обращения вида Info[k].name и Info[k].code

Сложность алгоритмов:

  • обозначение hello_html_m4c548d27.gif говорит о том, что при увеличении в 2 раза размера массива данных количество операций тоже увеличивается примерно в 2 раза (для больших N)

  • сложность hello_html_m4c548d27.gif имеет алгоритм с одним или несколькими простыми (не вложенными!) циклами в каждом из которых выполняется N шагов (как при поиске минимального элемента)

  • количество операций для алгоритма, имеющего сложность hello_html_m4c548d27.gif, вычисляется по формуле hello_html_d594047.gif, где a и b – некоторые постоянные

  • если в одном алгоритме решения задачи используется несколько циклов от 1 до N, а во втором – только один цикл, то алгоритм с одним циклом, как правило, эффективнее (хотя оба алгоритма имеют сложность hello_html_m4c548d27.gif, постоянная hello_html_m734afb91.gif в каждом случае своя, для алгоритма с несколькими циклами она будет больше)

  • для алгоритма, имеющего сложность hello_html_ma2889e8.gif, количество операций пропорционально квадрату размера массива, то есть, если N увеличить в 2 раза, то количество операций увеличивается примерно в 4 раза (например, в программе используется два вложенных цикла, в каждом из которых N шагов); сложность hello_html_ma2889e8.gif имеют простые способы сортировки массивов: метод «пузырька», метод выбора

  • при больших N функция hello_html_d690437.gif растет значительно быстрее, чем hello_html_1e2533bf.gif, поэтому алгоритм, имеющий сложность hello_html_ma2889e8.gif всегда менее эффективен, чем алгоритм сложности hello_html_m4c548d27.gif

  • иногда встречаются алгоритмы сложности hello_html_m615491c6.gif (три вложенных цикла от 1 до N), при больших N они работают медленнее, чем любой алгоритм сложности hello_html_ma2889e8.gif, то есть, менее эффективны

  • для многих задач известны только алгоритмы экспоненциальной сложности, когда размер массива входит в показатель степени, например hello_html_m38fd27b0.gif, для больших N такие задачи не решаются за приемлемое время (например, «взламывание» шифров)

Пример задания:

На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат:

<Фамилия> <Инициалы> <номер школы>

где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> – строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> – не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки:

Иванов П.С. 57

Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран информацию, из какой школы было меньше всего участников (таких школ может быть несколько). При этом необходимо вывести информацию только по школам, пославшим хотя бы одного участника. Следует учитывать, что N>=1000.

Как правильно понимать условие?

  1. на первый вопрос – как именно вводятся данные – находим ответ в самом начале условия: вроде бы «дежурная» фраза «на вход программе подаются…» означает, что данные нужно читать не из файла, а со стандартного входного потока; это, в свою очередь, значит, что можно использовать привычные операторы read (readln), предполагая, что кто-то вводит эти данные с клавиатуры вручную1

  2. итак, сначала вводится количество записей в файле N, а затем N строк с информацией; заметим, что из всей этой информации нас интересует (в каждой строке) только номер школы, остальное можно просто отбрасывать

  3. номер школы стоит после второго пробела в строке

  4. «<номер школы> – не более чем двузначный номер» – крайне важная информация; собственно, только она и позволяет найти хорошее решение задачи; это значит, что школ не более 99!

  5. что означает выражение «как можно более эффективная программа»?

  • прежде всего, данные читаются только один раз, за один проход, нельзя «вернуться» и прочитать что-то вновь

  • в программе не выполняются никакие лишние действия

  • используемые алгоритмы имеют минимальную сложность (см. выше)

  • расходуется минимальный возможный объем памяти; например, чтобы найти количество отрицательных элементов массива, не нужно вводить второй массив; если нам достаточно держать в памяти одну введенную строку, не нужно одновременно хранить все прочитанные строки

  1. зачем нужно уточнение «N>=1000»? этим авторы задачи намекают на то, что не нужно считывать все данные в оперативную память, а потом уже их обрабатывать; основная обработка должна быть сделана сразу, в том же цикле, где читаются входные данные

  2. мы будем считать, что в исходных данных нет ошибок (так принято на олимпиадах и экзаменах), иначе обработка разнообразных ошибок будет составлять основную часть программы

Решение:

  1. по условию, единственная информация, которая нам нужна в итоге для вывода результата – это количество участников по каждой школе

  2. так как номер школы состоит (по условию!) не более, чем из двух цифр, всего может быть не более 99 школ (с номерами от 1 до 99)

  3. поэтому можно ввести массив C из 99 элементов; для всех k от 1 до 99 элемент C[k] будет ячейкой-счетчиком, в которой накапливается число участников от школы с номером k; сначала во все элементы этого массива записываются нуль (обнуление счетчиков):

for k:=1 to 99 do C[k]:=0;

во многих системах программирования на Паскале все глобальные переменные автоматически обнуляются, и таким образом, этот цикл ничего не дает; однако на всякий случай нужно продемонстрировать эксперту, который будет проверять часть С вашей работы, что вы понимаете суть дела («счетчик необходимо сначала обнулить»)

  1. основной цикл обработки вводимых строк можно записать на псевдокоде так:

for i:=1 to N do begin

{ читаем очередную строку }

{ определяем номер школы k }

C[k] := C[k] + 1; { увеличиваем счетчик k-ой школы }

end;

  1. поскольку данные вводятся в виде символьной строки, нужно выделить в памяти переменную s типа string

  2. для чтения очередной строки будем использовать оператор readln

  3. остается понять, как выделить из строки номер школы; по условию он закодирован в последней части строки, после второго пробела; значит, нужно найти этот второй пробел, вырезать из строки весь «хвост» после этого пробела, и преобразовать его из символьного формата в числовой

  4. чтобы найти первый пробел и «отрезать» первую часть строки с этим пробелом, можно использовать команды

p := Pos(' ', s);

s := Copy(s, p+1, Length(s)-p);

первая команда определяет номер первого пробела и записывает его в целую переменную p, в вторая – записывает в строку s весь «хвост», стоящий за этим пробелом, начиная с символа с номером p+1; длина хвоста равна Length(s)-p, где Length(s) – длина строки;

  1. поскольку нас интересует часть после второго пробела, эти две строчки нужно повторить два раза, в результате в переменной s окажется символьная запись номера школы, для преобразования ее в форму числа можно использовать функцию Val:

Val(s, k, r);

эта процедура (Turbo Pascal, Borland Pascal, PascalABC, среда АЛГО) преобразует символьную строку s в числовое значение k; с помощью переменной r обнаруживается ошибка: если раскодировать число не удалось (в строке не число), в r будет записан нуль (здесь мы не будем обрабатывать эту ошибку, полагая, что все данные правильные);

если вы работаете на ПаскалеABC (никто не может вам запретить написать, что этот так), вместо Val можно использовать более удобную и понятную функцию StrToInt:

k := StrToInt(s);

  1. таким образом, основной цикл выглядит так:




for i:=1 to N do begin

readln(s); { читаем очередную строку }

{ выделяем часть после второго пробела }

p := Pos(' ', s);

s := Copy(s, p+1, Length(s)-p);

p := Pos(' ', s);

s := Copy(s, p+1, Length(s)-p);

{ определяем номер школы k }

Val(s, k, r);

C[k] := C[k] + 1; { увеличиваем счетчик k-ой школы }

end;

  1. заметим, что можно избежать дублирования двух строк в теле цикла, «свернув» их во внутренний цикл, но это вряд ли сильно упростит запись:

for k:=1 to 2 do begin

p := Pos(' ', s);

s := Copy(s, p+1, Length(s)-p);

end;

  1. дальше стандартным алгоритмом определяем в массиве C минимальный элемент Min, не учитывая нули (школы, из которых не было участников):

Min := N;

for k:=1 to 99 do

if (C[k] <> 0) and (C[k]:= C[k];

здесь интересна первая строчка, Min:=N: по условию всего было N участников, поэтому минимальное значение не может быть больше N; обратите внимание, что привычный вариант (который начинается с Min:=C[1]) работает неверно, если из первой школы не было ни одного участника

  1. и выводим на экран номера всех школ (обратите внимание – номера!), для которых C[k]=Min:

for k:=1 to 99 do

if C[k] = Min then writeln(k);

  1. остается «собрать» программу, чтобы получилось полное решение; максимальное количество школ мы задали в виде константы LIM:

const LIM = 99;

var C:array[1..LIM] of integer;

i, p, N, k, r, Min: integer;

s:string;

begin

readln(N);

for i:=1 to N do begin

readln(s); { читаем очередную строку }

{ выделяем часть после второго пробела }

p := Pos(' ', s);

s := Copy(s, p+1, Length(s)-p);

p := Pos(' ', s);

s := Copy(s, p+1, Length(s)-p);

{ определяем номер школы k }

Val(s, k, r);

C[k] := C[k] + 1; { увеличиваем счетчик k-ой школы }

end;

Min := N;

for k:=1 to LIM do

if (C[k] <> 0) and (C[k]

for k:=1 to LIM do

if C[k] = Min then writeln(k);

end.



На что обратить внимание:

  • внимательно читайте условие, убедитесь, что вы понимаете смысл каждой строчки; для каждой мелочи постарайтесь определить, зачем она добавлена в условие, что она дает для решения задачи, что ограничивает, что не разрешает делать

  • определите, какая именно информация из условия нужна для решения задачи, а какая – не нужна

  • определите, что именно требуется вывести на экран в результате работы программы

  • начинайте составлять программу с больших блоков, записывая ее сначала на псевдокоде, а потом уточняя детали

  • проверяйте «крайние» варианты (например, возможность выхода за границы массива)

  • проверьте, правильно ли заданы (и заданы ли вообще) начальные значения для всех переменных

  • будьте внимательны, когда в массиве есть «мертвые» элементы, которые не нужно учитывать; проверяйте, что в этом случае ваши алгоритмы (например, поиск минимального элемента) работают правильно

  • проверьте, правильно ли расставлены операторные скобки begin-end, ограничивающие тело цикла; их обязательно нужно ставить, если в теле цикла несколько операторов

  • при использовании функции Pos не забывайте, что первый параметр – что ищем (образец), а второй – где ищем

  • чтобы эксперту было легче понять вашу программу (особенно, если она получилась «нестандартной»), пишите комментарии; объясняйте, что хранится в основных переменных

  • если это возможно, желательно работать только с целыми числами; этим вы избежите проблем, связанных с округлением и неточностью хранения дробных вещественных чисел в памяти компьютера

Еще пример задания:

На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат:

<Фамилия> <Имя> <оценки>,

где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:

Иванов Петр 4 5 3

Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена трех худших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена.

Как правильно понимать условие?

  1. как и в предыдущей задаче, данные «подаются на вход программе», то есть, их можно читать с помощью операторов read (readln), предполагая, что кто-то вводит эти данные с клавиатуры вручную

  2. «количество учеников не меньше 10, но не превосходит 100», здесь только вторая часть – полезная информация, она намекает на то, что придется все введенные данные одновременно держать в памяти, выделив массив (или массивы) размером 100 элементов

  3. сказано, что фамилия имеет длину не более 20 символов, а имя – не более 15; здесь, по сути, важно лишь то, что фамилия и имя (вместе) занимают меньше 255 символов, то есть, «влезут» в стандартное ограничение (255 символов) для типа string в классических версиях Паскаля

  4. после фамилии и имени записаны три оценки (а не одно число, как в прошлой задаче), причем по условию нас НЕ интересуют эти числа, а интересует только средний балл каждого ученика;

  5. важно! средний балл – это вещественное число (может иметь дробную часть), тут уже стоит задуматься: все задачи обычно составляются так, чтобы они решались «хорошо», в то же время операции с дробными числами (почти) всегда выполняются с ошибками, поскольку большинство вещественных чисел нельзя точно (стандартными методами) представить в памяти реального компьютера

  6. следующий шаг к правильному решению: поскольку число оценок у всех учеников одинаковое, средний балл для каждого это сумма его оценок, деленная на 3; поэтому вместо среднего балла мы можем сравнивать суммы баллов – целые числа!

  7. требуется вывести фамилии и имена (баллы не нужны!) трех худших учеников, причем их может быть и больше, если несколько «худших» набрали одинаковую сумму баллов

  8. если бы требовался один худший – все решается поиском по массиву; первая идея – найти самого худшего (1 проход), затем – 2-ого с конца (еще 1 проход), и, наконец, 3-его (всего три прохода по массиву)

  9. это не лучший вариант (на экзамене будут сняты баллы) по двум причинам:

  • в таком методе решения три прохода по массиву, а в самом деле достаточно одного (см. далее), значит, программа неэффективна

  • непонятно, что делать в том случае, если худших – больше трех (в предельном случае – вообще все!) – за это также снимут баллы (программа работает не для всех вариантой входных данных)

  1. возникает следующий вариант – отсортировать массив про возрастанию суммы (и, следовательно, среднего балла), одновременно переставляя имена и фамилии, а затем вывести самых худших, которые после сортировки окажутся в начале массива

  2. этот вариант тоже плох, потому что программа неэффективна; «школьные» алгоритмы сортировки (метод «пузырька», метод выбора) имеют сложность hello_html_ma2889e8.gif, а надо попытаться найти метод со сложностью hello_html_m4c548d27.gif

Решение (общий подход):

  1. сначала составим программу в самом общем виде на псевдокоде, чтобы определить ее основные блоки, а потом будем их постепенно «расшифровывать» через операторы языка программирования:

{ читаем все данные и запоминаем их }

{ находим три худших результата }

{ выводим фамилии и имена тех, чей результат меньше или

равен «третьему худшему» }

  1. до того, как начать писать «нормальный» код, нужно определить, как хранить данные; в данном случае нужно запомнить несколько данных по каждому ученику, их удобнее объединить в запись с двумя полями (фамилия-имя и сумма баллов); таких записей нужно выделить в памяти не менее 100 (по условию), то есть, массив из 100 элементов:

const LIM=100;

var Info: array[1..LIM] of record

name: string;

sum: integer;

end;

Чтение данных:

  1. после того, как мы прочитали фактическое число учеников N, в цикле считываем и расшифровываем информацию о них, сохраняя все данные в структурах

for i:=1 to N do begin

{ считываем строку данных }

Info[i].name := { фамилия и имя };

Info[i].sum := { сумма баллов };

end;

  1. здесь, в принципе, можно использовать тот же подход, что и в первой задаче – читаем строку целиком, затем «разбираем» ее на части с помощью стандартных функций – однако, для разнообразия, мы используем другой подход – будем читать информацию посимвольно, то есть, считывая по одному символу в переменную c типа char;

  2. сначала в поле name очередной структуры записываем пустую строку ''(в которой нет ни одного символа, длина равна нулю)

Info[i].name := ''; { пустая строка }

  1. затем считываем символы фамилии и сразу приписываем их в конец поля name:

repeat

read ( c );

Info[i].name := Info[i].name + c;

until c = ' '; { пока не прочитали пробел }

  1. затем также читаем из входного потока имя, до пробела, и записываем его в конец того же поля name:

repeat

read ( c );

Info[i].name := Info[i].name + c;

until c = ' '; { пока не прочитали пробел }

заметьте, что эти два цикла одинаковы, поэтому ввод имени и фамилии можно записать в виде вложенного цикла так:

Info[i].name := ''; { пустая строка }

for k:=1 to 2 do

repeat

read ( c );

Info[i].name := Info[i].name + c;

until c = ' '; { пока не прочитали пробел }

  1. важно! обратите внимание, что для организации внутреннего цикла используется другая переменная, k (а не i, потому что i – переменная главного цикла, она обозначает номер текущего ученика)

  2. теперь во входном потоке остались три числа, которые мы можем последовательно считывать в целую переменную mark, а затем – добавлять к полю Info[i].sum:

Info[i].sum := 0;

for k:=1 to 3 do begin

read(mark);

Info[i].sum := Info[i].sum + mark;

end;

readln;

  1. последняя команда readln пропускает все оставшиеся символы до новой строки (из этой мы прочитали все, что нужно)

  2. вот полный цикл ввода данных, после его окончания все исходные данные будут записаны в первые N записей массива Info:

for i:=1 to N do begin

{ ввод имени и фамилии }

Info[i].name := '';

for k:=1 to 2 do

repeat

read(c);

Info[i].name := Info[i].name + c;

until c = ' ';

{ ввод и суммирование оценок }

Info[i].sum := 0;

for k:=1 to 3 do begin

read(mark);

writeln(mark);

Info[i].sum := Info[i].sum + mark;

end;

readln;

end;

Поиск трех худших данных:

  1. теперь нужно придумать, как за один проход по массиву найти три худших результата;

  2. как бы мы решили эту задачу, если бы нам нужно было просмотреть столбик чисел и найти три минимальных? можно сделать, например, так:

  • на бумажке вести записи в три столбика, в первом записывать минимальное число, в втором – следующее по величине, в третьем – «третье минимальное»

  • сначала пишем первое число в первый столбик, оно – минимальное, потому что других мы не еще видели; пусть это число 14:

    минимум

    второе

    третье

    14



  • пусть следующее число – 12; оно меньше минимального, поэтому его нужно записывать в первый столбец, а «старое» минимальное число «переедет» во второй столбец

    минимум

    второе

    третье

    14



    12

    14


  • пусть дальше идет число 10 – теперь оно станет минимальным, его нужно записывать в первый столбец; при этом 12 «переедет» из первого столбца во второй, а 14 – из второго в третий

    минимум

    второе

    третье

    14



    12

    14


    10

    12

    14

  • пусть следующее число – 11; оно больше минимального, но меньше «второго», поэтому его нужно поставить во второй столбец; число 12 из второго столбца перемещается в третий, а число 14 из третьего столбца удаляется из кандидатов в «три минимальных»



минимум

второе

третье

14



12

14


10

12

14


11

12

  • просмотрев таким образом весь столбик чисел, за один проход (!) можно найти три минимальных элемента

  • остается только переложить этот алгоритм на язык программирования

  1. выделим в памяти три целых переменных: min1 (минимальный), min2 («второй минимальный»), min3 («третий минимальный»), в виде начальных значений запишем в каждую из них число, заведомо превышающее максимальную возможную сумму трех оценок, например, 20 (>5+5+5)

  2. полный цикл поиска выглядит так:

min1 := 20; min2 := 20; min3 := 20;

for i:=1 to N do begin

if Info[i].sum < min1 then begin { новый min1 }

min3 := min2; min2 := min1;

min1 := Info[i].sum;

end

else if Info[i].sum < min2 then begin { новый min2 }

min3 := min2;

min2 := Info[i].sum;

end

else if Info[i].sum < min3 then { новый min3 }

min3 := Info[i].sum;

end;

  1. обратим внимание на два момента: во-первых, когда переезжают два элемента, сначала нужно перемещать второй на место третьего, а потом – первый на место второго:

min3 := min2;

min2 := min1;

эти операторы нельзя менять местами, иначе «старое» значение min2 будет потеряно;

во-вторых, если проверять условие Info[i].sum < min2 нужно только тогда, когда очередная сумма не меньше, чем min1, поэтому каждый следующий условный оператор стоит в else-блоке предыдущего, то есть, выполняется только тогда, когда предыдущий не сработал

  1. итак, мы нашли три минимальных результата, и остается вывести на экран фамилии и имена тех, у кого сумма баллов меньше или равна min3:

for i:=1 to N do

if Info[i].sum <= min3 then

writeln(Info[i].name);

  1. на всякий случай приведем полную программу, она получилась довольно длинная

const LIM = 100;

var Info: array[1..LIM] of record

name: string;

sum: integer;

end;

i, k, N, mark, min1, min2, min3: integer;

c: char;

begin

readln(N);

{ ввод исходных данных }

for i:=1 to N do begin

Info[i].name := '';

for k:=1 to 2 do

repeat

read(c);

Info[i].name := Info[i].name + c;

until c = ' ';

Info[i].sum := 0;

for k:=1 to 3 do begin

read(mark);

writeln(mark);

Info[i].sum := Info[i].sum + mark;

end;

readln;

end;

{ поиск трех минимальных }

min1 := 20; min2 := 20; min3 := 20;

for i:=1 to N do begin

if Info[i].sum

min3 := min2; min2 := min1;

min1 := Info[i].sum;

end

else if Info[i].sum

min3 := min2;

min2 := Info[i].sum;

end

else if Info[i].sum

min3 := Info[i].sum;

end;

{ вывод результата }

for i:=1 to N do

if Info[i].sum <= min3 then

writeln(Info[i].name);

end.

  1. эту задачу можно решить и без записей, используя два массива: массив символьных строк name и массив целых чисел sum, они объявляются так:

var name: array[1..MAX] of string;

sum: array[1..MAX] of integer;

после этого в приведенной программе нужно заменить везде Info[i].name на name и Info[i].sum на sum.

На что обратить внимание:

  • в исходных данных выделите то, что не нужно для решения задачи; при чтении эти части можно просто пропускать;

  • если нам не нужны фамилия и имя отдельно, можно хранить их вместе, в виде одной строки

  • если нас интересует только сумма оценок, не нужно хранить их в памяти по отдельности

  • если можно при решении задачи обойтись без вещественных чисел, сделав все вычисления только с целыми числами – нужно поступить именно так (иначе снимут баллы), поскольку операции с вещественными числами во многих случаях случаев выполняются неточно

  • алгоритм сложности hello_html_ma2889e8.gif (например, сортировку) нужно использовать только тогда, когда нет алгоритма сложности hello_html_m4c548d27.gif; как правило, в задачах ЕГЭ такой алгоритм всегда можно (попытаться) найти; за неэффективный алгоритм при оценке решения будут сняты баллы


За что снимают баллы:

  • программа работает не для всех исходных данных, не обрабатывает некоторые частные случаи

  • неверно реализован алгоритм поиска минимального элемента, сортировки и т.п.

  • неэффективность алгоритма:

  • используется алгоритм, имеющий сложность hello_html_ma87dcff.gif, когда есть алгоритм сложности hello_html_46c40ba5.gif

  • используется несколько проходов по массиву, когда достаточно одного

  • лишний расход памяти ( используются дополнительные массивы или размер массива определен неверно)

  • используются операции с вещественными числами, когда можно все решить в целых числах

  • переменная не описана или описана неверно

  • переменным не присвоены нужные начальные значения (например, не обнуляются счетчики) или присвоены неверные значения

  • нет вывода результата в конце программы

  • перепутаны знаки < и >, логические операции or и and

  • применяется недопустимая операция, например, div или mod для вещественных чисел

  • неверно расставлены операторные скобки begin-end

  • в цикле for используется вещественная переменная (Паскаль)

  • в цикле while или repeat не изменяется переменная цикла, из-за чего происходит зацикливание

  • синтаксические ошибки (знаки пунктуации – запятые, точки, точки с запятой; неверное написание ключевых слов); чтобы получить 4 балла, при абсолютно верном решении нужно сделать не более одной синтаксической ошибки; на 3 балла – до трех ошибок, на 2 балла – до пяти и на 1 балл – до семи ошибок

Задачи для тренировки2:

  1. На вход программы подается 366 строк, которые содержат информацию о среднесуточной температуре всех дней 2008 года. Формат каждой из строк следующий: сначала записана дата в виде dd.mm (на запись номера дня и номера месяца в числовом формате отводится строго два символа, день от месяца отделен точкой), затем через пробел записано значение температуры — число со знаком плюс или минус, с точностью до 1 цифры после десятичной точки. Данная информация отсортирована по значению температуры, то есть хронологический порядок нарушен. Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на экран информацию о месяце (месяцах), среднемесячная температура у которого (которых) наименее отклоняется от среднегодовой. В первой строке вывести среднегодовую температуру. Найденные значения для каждого из месяцев следует выводить в отдельной строке в виде: номер месяца, значение среднемесячной температуры, отклонение от среднегодовой температуры.


  1. На вход программы подается содержится текст на английском языке, заканчивающийся точкой (другие символы “.” в тексте отсутствуют). Требуется написать программу, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество там таких букв. Строчные и прописные буквы при этом считаются не различимыми. Если искомых букв несколько, то программа должна выводить на экран первую из них по алфавиту. Например, пусть файл содержит следующую запись:
    It is not a simple task. Yes!
    Чаще всего здесь встречаются буквы I, S и T (слово Yes в подсчете не учитывается, так как расположено после точки). Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом: I 3


  1. На вход программы подаются произвольные алфавитно-цифровые символы. Ввод этих символов заканчивается точкой. Требуется написать программу, которая будет печатать последовательность строчных английских букв ('a' 'b'... 'z') из входной последовательности и частот их повторения. Печать должна происходить в алфавитном порядке. Например, пусть на вход подаются следующие символы:

fhb5kbfыshfm.

В этом случае программа должна вывести

b2

f3

h2

kl

ml

s1


  1. На вход программы подаются фамилии и имена учеников. Известно, что общее количество учеников не превосходит 100. В первой строке вводится количество учеников, принимавших участие в соревнованиях, N. Далее следуют N строк, имеющих следующий формат:

<Фамилия> <Имя>

Здесь <Фамилия> – строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов. При этом <Фамилия> и <Имя> разделены одним пробелом. Примеры входных строк:

Иванова Мария

Петров Сергей

Требуется написать программу, которая формирует и печатает уникальный логин для каждого ученика по следующему правилу: если фамилия встречается первый раз, то логин – это данная фамилия, если фамилия встречается второй раз, то логин – это фамилия, в конец которой приписывается число 2 и т.д. Например, для входной последовательности

Иванова Мария

Петров Сергей

Бойцова Екатерина

Петров Иван

Иванова Наташа

будут сформированы следующие логины:

Иванова

Петров

Бойцова

Петров2

Иванова2


  1. На городской олимпиаде по информатике участникам было предложено выполнить 3 задания, каждое из которых оценивалось по 25-балльной шкале. Известно, что общее количество участников первого тура олимпиады не превосходит 250 человек. На вход программы подаются сведения о результатах олимпиады. В первой строке вводится количество участников N. Далее следуют N строк, имеющих следующий формат:

<Фамилия> <Имя> <Баллы>

Здесь <Фамилия> – строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов; <Баллы> – строка, содержащая три целых числа, разделенных пробелом, соответствующих баллам, полученным участником за каждое задание первого тура. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> разделены одним пробелом. Примеры входных строк:

Петрова Ольга 25 18 16

Калиниченко Иван 14 19 15

Напишите программу, которая будет выводить на экран фамилию и имя участника, набравшего максимальное количество баллов. Если среди остальных участников есть ученики, набравшие такое же количество баллов, то их фамилии и имена также следует вывести. При этом имена и фамилии можно выводить в произвольном порядке.


  1. На вход программы подаются сведения о результатах соревнований по школьному многоборью. Многоборье состоит из соревнований по четырем видам спорта, участие в каждом из которых оценивается баллами от 0 до 10 (0 баллов получает ученик, не принимавший участия в соревнованиях по данному виду спорта). Победители определяются по наибольшей сумме набранных баллов. Известно, что общее количество участников соревнований не превосходит 100.

В первой строке вводится количество учеников, принимавших участие в соревнованиях, N. Далее следуют N строк, имеющих следующий формат:

<Фамилия> <Имя> <Баллы>

Здесь <Фамилия> – строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов; <Баллы> - строка, содержащая четыре целых числа, разделенных пробелом, соответствующих баллам, полученным на соревнованиях по каждому из четырех видов спорта. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> разделены одним пробелом. Примеры входных строк:

Иванова Мария 5 8 6 3

Петров Сергей 9 9 5 7

Напишите программу, которая будет выводить на экран фамилии и имена трех лучших участников многоборья. Если среди остальных участников есть ученики, набравшие то же количество баллов, что и один из трех лучших, то их фамилии и имена также следует вывести. При этом имена и фамилии можно выводить в произвольном порядке.


  1. В некотором вузе абитуриенты проходят предварительное тестирование, по результатам которого могут быть допущены к сдаче вступительных экзаменов в первом потоке. Тестирование проводится по двум предметам, по каждому предмету абитуриент может набрать от 0 до 100 баллов. При этом к сдаче экзаменов в первом потоке допускаются абитуриенты, набравшие по результатам тестирования не менее 30 баллов по каждому из двух предметов. На вход программы подаются сведения о результатах предварительного тестирования. Известно, что общее количество участников тестирования не превосходит 500.
    В первой строке вводится количество абитуриентов, принимавших участие в тестировании, N. Далее следуют N строк, имеющих следующий формат:

<Фамилия> <Имя> <Баллы>

Здесь <Фамилия> – строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов; <Баллы> – строка, содержащая три целых числа, разделенных пробелом, соответствующих баллам, полученным на тестировании по каждому из трех предметов. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> разделены одним пробелом. Примеры входных строк:

Ветров Роман 68 59

Анисимова Екатерина 64 88

Напишите программу, которая будет выводить на экран фамилии и имена абитуриентов, потерпевших неудачу, то есть не допущенных к сдаче экзаменов в первом потоке. При этом фамилии должны выводиться в алфавитном порядке.


  1. На вход программе подаются сведения о телефонах всех сотрудников некоторого учреждения. В первой строке сообщается количество сотрудников N, каждая из следующих N строк имеет следующий формат:

<Фамилия> <Инициалы> <телефон>

где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> - строка, состоящая не более чем из 4-х символов (буква, точка, буква, точка), <телефон> – семизначный номер, 3-я и 4, я, а также 5-я и 6-я цифры которого разделены символом «–». <Фамилия> и <Инициалы>, а также <Инициалы> и <телефон> разделены одним пробелом. Пример входной строки:

Иванов П.С. 555-66-77

Сотрудники одного подразделения имеют один и тот же номер телефона. Номера телефонов в учреждении отличаются только двумя последними цифрами. Требуется написать как можно более эффективную программу, которая будет выводить на экран информацию, сколько в среднем сотрудников работает в одном подразделении данного учреждения.


  1. На вход программе сначала подается число участников олимпиады N. В каждой из следующих N строк находится результат одного из участников олимпиады в следующем формате:

<Фамилия> <Имя> <класс> <баллы>

где <Фамилия> – символьная строка (не более 20 символов), <Имя> – символьная строка (не более 15 символов), <класс> – число от 7 до 11, <баллы> – целое число набранных участником баллов. <Фамилия> и <Имя>, <Имя> и <класс>, а также <класс> и <баллы> разделены одним пробелом. Пример входной строки:

Семенов Егор 11 225

Победителем олимпиады становится участник, набравший наибольшее количество баллов, при условии, что он набрал более 200 баллов. Если такое количество баллов набрали несколько участников, то все они признаются победителями при выполнении условия, что их доля не превышает 20% от общего числа участников.

Победителем олимпиады не признается никто, если нет участников, набравших больше 200 баллов, или больше 20% от общего числа участников набрали одинаковый наибольший балл.

Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять фамилию и имя лучшего участника, не ставшего победителем олимпиады. Если таких участников несколько, т.е. если следующий за баллом победителей один и тот же балл набрали несколько человек, или, если победителей нет, а лучших участников несколько (в этом случае именно они являются искомыми), то выдается только количество искомых участников. Гарантируется, что искомые участники (участник) имеются.

Программа должна выводить через пробел фамилию и имя искомого участника или их количество. Пример выходных данных (один искомый участник):

Семенов Егор

Второй вариант выходных данных (несколько искомых участников):

12

  1. В молочных магазинах города Х продается сметана с жирностью 15, 20 и 25 процентов. В городе X был проведен мониторинг цен на сметану. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять для каждого вида сметаны, сколько магазинов продают ее дешевле всего. На вход программе сначала подается число магазинов N. В каждой из следующих N строк находится информация в следующем формате:

<Фирма> <Улица> <Жирность> <Цена>

где <Фирма> – строка, состоящая не более, чем из 20 символов без пробелов, <Улица> – строка, состоящая не более, чем из 20 символов без пробелов, <Жирность> – одно из чисел – 15, 20 или 25, <Цена> – целое число в диапазоне от 2000 до 5000, обозначающее стоимость одного литра сметаны в копейках. <Фирма> и <Улица>, <Улица> и <Жирность>, а также <Жирность> и <Цена> разделены ровно одним пробелом. Пример входной строки:

Перекресток Короленко 25 3200

Программа должна выводить через пробел 3 числа – количество магазинов, продающих дешевле всего сметану с жирностью 15, 20 и 25 процентов. Если какой-то вид сметаны нигде не продавался, то следует вывести 0.

Пример выходных данных:

12 10 0


  1. Школьная олимпиада по информатике проводилась для учеников 7-11-х классов, участвующих в общем конкурсе. Каждый участник олимпиады мог набрать от 0 до 70 баллов. Для определения призеров олимпиады сначала отбираются 25% участников, показавших лучшие результаты. Если у последнего участника, входящего в 25%, оказывается такое же количество баллов, как и у следующих за ним в итоговой таблице, все они считаются призерами только тогда, когда набранные ими баллы больше половины максимально возможных; иначе все они не считаются призерами.

Напишите эффективную по времени работы и по используемой памяти программу, которая по результатам олимпиады будет определять минимальный балл призера олимпиады, и количество призеров было в каждой параллели (среди 7-х, 8-х, 9-х, 10-х и 11-х классов отдельно). Гарантируется, что хотя бы одного призера по указанным правилам определить можно.

На вход программе сначала подается число участников олимпиады N. В каждой из следующих N строк находится результат одного из участников олимпиады в следующем формате:

<Фамилия> <Имя> <класс> <баллы>

где <Фамилия> – строка, состоящая не более, чем из 30 символов, <Имя> – строка, состоящая не более, чем из 15 символов, <класс> – число от 7 до 11, <баллы> – целое число от 0 до 70 набранных участником баллов. <Фамилия> и <Имя>, <Имя> и <класс>, а также <класс> и <баллы> разделены одним пробелом. Пример входной строки:

Семенов Сидор 11 66

Программа должна выводить в первой строке минимальный балл призера, а в следующей – число призеров по всем параллелям отдельно.

Пример выходных данных:

63

1 5 8 12 22


  1. В некотором вузе абитуриенты проходили предварительное тестирование, по результатам которого они могут быть допущены к сдаче вступительных экзаменов в первом потоке. Тестирование проводится по двум предметам, по каждому предмету абитуриент может набрать от 0 100 баллов. При этом к сдаче экзаменов в первом потоке допускаются абитуриенты, набравшие по результатам тестирования не менее 30 баллов по каждому из двух предмета. На вход программы подаются сведения о результатах предварительного тестирования. Известно, что общее количество участников тестирования не превосходит 500.

В первой строке вводится количество абитуриентов, принимавших участие в тестировании, N. Далее следуют N строк, имеющих следующий формат:

<Фамилия> <Имя> <Баллы>

Здесь <Фамилия> – строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов, <Баллы> – строка, содержащая два целых числа, разделенных пробелом – баллы, полученные на тестировании по каждому из двух предметов. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> разделены одним пробелом. Пример входной строки:

Романов Вельямин 48 39

Напишите программу, которая будет выводить на экран фамилии и имена абитуриентов, потерпевших неудачу, то есть не допущенных к сдаче экзаменов в первом потоке. При этой фамилии должны выводиться в алфавитном порядке.


  1. На автозаправочных станциях (АЗС) продается бензин с маркировкой 92, 95 и 98. В городе N был проведен мониторинг цены бензина на различных АЗС. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять для каждого вида бензина, сколько АЗС продают его дешевле всего.

На вход программе в первой строке подается число данных N о стоимости бензина. В каждой из последующих N строк находится информация в следующем формате:

<Компания> <Улица> <Марка> <Цена>

где <Компания> – строка, состоящая не более, чем из 20 символов без пробелов, <Улица> – строка, состоящая не более, чем из 20 символов без пробелов, <Марка> – одно из чисел – 92, 95 или 98, <Цена> – целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного литра бензина в копейках.

<Компания> и <Улица>, <Улица> и <Марка>, а также <Марка> и <Цена> разделены ровно одним пробелом. Пример входной строки:

Синойл Цветочная 95 2250

Программа должна выводить через пробел 3 числа – количество АЗС, продающих дешевле всего 92-й, 95-й и 98-й бензин соответственно. Если бензин какой-то марки нигде не продавался, то следует вывести 0.

Пример выходных данных:

12 1 0

  1. На вход программы подаются прописные латинские буквы, ввод этих символов заканчивается точкой. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять, можно ли переставить эти буквы так, чтобы получился палиндром (палиндром читается одинаково слева направо и справа налево). Программа должна вывести ответ «Да» или «Нет», а в случае ответа «Да» – еще и сам полученный палиндром (первый в алфавитном порядке).

Пример входной строки:

GAANN

Пример выходных данных:

Да

ANGNA

  1. В соревнованиях по многоборью (из M видов спорта) участвуют N спортсменов (N < 1000) . На вход программе в первой строке подается число спортсменов N, во второй – число видов спорта M. В каждой из последующих N строк находится информация в следующем формате:

<Фамилия> <Имя> <Баллы>

где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 12 символов без пробелов, <Баллы> – M целых чисел, обозначающие количество баллов, набранных спортсменом в каждом из видов многоборья.

<Фамилия> и <Имя>, <Имя> и <Баллы>, а также отдельные числа в поле <Баллы> разделены ровно одним пробелом. Пример входных строк:

3

4

Иванов Сергей 100 30 78 13

Петров Антон 90 16 98 14

Сидоров Юрий 100 70 30 21

Программа должна выводить результирующую таблицу, содержащую список спортсменов, отсортированный по убыванию суммы баллов, набранные суммы и занятые места.

В данном случае программа должна вывести

Иванов Сергей 221 1

Сидоров Юрий 221 1

Петров Антон 218 2

  1. На вход программе подаются сведения о пассажирах, сдавших свой багаж в камеру хранения. В первой строке задано текущее время: через двоеточие два целых числа, соответствующие часам (от 00 до 21, ровно 2 символа) и минутам (от 00 до 59, ровно 2 символа). Во второй строке задается количество пассажиров N, которое не меньше 10, но не превосходит 1000. В каждой из последующих N строк находится информация о пассажирах в следующем формате:

<Фамилия> <Время освобождения ячейки>

где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Время освобождения ячейки> – через двоеточие два целых числа, соответствующие часам (от 00 до 21, ровно 2 символа) и минутам (от 00 до 59, ровно 2 символа). <Фамилия> и <Время освобождения ячейки> разделены ровно одним пробелом. Пример входных строк:

10:00

3

Иванов 12:00

Петров 10:12

Сидоров 12:12

Программа должна выводить список пассажиров, которые в ближайшие 2 часа должны освободить ячейки. Список должен быть отсортирован в хронологическом порядке освобождения ячеек. В данном случае программа должна вывести

Петров

Иванов

  1. На вход программе подается текст заклинания, состоящего не более, чем из 200 символов, заканчивающийся точкой (другие точки во входных данных отсутствуют). Гарри Поттеру нужно зашифровать его следующим образом. Сначала Гарри определяет количество букв в самом коротком слове, обозначив полученное число через K (словом называется непрерывная последовательность английских букв, слова друга от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем он заменяет каждую английскую букву в заклинании на букву, стоящую в английском алфавите на K букв ранее (алфавит считается циклическим, то есть, перед буквой A стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остаются строчными, а прописные – прописными.

Требуется написать программу для Гарри Поттера, которая будет выводить на экран текст зашифрованного заклинания. Например, если исходный текст был таким:

Zb Ra Ca Dab Ra.

то результат шифровки должен быть следующий:

Xz Py Ay Byz Py.


  1. Имеется список результатов голосования избирателей за несколько партий, в виде списка названий данных партий. На вход программе в первой строке подается количество избирателей в списке N. В каждой из последующих N строк записано название партии, за которую проголосовал данный избиратель, в виде текстовой строки. Длина строки не превосходит 50 символов, название может содержать буквы, цифры, пробелы и прочие символы.

Пример входных данных:

6

Party one

Party two

Party three

Party three

Party two

Party three

Программа должна вывести список всех партий, встречающихся в исходном списке, в порядке убывания количества голосов, отданных за эту партию. При этом название каждой партии должно быть выведено ровно один раз, вне зависимости от того, сколько голосов было отдано за данную партию. Пример выходных данных для приведенного выше примера входных данных:

Party three

Party two

Party one

При этом следует учитывать, что количество голосов избирателей в исходном списке может быть велико (свыше 1000), а количество различных партий в этом списке не превосходит 10.


  1. Имеется список людей с указанием их фамилии, имени и даты рождения. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять самого старшего человека из этого списка и выводить его фамилию, имя и дату рождения, а если имеется несколько самых старших людей с одинаковой датой рождения, то определять их количество.

На вход программе в первой строке подается количество людей в списке N. В каждой из последующих N строк находится информация в следующем формате:

<Фамилия> <Имя> <Дата рождения>

где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Дата рождения> – строка, имеющая вид ДД.ММ.ГГГГ, где ДД – двузначное число от 01 до 31, ММ – двузначное число от 01 до 12, ГГГГ – четырехзначное число от 1800 до 2100.

Пример входной строки:

Иванов Сергей 27.03.1993

Программа должна вывести фамилию и имя самого старшего человека в списке.

Пример выходных данных:

Иванов Сергей

Если таких людей, несколько, то программа должна вывести их количество. Пример вывода в этом случае:

3

  1. Имеется список учеников разных школ, сдававших экзамен по информатике, с указанием их фамилии, имени, школы и набранного балла. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять двух учеников школы № 50, которые лучше всех сдали информатику, и выводить на экран их фамилии и имена.

Если наибольший балл набрали более двух человек, нужно вывести только их количество. Если наибольший балл набрал один человек, а следующий балл набрало несколько человек, нужно вывести только фамилию и имя лучшего. Известно, что информатику сдавали не менее 5 учеников школы № 50.

На вход программе в первой строке подается количество учеников списке N. В каждой из последующих N строк находится информация в следующем формате:

<Фамилия> <Имя> <Школа> <Балл>

где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Школа> – целое число от 1 до 99, <Балл> – целое число от 1 до 100.

Пример входной строки:

Иванов Сергей 50 87

Пример выходных данных, когда найдено два лучших:

Иванов Сергей

Сергеев Иван

Если больше двух учеников набрали высший балл, то программа должна вывести их количество. Пример вывода в этом случае:

8

Если высший балл набрал один человек, а следующий балл набрало несколько человек, то программа должна вывести только фамилию и имя лучшего. Пример вывода в этом случае:

Иванов Сергей

  1. Имеется список учеников разных школ, сдававших экзамен по информатике, с указанием их фамилии, имени, школы и набранного балла. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять номера школ, в которых средний балл выше, чем средний по району. Если такая школа одна, нужно вывести и средний балл (в следующей строчке). Известно, что информатику сдавали не менее 5 учеников. Кроме того, школ с некоторыми номерами не существует.

На вход программе в первой строке подается количество учеников списке N. В каждой из последующих N строк находится информация в следующем формате:

<Фамилия> <Имя> <Школа> <Балл>

где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Школа> – целое число от 1 до 99, <Балл> – целое число от 1 до 100.

Пример входной строки:

Иванов Сергей 50 87

Пример выходных данных, когда найдено три школы:

50 87 23

Пример вывода в том случае, когда найдена одна школа:

18

Средний балл = 85

  1. На вход программе подается строка (длиной не более 200 символов), в которой нужно зашифровать все английские слова (словом называется непрерывная последовательность английских букв, слова друга от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Строка заканчивается символом #, других символов # в строке нет. Каждое слово зашифровано с помощью циклического сдвига на длину этого слова. Например, если длина слова равна K, каждая буква в слове заменяется на букву, стоящую в английском алфавите на K букв дальше (алфавит считается циклическим, то есть, за буквой Z стоит буква A). Строчные буквы при этом остаются строчными, а прописные – прописными. Символы, не являющиеся английскими буквами, не изменяются.

Требуется написать программу, которая будет выводить на экран текст зашифрованного сообщения. Например, если исходный текст был таким:

Day, mice. "Year" is a mistake#

то результат шифровки должен быть следующий:

Gdb, qmgi. "Ciev" ku b tpzahrl#

  1. После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. По положению об экзамене каждый район сам определяет, за какой балл нужно поставить какую оценку.

Районный методист решила, что оценку «отлично» должны получить 20% участников (целое число, с отбрасыванием дробной части). Для этого она должна определить, какой балл должен был набрать ученик, чтобы получить «отлично». Если невозможно определить такой балл, чтобы «отлично» получили ровно 20% участников, «отлично» должно получить меньше участников, чем 20%. Если таких участников не окажется (наибольший балл набрали больше 20% участников) — эти и только эти ученики должны получить «отлично».

Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран наименьший балл, который набрали участники, получившие «отлично». Известно, что информатику сдавало больше 5-ти учеников. Также известно, что есть такое количество баллов, которое не получил ни один участник.

На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:

<Фамилия> <Имя> <Номер школы> <Количество баллов>

где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более, чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, всего по три пробела в каждой строке).

Пример входной строки:

Иванов Иван 50 87

Пример выходных данных:

78

1 Или используется перенаправление входного потока из командной строки, но это уже абсолютно неважно…

2 Источники заданий:

  1. Демонстрационные варианты ЕГЭ 2004-2009 гг.

  2. Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. — СПб: Тригон, 2009.

  3. Самылкина Н.Н., Островская Е.М. Информатика: тренировочные задания. – М.: Эксмо, 2009.

  4. Зорина Е.М., Зорин М.В. ЕГЭ-2010: Информатика: Сборник заданий. – М.: Эксмо, 2009.

  5. Якушкин П.А., Крылов С.С. ЕГЭ-2010. Информатика: сборник экзаменационных заданий. – М.: Эксмо, 2009.

  6. Якушкин П.А., Ушаков Д.М. Самое полное издание типовых вариантов реальных заданий ЕГЭ 2010. Информатика. — М.: Астрель, 2009.

23 isa.muschanov.70@yandex.ru

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ Iud.doc

Поставьте игру на паузу (PAUSE) и вызовите сотовый телефон. Нажмите кнопку "Дозвониться" (Dial), наберите один из следующих номеров, включая символ "#", и нажмите кнопку "Отослать" (Send). Вам должно прийти подтверждающее сообщение. После идите в опцию "Коды" (Cheats), и выберите открытую опцию.


Полное здоровье - #1


Увеличить массу автомобиля - #2


Увеличить урон в рукопащной - #3


Добавить уровень "разыскиваемости" в полиции - #4


Включить"забавные падения" (L1 или R1 чтобы упасть) - #5


Бесконечный бег - #6


Отключить перезарядку оружия (кроме РПГ) - #9


Бесконечные боеприпасы - #11


"Связь с небом" - #12


Добавить уровень "разыскиваемости" бандами - #35


Бессмертие - #36


Очистить репутацию перед полицией - #50


Очистить репутацию перед бандами - #51


"Я гигант" - #200


Itty Bitty - #201


Получить $1000 - #2274666399


Автомобили:


Repair Vehicle - #1056


Ambulance - #1040


Anchor - #1041


Atlasbreaker - #1042


Attrazione - #1043


Backdraft - #1044


Backhoe - #1045


Bag Boy - #1046


Baron - #1047


Bear - #1048


Bootlegger - #1049


Bulldog - #1050


Bulldozer - #1051


Compton - #1052


Eiswolf - #1053


FBI - #1054


Five0 - #1055


Hollywood - #1057


Justice - #1058


Kent - #1059


Mag - #1060


Mixmaster - #1061


Mongoose - #1062


Oring - #1063


Phoenix - #1064


Quasar - #1065


Quota - #1066


Rampage - #1067


Raycaster - #1068


Reaper - #1069


Septic Avenger - #1070


Shaft - #1071


Stilwater Municipal - #1072


Superiore - #1073


Taxi - #1074


The Job - #1075


Titan - #1076


Toad - #1077


Varsity - #1078


Venom Classic - #1079


Vortex - #1080


Zenith - #1081


Horizon - #711


Snipes57 - #712


Tornado - #713


Wolverine - #714


Kaneda - #801


Kenshin - #802


Melbourne - #803


Sabretooth - #804


Sandstorm - #805


Widowmaker - #806


Hurricane - #825


Miami - #826


Python - #827


Shark - #828


Skipper - #829


Gyro Daddy helicopter - #4976


Destroy UFO - #728237


Peewee mini-bike - #7266837


Оружие:


12 Gauge - #920


44 Shepherd - #921


AR200 - #922


AR50 - #923


AR50 пусковая установка - #924


AS14 - #925


Бейсбольная бита - #926


Бензопила - #927


Огнетушитель - #928


Огнемет - #929


Вспышка - #930


GAL43 - #931


GDHC - #932


Гранаты - #933


Holt 55 - #934


K6 Krukov - #935


Нож - #936


Мачете - #937


McManus 2010 - #938


Пулемет - #939


Молотов - #940


Nightstick - #941


NR4 - #942


Перцовый баллончик - #943


Pimp Cane - #944


Pipe Bomb - #945


RPG - #946


RPG Annihilator - #947


Меч самурая - #948


Сумка - #949


Шокер - #950


SKR-9 - #951


Кувалда - #952


Парализующий пистолет - #953


T3K Urban - #954


Арматурина - #955


Камень - #956


Vice 9 - #957


XS-2 - #958


Pimp SlapBig - #969



Погода:



Ярость богов - #666


Густая облачность - #78665


Сильный дождь - #78666


Легкий дождь - #78668


Чистое небо - #78669


Нормальная погода - #78670


Мир:


Супер-взрывы - #7


Супер "Святые" - #8


Пьяные пешеходы - #15


"Злые" машины - #16


Низкая гравитация - #18


Война пешеходов - #19


Дождь из пешеходов - #20


Все должны усохнуть - #202


Время - полдень - #1200


Время - полночь - #2400


Службы:


Emergency - 911


Airport - 5553597


Big Willy's Cab - 8198415


Bling Bling - 5554233


Brown Baggers - 5553765


Cocks - 5552626


Company of Gyros - 5554976


Cycles - 5552453


EagleLine Yellow - 0180174


Eye for an Eye (Zombie Carlos) - 5555966


Foreign Power - 5552046


Forgive and Forget - 5554448


Freckle Bitch's - 5556328


Friendly Fire - 5554867


Fire Department - 5553473


Giftshop - 5557577


HazMat - 5556677


Image as Designed - 5558459


Impression - 5553248


Leather and Lace - 5552662


Legal Lee's - 5559467


On The Rag - 5555926


On Thin Ice - 5552564


Police - 5557973


Pimps'R Us - 5557467


Rim Jobs - 5553493


Rusty's Needle - 5558287


Ship It - 5557447


Spelunkers - 5552283


Suicide Hotline - 4876837


Tee'N'Ay - 5559866


TNA Taxis - 4558008


Ultor Security - 411

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Менеджер по туризму

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ answC1.doc

isa.muschanov.70@yandex.ru


Ответы на задачи С1:

  1. Программа работает неправильно, если a и b не равны нулю и имеют разные знаки: в этом случае уравнение hello_html_m36a728c3.gifне имеет решений (поскольку модуль – неотрицательная величина), а программа выдаст два решения. Хотя в задании сказано «Приведите пример таких чисел a, b, x,…», значение x ни на что не влияет (см. далее), в ответе можно указать любое число x. Например, hello_html_m2f0de8e0.gif
    Лишняя часть программы – ввод x, поскольку это не исходные данные, а результат. Поэтому вместо оператора

readln(a,b,x);

правильнее написать

readln(a,b);

Возможная доработка программы – добавить еще один условный оператор, обрабатывающий неучтенный случай (a и b не равны нулю и имеют разные знаки), при котором нет решений:

var a,b,x: real;

begin

readln(a,b);

if a = 0 then

if b = 0 then

write ('любое число')

else write ('нет решений')

else

if b = 0 then

write('x = 0')

else

if a*b < 0 then

write('нет решений')

else write('x =',b/a,' или x =',-b/a);

end.

обратите внимание, что для проверки условия «a и b имеют разные знаки» использовано произведение a*b, которое больше нуля, когда два значения имеют одинаковые знаки, и меньше нуля – когда разные


  1. Программа работает неправильно, если a и b равны нулю: в этом случае решением уравнения hello_html_745fe31e.gifявляется любое число x, а программа выдаст только решение hello_html_m2169027d.gif. Хотя в задании сказано «Приведите пример таких чисел a, b, x,…», значение x ни на что не влияет (см. далее), в ответе можно указать любое число x. Например, hello_html_8e3abf3.gif
    Лишняя часть программы – ввод x, поскольку это не исходные данные, а результат. Поэтому вместо оператора

readln(a,b,x);

правильнее написать

readln(a,b);

Возможная доработка программы – добавить еще один условный оператор, обрабатывающий неучтенный случай (a и b равны нулю), при котором решением является любое число:

var a,b,x: real;

begin

readln(a,b);

if b = 0 then

if a = 0 then

write('любое число')

else write('x = 0')

else

if a = 0 then

write('нет решений')

else write('x =',-b/a);

end.

можно еще немного оптимизировать программу: заметим, что в обеих частях первого условного оператора встречается оператор if a = 0 then; его можно «вынести» наверх, сделать внешним, а не вложенным:

if a = 0 then

if b = 0 then

write('любое число')

else write('нет решений')

else

write('x=',-b/a);

если вы боитесь запутаться во вложенных условных операторах, можно использовать сложные условия и рассмотреть три возможных варианта (важно не забыть ни один!):

if (a=0) and (b=0)then

write('любое число');

if (a=0) and (b<>0)then

write('нет решений');

if a <> 0 then

write('x=',-b/a);

здесь нужно убедиться, что для каждого варианта входных данных сработает один и только один условный оператор


  1. Сhello_html_m5699b2a3.gifогласно условию, нас интересует область, закрашенная на рисунке серым цветом. Если рассмотреть границы области по осям координат, получим четыре условия:

по оси X: hello_html_a1910b3.gif

по оси Y: hello_html_3d6214d2.gif

В программе не учитывается условие hello_html_m2126a430.gif, причем оно не перекрывается другими условиями. Поэтому программа работает неправильно в том случае, когда hello_html_19865416.gif и hello_html_40a2294b.gif (область красного цвета на рисунке). Одна из таких точек: hello_html_159534c1.gif
Для доработки программы нужно добавить еще один условный оператор с недостающим условием и соответствующий ему else-блок, выдающий сообщение в случае невыполнения этого условия:


var x0, у0, у: real;

begin

readln (x0, y0);

if (x0 < 2)then begin

if (x0 > 0)then begin

if (y0 > 0)then begin

у = 2 – х0;

if (y0 < у) then

writeln ('точка лежит внутри области')

else writein ('точка не лежит внутри области');

end

else writeln ('точка не лежит внутри области');

end

else writeln ('точка не лежит внутри области');

end

else writeln ('точка не лежит внутри области');

end.

Это решение работает, но громоздко и некрасиво. Заметим, что два условия hello_html_796030bc.gif и hello_html_77da564d.gif автоматически обеспечивают выполнение условия hello_html_6c63ca73.gif, которое становится лишним:

if (x0 > 0)then begin

if (y0 > 0)then begin

у = 2 – х0;

if (y0 < у) then

writeln ('точка лежит внутри области')

else writein ('точка не лежит внутри области');

end

else writeln ('точка не лежит внутри области');

end

else writeln ('точка не лежит внутри области');

Сделаем еще один шаг: попадание точки в заданную область равносильно одновременному выполнению (операция «И») трех условий: hello_html_59b49552.gif, hello_html_796030bc.gif и hello_html_77da564d.gif, поэтому получаем такой вариант с использованием сложного условия:

if (x0 > 0) and (y0 > 0) and (y0 < 2 - x0) then begin

writeln ('точка лежит внутри области')

else writein ('точка не лежит внутри области');


  1. В этой программе внешне все выглядит правильно, поэтому весьма вероятно, что сделана «ловушка» на какой-то особый (вырожденный) случай. При решении квадратного уравнения «особый случай» – это равенство дискриминанта нулю (два одинаковых корня). Проверяя его, сразу обнаруживаем, что при этом условие D > 0 не срабатывает и программа выдает сообщение «действительных корней нет». Поэтому, например, для hello_html_m1cd6004d.gif программа работает неверно. При этом можно вводить любые x1 и x2 , поскольку в эти переменные записываются результаты вычислений (корни уравнения) анне исходные данные. Это ответ на второй вопрос: вместо оператора

readln(a,b,c,x1,x2);

правильнее написать

readln(a,b,c);

Чтобы исправить программу, достаточно вместо условия D > 0 написать D >= 0:

var a, b, с, D, xl, x2: real;

begin

readln(a, b, с);

D := b*b - 4*a*c;

if D >= 0 then begin

xl := (-b + sqrt(D))/(2*a);

x2 := (-b - sqrt(D))/(2*a);

write('xl =', xl);

write('x2 =', x2);

end

else writeln ('действительных корней нет');

end.

  1. Программа очень плохо написана, мысль автора слабо прослеживается, поэтому сложно разбираться в коде. Для проверки четности числа используется операция mod –остаток от деления целых чисел. Очевидно, что если остаток от деления a на 2 (записывается a mod 2) – нуль, то число a делится на 2 без остатка, то есть – четное.
    Для того, чтобы выяснить, когда программа будет работать неверно, можно использовать ручную прокрутку для четырех возможных вариантов:

    1. оба числа четных

    2. a – четное, b – нечетное

    3. a – нечетное, b – четное

    4. оба числа нечетных

При этом обнаруживаем, что программа неверно работает во втором случае, например, для hello_html_m278bd3bd.gif. Простейшая (?) доработка программы с сохранением замысла (?) автора может быть такая (расширено действие условного оператора и добавлен else-блок)

var a, b: integer;

begin

readln(a, b);

a := a mod 2;

if a > 0 then begin

b := b mod 2;

if b > 0 then

writeln ('четных чисел нет')

else writeln ('четное число есть');

end

else writeln ('четное число есть');

end.

Чтобы сделать программу красивой и понятной, запишем на Паскале вполне ясное условие: «если a – четное или b – четное, то четное число есть, иначе – нет»:

var a, b: integer;

begin

readln(a, b);

if (a mod 2 = 0) or (b mod 2 = 0) then

writeln ('четное число есть')

else writeln ('четных чисел нет')

end.


  1. Вспомним, что треугольник можно построить, если длина каждой стороны меньше суммы длин двух оставшихся, это условие нужно проверить для все трех сторон. Анализируя программу, можно понять, что она не выдает на экран никакого сообщения, если условие в первом условном операторе верно (x + y > z), а в одном из других – неверно, например, для случая hello_html_m59862eb6.gif (треугольник построить нельзя). Чтобы заставить ее работать правильно, достаточно добавить два else-блока для внутренних условных операторов:

var х, у, z: real;

begin

readln (x, у, z);

if (x + y > z) then begin

if (x + z > y) then

if (y + z > x) then

writeln('треугольник построить можно')

else writeln('треугольник построить нельзя')

else writeln('треугольник построить нельзя');

end

else writeln('треугольник построить нельзя');

end.

Чтобы сделать программу красивой и понятной, нужно понять, что треугольник можно построить только в случае одновременного выполнения всех трех условий; в программе

их нужно связать операцией and («И»):

var х, у, z: real;

begin

readln (x, у, z);

if (x + y > z) and (x + z > y) and (y + z > x) then

writeln('треугольник построить можно')

else writeln('треугольник построить нельзя');

end.


  1. В программе неявно предполагается, что r1 > r2, хотя по условию это не всегда так. Поэтому она будет выдавать неверный ответ, когда r2 > r1 и полученное расстояние h (от точки до начала координат) удовлетворяет условию r1 < h < r2, например, для hello_html_756c334f.gif.
    Простейший способ доработать программу – добавить еще один условный оператор со сложным условием, обрабатывающий случай
    r2 > r1:

var x, у, rl,r2:real;

h: real;

begin

readln (x, у, rl, r2);

h:= sqrt (x*x + y*y);

if (h < rl) AND (h > r2) then

writeln ('точка А лежит внутри кольца');

if (h < r2) AND (h > r1) then

writeln ('точка А лежит внутри кольца');

end.

Более красивый способ – объединить два сложных условия в одно с помощью операции or («ИЛИ»), поскольку и в том, и в другом случае выдается одинаковое сообщение:

var x, у, rl,r2:real;

h: real;

begin

readln (x, у, rl, r2);

h := sqrt(x*x + y*y);

if (h < rl) AND (h > r2) OR (h < r2) AND (h > r1) then

writeln('точка А лежит внутри кольца');

end.

Обратите внимание на то, что операция OR имеет более низкий приоритет, чем AND, поэтому в этом сложном условии она будет выполняться последней, как и требуется.

Остается ответить на третий вопрос: как можно обойтись без операций AND или OR. Конечно, возможен «лобовой» вариант, использующий вложенные условные операторы:

if h < rl then

if h > r2 then

writeln('точка А лежит внутри кольца');

if h > rl then

if h < r2 then

writeln('точка А лежит внутри кольца');

Обратите внимание, что нам понадобилось отдельно «обойти» случай h = r1, потому что по условию понятие «внутри кольца» рассматривается в строгом смысле и при h = r1 считается, что точка не попадает в кольцо.

Для более грамотного решения задачи нужно попробовать использовать арифметические операции, так чтобы результат вычисления некоторого выражения прямо отвечал на нужный вопрос. Поскольку числа могут быть самые разные, лучше «играть» не на конкретных значениях, а на знаке, то есть, если точка находится внутри кольца, выражение должно быть, скажем, отрицательным, а если нет – то положительным. Или наоборот.

Если точка находится внутри кольца, то находится h между r1 и r2. Это значит, что разности h-r1 и h-r2 имеют разный знак, следовательно, их произведение отрицательно1. Таким образом, красиво написанная программа может иметь, например, такой вид:

var x, у, rl,r2:real;

h: real;

begin

readln (x, у, rl, r2);

h := sqrt(x*x + y*y);

if (h - rl)*(h - r2) < 0 then

writeln('точка А лежит внутри кольца');

end.


  1. Во-первых, заметим, что в программе проверяются три условия, а заданы – четыре. Сразу находим, что условие y0 > -2 «выпало». Поэтому, например, программа ошибочно сообщит, что точка с координатами hello_html_5fe18c61.gif находится внутри области (в самом деле – нет).

Кроме того, если условие в первом условном операторе истинно, а одно из последующих – ложно, программа вообще не выдает сообщения на экран, это неверно. Таким образом, для входных данных hello_html_6ac84375.gif или hello_html_m71095c7.gif программа также работает неверно.

Чтобы исправить эти ошибки «в лоб», можно добавить еще один условный оператор, проверяющий недостающее условие y0 > -2, и добавить else-блоки, чтобы выводить сообщение «не лежит внутри области» при нарушении любого из условий:

var x0, y0: real;

begin

readln (x0, y0)

if(x0 < 2)then begin

if(x0 > -2)then

if (y0 < 2) then

if (y0 > -2) then

writeln('точка лежит внутри области')

else writeln('точка не лежит внутри области')

else writeln('точка не лежит внутри области');

end

else writeln('точка не лежит внутри области');

end.

чтобы сделать красивую программу, нужно перевести на Паскаль сложное условие «точка лежит внутри области, если одновременно выполняются четыре условия…»; слова «одновременно выполняются» говорят о том, что нужно использовать логическую операцию and («И»):

var x0, y0: real;

begin

readln (x0, y0)

if (x0 < 2) and (x0 > -2) and

(y0 < 2) and (y0 > -2) then

writeln('точка лежит внутри области')

else writeln('точка не лежит внутри области');

end.










  1. 8









    7









    6









    5









    4









    3









    2

    hello_html_2768c1b6.png







    hello_html_653c9e3c.png

    1

    1

    2

    3

    4

    5

    6

    7

    8


    Легко проверить, что клетка (i=5,j=4) удовлетворяет условию i=9-j, и, следовательно, сложному условию (i=9-j) OR (i=j) (OR означает логическую операцию «ИЛИ» - выполнение хотя бы одного из двух условий)

Для ответа на остальные вопросы нарисуем поле и расставим королей (в самом деле в этой задаче все равно, какого цвета поля, поэтому мы их не раскрашивали).

Короли могут ходить по диагонали, поэтому чтобы дойти до поля (i,j), королю лучше

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

  • черный король [его координаты (1,1)] идет по диагонали k-1 шагов, где k=min(i,j) до клетки с координатами (i,i) (если i<=j) или до клетки (j,j) (если i>=j); затем он делает оставшееся количество шагов, max(i,j)-k, по горизонтали или вертикали, так что его общее число шагов равно

max(i,j)-1

  • аналогично белый король [его координаты (8,1)] идет по диагонали q-1 шагов, где q=min(9-i,j) до клетки с координатами (9-i,9-i) (если 9-i<=j) или до клетки (j,j) (если 9-i>=j); затем он делает оставшееся количество шагов, max(9-i,j)-q, по горизонтали или вертикали, так что его общее число шагов равно

max(9-i,j)-1



  • таким образом, нас интересуют клетки (i,j), для которых

max(i,j)-1= max(9-i,j)-1 или max(i,j)= max(9-i,j) (*)

(1,8)

(2,8)







8

(1,7)








7








(8,6)

6





(5,5)




5









4









3









2

hello_html_2768c1b6.png







hello_html_653c9e3c.png

1

1

2

3

4

5

6

7

8


Чтобы найти все пары (i,j), для которых верно полученное равенство, рассмотрим сначала левую половину доски (i<=4):
  • если i<=4, то 9-i>=5>i, поэтому равенство (*) справедливо только при j>=9-i; это область выше главной диагонали и на ней;

  • в силу симметрии сразу можно построить соответствующую область и в правой части доски (см. рисунок справа):

Из указанных полей только три, выделенные желтым маркером, оказываются внутри нужной области

(i=1, j=8), (i=2, j=8), (i=1, j=7),
(
i=5, j=5), (i=8, j=6)

Правильное условие, определяющее нужную область, выглядит так: «клетка выше главной диагонали (или на ней) и одновременно выше второй диагонали (или на ней)». Остается записать его на Паскале:

(j>=i) and (j>=9-i)

Доработка программы сводится просто к замене условия, все остальное правильно.

  1. Попробуем прежде всего найти математическое решение неравенства hello_html_768ca5f8.gif. Оно истинно, если числитель и знаменатель дроби имеют один знак, или оба положительные, или оба отрицательные. При hello_html_m6d9491a5.gif получаем:

(hello_html_m3bbc176.gif и hello_html_m22941e6e.gif) или (hello_html_73c13b34.gif и hello_html_m7f25c664.gif)

В краткой форме: hello_html_m21a604f0.gif или hello_html_m2f7579af.gif. В зависимости от значения hello_html_m734afb91.gif получаем

Случай 1. При hello_html_m6d9491a5.gif и hello_html_m639ca7ab.gif: hello_html_m22941e6e.gif или hello_html_73c13b34.gif

Случай 2. При hello_html_m6d9491a5.gif и hello_html_1a39b0.gif: hello_html_m3bbc176.gif или hello_html_m3accce18.gif

Теперь рассмотрим случай hello_html_m7987d13a.gif. Снова получаем два варианта:

(hello_html_73c13b34.gif и hello_html_m22941e6e.gif) или (hello_html_m3bbc176.gif и hello_html_m7f25c664.gif)

При hello_html_m639ca7ab.gif всегда ложно выражение в первых скобках, а при hello_html_1a39b0.gif – выражение во вторых скобках. Поэтому можно записать еще два случая через двойные неравенства:

Случай 3. При hello_html_72df70b2.gif и hello_html_m639ca7ab.gif: hello_html_m234ad874.gif

Случай 4. При hello_html_72df70b2.gif и hello_html_1a39b0.gif: hello_html_9688a92.gif

Запишем основную часть программы, определив принадлежность каждого else-блока и используя запись «лесенкой»:

if b > 0 then

write('x > ', a, ' или x < 0')

else

if a > 0 then

write('0 < x < ', a)

else

write(a, ' < x < 0');

Анализ условных операторов показывает, что неправильно обрабатывается Случай 2 (hello_html_m6d9491a5.gif и hello_html_1a39b0.gif), то есть, в качестве примера можно привести пару hello_html_mc265f53.gif при любом hello_html_m5547f17b.gif (которое вообще не влияет на результат).

В программе вводится переменная hello_html_m5547f17b.gif, которая нигде не используется. Поэтому это – лишняя часть программы, можно убрать hello_html_m5547f17b.gif из списка объявляемых переменных и списка ввода в операторе readln.

Простейший и (в данной задаче) наиболее логичный вариант доработки программы – добавить еще один условный оператор для правильного разделения Случая 1 и Случая 2:

var a, b: real;

begin

readln(a, b);

if b > 0 then

if a > 0 then

write('x > ', a, ' или x < 0')

else

write('x < ', a, ' или x > 0')

else

if a > 0 then

write('0 < x < ', a)

else

write(a, ' < x < 0');

end.

  1. Пhello_html_m9307edc.gifервое условие в программе, x*x+y*y >= 4, означает «вне круга». Если выполняются одновременно второе и третье условия, x <= 2 и y <= x, точка находится в секторе между прямыми hello_html_mef4358f.gif и hello_html_m73713098.gif, в который входит заштрихованная область. Таким образом, выполнение всех трех условия означает «вне круга и в секторе». Однако, этому условию удовлетворяет не только заштрихованная область, но еще и вся бесконечная область, выделенная на рисунке красным цветом. Поэтому для любой точки в «красной зоне», например, для точки (1;­ –2), программа выдаст неправильный ответ «принадлежит».

Если записать программу «лесенкой», становится видна еще одна ошибка.

if x*x+y*y >= 4 then

if x <= 2 then

hello_html_af4f069.gifif y <= x then

write('принадлежит')

else

write('не принадлежит')

Дело в том, что любой else относится к ближайшему if, поэтому сообщение «не принадлежит» выводится только тогда, когда первые два условия выполняются, а третье – нет. Следовательно, для точки (0;0), например, программа вообще не выдаст никакого сообщения (первое условие ложно).

Чтобы исправить программу, можно добавить еще одно условие y >= 0 (это отсекает «красную зону») и объединить все четыре условия в одно сложное условие:

var x,y: real;

begin

readln(x,y);

if (x*x+y*y >= 4) and (x <= 2) and

(y <= x) and (y >= 0) then

write('принадлежит')

else

write('не принадлежит')

end.

  1. Зhello_html_m86e09b9.gifаписанные в программе условия означают «ниже синусоиды» и в секторе между прямыми hello_html_m7c0ca8f0.gif и hello_html_288e7cf0.gif, в который входит заштрихованная область. Однако, этому условию удовлетворяет не только заштрихованная область, но еще и вся бесконечная область, выделенная на рисунке красным цветом. Первое пересечение синусоиды с осью абсцисс происходит при hello_html_mcb14732.gif, поэтому программа выдает неверный ответ «принадлежит», например, для точки (-4;0), которая в самом деле не принадлежит заштрихованной области.

Если записать программу «лесенкой», становится видна еще одна ошибка.

if y >= -1 then

if y <= sin(x) then

hello_html_m73349be8.gifif y >= x-1 then

write('принадлежит')

else

write('не принадлежит')

Дело в том, что любой else относится к ближайшему if, поэтому сообщение «не принадлежит» выводится только тогда, когда первые два условия выполняются, а третье – нет. Следовательно, для точки (0;-2), например, программа вообще не выдаст никакого сообщения (первое условие ложно).

Чтобы исправить программу, можно добавить еще одно условие x >= -pi/2 (это отсекает «красную зону») и объединить все четыре условия в одно сложное условие:

var x,y: real;

begin

readln(x,y);

if (y >= -1) and (y <= sin(x)) and

(y >= x-1) and (x >= -pi/2) then

write('принадлежит')

else

write('не принадлежит')

end.

  1. Эhello_html_662458f0.gifта задача полностью аналогична задаче 11 (рисунки симметричны). Вот основная часть программы с выделенной структурой:

if x*x+y*y >= 4 then

if x >= -2 then

hello_html_m73349be8.gifif y <= -x then

write('принадлежит')

else

write('не принадлежит')

Для точек в «красной зоне» (см. рисунок) программа ошибочно выдает ответ «принадлежит», а для точек, в которых не выполняется первое или второе условие (внутри круга или слева от прямой hello_html_m5f0cfe14.gif) вообще не выдается никакого сообщения.

Чтобы исправить программу, можно добавить еще одно условие y >= 0 (это отсекает «красную зону») и объединить все четыре условия в одно сложное условие:


var x,y: real;

begin

readln(x,y);

if (x*x+y*y >= 4) and (x >= -2) and

(y <= -x) and (y >= 0) then

write('принадлежит')

else

write('не принадлежит')

end.

  1. Условный оператор

if a > b then begin x:=a; a:=b; b:=x; end;

упорядочивает переменные a и b с помощью вспомогательной переменной x, записывая в переменную a минимальное из двух значений а в переменную b – максимальное. Аналогично оператор

if b > c then begin x:=b; b:=c; c:=x; end;

упорядочивает значения b и с.

Очевидно, что x используется только как вспомогательная переменная, поэтому вводить ее с клавиатуры не нужно, оператор ввода должен выглядеть так:

read(a, b, c);

Программа работает неправильно, если минимальное число вводится последним и попадает в переменную c. Действительно, выполняя программу для a=3, b=2 и c=1 получаем


a

b

c

readln(a, b, c, x);

3

2

1

if a > b then begin x:=a; a:=b; b:=x; end;

2

3

1

if b > c then begin x:=b; b:=c; c:=x; end;

2

1

3

Чтобы исправить ошибку, в конец программы нужно добавить строчку, упорядочивающую a и b (точную копию первого условного оператора). Вот исправленная программа

var a, b, c, x: integer;

begin

read(a, b, c);

if a > b then begin x:=a; a:=b; b:=x; end;

if b > c then begin x:=b; b:=c; c:=x; end;

if a > b then begin x:=a; a:=b; b:=x; end;

write(a,b,c);

end.

  1. В приведенной программе две ошибки. Во-первых, условия

y <= sin(x)

y <= 0.5

y >= 0

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

hello_html_m29e9eb09.gif

Например, для точки hello_html_66756665.gif программа ошибочно выдаст ответ «принадлежит». Поэтому нужны два дополнительных ограничения по координате x (для заданной области – hello_html_5c0cbe94.gif):

x <= pi (или, например, x <= 4)

x >= 0

Во-вторых, записав программу «лесенкой» с выделением структуры

if y <= sin(x) then

if y <= 0.5 then

if y >= 0 then

write('принадлежит')

else

write('не принадлежит');

мы видим, что else-блок относится только к последнему условному оператору, поэтому сообщение «не принадлежит» не будет выведено, если одно из первых двух условий ложно. Поэтому, например, для точки hello_html_m2c8d318f.gif программа не выдаст вообще никакого ответа, то есть, сработает неверно.

Самый простой способ доработки программы – использовать одно сложное условие, определяющее именно заштрихованную область (с ограничением по оси x)

var x, y: real;

begin

readln(x, y);

if (y <= sin(x)) and (y <= 0.5) and (y >= 0) and

(x >= 0) and (x <= pi) then

write('принадлежит')

else

write('не принадлежит');

end.


1 Аналогичная ситуация возникает при решении уравнения методом деления отрезка пополам (кто помнит :-).

13 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

HR-менеджер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ answC2-1.doc

isa.muschanov.70@yandex.ru


Ответы на задачи С2:

  1. Выделяем целочисленные переменные i1 и Sum; в i1 будем хранить номер первого в паре выбранных соседних элементов, а в Sum – их сумму. В i1 записываем начальное значение 1, а в Sum – сумму первых двух элементов. В цикле рассматриваем все элементы массива со второго до N-1, если сумма текущего элемента и следующего за ним больше Sum, то запоминаем эту сумму в переменной Sum, а номер текущего элемента – в i1.

const N=30;

var A:array[1..N] of integer;

i, i1, Sum: integer;

begin

for i:=1 to N do readln(A[i]);

i1 := 1;

Sum := A[1] + A[2];

for i:=2 to N-1 do

if A[i]+ A[i+1] > Sum then begin

i1 := i;

Sum := A[i] + A[i+1];

end

writeln(i1);

end.


  1. Выделяем целочисленные переменные k и max; в k будем хранить количество элементов, равных максимальному, а в max – значение максимального элемента. В k записываем начальное значение 1, а в max – значение первого элемента. В цикле рассматриваем все элементы массива со второго до последнего. Если текущий элемент равен переменной max, то увеличиваем счетчик k. Если текущий элемент больше max, то нашли новый максимальный элемент, запоминаем его значение в переменной max, а в счетчик k записываем единицу. В конце цикла в k записано количество элементов, равных максимальному.

const N=30;

var a:array[1..N] of integer;

max, k, i: integer;

begin

for i:=1 to N do readln(A[i]);

k:=1;

max:=a[1];

for i:=2 to N do begin

if a[i]=max then k:=k+1;

if a[i]>max then begin

max:=a[i];

k:=1;

end

end;

writeln(k);

end.


  1. Введем целые переменные Sum, Max и k. В Sum будем хранить сумму трех последовательных элементов, начиная с текущего, а в Max – максимальную (на данный момент) из этих сумм, а в k – номер первого элемента в цепочке с максимальной суммой. Сначала запишем в Sum и в Max сумму первых трех элементов, а в переменную k – единицу. В цикле рассматриваем все элементы массива со второго до N-2. Для получения очередной суммы вычитаем из Sum предыдущий элемент и добавляем элемент, который следует за текущим через один (можно также просто сложить текущий элемент и два следующих). Сравниваем Sum со значением переменной Max; если Sum больше, то заносим это значение в переменную Max и запоминаем номер текущего элемента в переменной k. По окончании работы алгоритма переменная Max содержит максимальную сумму трех подряд идущих элементов массива, а переменная k указывает на начало цепочки, которая состоит из элементов с номерами k, k+1 и k+2.

const N=30;

var a:array[1..N] of integer;

Max, Sum, i, k: integer;

begin

Sum:=a[1]+a[2]+a[3];

Max:=Sum; k:=1;

for i:=2 to N-2 do begin

Sum:=Sum-a[i-1]+a[i+2]; { или Sum:=a[i]+a[i+1]+a[i+2];}

if Sum >Max then begin

Max:=Sum;

k:=i;

end;

end;

for i:=k to k+2 do

writeln('A[',i,']=',a[i]);

end.


  1. Введем переменные Min (минимальная сумма элементов строки), iMin (номер строки с минимальной суммой) и Sum (сумма элементов текущей строки). Сначала в переменную iMin записываем 1, а в переменную Min – сумму элементов первой строки. Затем в цикле рассматриваем все строки, для каждой строки считаем сумму элементов и, если эта сумма меньше значения Min, записываем сумму в Min, а в iMin – номер текущей строки. В конце работы цикла в переменной Min будет находиться минимальная сумма элементов строки, а в iMin – номер этой строки.

const N=10; M=20;

var a:array[1..N,1..M] of integer;

Min, Sum, iMin, i, k: integer;

begin

{ ввод матрицы N на N }

Sum := 0;

for k:=1 to M do Sum := Sum + a[1,k];

Min := Sum;

iMin := 1;

for i:=2 to N do begin

Sum := 0;

for k:=1 to M do Sum := Sum + a[i,k];

if Sum < Min then begin

Min := Sum;

iMin := i;

end;

end;

writeln('Строка ', iMin, ' сумма ', Min );

end.


  1. Введем переменные Max (значение максимального элемента), iMax (номер строки, в которой находится максимальный элемент), Sum (сумма элементов той строки, где находится максимальный элемент). Сначала определяем максимальный элемент в матрице: в переменную Max записываем значение A[1,1], а в iMax – единицу (пока считаем, что максимальный элемент стоит в первой строке); затем в двойном цикле проходим все элементы матрицы, если очередной элемент больше Max, запоминаем его значение в Max, а номер строки – в iMax. После этого находим сумму элементов строки с номером iMax: в переменную Sum записываем 0, в цикле проходим все элементы этой строки, добавляя текущий элемент к Sum. Ответ находится в переменной Sum.

const N=10;

var A:array[1..N,1..N] of integer;

Max, Sum, iMax, i, k: integer;

begin

{ ввод матрицы N на N }

iMax := 1; Max := A[1,1];

for i:=1 to N do

for k:=1 to N do

if A[i,k] > Max then begin

Max := A[i,k];

iMax := i;

end;

Sum := 0;

for k:=1 to N do

Sum := Sum + A[iMax,k];

writeln(Sum);

end.


  1. Вводим целые переменные Sum (сумма минимальных элементов в каждой строке) и Min (минимальный элемент в текущей строке). Сначала в Sum записываем 0. В цикле рассматриваем все строки, для каждой определяем минимальный элемент и добавляем его к переменной Sum. Для поиска минимального элемента в строке записываем в Min значение первого элемента строки, а затем в цикле рассматриваем все остальные элементы строки, начиная со второго; если очередной элемент меньше Min, записываем его значение в Min. После выполнения программы результат находится в переменной Sum.

const N=6; M=10;

var A:array[1..N,1..M] of integer;

Min, Sum, i, k: integer;

begin

{ ввод матрицы N на N }

Sum := 0;

for i:=1 to N do begin

Min := A[i,1];

for k:=2 to M do

if A[i,k] < Min then Min := A[i,k];

Sum := Sum + Min;

end;

writeln(Sum);

end.


  1. Нужно найти количество учеников, получивших оценку более 20 баллов (по условию – это не нуль), и общую сумму их оценок. Средняя оценка равна сумме оценок, деленной на их количество.
    В переменной
    x будем считать учеников, сдавших экзамен, а в переменной y – накапливать сумму их оценок. Сначала в обе эти переменные запишем нули (начальные значения). Затем в цикле от 1 до 30 рассматриваем все элементы массива A. Если очередной элемент больше 20, увеличиваем переменную x на единицу (считаем этого ученика) и добавляем значение этого элемента массива к старому значению переменной y. После окончания цикла выводим результат деления y на x. Недостающая часть программы может выглядеть так:

x := 0; y := 0; { не забыть начальные условия! }

for i:=1 to N do

if A[i] > 20 then begin

x := x + 1;

y := y + A[i];

end;

s := y / x;

writeln('Средний балл ', s:10:3);


  1. Фактически нужно найти минимальный рост ученика среди всех учеников, имеющих рост 180 см или выше.

Значение минимального роста будем хранить в переменной x. Поскольку известно, что все ученики не выше 200 см, сначала в переменную x запишем 200 (или любое большее число). Затем в цикле от 1 до 30 рассматриваем все элементы массива A. Если очередной элемент больше или равен 180 (нашли игрока-баскетболиста) и одновременно меньше x, записываем значение этого элемента в переменную x. После окончания цикла выводим значение переменной x. Недостающая часть программы может выглядеть так:

x := 200; { или любое число >= 200 }

for i:=1 to N do

if (A[i] >= 180) and (A[i] < x) then

x := A[i];

writeln('Рост ', x);


  1. Нужно найти количество дней, когда была оттепель, и общую сумму температур в эти дни. Средняя температура вычисляется как сумме температур, деленная на количество дней.
    В переменной
    x будем считать дни оттепели, а в переменной y – накапливать сумму температур. Сначала в обе эти переменные запишем нули (начальные значения). Затем в цикле от 1 до 31 рассматриваем все элементы массива A. Если очередной элемент больше 0, увеличиваем переменную x на единицу (считаем этот день) и добавляем значение этого элемента массива к старому значению переменной y. После окончания цикла выводим результат деления y на x. Недостающая часть программы может выглядеть так:

x := 0; y := 0; { не забыть начальные условия! }

for i:=1 to N do

if A[i] > 0 then begin

x := x + 1;

y := y + A[i];

end;

s := y / x;

writeln('Средняя температура ', s:10:3);

  1. Фактически нужно найти в массиве минимальный элемент среди всех элементов, которые больше или равны 20. В отличие от классического алгоритма поиска минимального элемента в массиве, здесь требуется «отсечь» все элементы, которые меньше 20, с помощью дополнительного условия.

Записываем в переменную min начальное значение, равное 100. В цикле от первого элемента до тридцатого сравниваем элементы исходного массива с 20. Если текущий элемент больше или равен 20, то сравниваем значение текущего элемента массива со значением переменной min. Если текущий элемент массива меньше min, то записываем в min значение этого элемента массива. Переходим к следующему элементу. После завершения цикла выводим значение переменной min.

Недостающая часть программы может выглядеть так:

min := 100; { не забыть начальные условия! }

for i:=1 to N do

if (a[i] >= 20) and (a[i] < min) then

min := a[i];

writeln ( min );

  1. В этой задаче нужно сначала найти среднее арифметическое всех элементов главной диагонали. Для этого требуется один простой (не вложенный!) цикл, потому что для элементов главной диагонали номер строки равен номеру столбца.

Пусть N (константа) – количество строк (и столбцов!) матрицы A. Введем вещественную переменную sred, в которой сначала подсчитаем сумму всех элементов главной диагонали. Введем целую переменную i, обозначающую номер строки. Запишем в sred начальное значение 0. В цикле изменяем i от 1 до N с шагом 1, добавляем к значению переменной sred значение элемента матрицы A[i,i]. После окончания цикла разделим sred на N (на главной диагонали всего N элементов), таким образом, в sred находится среднее значение элементов главной диагонали.

Теперь можно суммировать (только!) положительные элементы всей матрицы, которые больше sred. Вводим целочисленные переменные j (номер столбца) и count (счетчик «нужных» элементов) . В счетчик записываем начальное значение 0.

Организуем двойной цикл, перебирающий все комбинации (i,j) для i=1..N и j=1..N. В теле цикла проверяем элемент матрицы A[i,j]: если он больше нуля и больше sred, увеличиваем счетчик count на 1.

После окончания двойного цикла выводим значение count.

Программа может выглядеть так:

const N=5;

var A:array[1..N,1..N] of integer;

i, j, count: integer;

sred: real;

begin

for i:=1 to N do { ввод матрицы }

for j:=1 to N do readln(A[i,j]);

sred := 0; { находим сумму главной диагонали }

for i:=1 to N do

sred := sred + A[i,i];

sred := sred / N; { находим среднее }

count := 0; { считаем нужные элементы }

for i:=1 to N do

for j:=1 to N do

if (A[i,j] > 0) and (A[i,j] > sred) then

count := count + 1;

writeln(count);

end.

Заметим, что можно немного улучшить программу. В условном операторе в последнем двойном цикле можно заменить сложное условие простым, если вместо 0 и sred использовать максимальное из этих значений. Перед двойным циклом нужно добавить оператор

if sred < 0 then sred := 0;

а условный оператор изменить так:

if A[i,j] > sred then

count := count + 1;

Во-вторых, можно немного более грамотно обработать условие A[i,j] > sred. Дело в том, что при делении в операторе

sred := sred / N; { находим среднее }

может получиться вещественное число (с дробной частью). Вещественные числа (за редким исключением1) хранятся в памяти компьютера неточно, потому что в двоичном коде содержат (теоретически) бесконечное число разрядов. Поэтому лучше НЕ делить полученную сумму sred на N, а для проверки вместо условия A[i,j] > sred/N использовать равносильное ему A[i,j]*N > sred. Плюс в том, что в последнем случае все операции выполняются с целыми числами и ошибок из-за неточного представления дробных чисел в памяти гарантированно не будет. Однако, есть и минус: вместо одного деления (на всю программу) придется выполнять N2 умножений (для каждого элемента матрицы). Вот еще одна версия программы:

const N=5;

var A:array[1..N,1..N] of integer;

i, j, count: integer;

sred: real;

begin

for i:=1 to N do { ввод матрицы }

for j:=1 to N do readln(A[i,j]);

sred := 0; { находим сумму главной диагонали }

for i:=1 to N do

sred := sred + A[i,i];

count := 0; { считаем нужные элементы }

if sred < 0 then sred := 0;

for i:=1 to N do

for j:=1 to N do

if A[i,j]*N > sred then

count := count + 1;

writeln(count);

end.

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

Решение на естественном языке. Записываем в переменную s начальное значение 0. В цикле добавляем все значения элементов массива, от 1-ого до 30-ого, к значению переменной s. После завершения цикла делим значение s на 30, чтобы найти среднее значение. Далее записываем в переменную j начальное значение 0. В цикле рассматриваем все элементы массива, от
1-ого до 30-ого, сравниваем значение текущего элемента со значением переменной
s. Если значение текущего элемента больше значения s, увеличиваем счетчик j на 1. После завершения цикла выводим значение переменной j.

В приведенном выше решении на естественном языке дан «чистый» алгоритм. При работе на реальном компьютере нужно заботиться о точности вычислений, поэтому в программе на Паскале вместо проверки условия a[i] > среднего мы используем равносильное ему a[i]*N > суммы элементов. При этом переменную s можно было бы сделать и целой (но она вещественная по условию задачи, это нельзя менять!).

const N=30;

var a: array [1..N] of integer;

i, j: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

s:= 0;

for i:=1 to N do s:= s + a[i];

j:= 0;

for i:=1 to N do

if a[i]*N > s then j:= j + 1;

writeln(j);

end.


  1. Хитрость этой задачи в том, что нужно найти первый элемент, равный X. Вроде бы все просто – в цикле перебираем все элементы массива, если очередной элемент равен X, записываем его номер в переменную j.

for i:=1 to N do

if a[i] = x then

j := i; { запомнили номер }

Однако при этом в конце цикла в переменной j оказывается номер последнего элемента, равного X. Чтобы выйти их этой ситуации, можно остановить цикл, как только мы нашли первый элемент, равный X. В Паскале (и в Си) это делается с помощью оператора break (досрочный выход из цикла):

for i:=1 to N do

if a[i] = x then begin

j := i; { запомнили номер }

break;

end;

Есть и другой способ – просматривать элементы с конца, при этом не нужен досрочный выход из цикла:

for i:=N downto 1 do

if a[i] = x then

j := i; { запомнили номер }

Как определить, что элемента, равного X, нет в массиве? Для этого до цикла в переменную j нужно записать любое значение, которое не может быть номером элемента массива, например, 0. Если по окончании цикла в переменной j остался 0, ни одного элемента, равного X, не нашли.

Решение на естественном языке. Записываем в переменную j начальное значение 0. В цикле рассматриваем последовательно все элементы массива в обратном порядке, с 30-го до 1-го. Если очередной элемент равен X, записываем его номер в переменную j. Если после завершения цикла переменная j равна 0, выводим сообщение, что таких элементов нет, иначе выводим значение переменной j.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, j, x: integer;

begin

for i:=1 to N do readln(a[i]);

readln(x);

j:=0;

for i:=N downto 1 do

if a[i] = x then

j := i; { запомнили номер }

if j = 0 then

writeln('Нет таких элементов')

else writeln(j);

end.

Можно также использовать цикл while со сложным условием:

i:=0;

while (i <= N) and (a[i] <> x) do

i:= i + 1;

Цикл остановится, когда i станет больше N или найдем элемент, равный X. Если после цикла переменная i больше N, значит, ни одного элемента, равного X, в массиве нет. Иначе в переменной i находится номер первого элемента, равного X.

if i > N then

writeln('Нет таких элементов')

else writeln(i);

Это второй вариант решения задачи.

  1. Сложность в том, что нужно найти не максимальный элемент, а второй по величине. Можно, конечно, сначала найти максимум, а потом искать следующий за ним, но можно сделать это за один проход по массиву. Нам нужны две переменные, max (максимальный элемент) и max2 (второй максимум). Сначала выбираем максимальный из первых двух элементов и записываем его значение в max, а второй по величине записываем в max2:

if a[1] > a[2] then begin

max:=a[1]; max2:=a[2];

end

else begin

max:=a[2]; max2:=a[1];

end;

Затем в цикле перебираем все элементы, начиная с 3-го (первые два уже «задействованы»!) до последнего, 30-ого. Если очередной элемент a[i] больше, чем max, записываем значение max в max2 (предыдущий максимум становится вторым), а значение a[i] – в max. Иначе, если a[i] больше, чем max2, записываем значение a[i] в max2. После завершения цикла выводим значение переменной max2. Вот решение на Паскале:

const N=30;

var a: array [1..N] of integer;

i, k, max, max2: integer;

begin

for i:=1 to N do readln(a[i]);

if a[1] > a[2] then begin

max:=a[1]; max2:=a[2];

end

else begin

max:=a[2]; max2:=a[1];

end;

for i:=3 to N do

if a[i] > max then begin

max2 := max;

max := a[i];

end

else if a[i] > max2 then max2 := a[i];

writeln(max2);

end.

  1. Очевидно, что нужно считать найденные положительные элементы (например, с помощью переменной k) и, когда k станет равно 3, запомнить номер текущего элемента (в переменной j).

Решение на естественном языке. Записываем в переменную k начальное значение 0. Затем в цикле перебираем все элементы массива с 1-ого по 30-ый. Если очередной элемент больше нуля, увеличиваем счетчик k. Если k=3, записываем номер текущего элемента в переменную j. Если после окончания цикла k<3, выводим сообщение, что в массиве меньше трех положительных элементов, иначе выводим значение переменной j.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, j, k: integer;

begin

for i:=1 to N do readln(a[i]);

k:=0;

for i:=1 to N do

if a[i] > 0 then begin

k:=k+1;

if k = 3 then j := i;

end;

if k < 3 then

writeln('Меньше трех положительных элементов')

else writeln(j);

end.


  1. Обратим внимание, что нужно найти не длину, а сумму наибольшей (то есть, самой длинной!) возрастающей последовательности (то есть, такой, в которой каждый следующий элемент строго больше предыдущего). В переменных l и s будем хранить длину и сумму текущей (рассматриваемой сейчас) последовательности, а в переменных lmax и smax – значения для наибольшей последовательности.

Решение на естественном языке. Записываем в переменную lmax начальное значение 0, в переменную l – значение 1, а в переменную smax – значение первого элемента массива. В цикле рассматриваем все элементы массива, начиная со 2-ого до
30-ого. Если очередной элемент больше предыдущего, увеличиваем переменную
l на 1, а к переменной s добавляем значение этого элемента; иначе записываем 1 в переменную l и значение этого элемента в s. После этого (в теле цикла) сравниваем l и lmax; если l > lmax (нашли новую самую длинную возрастающую цепочку), записываем значение s в smax.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, l, lmax, s, smax: integer;

begin

for i:=1 to N do readln(a[i]);

lmax:=0; l:=1; s:=a[1];

for i:=2 to N do begin

if a[i] > a[i-1] then begin

l:=l+1; s:=s+a[i];

else begin

l:=1; s:=a[i];

end;

if l > lmax then begin

lmax:=l;

smax:=s;

end;

end;

writeln(smax);

end.


  1. Сначала нужно найти (в переменной s) среднее арифметическое всех элементов массива – считаем в цикле их сумму и делим на N. Затем перебираем во втором цикле все элементы массива и ищем тот, для которого модуль разности этого элемента и среднего арифметического наименьший.

Решение на естественном языке. Записываем в переменную s начальное значение 0. В цикле для всех элементов с 1-го до 30-го добавляем значение текущего элемента к переменной s. После окончания цикла делим значение переменной s на N, таким образом, получаем в переменной s среднее арифметическое всех элементов массива. Записываем в переменную k начальное значение 1. В цикле рассматриваем все элементы со 2-ого до 30-ого, если модуль разности текущего элемента и переменной s меньше, чем модуль аналогичной разности для k-ого элемента, записываем в переменную k номер текущего элемента. После окончания цикла выводим значение переменной k.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, k: integer;

s, min: real;

begin

for i:=1 to N do readln(a[i]);

s:=0;

for i:=1 to N do s:=s+a[i];

s:=s/N;

k:=1;

for i:=2 to N do

if abs(a[i]-s) < abs(a[k]-s) then

k:=i;

writeln(k);

end.

  1. Очевидно, что нужно вывести номера минимального элемента массива и «второго» минимума. Поэтому эта задача решается аналогично задаче 14 (меняем названия переменных и знаки > на знаки <, храним в переменных min и min2 не значения, а номера элементов):

const N=30;

var a: array [1..N] of integer;

i, k, min, min2: integer;

begin

for i:=1 to N do readln(a[i]);

if a[1] < a[2] then begin

min := 1; min2:= 2;

end

else begin

min:= 2; min2:= 1;

end;

for i:=3 to N do

if a[i] < a[min] then begin

min2 := min;

min := i;

end

else if a[i] < a[min2] then min2 := i;

writeln(min, ' ', min2);

end.

  1. В этой задаче нужно перебрать все пары различных элементов. Для этого нужен двойной (вложенный) цикл. Чтобы не сравнивать элемент сам с собой, будем рассматривать только пары (a[i],a[j]), где j>i. Поэтому во внешнем цикле переменная i меняется от 1 до N-1 (до предпоследнего), а во внутреннем – переменная j меняется от i+1 до N (до конца массива):

for i:=1 to N-1 do

for j:=i+1 to N do

...

Решение на естественном языке. Сначала считаем, что нужная пара – это первые два элемента. Записываем в переменные min и min2 значения 1 и 2 соответственно, а в переменную s – модуль их разности. Организуем вложенный цикл. Во внешнем цикле перебираем значения переменной i от 1 до N-1. Во внутреннем цикле перебираем значения переменной j от i+1 до N. В теле цикла: если модуль разности a[i]-a[j] оказывается меньше значения переменной s, записываем в переменную s этот модуль разности, а в переменные min и min2 значения переменных i и j соответственно. После окончания двойного цикла выводим значения переменных min и min2.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, j, min, min2, s: integer;

begin

for i:=1 to N do readln(a[i]);

min:=1; min2:=2;

s:=abs(a[1]-a[2]);

for i:=1 to N-1 do

for j:=1 to N do

if abs(a[i]-a[j]) < s then begin

s:=abs(a[i]-a[j]);

min:=i; min2:=j;

end;

writeln(min, min2);

end.


1 Не равные сумме отрицательных степеней числа 2.

12 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Няня

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ answC2.doc

isa.muschanov.70@yandex.ru


Ответы на задачи С2:

  1. Выделяем целочисленные переменные i1 и Sum; в i1 будем хранить номер первого в паре выбранных соседних элементов, а в Sum – их сумму. В i1 записываем начальное значение 1, а в Sum – сумму первых двух элементов. В цикле рассматриваем все элементы массива со второго до N-1, если сумма текущего элемента и следующего за ним больше Sum, то запоминаем эту сумму в переменной Sum, а номер текущего элемента – в i1.

const N=30;

var A:array[1..N] of integer;

i, i1, Sum: integer;

begin

for i:=1 to N do readln(A[i]);

i1 := 1;

Sum := A[1] + A[2];

for i:=2 to N-1 do

if A[i]+ A[i+1] > Sum then begin

i1 := i;

Sum := A[i] + A[i+1];

end

writeln(i1);

end.


  1. Выделяем целочисленные переменные k и max; в k будем хранить количество элементов, равных максимальному, а в max – значение максимального элемента. В k записываем начальное значение 1, а в max – значение первого элемента. В цикле рассматриваем все элементы массива со второго до последнего. Если текущий элемент равен переменной max, то увеличиваем счетчик k. Если текущий элемент больше max, то нашли новый максимальный элемент, запоминаем его значение в переменной max, а в счетчик k записываем единицу. В конце цикла в k записано количество элементов, равных максимальному.

const N=30;

var a:array[1..N] of integer;

max, k, i: integer;

begin

for i:=1 to N do readln(A[i]);

k:=1;

max:=a[1];

for i:=2 to N do begin

if a[i]=max then k:=k+1;

if a[i]>max then begin

max:=a[i];

k:=1;

end

end;

writeln(k);

end.


  1. Введем целые переменные Sum, Max и k. В Sum будем хранить сумму трех последовательных элементов, начиная с текущего, а в Max – максимальную (на данный момент) из этих сумм, а в k – номер первого элемента в цепочке с максимальной суммой. Сначала запишем в Sum и в Max сумму первых трех элементов, а в переменную k – единицу. В цикле рассматриваем все элементы массива со второго до N-2. Для получения очередной суммы вычитаем из Sum предыдущий элемент и добавляем элемент, который следует за текущим через один (можно также просто сложить текущий элемент и два следующих). Сравниваем Sum со значением переменной Max; если Sum больше, то заносим это значение в переменную Max и запоминаем номер текущего элемента в переменной k. По окончании работы алгоритма переменная Max содержит максимальную сумму трех подряд идущих элементов массива, а переменная k указывает на начало цепочки, которая состоит из элементов с номерами k, k+1 и k+2.

const N=30;

var a:array[1..N] of integer;

Max, Sum, i, k: integer;

begin

Sum:=a[1]+a[2]+a[3];

Max:=Sum; k:=1;

for i:=2 to N-2 do begin

Sum:=Sum-a[i-1]+a[i+2]; { или Sum:=a[i]+a[i+1]+a[i+2];}

if Sum >Max then begin

Max:=Sum;

k:=i;

end;

end;

for i:=k to k+2 do

writeln('A[',i,']=',a[i]);

end.


  1. Введем переменные Min (минимальная сумма элементов строки), iMin (номер строки с минимальной суммой) и Sum (сумма элементов текущей строки). Сначала в переменную iMin записываем 1, а в переменную Min – сумму элементов первой строки. Затем в цикле рассматриваем все строки, для каждой строки считаем сумму элементов и, если эта сумма меньше значения Min, записываем сумму в Min, а в iMin – номер текущей строки. В конце работы цикла в переменной Min будет находиться минимальная сумма элементов строки, а в iMin – номер этой строки.

const N=10; M=20;

var a:array[1..N,1..M] of integer;

Min, Sum, iMin, i, k: integer;

begin

{ ввод матрицы N на N }

Sum := 0;

for k:=1 to M do Sum := Sum + a[1,k];

Min := Sum;

iMin := 1;

for i:=2 to N do begin

Sum := 0;

for k:=1 to M do Sum := Sum + a[i,k];

if Sum < Min then begin

Min := Sum;

iMin := i;

end;

end;

writeln('Строка ', iMin, ' сумма ', Min );

end.


  1. Введем переменные Max (значение максимального элемента), iMax (номер строки, в которой находится максимальный элемент), Sum (сумма элементов той строки, где находится максимальный элемент). Сначала определяем максимальный элемент в матрице: в переменную Max записываем значение A[1,1], а в iMax – единицу (пока считаем, что максимальный элемент стоит в первой строке); затем в двойном цикле проходим все элементы матрицы, если очередной элемент больше Max, запоминаем его значение в Max, а номер строки – в iMax. После этого находим сумму элементов строки с номером iMax: в переменную Sum записываем 0, в цикле проходим все элементы этой строки, добавляя текущий элемент к Sum. Ответ находится в переменной Sum.

const N=10;

var A:array[1..N,1..N] of integer;

Max, Sum, iMax, i, k: integer;

begin

{ ввод матрицы N на N }

iMax := 1; Max := A[1,1];

for i:=1 to N do

for k:=1 to N do

if A[i,k] > Max then begin

Max := A[i,k];

iMax := i;

end;

Sum := 0;

for k:=1 to N do

Sum := Sum + A[iMax,k];

writeln(Sum);

end.


  1. Вводим целые переменные Sum (сумма минимальных элементов в каждой строке) и Min (минимальный элемент в текущей строке). Сначала в Sum записываем 0. В цикле рассматриваем все строки, для каждой определяем минимальный элемент и добавляем его к переменной Sum. Для поиска минимального элемента в строке записываем в Min значение первого элемента строки, а затем в цикле рассматриваем все остальные элементы строки, начиная со второго; если очередной элемент меньше Min, записываем его значение в Min. После выполнения программы результат находится в переменной Sum.

const N=6; M=10;

var A:array[1..N,1..M] of integer;

Min, Sum, i, k: integer;

begin

{ ввод матрицы N на N }

Sum := 0;

for i:=1 to N do begin

Min := A[i,1];

for k:=2 to M do

if A[i,k] < Min then Min := A[i,k];

Sum := Sum + Min;

end;

writeln(Sum);

end.


  1. Нужно найти количество учеников, получивших оценку более 20 баллов (по условию – это не нуль), и общую сумму их оценок. Средняя оценка равна сумме оценок, деленной на их количество.
    В переменной
    x будем считать учеников, сдавших экзамен, а в переменной y – накапливать сумму их оценок. Сначала в обе эти переменные запишем нули (начальные значения). Затем в цикле от 1 до 30 рассматриваем все элементы массива A. Если очередной элемент больше 20, увеличиваем переменную x на единицу (считаем этого ученика) и добавляем значение этого элемента массива к старому значению переменной y. После окончания цикла выводим результат деления y на x. Недостающая часть программы может выглядеть так:

x := 0; y := 0; { не забыть начальные условия! }

for i:=1 to N do

if A[i] > 20 then begin

x := x + 1;

y := y + A[i];

end;

s := y / x;

writeln('Средний балл ', s:10:3);


  1. Фактически нужно найти минимальный рост ученика среди всех учеников, имеющих рост 180 см или выше.

Значение минимального роста будем хранить в переменной x. Поскольку известно, что все ученики не выше 200 см, сначала в переменную x запишем 200 (или любое большее число). Затем в цикле от 1 до 30 рассматриваем все элементы массива A. Если очередной элемент больше или равен 180 (нашли игрока-баскетболиста) и одновременно меньше x, записываем значение этого элемента в переменную x. После окончания цикла выводим значение переменной x. Недостающая часть программы может выглядеть так:

x := 200; { или любое число >= 200 }

for i:=1 to N do

if (A[i] >= 180) and (A[i] < x) then

x := A[i];

writeln('Рост ', x);


  1. Нужно найти количество дней, когда была оттепель, и общую сумму температур в эти дни. Средняя температура вычисляется как сумме температур, деленная на количество дней.
    В переменной
    x будем считать дни оттепели, а в переменной y – накапливать сумму температур. Сначала в обе эти переменные запишем нули (начальные значения). Затем в цикле от 1 до 31 рассматриваем все элементы массива A. Если очередной элемент больше 0, увеличиваем переменную x на единицу (считаем этот день) и добавляем значение этого элемента массива к старому значению переменной y. После окончания цикла выводим результат деления y на x. Недостающая часть программы может выглядеть так:

x := 0; y := 0; { не забыть начальные условия! }

for i:=1 to N do

if A[i] > 0 then begin

x := x + 1;

y := y + A[i];

end;

s := y / x;

writeln('Средняя температура ', s:10:3);

  1. Фактически нужно найти в массиве минимальный элемент среди всех элементов, которые больше или равны 20. В отличие от классического алгоритма поиска минимального элемента в массиве, здесь требуется «отсечь» все элементы, которые меньше 20, с помощью дополнительного условия.

Записываем в переменную min начальное значение, равное 100. В цикле от первого элемента до тридцатого сравниваем элементы исходного массива с 20. Если текущий элемент больше или равен 20, то сравниваем значение текущего элемента массива со значением переменной min. Если текущий элемент массива меньше min, то записываем в min значение этого элемента массива. Переходим к следующему элементу. После завершения цикла выводим значение переменной min.

Недостающая часть программы может выглядеть так:

min := 100; { не забыть начальные условия! }

for i:=1 to N do

if (a[i] >= 20) and (a[i] < min) then

min := a[i];

writeln ( min );

  1. В этой задаче нужно сначала найти среднее арифметическое всех элементов главной диагонали. Для этого требуется один простой (не вложенный!) цикл, потому что для элементов главной диагонали номер строки равен номеру столбца.

Пусть N (константа) – количество строк (и столбцов!) матрицы A. Введем вещественную переменную sred, в которой сначала подсчитаем сумму всех элементов главной диагонали. Введем целую переменную i, обозначающую номер строки. Запишем в sred начальное значение 0. В цикле изменяем i от 1 до N с шагом 1, добавляем к значению переменной sred значение элемента матрицы A[i,i]. После окончания цикла разделим sred на N (на главной диагонали всего N элементов), таким образом, в sred находится среднее значение элементов главной диагонали.

Теперь можно суммировать (только!) положительные элементы всей матрицы, которые больше sred. Вводим целочисленные переменные j (номер столбца) и count (счетчик «нужных» элементов) . В счетчик записываем начальное значение 0.

Организуем двойной цикл, перебирающий все комбинации (i,j) для i=1..N и j=1..N. В теле цикла проверяем элемент матрицы A[i,j]: если он больше нуля и больше sred, увеличиваем счетчик count на 1.

После окончания двойного цикла выводим значение count.

Программа может выглядеть так:

const N=5;

var A:array[1..N,1..N] of integer;

i, j, count: integer;

sred: real;

begin

for i:=1 to N do { ввод матрицы }

for j:=1 to N do readln(A[i,j]);

sred := 0; { находим сумму главной диагонали }

for i:=1 to N do

sred := sred + A[i,i];

sred := sred / N; { находим среднее }

count := 0; { считаем нужные элементы }

for i:=1 to N do

for j:=1 to N do

if (A[i,j] > 0) and (A[i,j] > sred) then

count := count + 1;

writeln(count);

end.

Заметим, что можно немного улучшить программу. В условном операторе в последнем двойном цикле можно заменить сложное условие простым, если вместо 0 и sred использовать максимальное из этих значений. Перед двойным циклом нужно добавить оператор

if sred < 0 then sred := 0;

а условный оператор изменить так:

if A[i,j] > sred then

count := count + 1;

Во-вторых, можно немного более грамотно обработать условие A[i,j] > sred. Дело в том, что при делении в операторе

sred := sred / N; { находим среднее }

может получиться вещественное число (с дробной частью). Вещественные числа (за редким исключением1) хранятся в памяти компьютера неточно, потому что в двоичном коде содержат (теоретически) бесконечное число разрядов. Поэтому лучше НЕ делить полученную сумму sred на N, а для проверки вместо условия A[i,j] > sred/N использовать равносильное ему A[i,j]*N > sred. Плюс в том, что в последнем случае все операции выполняются с целыми числами и ошибок из-за неточного представления дробных чисел в памяти гарантированно не будет. Однако, есть и минус: вместо одного деления (на всю программу) придется выполнять N2 умножений (для каждого элемента матрицы). Вот еще одна версия программы:

const N=5;

var A:array[1..N,1..N] of integer;

i, j, count: integer;

sred: real;

begin

for i:=1 to N do { ввод матрицы }

for j:=1 to N do readln(A[i,j]);

sred := 0; { находим сумму главной диагонали }

for i:=1 to N do

sred := sred + A[i,i];

count := 0; { считаем нужные элементы }

if sred < 0 then sred := 0;

for i:=1 to N do

for j:=1 to N do

if A[i,j]*N > sred then

count := count + 1;

writeln(count);

end.

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

Решение на естественном языке. Записываем в переменную s начальное значение 0. В цикле добавляем все значения элементов массива, от 1-ого до 30-ого, к значению переменной s. После завершения цикла делим значение s на 30, чтобы найти среднее значение. Далее записываем в переменную j начальное значение 0. В цикле рассматриваем все элементы массива, от
1-ого до 30-ого, сравниваем значение текущего элемента со значением переменной
s. Если значение текущего элемента больше значения s, увеличиваем счетчик j на 1. После завершения цикла выводим значение переменной j.

В приведенном выше решении на естественном языке дан «чистый» алгоритм. При работе на реальном компьютере нужно заботиться о точности вычислений, поэтому в программе на Паскале вместо проверки условия a[i] > среднего мы используем равносильное ему a[i]*N > суммы элементов. При этом переменную s можно было бы сделать и целой (но она вещественная по условию задачи, это нельзя менять!).

const N=30;

var a: array [1..N] of integer;

i, j: integer;

s: real;

begin

for i:=1 to N do readln(a[i]);

s:= 0;

for i:=1 to N do s:= s + a[i];

j:= 0;

for i:=1 to N do

if a[i]*N > s then j:= j + 1;

writeln(j);

end.


  1. Хитрость этой задачи в том, что нужно найти первый элемент, равный X. Вроде бы все просто – в цикле перебираем все элементы массива, если очередной элемент равен X, записываем его номер в переменную j.

for i:=1 to N do

if a[i] = x then

j := i; { запомнили номер }

Однако при этом в конце цикла в переменной j оказывается номер последнего элемента, равного X. Чтобы выйти их этой ситуации, можно остановить цикл, как только мы нашли первый элемент, равный X. В Паскале (и в Си) это делается с помощью оператора break (досрочный выход из цикла):

for i:=1 to N do

if a[i] = x then begin

j := i; { запомнили номер }

break;

end;

Есть и другой способ – просматривать элементы с конца, при этом не нужен досрочный выход из цикла:

for i:=N downto 1 do

if a[i] = x then

j := i; { запомнили номер }

Как определить, что элемента, равного X, нет в массиве? Для этого до цикла в переменную j нужно записать любое значение, которое не может быть номером элемента массива, например, 0. Если по окончании цикла в переменной j остался 0, ни одного элемента, равного X, не нашли.

Решение на естественном языке. Записываем в переменную j начальное значение 0. В цикле рассматриваем последовательно все элементы массива в обратном порядке, с 30-го до 1-го. Если очередной элемент равен X, записываем его номер в переменную j. Если после завершения цикла переменная j равна 0, выводим сообщение, что таких элементов нет, иначе выводим значение переменной j.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, j, x: integer;

begin

for i:=1 to N do readln(a[i]);

readln(x);

j:=0;

for i:=N downto 1 do

if a[i] = x then

j := i; { запомнили номер }

if j = 0 then

writeln('Нет таких элементов')

else writeln(j);

end.

Можно также использовать цикл while со сложным условием:

i:=0;

while (i <= N) and (a[i] <> x) do

i:= i + 1;

Цикл остановится, когда i станет больше N или найдем элемент, равный X. Если после цикла переменная i больше N, значит, ни одного элемента, равного X, в массиве нет. Иначе в переменной i находится номер первого элемента, равного X.

if i > N then

writeln('Нет таких элементов')

else writeln(i);

Это второй вариант решения задачи.

  1. Сложность в том, что нужно найти не максимальный элемент, а второй по величине. Можно, конечно, сначала найти максимум, а потом искать следующий за ним, но можно сделать это за один проход по массиву. Нам нужны две переменные, max (максимальный элемент) и max2 (второй максимум). Сначала выбираем максимальный из первых двух элементов и записываем его значение в max, а второй по величине записываем в max2:

if a[1] > a[2] then begin

max:=a[1]; max2:=a[2];

end

else begin

max:=a[2]; max2:=a[1];

end;

Затем в цикле перебираем все элементы, начиная с 3-го (первые два уже «задействованы»!) до последнего, 30-ого. Если очередной элемент a[i] больше, чем max, записываем значение max в max2 (предыдущий максимум становится вторым), а значение a[i] – в max. Иначе, если a[i] больше, чем max2, записываем значение a[i] в max2. После завершения цикла выводим значение переменной max2. Вот решение на Паскале:

const N=30;

var a: array [1..N] of integer;

i, k, max, max2: integer;

begin

for i:=1 to N do readln(a[i]);

if a[1] > a[2] then begin

max:=a[1]; max2:=a[2];

end

else begin

max:=a[2]; max2:=a[1];

end;

for i:=3 to N do

if a[i] > max then begin

max2 := max;

max := a[i];

end

else if a[i] > max2 then max2 := a[i];

writeln(max2);

end.

  1. Очевидно, что нужно считать найденные положительные элементы (например, с помощью переменной k) и, когда k станет равно 3, запомнить номер текущего элемента (в переменной j).

Решение на естественном языке. Записываем в переменную k начальное значение 0. Затем в цикле перебираем все элементы массива с 1-ого по 30-ый. Если очередной элемент больше нуля, увеличиваем счетчик k. Если k=3, записываем номер текущего элемента в переменную j. Если после окончания цикла k<3, выводим сообщение, что в массиве меньше трех положительных элементов, иначе выводим значение переменной j.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, j, k: integer;

begin

for i:=1 to N do readln(a[i]);

k:=0;

for i:=1 to N do

if a[i] > 0 then begin

k:=k+1;

if k = 3 then j := i;

end;

if k < 3 then

writeln('Меньше трех положительных элементов')

else writeln(j);

end.


  1. Обратим внимание, что нужно найти не длину, а сумму наибольшей (то есть, самой длинной!) возрастающей последовательности (то есть, такой, в которой каждый следующий элемент строго больше предыдущего). В переменных l и s будем хранить длину и сумму текущей (рассматриваемой сейчас) последовательности, а в переменных lmax и smax – значения для наибольшей последовательности.

Решение на естественном языке. Записываем в переменную lmax начальное значение 0, в переменную l – значение 1, а в переменную smax – значение первого элемента массива. В цикле рассматриваем все элементы массива, начиная со 2-ого до
30-ого. Если очередной элемент больше предыдущего, увеличиваем переменную
l на 1, а к переменной s добавляем значение этого элемента; иначе записываем 1 в переменную l и значение этого элемента в s. После этого (в теле цикла) сравниваем l и lmax; если l > lmax (нашли новую самую длинную возрастающую цепочку), записываем значение s в smax.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, l, lmax, s, smax: integer;

begin

for i:=1 to N do readln(a[i]);

lmax:=0; l:=1; s:=a[1];

for i:=2 to N do begin

if a[i] > a[i-1] then begin

l:=l+1; s:=s+a[i];

else begin

l:=1; s:=a[i];

end;

if l > lmax then begin

lmax:=l;

smax:=s;

end;

end;

writeln(smax);

end.


  1. Сначала нужно найти (в переменной s) среднее арифметическое всех элементов массива – считаем в цикле их сумму и делим на N. Затем перебираем во втором цикле все элементы массива и ищем тот, для которого модуль разности этого элемента и среднего арифметического наименьший.

Решение на естественном языке. Записываем в переменную s начальное значение 0. В цикле для всех элементов с 1-го до 30-го добавляем значение текущего элемента к переменной s. После окончания цикла делим значение переменной s на N, таким образом, получаем в переменной s среднее арифметическое всех элементов массива. Записываем в переменную k начальное значение 1. В цикле рассматриваем все элементы со 2-ого до 30-ого, если модуль разности текущего элемента и переменной s меньше, чем модуль аналогичной разности для k-ого элемента, записываем в переменную k номер текущего элемента. После окончания цикла выводим значение переменной k.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, k: integer;

s, min: real;

begin

for i:=1 to N do readln(a[i]);

s:=0;

for i:=1 to N do s:=s+a[i];

s:=s/N;

k:=1;

for i:=2 to N do

if abs(a[i]-s) < abs(a[k]-s) then

k:=i;

writeln(k);

end.

  1. Очевидно, что нужно вывести номера минимального элемента массива и «второго» минимума. Поэтому эта задача решается аналогично задаче 14 (меняем названия переменных и знаки > на знаки <, храним в переменных min и min2 не значения, а номера элементов):

const N=30;

var a: array [1..N] of integer;

i, k, min, min2: integer;

begin

for i:=1 to N do readln(a[i]);

if a[1] < a[2] then begin

min := 1; min2:= 2;

end

else begin

min:= 2; min2:= 1;

end;

for i:=3 to N do

if a[i] < a[min] then begin

min2 := min;

min := i;

end

else if a[i] < a[min2] then min2 := i;

writeln(min, ' ', min2);

end.

  1. В этой задаче нужно перебрать все пары различных элементов. Для этого нужен двойной (вложенный) цикл. Чтобы не сравнивать элемент сам с собой, будем рассматривать только пары (a[i],a[j]), где j>i. Поэтому во внешнем цикле переменная i меняется от 1 до N-1 (до предпоследнего), а во внутреннем – переменная j меняется от i+1 до N (до конца массива):

for i:=1 to N-1 do

for j:=i+1 to N do

...

Решение на естественном языке. Сначала считаем, что нужная пара – это первые два элемента. Записываем в переменные min и min2 значения 1 и 2 соответственно, а в переменную s – модуль их разности. Организуем вложенный цикл. Во внешнем цикле перебираем значения переменной i от 1 до N-1. Во внутреннем цикле перебираем значения переменной j от i+1 до N. В теле цикла: если модуль разности a[i]-a[j] оказывается меньше значения переменной s, записываем в переменную s этот модуль разности, а в переменные min и min2 значения переменных i и j соответственно. После окончания двойного цикла выводим значения переменных min и min2.

Решение на Паскале.

const N=30;

var a: array [1..N] of integer;

i, j, min, min2, s: integer;

begin

for i:=1 to N do readln(a[i]);

min:=1; min2:=2;

s:=abs(a[1]-a[2]);

for i:=1 to N-1 do

for j:=1 to N do

if abs(a[i]-a[j]) < s then begin

s:=abs(a[i]-a[j]);

min:=i; min2:=j;

end;

writeln(min, min2);

end.


1 Не равные сумме отрицательных степеней числа 2.

12 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Экскурсовод (гид)

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ answC3.doc

isa.muschanov.70@yandex.ru


Ответы на задачи С3:

  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (3,4) или (1,18) – здесь числа в скобках обозначают количество камней в первой и второй кучке соответственно. Во втором случае он выигрывает сразу, в первом – через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (4,3), (27,2) или (18,3) – здесь числа в скобках обозначают количество камней в первой и второй кучке соответственно. В последних двух случаях он выигрывает сразу, в первом – через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (6,5), (36,3) или (4,27) – здесь числа в скобках обозначают количество камней в первой и второй кучке соответственно. В последних двух случаях он выигрывает сразу, в первом – через 1 ход.


  1. Выигрывает первый игрок. Своим первым ходом он должен добавить по два камня в каждую из кучек.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (4,6,4), (6,4,5) или (4,5,6) – здесь числа в скобках обозначают количество камней в первой, второй и третьей кучках соответственно. Он выигрывает через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (6,7), (6,8) или (9,4) – здесь числа в скобках обозначают количество камней в первой и второй кучках соответственно. Он выигрывает через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (9,3), (5,9) или (6,6) – здесь числа в скобках обозначают количество камней в первой и второй кучках соответственно. Он выигрывает через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (6,6), (4,8) или (6,8) – здесь числа в скобках обозначают количество фишек в первой и второй горках соответственно. Он выигрывает через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (5,7), (6,7) или (3,20) – здесь числа в скобках обозначают количество фишек в первой и второй кучках соответственно. В последнем случае он выигрывает своим первым ходом, в первых двух – через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (8,4,5) или (6,4,7) – здесь числа в скобках обозначают количество камней в первой, второй и третьей кучках соответственно. Он выигрывает через 1 ход.


  1. Выигрывает первый игрок. Своим первым ходом ему нужно получить ситуацию (0,4). При ответе второго игрока (3,4) первый должен походить (6,4), тогда второй не может выиграть вторым ходом (он может ходом (6,8) получить расстояние 10, но НЕ больше 100!). Тогда первый игрок выиграет своим третьим ходом. При любых других ответах второго игрока, (0,7) или (0,8), первый игрок выигрывает следующим ходом.


  1. Выигрывает первый игрок. Своим первым ходом ему нужно получить ситуацию (1,–1). После любого ответа второго игрока первый всегда может свести позицию к (4,3) или (5,3), тогда второй не может выиграть своим вторым ходом, а первый игрок выиграет своим третьим ходом.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (6,0), (6,-1) или (9,-5). В последнем случае он выигрывает своим первым ходом, в первых двух – через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (5,5) или (2,6), после этого он выигрывает через 1 ход.


  1. Выигрывает первый игрок. Своим первым ходом ему нужно получить ситуацию (4,–4). При ответах второго игрока (8,0) или (8,-4) первый игрок выигрывает своим следующим ходом. При ответе (4,0) он должен походить (4,4) и тогда он выиграет своим следующим ходом.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (4,5) или (4,6), после этого он выигрывает через 1 ход.


  1. Выигрывает первый игрок. Его первый ход – (3,2), а вторым ходом ему нужно получить одну из ситуаций: (27,2), (6,5) или (6,6). В первом случае он выиграл сразу, а во втором выигрывает через 1 ход.


  1. Выигрывает первый игрок. Его первый ход – (5,6), а вторым ходом ему нужно получить одну из ситуаций: (5,24), (9,10) или (10,10). В первом случае он выиграл сразу, а во втором выигрывает через 1 ход.


  1. Выигрывает первый игрок. Его первый ход – (4,0), а вторым ходом ему нужно получить одну из ситуаций: (4,7) или (7,4). После этого при любом ответе второго он выигрывает через 1 ход.


  1. Выигрывает первый игрок. Его первый ход – (4,2), а вторым ходом ему нужно получить одну из ситуаций: (7,5) или (7,6). После этого при любом ответе второго он выигрывает через 1 ход.


  1. Выигрывает первый игрок. Его первый ход – (5,4). После этого при любом ответе второго он выигрывает следующим ходом.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (–5,8) или (2,3). В первом случае он выиграл сразу, а во втором выигрывает через 1 ход.


  1. Выигрывает первый игрок. Его первый ход – (1,5). В ответ на ход (0,9) он выигрывает ходом (-1,13) или (2,12). В ответ на (3,8) он выигрывает ходом (2,12) или (5,11). В ответ на (4,4) первый должен походить (7,3), и тогда он выиграет своим следующим ходом при любом ответе второго.



  1. Выигрывает первый игрок. Его первый ход – (5,6), а вторым ходом ему нужно получить одну из ситуаций: (7,8), (5,24) или (20,6). В первом случае при любом ответе второго он выигрывает через 1 ход, а в двух последних выигрывает сразу.


  1. Выигрывает первый игрок. У него два выигрышных хода: (4,4) и (3,4). После этого при любом ответе второго он выигрывает через 1 ход.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (54,5), (6,45) или (12,10). В первых двух случаях он выиграл сразу, а в третьем выигрывает через 1 ход при любом ответе первого игрока.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (2,27), (4,6) или (6,6). В первом случае он выиграл сразу, а в двух последних выигрывает через 1 ход при любом ответе первого игрока.


  1. Выигрывает второй игрок. Своим первым ходом ему нужно получить одну из ситуаций: (3,6), (5,6) или (6,6). После этого он выигрывает через 1 ход при любом ответе первого игрока.


  1. Выигрывает первый игрок. Его первый ход – (5,3). После этого он выигрывает через 1 ход при любом ответе второго игрока.


  1. Выигрывает первый игрок. Его первый ход – (3,4), а вторым ходом ему нужно получить одну из ситуаций: (6,6) или (3,12). В первом случае при любом ответе второго он выигрывает через 1 ход, а во втором выигрывает сразу.


  1. Выигрывает первый игрок. Его первый ход – (2,6), а вторым ходом ему нужно получить одну из ситуаций: (4,9) или (2,14). В первом случае при любом ответе второго он выигрывает через 1 ход, а во втором выигрывает сразу.


3 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ answC4.doc

isa.muschanov.70@yandex.ru


Ответы на задачи С4:

  1. В этой задаче не нужно хранить в памяти все отсчеты, нас интересуют только средние значения температуры по каждому месяцу и по году, поэтому алгоритм на псевдокоде выглядит так:

{ ввод данных, накопление сумм по месяцам и за год }

{ вычисление средних по месяцам и по году }

{ поиск месяца с минимальным отклонением t
от средней по году }

{ вывод всех месяцев с таким же отклонением }

В начале программы не забываем обнулить ячейки, где будут накапливаться суммарные величины:

for i:=1 to 12 do tMonth[i]:= 0;

tYear := 0;

При вводе данных в каждой строке сначала пропускаем все символы до точки (посимвольное чтение), затем читаем номер месяца (целое число) и температуру (вещественное число); температуру добавляем к сумме нужного месяца и к годовой сумме:

for i:=1 to DAYS do begin

repeat read (c); until c = '.';

read (month);

readln (t);

tMonth[month] := tMonth[month] + t;

tYear := tYear + t;

end;

Далее находим средние по каждому месяцу и по году (важно! месяцы имеют разное число дней, 2008-ой год – високосный, поэтому в феврале 29 дней)

for i:=1 to 12 do

case i of

2: tMonth[i] := tMonth[i] / 29;

4,6,9,11: tMonth[i] := tMonth[i] / 30;

else tMonth[i] := tMonth[i] / 31;

end;

tYear := tYear / DAYS;

Определить среднюю температуру по месяцам можно более красиво, если ввести массив констант – дней в каждом месяце:

const days: array[1..12] of integer =

(31,29,31,30,31,30,31,31,30,31,30,31);

а потом сделать так:

for i:=1 to 12 do

tMonth[i] := tMonth[i] / days[i];

но PascalABC, например, не поддерживает константные массивы.

Теперь можно искать минимальное отклонение среднемесячной температуры от среднегодовой (важно! не забываем ставить модуль):

min := abs(tMonth[1] - tYear);

for i:=2 to 12 do

if abs(tMonth[i] - tYear) < min then

min := abs(tMonth[i] - tYear);

Вывод результата очевиден, приведем сразу полную программу:

const DAYS = 366;

var tMonth: array[1..12] of real;

i, month: integer;

t, tYear, min: real;

c: char;

begin

for i:=1 to 12 do tMonth[i]:= 0;

tYear := 0;

for i:=1 to DAYS do begin

repeat read(c); until c = '.';

read (month);

readln (t);

tMonth[month] := tMonth[month] + t;

tYear := tYear + t;

end;

for i:=1 to 12 do

case i of

2: tMonth[i] := tMonth[i] / 29;

4,6,9,11: tMonth[i] := tMonth[i] / 30;

else tMonth[i] := tMonth[i] / 31;

end;

tYear := tYear / DAYS;

min := abs(tMonth[1] - tYear);

for i:=2 to 12 do

if abs(tMonth[i] - tYear) < min then

min := abs(tMonth[i] - tYear);

writeln(tYear:0:2);

for i:=1 to 12 do

if abs(tMonth[i] - tYear) = min then

writeln(i,' ',tMonth[i]:0:2,' ',tMonth[i]-tYear:0:2);

end.


  1. Здесь нужно считать одинаковые буквы, которых всего может быть 26 (от A до Z), причем строчные и заглавные буквы считаются вместе. Поэтому создаем массив счетчиков из 26 элементов:

var count: array[1..26] of integer;

Для удобства можно сразу коды букв A и a и записать в целые переменные

cA := Ord('A'); { заглавные }

cAm := Ord('a'); { строчные }

В цикле, прочитав очередной символ, находим его код с помощью функции Ord,

k := Ord(c);

Если это заглавная буква, то номер символа в алфавите вычисляется как k-cA+1, а для строчных k-cAm+1, соответствующий счетчик (элемент массива) нужно увеличить на 1:

if ('A' <= c) and (c <= 'Z') then

count[k-cA+1] := count[k-cA+1] + 1;

if ('a' <= c) and (c <= 'z') then

count[k-cAm+1] := count[k-cAm+1] + 1;

Когда все данные (до первой точки) введены, остается найти номер максимального элемента (переменная iMax), а затем вывести на экран соответствующий символ и количество повторений. Вот полная программа:

var count:array[1..26] of integer;

i, k, cA, cAm, iMax:integer;

c: char;

begin

cA := Ord('A');

cAm := Ord('a');

for i:=1 to 26 do count[i] := 0;

repeat

read(c);

k := Ord(c);

if ('A' <= c) and (c <= 'Z') then

count[k-cA+1] := count[k-cA+1] + 1;

if ('a' <= c) and (c <= 'z') then

count[k-cAm+1] := count[k-cAm+1] + 1;

until c = '.';

iMax := 1;

for i:=2 to 26 do

if count[i] > count[iMax] then iMax := i;

writeln(char(cA+iMax-1), ' ', count[iMax]);

end.


  1. Все аналогично предыдущей задаче с двумя изменениями: заглавных букв нет и нужно вывести количество для всех букв. Код программы:

var count:array[1..26] of integer;

i, k, cA:integer;

c: char;

begin

cA := Ord('a');

for i:=1 to 26 do count[i] := 0;

repeat

read(c);

k := Ord(c);

if ('a' <= c) and (c <= 'z') then

count[k-cA+1] := count[k-cA+1] + 1;

until c = '.';

for i:=1 to 26 do

if count[i] > 0 then

writeln(char(cA+i-1), count[i]);

end.

Возможен и другой вариант (идею предложил Р. Басангов), в котором используется массив с символьными индексами:

count: array ['a'..'z'] of integer;

Вот полное решение:

var count: array ['a'..'z'] of integer;

c: char;

begin

for c:='a' to 'z' do count[c]:=0;

repeat

read (c);

if ('a' <= c) and (c <= 'z') then

count[c] := count[c] + 1;

until c = '.';

for c:='a' to 'z' do

if count[c]>0 then

writeln(c, count[c]);

end.


  1. Заметим, что в этой задаче мы должны хранить в памяти все разные фамилии и считать, сколько раз они встретились. При этом имена нас не интересуют, поэтому можно выделить такой массив записей

var Info: array[1..100] of record

name: string; { фамилия }

count: integer; { счетчик }

end;

В памяти нужно хранить не все фамилии подряд, а только разные, поэтому нужен еще счетчик разных фамилий (nFam), в который в начале (важно!) надо записать ноль.

Здесь легко читать информацию целыми строками, а затем «вырезать» фамилию с помощью стандартных функций (фамилия окажется в строке s):

readln(s);

p := Pos(' ', s);

s := Copy(s,1,p-1);

Теперь проверяем, если ли уже такая фамилия в списке. Нужно в цикле просмотреть nFam первых элементов массива Info, в случае, если фамилия найдена, флаг exist устанавливается в True, а номер найденной фамилии в массиве сохраняется в переменной k:

k := 1; exist := False;

while (not exist) and (k <= nFam) do begin

if s = Info[k].name then

exist := True

else k := k + 1;

end;

Если фамилия найдена, мы увеличиваем счетчик в k-м элементе массива и выводим фамилию и (новое) значение счетчика; иначе увеличиваем счетчик разных фамилий nFam и добавляем в очередную запись прочитанную фамилию, в счетчик записываем 1. Вот полный код программы:

var Info: array[1..100] of record

name: string;

count: integer;

end;

i, k, p, N, nFam: integer;

s: string;

exist: boolean;

begin

readln(N);

nFam := 0;

for i:=1 to N do begin

readln(s);

p := Pos(' ', s);

s := Copy(s,1,p-1);

k := 1; exist := False;

while (not exist) and (k <= nFam) do begin

if s = Info[k].name then

exist := True

else k := k + 1;

end;

if exist then begin

Info[k].count := Info[k].count + 1;

writeln(s, Info[k].count);

end

else begin

nFam := nFam + 1;

Info[nFam].name := s;

Info[nFam].count := 1;

writeln(s);

end

end;

end.


  1. Это упрощенный вариант второй задачи, подробно разобранной в основной части. Отличия: нужно найти максимум вместо минимума, и только один, а не три.

const LIM = 250;

var Info: array[1..LIM] of record

name: string;

sum: integer;

end;

i, k, N, mark, max: integer;

c: char;

begin

readln(N);

{ ввод исходных данных }

for i:=1 to N do begin

Info[i].name := '';

for k:=1 to 2 do

repeat

read(c);

Info[i].name := Info[i].name + c;

until c = ' ';

Info[i].sum := 0;

for k:=1 to 3 do begin

read(mark);

writeln(mark);

Info[i].sum := Info[i].sum + mark;

end;

readln;

end;

{ поиск максимума}

max := Info[1].sum;

for i:=2 to N do

if Info[i].sum > max then

max := Info[i].sum;

{ вывод результата }

for i:=1 to N do

if Info[i].sum = max then

writeln(Info[i].name);

end.


  1. Это вариант второй задачи, подробно разобранной в основной части. Отличия: нужно найти максимум вместо минимума, сумма складывается из четырех оценок.

const LIM = 100;

var Info: array[1..LIM] of record

name: string;

sum: integer;

end;

i, k, N, mark, max1, max2, max3: integer;

c: char;

begin

readln(N);

{ ввод исходных данных }

for i:=1 to N do begin

Info[i].name := '';

for k:=1 to 2 do

repeat

read(c);

Info[i].name := Info[i].name + c;

until c = ' ';

Info[i].sum := 0;

for k:=1 to 4 do begin

read(mark);

writeln(mark);

Info[i].sum := Info[i].sum + mark;

end;

readln;

end;

{ поиск трех максимальных }

max1 := 0; max2 := 0; max3 := 0;

for i:=1 to N do begin

if Info[i].sum > max1 then begin

max3 := max2; max2 := max1;

max1 := Info[i].sum;

end

else if Info[i].sum < max2 then begin

max3 := max2;

max2 := Info[i].sum;

end

else if Info[i].sum < max3 then

max3 := Info[i].sum;

end;

{ вывод результата }

for i:=1 to N do

if Info[i].sum >= max3 then

writeln(Info[i].name);

end.


  1. Особенность этой задачи в том, что фамилии на выходе нужно отсортировать. «Школьные» сортировки имеют сложность hello_html_ma2889e8.gif; это вообще говоря, не лучший вариант, но без сортировки здесь не обойтись. Применять «быстрые» сортировки (например, QuickSort) не следует, даже если вы их знаете – эксперты могут не понять.
    Читаем очередную строку посимвольно до второго пробела, накапливаем строку в переменной
    s – там окажется фамилия вместе с именем:

s := '';

for k:=1 to 2 do

repeat

read(c);

s := s + c;

until c = ' ';

Теперь читаем два числа,

readln(mark1, mark2);

Учитывая, что до конца строки больше нет данных, используем оператор readln, а не read. Если хотя бы одна из оценок меньше 30, увеличиваем счетчик «неудачников» (переменная count) и записываем фамилию и имя (из переменной s) в элемент массива name с номером count:

if (mark1 < 30) or (mark2 < 30) then begin

count := count + 1;

name[count] := s;

end;

После чтения всех данных массив фамилий «неудачников» нужно отсортировать, здесь мы используем простейший метод – классический «пузырек». Не забываем, что нужно сортировать не все N строк в массиве name, а только count (столько, сколько нашли «неудачников»):

for i:=1 to count-1 do

for k:=count-1 downto i do

if name[k] > name[k+1] then begin

s := name[k]; name[k] := name[k+1];

name[k+1] := s;

end;

Вот полная программа:

const LIM = 500;

var name: array[1..LIM] of string;

i, k, count, mark1, mark2, N: integer;

c: char;

s: string;

begin

readln(N);

{ ввод исходных данных }

count := 0;

for i:=1 to N do begin

s := '';

for k:=1 to 2 do

repeat

read(c);

s := s + c;

until c = ' ';

readln(mark1, mark2);

if (mark1 < 30) or (mark2 < 30) then begin

count := count + 1;

name[count] := s;

end;

end;

{ сортировка }

for i:=1 to count-1 do

for k:=count-1 downto i do

if name[k] > name[k+1] then begin

s := name[k]; name[k] := name[k+1];

name[k+1] := s;

end;

{ вывод результата }

for i:=1 to count do

writeln(name[i]);

end.


  1. Так как номера телефонов подразделений отличаются только двумя последними цифрами, задача сводится к тому, чтобы подсчитать, сколько различных чисел (номеров подразделений) встречается в этой последней части. Их может быть не более 100 (от 0 до 99), поэтому вводим массив из 100 элементов:

var podr: array[1..100] of integer;

Количество найденных разных подразделений будем хранить в целой переменной count (это счетчик, в начале в него нужно записать 0).

Нас не интересуют фамилии и имена сотрудников, а также их полные телефоны. Поэтому при чтении строки пропускаем все символы до второго знака «–» включительно:

for k:=1 to 2 do

repeat

read(c);

until c = '-';

затем читаем номер подразделения в целую переменную p и проверяем, нет ли его в массиве podr (если есть – логическая переменная exist устанавливается в True):

for k:= 1 to count do

if podr[k] = p then begin

exist := True;

break;

end;

С помощью оператора break досрочно выходим из цикла, если прочитанный номер уже есть в массиве. Если номер не нашли, увеличиваем счетчик и сохраняем этот номер в очередном элементе массива:

if not exist then begin

count := count + 1;

podr[count] := p;

end;

После этого остается разделить общее число сотрудников N на количество подразделений. Вот полная программа:

var podr: array[1..100] of integer;

i, k, p, count, N: integer;

c: char;

exist: boolean;

av: real;

begin

readln(N);

{ ввод исходных данных }

count := 0;

for i:=1 to N do begin

for k:=1 to 2 do

repeat read(c); until c = '-';

readln(p);

exist := False;

for k:= 1 to count do

if podr[k] = p then begin

exist := True;

break;

end;

if not exist then begin

count := count + 1;

podr[count] := p;

end;

end;

{ вывод результата }

av := N / count;

writeln(av:0:2);

end.

Еще одно, более красивое решение этой задачи, предложила Л.Б. Кулагина (ФМЛ № 239, г. Санкт-Петербург). Идея заключается в том, чтобы создать массив логических значений (по количеству возможных подразделений), сначала в каждый его элемент записать false и при чтении номера подразделения в соответствующий элемент записывать true (нашли этот номер). В конце программы для определения количества подразделений останется подсчитать, сколько элементов массива имеют значение true.

var podr: array[0..99] of boolean;

i, k, p, count, N: integer;

c: char;

av: real;

begin

readln(N);

{ ввод исходных данных }

for i:=0 to 99 do

podr[i] := False; { еще ничего не нашли }


for i:=1 to N do begin

for k:=1 to 2 do

repeat read(c); until c = '-';

readln(p);

podr[p] := True;

end;

count := 0;

{ считаем найденные подразделения }

for i:=0 to 99 do

if podr[i] then count := count + 1;

{ вывод результата }

av := N / count;

writeln(av:0:2);

end.

Если нет желания работать с логическим массивом, можно вполне обойтись целочисленным. В этом случае в самом начале в его элементы нужно записать нули (вместо False). Целочисленный массив позволит решить подобную задачу в том случае, если нам нужно будет знать количество сотрудников в каждом подразделении отдельно, тогда после чтения номера подразделения нужно увеличить соответствующий элемент массива, который является счетчиком:

podr[p] := podr[p] + 1;

Немного изменится и подсчет количества подразделений:

for i:=0 to 99 do

if podr[i] > 0 then count := count + 1;

Существует еще один способ решения, который в данном случае, по-видимому, и является оптимальным. Однако в нем используются множества, которые в основном школьном курсе чаще всего не изучаются. Множество (англ. set) может включать некоторое (заранее неизвестное, а отличие от массива) количество элементов. В Паскале элементами множества могут быть целые числа от 0 до 255 или символы (точнее, коды символов). В данном случае код подразделения – целое число от 0 до 99, поэтому множество можно объявить так:

var podr: set of 0..99;

или так:

var podr: set of byte;

Во втором случае в множество могу входить любые числа от 0 до 255.

Когда мы прочитали номер подразделения в переменную p, нужно проверить, входит ли это число во множество. Если входит, то ничего делать не требуется, а если не входит, нужно добавить его к множеству:

if not (p in podr) then begin

podr := podr + [p]; { добавить к множеству }

count := count + 1; { увеличить счетчик подразделений }

end;

Запись [p] обозначает множество из одного элемента, а знак «плюс» – объединение множеств. Кроме того, нужно увеличить счетчик подразделений count (поскольку нет простого способа сразу определить количество элементов множества).

var podr: set of 0..99;

p: byte;

i, k, N, count: integer;

c: char;

av: real;

begin

podr := [];

count := 0;

{ ввод исходных данных }

readln(N);

for i:=1 to N do begin

for k:=1 to 2 do

repeat read(c); until c = '-';

readln(p);

if not (p in podr) then begin

podr := podr + [p]; { добавить к множеству }

count := count + 1; { увеличить счетчик подразделений }

end;

end;

{ вывод результата }

av := N / count;

writeln(av:0:2);

end.

По-видимому, это решение действительно наиболее эффективно в данной конкретной задаче. Однако, нужно помнить, что в других аналогичных задачах такой подход часто не работает из-за существенных ограничений множеств:

  • число элементов множества не может быть больше 256;

  • элементами множества могут быть только числа от 0 до 255;

  • элементами множества не могут быть символьные коды, например, AB34a.

С учетом этого первое из рассмотренных решений является наиболее универсальным.


  1. Эта задача имеет очень длинное условие, но решается довольно просто. Сначала нужно «вычленить» из условия и осознать существенные моменты:

  • нужные нам участники получили наибольший балл (если нет победителей) или второй по величине (если победители есть); участники с более низкими баллами нас не интересуют;

  • нам нужно хранить имя только одного из искомых участников, а не всех;

  • класс нас не интересует.

Таким образом, для решения задачи при вводе исходных данных достаточно определить:

  • количество участников, получивших высший балл, и имя одного из них;

  • количество участников, получивших второй по величине балл, и имя одного из них;

Важно понять, что здесь не нужно заводить массивы для хранения всех имен и результатов в памяти; строго говоря, сделать это невозможно, потому что количество участников по условию не ограничено. Также не нужна никакая сортировка.

Для хранения данных заведем три целочисленных массива, каждый из которых состоит из двух элементов:

var ballBest: array[1..2] of integer; { результат (баллы) }

numBest: array[1..2] of integer; { количество }

nameBest: array[1..2] of string; { имена }

Первые элементы этих массивов относятся к тем, кто набрал наивысший балл, а вторые – к тем, кто набрал второй по величине балл.

Программа в целом выглядит так:

var ballBest: array[1..2] of integer;

numBest: array[1..2] of integer;

nameBest: array[1..2] of string;

N: integer; { число участников }

c: char; { символ для ввода }

i, j, k, ball: integer; { вспомогательные переменные }

name: string;

begin

Readln(N); { ввод числа участников }

ballBest[1] := -1; { начальное значение, < 0}

for i:=1 to N do begin

{ читаем фамилию и имя }

{ пропускаем класс }

{ читаем баллы участника }

{ обрабатываем баллы }

end;

{ определяем, есть ли победители }

{ выводим результат }

end.

Теперь последовательно рассмотрим все блоки, обозначенные комментариями. Начальное значение ballBest[1] должно быть меньше, чем самый низкий возможный результат, поэтому можно записать туда любое отрицательное число (так, чтобы у первого же участника был результат больше). Для остальных элементов массивов начальные значения не нужны.

Чтение фамилии и имени в символьную строку name мы уже рассматривали ранее:

name := '';

for j:=1 to 2 do

repeat

read(c);

name := name + c;

until c = ' ';

Пропуск класса также выполняется стандартно:

read(k);

Дальше читаем результат участника (баллы) – чтение до конца строки:

readln(ball);

Что делать с этими баллами? Нас интересуют 4 варианта, при которых изменяются массивы ballBest, numBest и nameBest, определяющие результат:

  • ball > ballBest[1], новый участник набрал больше баллов, чем все предыдущие; в этом случае надо скопировать все 1-ые элементы массивов во 2-ые, а затем в 1-ые записать данные нового участника (имя, баллы, количество = 1);

  • ball = ballBest[1], новый участник набрал столько же баллов, сколько лучшие из предыдущих; нужно увеличить их количество на 1;

  • ballBest[2] < ball < ballBest[1], новый участник набрал «второе» количество баллов; нужно во 2-ые элементы массивов записать данные нового участника (имя, баллы, количество = 1);

  • ball = ballBest[2], новый участник набрал столько же баллов, сколько участники с вторым известным ранее результатом; нужно увеличить их количество на 1.

Остальные варианты (когда ball < ballBest[2]) нас не волнуют, потому что они не влияют на результат. Ниже приведен блок обработки прочитанного количества баллов нового участника. Обратите внимание, что каждый новый if вложен в блок else предыдущего условного оператора. Подумайте, почему это необходимо.

if ball > ballBest[1] then begin

ballBest[2] := ballBest[1];

numBest[2] := numBest[1];

nameBest[2] := nameBest[1];

ballBest[1] := ball;

numBest[1] := 1;

nameBest[1] := name;

end

else

if ball = ballBest[1] then

numBest[1] := numBest[1] + 1

else

if ball > ballBest[2] then begin

ballBest[2] := ball;

numBest[2] := 1;

nameBest[2] := name;

end

else

if ball = ballBest[2] then

numBest[2] := numBest[2] + 1;

Теперь определим есть ли победители, то есть, верно ли, что ballBest[1] > 200 и numBest[1] не превышает 20% от N. Если эти два условия верны одновременно, победители есть, и для ответа нужно использовать вторые элементы массивов (запишем в переменную i значение 2), иначе – первые.

if (ballBest[1] > 200) and (numBest[1]*100 <= N*20) then

i := 2

else i := 1;

Обратите внимание, что во втором условии используется отношение «меньше или равно» (нестрогое равенство). Кроме того, определение доли 20% сведено к операциям только с целыми числами! Вариант numBest[1]<=N*0.2 хуже, потому что выражение в правой части неравенства – вещественное, а большинство вещественных чисел (в том числе, 0,2) невозможно точно представить в памяти (они представляют собой бесконечную дробь).

Остается вывести результат на экран. Если искомых участников больше 1, выводим их количество numBest[i], иначе – имя единственного участника nameBest[i].

if numBest[i] > 1 then

writeln(numBest[i])

else writeln(nameBest[i]);

Вместо трех массивов можно использовать массив структур, состоящих из трех полей. Приведем сразу полную программу со структурами:

var Best: array[1..2] of record

ball: integer;

num: integer;

name: string;

end;

N: integer;

c: char;

i, j, k, ball: integer;

name: string;

begin

Readln( N);

Best[1].ball := -1;

for i:=1 to N do begin

name := '';

for j:=1 to 2 do

repeat

Read( c);

name := name + c;

until c = ' ';

Readln(k, ball);

if ball > Best[1].ball then begin

Best[2] := Best[1];

Best[1].ball := ball;

Best[1].num := 1;

Best[1].name := name;

end

else

if ball = Best[1].ball then

Best[1].num := Best[1].num + 1

else

if ball > Best[2].ball then begin

Best[2].ball := ball;

Best[2].num := 1;

Best[2].name := name;

end

else

if ball = Best[2].ball then

Best[2].num := Best[2].num + 1

end;

if (Best[1].ball > 200) and

(Best[1].num*100 <= N*20) then

i := 2

else i := 1;

if Best[i].num > 1 then

writeln(Best[i].num)

else writeln(Best[i].name);

end.


  1. Прежде всего, нужно понять, что «магазин» определяется сочетанием «Фирма + Улица». Каждый магазин может продавать сметану разных сортов, каждому сорту соответствует своя строчка в исходных данных. Важно, что нам НЕ нужно запоминать ни фирму, ни улицу, поэтому при чтении их можно вообще пропускать.

Фактически это задача на поиск количества минимальных элементов в потоке данных, причем нужно отдельно работать с тремя наборами данных (молоко разной жирности). Введем массивы из трех элементов для хранения минимальной цены и количества магазинов, продающих по этой цене:

var MinPrice, Count: array[1..3] of integer;

Для поиска минимальных элементов нужно записать начальные значения: в каждый элемент массива MinPrice – любую цену, больше максимально возможной, а все счетчики обнулить.

for i:=1 to 3 do begin

MinPrice[i] := 5001; { любое число > 5000 }

Count[i] := 0; { обнулить счетчики }

end;

Дальше возникает следующий вопрос: как, прочитав из файла жирность в процентах k, рассчитать номер соответствующего элемента массива (код):

15 →1, 20 →2, 25 →3

Оказывается, это сделать достаточно просто, код рассчитывается по формуле

k div 5 - 2

Как эту формулу получить? Мы видим, что при увеличении k на 5 код увеличивается на 1, поэтому мы имеем дело с линейной зависимостью с коэффициентом 1/5:

код = k div 5 + b

Свободный член b подбирается, например, из условия 15 div 5 + b = 1 (при k = 15 мы должны получить код 1). Тогда 3 + b = 1 и b = -2.

Если в какой-то задаче числа совсем «нескладные» и не удается вывести формулу, можно использовать оператор выбора (case) или серию условных операторов. Никаких других хитростей в программе нет:

program milk;

var MinPrice, Count: array[1..3] of integer;

N: integer;

c: char;

i, j, k, price: integer;

begin

Readln(N);

for i:=1 to 3 do begin

MinPrice[i] := 5001;

Count[i] := 0;

end;

for i:=1 to N do begin

for j:=1 to 2 do { пропускаем фирму и улицу }

repeat read(c); until c = ' ';

readln(k, price); { читаем жирность и цену }

k := k div 5 - 2; { получаем код – номер в массивах }

if price < MinPrice[k] then begin

MinPrice[k] := price;

Count[k] := 1;

end

else

if price = MinPrice[k] then

Count[k] := Count[k] + 1;

end;

Close(F);

for k:=1 to 3 do

write(Count[k], ' ');

end.

  1. Определимся с данными, которые фактически влияют на результат:

  • нас интересует только количество участников, их нужно разделить по классам и по баллам

  • нас не интересуют имена и фамилии, поэтому при чтении их можно пропускать

Мы будем использовать два массива: в массиве Total будем хранить общее количество участников с разбивкой по баллам (в элементе Total[i] хранится количество участников, получивших ровно i баллов), а в двухмерном массиве Count – количество участников с разбивкой по баллам и классам, то есть, Count[i,j] хранит количество участников из класса j, которые получили ровно i баллов1:

const MAX = 70;

var Total: array[0..MAX] of integer;

Count: array[0..MAX,7..11] of integer;

В начале программы оба массива нужно обнулить2.

for ball:=0 to MAX do begin

Total[ball] := 0;

for class:=7 to 11 do Count[ball,class] := 0;

end;

Таким образом, «скелет» программы можно записать так:

const MAX = 70;

var Count: array[0..MAX,7..11] of integer;

Total: array[0..MAX] of integer;

N: integer;

c: char;

i, j, class, ball, minBall, Sum: integer;

begin

Readln(N);

for ball:=0 to MAX do begin

Total[ball] := 0;

for class:=7 to 11 do Count[ball,class] := 0;

end;

for i:=1 to N do begin

{ пропустить фамилию и имя }

{ прочитать класс и баллы }

{ увеличить счетчики }

end;

{ определить <=25% призеров и их минимальный балл }

{ если получилось <25%, проверить следующих }

{ вывести минимальный балл }

{ количество призеров по классам }

end.

Теперь расшифруем все блоки, обозначенные комментариями. При чтении пропускаем фамилию и имя:

for j:=1 to 2 do

repeat read(c); until c = ' ';

затем считываем класс и баллы (readln, до конца строки)

readln(class, ball);

и увеличиваем общий счетчик и счетчик для данного класса:

Total[ball] := Total[ball] + 1;

Count[ball,class] := Count[ball,class] + 1;

Теперь определяем всех, кто гарантированно попадает в призеры. Накапливаем количество призеров, начиная с максимально возможного количества баллов, пока сумма укладывается в 25%:

Sum := 0;

ball := MAX;

while (Sum+Total[ball])*100 <= 25*N do begin

Sum := Sum + Total[ball];

if Total[ball] > 0 then minBall := ball;

ball := ball - 1;

end;

Здесь нужно обратить внимание на два момента. Во-первых, для проверки на 25% используется нестрогое неравенство, и все операции выполняются с целым числами. Во-вторых, новое значение записывается в переменную minBall только тогда, когда количество участников, набравших этот балл, не ноль (по условию нужно вывести минимальный балл, который был фактически набран).

На следующем шаге проверяем участников «на границе».

if ((Sum+1)*100 <= 25*N) and (Total[ball]*2 > MAX) then

minBall := ball;

Условие

(Sum+1)*100 <= 25*N

означает, что по крайней мере еще один участник «вписывается» в 25% лучших, а условие

Total[ball]*2 > MAX

говорит о том, что он набрал больше половины от максимального количества баллов.

Теперь можно вывести минимальный балл призеров:

writeln(minBall);

Чтобы вывести количество призеров по параллелям, мы сначала для каждого суммируем количество участников, набравших от minBall до MAX баллов:

for class:=7 to 11 do begin

Sum := 0;

for ball:=minBall to MAX do

Sum := Sum + Count[ball,class];

write(Sum, ' ');

end;


  1. В этой задаче решение можно разбить на два этапа:

  • прочитать данные и запомнить имена и фамилии тех, кто не прошел тестирование;

  • отсортировать список по алфавиту и вывести на экран

Количество участников ограничено (не более 500), это косвенно говорит о том, что нужно использовать массив для хранения результатов. Для сортировки надо одновременно удерживать в памяти все данные, поэтому без массива символьных строк здесь не обойтись:

var List: array[1..500] of string;

Структура программы:

var List: array[1..500] of string;

name, temp: string;

c: char;

i, j, N, ball1, ball2, count: integer;

begin

count := 0; { счетчик несдавших }

readln(N);

for i:=1 to N do begin

{ прочитать фамилию и имя }

{ прочитать баллы }

{ если не сдал, запомнить }

end;

{ сортировка по алфавиту }

{ вывод списка }

end.

Расшифруем отдельные блоки, обозначенные комментариями. В цикле сначала читаем фамилию и имя очередного абитуриента и записываем их в переменную name:

name := '';

for j:=1 to 2 do

repeat

read(c);

name := name + c;

until c = ' ';

Далее читаем две оценки в переменные ball1 и ball2, используя оператор readln (чтение до конца строки).

readln(ball1, ball2);

Если абитуриент не прошел тестирование, увеличиваем счетчик count и записываем его фамилию и имя в очередной элемент списка:

if (ball1 < 30) or (ball2 < 30) then begin

count := count + 1;

List[count] := name;

end;

Предполагая, что коды русских букв стоят по алфавиту, после ввода данных применим сортировку, например, так:

for i:=1 to count-1 do

for j:=i to count do

if List[i] > List[j] then begin

temp := List[i];

List[i] := List[j];

List[j] := temp;

end;

Заметьте, что в сортировке участвуют не все 500 элементов массива List, а только count – столько абитуриентов не прошли тестирование. Остается вывести список на экран:

for i:=1 to count do writeln(List[i]);

Вот полная программа:

var List: array[1..500] of string;

name, temp: string;

c: char;

i, j, N, ball1, ball2, count: integer;

begin

count := 0;

readln(N);

for i:=1 to N do begin

name := '';

for j:=1 to 2 do

repeat

read(c);

name := name + c;

until c = ' ';

readln(ball1, ball2);

if (ball1 < 30) or (ball2 < 30) then begin

count := count + 1;

List[count] := name;

end;

end;

for i:=1 to count-1 do

for j:=i to count do

if List[i] > List[j] then begin

temp := List[i];

List[i] := List[j];

List[j] := temp;

end;

for i:=1 to count do writeln(List[i]);

end.


  1. Эта задача – полный аналог задачи 10. Прежде всего, нужно понять, что «АЗС» определяется сочетанием «Фирма + Улица». Каждая АЗС может продавать бензин разных сортов, каждому сорту соответствует своя строчка в исходных данных. Важно, что нам НЕ нужно запоминать ни фирму, ни улицу, поэтому при чтении их можно вообще пропускать.

Фактически это задача на поиск количества минимальных элементов в потоке данных, причем нужно отдельно работать с тремя наборами данных (бензин разных марок). Введем массивы из трех элементов для хранения минимальной цены и количества магазинов, продающих по этой цене:

var MinPrice, Count: array[1..3] of integer;

Для поиска минимальных элементов нужно записать начальные значения: в каждый элемент массива MinPrice – любую цену, больше максимально возможной, а все счетчики обнулить.

for i:=1 to 3 do begin

MinPrice[i] := 3001; { любое число > 3000 }

Count[i] := 0; { обнулить счетчики }

end;

Дальше возникает следующий вопрос: как, прочитав из файла марку бензина k, рассчитать номер соответствующего элемента массива (код):

92 →1, 95 →2, 98 →3

Так же, как и в задаче 10, замечаем, что при увеличении k на 3 код увеличивается на 1, то есть, мы получаем линейную зависимость с коэффициентом 1/3. Свободный член находим из условия 92 div 3 + b = 1, что дает b = -29, так что

код = k div 3 - 29

Если в какой-то задаче числа совсем «нескладные» и не удается вывести формулу, можно использовать оператор выбора (case) или серию условных операторов. Никаких других хитростей в программе нет3:

program gasoline;

var MinPrice, Count: array[1..3] of integer;

N: integer;

c: char;

i, j, k, price: integer;

begin

Readln(N);

for i:=1 to 3 do begin

MinPrice[i] := 3001;

Count[i] := 0;

end;

for i:=1 to N do begin

for j:=1 to 2 do { пропускаем фирму и улицу }

repeat read(c); until c = ' ';

readln(k, price); { читаем марку бензина и цену }

k := k div 3 - 29; { получаем код – номер в массивах }

if price < MinPrice[k] then begin

MinPrice[k] := price;

Count[k] := 1;

end

else

if price = MinPrice[k] then

Count[k] := Count[k] + 1;

end;

for k:=1 to 3 do

write(Count[k], ' ');

end.


  1. В этой задаче нужно подсчитать, сколько раз встречается каждая буква. Если из букв можно составить палиндром, то одна буква (центральная) может встречаться нечетное число раз, а остальные – обязательно четное.

Для подсчета количества букв (в английском языке всего 26 букв) можно использовать массив

var count: array[1..26] of integer;

Но более интересно использовать красивую возможность, когда в качестве индексов используются сами символы:

var count: array['A'..'Z'] of integer;

Перед началом работы нужно заполнить его нулями (ни одного символа еще не получено):

for c:='A' to 'Z' do count[c] := 0;

Ввод символов (до точки) естественно делать в цикле while:

read(c);

while c <> '.' do begin

count[c] := count[c] + 1;

read(c);

end;

Обратите внимание, что в такая конструкция 1) правильно обрабатывает ситуацию, когда первый символ – это точка; 2) не теряет символ, стоящий перед точкой. А вот эти два варианта – неправильные (разберитесь, почему?):

repeat

read(c);

count[c]:=count[c]+1;

until c = '.';


while c <> '.' do begin

count[c]:=count[c]+1;

read(c);

end;

Теперь считаем, сколько символов встречаются нечетное число раз. Здесь nOdd – целая переменная, а cOdd – символьная переменная, куда мы записываем центральный символ.

nOdd := 0;

for c:='A' to 'Z' do

if count[c] mod 2 = 1 then begin

cOdd := c;

Inc(nOdd);

end;

Если нашли нечетное количество таких символов, то палиндром составить нельзя:

if nOdd > 1 then

writeln('Нет')

else begin

writeln('Да');

{ можно составить! }

end;

Остается разобраться, как вывести палиндром в алфавитном порядке. Сначала проходим весь массив count и выводим каждую букву в «половинном» количестве (вторая половина будем справа от центра!):

for c:='A' to 'Z' do

for i:=1 to count[c] div 2 do

write(c);

Обратите внимание, что буква, стоящая по центру, тут тоже может появиться, если она встречается более одного раза.

Затем выводим центральный символ, если он есть:

if nOdd = 1 then write(cOdd);

и оставшийся «хвост», уже в обратном порядке, от 'Z' до 'A':

for c:='Z' downto 'A' do

for i:=1 to count[c] div 2 do

write(c);

Вот полная программа:

var count: array['A'..'Z'] of integer;

i, nOdd: integer;

c, cOdd: char;

begin

for c:='A' to 'Z' do count[c] := 0;

read(c);

while c <> '.' do begin

count[c] := count[c] + 1;

read(c);

end;

nOdd := 0;

for c:='A' to 'Z' do

if count[c] mod 2 = 1 then begin

cOdd := c;

Inc(nOdd);

end;

if nOdd > 1 then

writeln('Нет')

else begin

writeln('Да');

for c:='A' to 'Z' do

for i:=1 to count[c] div 2 do

write(c);

if nOdd = 1 then write(cOdd);

for c:='Z' downto 'A' do

for i:=1 to count[c] div 2 do

write(c);

end;

end.

  1. Для решения задачи нужно ответить на ряд вопросов:

Какие данные нужно хранить?

Какие структуры данных применить (простые переменные, массив, запись и т.п.)?

Как читать данные?

Какую обработку можно выполнить прямо при чтении?

Какую обработку нужно выполнить после чтения всех данных?

Как выводить результаты?

По условию нас интересует только фамилия, имя и сумма баллов, поэтому отдельные баллы, полученные по каждому из видов многоборья, мы хранить не будем.

В условии сказано, что количество спортсменов не более 1000. Фактически, это явное указание на то, что нужно сначала прочитать данные всех спортсменов в массив, а потом делать окончательную обработку. Удобно использовать массив записей такого типа:

type TInfo = record

name: string[33];

sum: integer;

end;

Поле name хранит имя и фамилию как одну символьную строку, ее длина равна сумме максимальных длин имени и фамилии (12 + 20) плюс 1 символ на пробел между ними. Второе поле – сумма баллов, ее мы будем считать прямо во время чтения данных. Уже можно написать начало программы:

var Info: array[1..1000] of TInfo;

M, N, i, j, ball: integer;

c: char;

begin

readln(N); { число спортсменов }

readln(M); { число видов многоборья }

for i:=1 to N do begin

Info[i].name := '';

for j:=1 to 2 do { читаем два блока: фамилию и имя }

repeat

read(c);

Info[i].name := Info[i].name + c;

until c = ' ';

{ здесь нужно читать баллы и суммировать их }

end;

{ сортировка массива }

{ вывод таблицы результатов }

end.

Чтение и суммирование баллов по отдельным видам спорта (их всего M) выполняем в цикле:

Info[i].sum := 0;

for j:=1 to M do begin

read(ball);

Info[i].sum := Info[i].sum + ball;

end;

При сортировке массива нам потребуется переставлять структуры типа TInfo, поэтому нужно объявить вспомогательную структуру:

var temp: TInfo;

Для сортировки можно использовать любой метод, например, классический «метод пузырька»:

for i:=1 to N-1 do

for j:=N-1 downto i do

if Info[j].sum < Info[j+1].sum then begin

temp := Info[j];

Info[j] := Info[j+1];

Info[j+1] := temp;

end;

Осталось решить вопрос о выводе данных. Итак, список спортсменов отсортирован по убыванию суммы баллов, но места не расставлены. Сложность в том, что несколько спортсменов могут набрать одинаковую сумму, при этом они должны получить одно и то же место.

Сделаем вывод места следующим образом. Введем целую переменную mesto. Очевидно, что тот, кто стоит первым в списке, занял первое место (запишем в переменную mesto значение 1). Теперь в цикле рассмотрим всех спортсменов, стоящих в списке под номерами от 1 до N. Если номер очередного спортсмена больше 1 и его сумма баллов меньше сумме балов предыдущего, то увеличиваем переменную mesto на 1. Затем выводим фамилию и имя, сумму баллов и mesto.

mesto := 1;

for i:=1 to N do begin

if (i > 1) and (Info[i].sum < Info[i-1].sum) then

mesto := mesto + 1;

writeln(Info[i].name, ' ', Info[i].sum, ' ', mesto);

end;

Вот вся программа целиком:

type TInfo = record

name: string[33];

sum: integer;

end;

var Info: array[1..1000] of TInfo;

M, N, i, j, ball, mesto: integer;

c: char;

temp: TInfo;

begin

readln(N); { число спортсменов }

readln(M); { число видов многоборья }

for i:=1 to N do begin

Info[i].name := '';

for j:=1 to 2 do { читаем два блока: фамилию и имя }

repeat

read(c);

Info[i].name := Info[i].name + c;

until c = ' ';

{ читаем баллы и суммируем их }

Info[i].sum := 0;

for j:=1 to M do begin

read(ball);

Info[i].sum := Info[i].sum + ball;

end;

end;

{ сортировка массива }

for i:=1 to N-1 do

for j:=N-1 downto i do

if Info[j].sum < Info[j+1].sum then begin

temp := Info[j];

Info[j] := Info[j+1];

Info[j+1] := temp;

end;

{ вывод таблицы результатов }

mesto := 1;

for i:=1 to N do begin

if (i > 1) and (Info[i].sum < Info[i-1].sum) then

mesto := mesto + 1;

writeln(Info[i].name, ' ', Info[i].sum, ' ', mesto);

end;

end.


  1. В этой задаче используются данные типа «время», которые вводятся в символьном виде. Работать с ними в таком формате (например, сравнивать) неудобно, потому нужно переводить время в числовую форму, например, в число минут от 00:00. Так время 09:45 преобразуется в число 60*9+45=585.

Поскольку эта операция выполняется неоднократно в разных местах программы (сначала ввод текущего времени в первой строке, а потом – ввод времени освобождения ячейки для каждого пассажира), удобно написать функцию, которая преобразует символьную строку в формате hh:mm (hh обозначает часы, а mm – минуты) в целое число так, как рассказано выше. Вот пример такой функции:

function Time2Int(sTime: string): integer;

var h, m, code0: integer;

begin

code0 := Ord('0');

h := 10*(Ord(sTime[1])-code0) + (Ord(sTime[2])-code0);

m := 10*(Ord(sTime[4])-code0) + (Ord(sTime[5])-code0);

Time2Int := 60*h + m;

end;

Здесь в переменную code0 мы записываем код символа '0', чтобы не вычислять его повторно.

В условии сказано, что число пассажиров в списке не превышает 1000, это явное указание на то, что нужно прочитать данные в массив записей примерно такой структуры:

type TInfo = record

name: string[20]; { фамилия }

time: integer; { время освобождения ячейки }

end;

Сам массив мы объявим так:

var Info: array[1..1000] of TInfo;

Сложность заключается в том, что нам нужно записывать в массив информацию только о тех пассажирах, для которых время освобождения ячейки не больше, чем curTime+120, где curTime – текущее время. Все остальные строки нужно игнорировать. Это значит, что требуется ввести счетчик count (целую переменную) , в которой мы будем хранить количество «хороших» пассажиров, которые освободят свои ячейки не более, чем через 2 часа (120 минут). Получается такой цикл ввода:

count := 0;

for i:=1 to N do begin

... { здесь ввести данные в Info[count+1] }

if Info[count+1].time <= curTime+120 then

count := count + 1;

end;

Иначе говоря, мы вводим данные в первый неиспользованный элемент массива Info, а к следующему переходим только тогда, когда очередной пассажир «хороший» и его данные нужно сохранить.

Как вводить данные? Хотя все официальные рекомендации по решению задачи С4 основаны на посимвольном вводе данных, многие профессионалы предпочитают сначала прочитать всю очередную строку в символьную переменную s, а потом «разбирать» ее в памяти. В данном случае такой подход позволяет значительно упростить программу, и мы его применим (для разнообразия).

Будем вводить строку s целиком, искать пробел и делить ее на две части (слева от пробела – фамилия, справа – время). Затем время преобразуем в целое число с помощью уже написанной функции Time2Int:

for i:=1 to N do begin

readln(s);

p := Pos(' ', s);

Info[count+1].name := Copy(s,1,p-1);

Info[count+1].time := Time2Int(Copy(s,p+1,Length(s)-p));

if Info[count+1].time <= curTime+120 then

count := count + 1;

end;

Теперь остается только отсортировать массив и вывести список фамилий в нужном порядке. Важно не забыть, что нужно сортировать не N элементов, а count (именно столько мы нашли «хороших» пассажиров):

for i:=1 to count do

for j:=count-1 downto i do

if Info[j].time > Info[j+1].time then begin

temp := Info[j];

Info[j] := Info[j+1];

Info[j+1] := temp;

end;

Вот полная программа:

type TInfo = record

name: string[20];

time: integer;

end;

var Info: array[1..1000] of TInfo;

s: string;

N, p, i, j, count, curTime: integer;

c: char;

temp: TInfo;

{ функция для преобразования времени в число }

function Time2Int(sTime: string): integer;

var h, m, code0: integer;

begin

code0 := Ord('0');

h := 10*(Ord(sTime[1])-code0) + (Ord(sTime[2])-code0);

m := 10*(Ord(sTime[4])-code0) + (Ord(sTime[5])-code0);

Time2Int := 60*h + m;

end;

{--------------------------------------------}

begin

readln(s);

curTime := Time2Int(s);

readln(N);

count := 0;

{ ввод данных о пассажирах }

for i:=1 to N do begin

readln(s);

p := Pos(' ', s);

Info[count+1].name := Copy(s,1,p-1);

Info[count+1].time := Time2Int(Copy(s,p+1,Length(s)-p));

if Info[count+1].time <= curTime+120 then

count := count + 1;

end;

{ сортировка массива }

for i:=1 to count do

for j:=count-1 downto i do

if Info[j].time > Info[j+1].time then begin

temp := Info[j];

Info[j] := Info[j+1];

Info[j+1] := temp;

end;

{ вывод списка }

for i:=1 to count do

writeln(Info[i].name);

end.

  1. условия становится ясно, что задача решается в два этапа:

  1. прочитать символы до точки и определить длину самого короткого слова из латинских букв (обозначим ее minLen);

  2. сделать «сдвиг» кодов латинских букв на minLen влево.

Начнем с первого. Простое посимвольное чтение строки s до первой встреченной точки выглядит так (здесь c – переменная типа char):

s := ''; { пустая строка }

repeat

read(c); { прочитали символ }

s := s + c; { добавили в конец строки }

until c = '.';

При этом нам нужно еще определить длину самого короткого слова с учетом того, что между словами может быть сколько угодно символов-разделителей (разных!). Введем переменную len, которая будет определять длину текущего (очередного, вводимого в данный момент) слова.

Как определить, что прочитанный символ – латинская буква? Конечно, можно использовать условный оператор со сложным условием:

if (('a' <= c) and (c <= 'z')) or

(('A' <= c) and (c <= 'Z')) then ...

Более красиво это можно сделать с помощью оператора in, который проверяет, входит ли элемент во множество:

if c in ['a'..'z', 'A'..'Z'] then ...

Здесь множество в квадратных скобках содержит два интервала: от 'a' до 'z' и от 'A' до 'Z'.

Если очередной прочитанный символ – латинская буква, нужно увеличить len на единицу (слово продолжается). Если же это не латинская буква, то слово закончилось, так как встречен символ-разделитель . Если в переменной len ненулевое значение, нужно сравнить эту длину с минимальной и, если прочитанное слово короче всех предыдущих, записать его длину в minLen. Таким образом, цикл ввода выглядит так:

s := '';

minLen := 201; { любое число > 200 }

len := 0;

repeat

read(c);

s := s + c;

if c in['a'..'z','A'..'Z'] then

len := len + 1

else begin

if (len > 0) and (len < minLen) then

minLen := len;

len := 0;

end;

until c = '.';

Теперь нужно в цикле пройти всю прочитанную строку и «сдвинуть» каждый символ (точнее, его код) вправо на minLen:

for i:=1 to Length(s) do

if s[i] in ['a'..'z','A'..'Z'] then begin

code := Ord(s[i]); { старый код }

k := code - minLen; { новый код }

s[i] := Chr(k);

end;

Однако такое решение не учитывает цикличность: например, при сдвиге буквы 'A' на 2 символа влево мы не получим 'Y'. Поэтому после изменения кода нужно проверить, не вышел ли он за допустимые границы (диапазона латинских букв), а если вышел, то добавить к полученному коду 26 (число латинских букв), что обеспечит циклический сдвиг:

k := code - minLen; { новый код }

{ цикличность }

if s[i] in ['a'..'z'] then

if k < Ord('a') then k := k + 26;

if s[i] in ['A'..'Z'] then

if k < Ord('A') then k := k + 26;

Вот полная программа:

var c: char;

s: string;

len, minLen, code, i, k: integer;

begin

s := '';

minLen := 201; { любое число > 200 }

len := 0;

{ чтение данных }

repeat

read(c);

s := s + c;

if c in['a'..'z','A'..'Z'] then

len := len + 1

else begin

if (len > 0) and (len < minLen) then

minLen := len;

len := 0;

end;

until c = '.';

{ сдвиг кодов на minLen влево }

for i:=1 to Length(s) do

if s[i] in ['a'..'z','A'..'Z'] then begin

code := Ord(s[i]); { старый код }

k := code - minLen; { новый код }

{ цикличность }

if s[i] in ['a'..'z'] then

if k < Ord('a') then k := k + 26;

if s[i] in ['A'..'Z'] then

if k < Ord('A') then k := k + 26;

{ запись нового кода }

s[i] := Chr(k);

end;

writeln(s);

end.


  1. В условии очень важна последняя строчка: «количество голосов избирателей в исходном списке может быть велико (свыше 1000), а количество различных партий в этом списке не превосходит 10». Это значит, что

  • нельзя хранить в массиве все прочитанные записи

  • можно (и нужно) хранить в массиве названия партий, их не больше 10.

Таким образом, нужно выделить массив строк:

const MAX = 10;

var Names: array[1..MAX] of string;

Поскольку нужно считать, сколько голосов получила каждая партия, нужно выделить массив счетчиков такого же размера:

var count: array[1..MAX] of integer;

Кроме того, нужна переменная nParties, в которой мы будем хранить количество найденных различных партий (в начале программы в нее нужно записать 0).

var nParties: integer;

В начале программы во все счетчики обычно записывают 0. Однако можно поступить хитрее. Когда мы нашли запись с новой партией, в счетчик нужно сразу добавить 1. А это можно сделать заранее, записав все начальные значения счетчиков, равные 1:

for i:=1 to MAX do count[i]:=1;

Теперь алгоритм можно записать так

  1. прочитать количество голосовавших N

  2. в цикле N раз

    1. прочитать название партии

    2. искать ее среди уже известных партий – в массиве Names

    3. если партия найдена, то увеличить ее счетчик голосов
      иначе увеличить счетчик партий
      nParties и записать новое название в массив, в элемент Names[nParties]

  1. отсортировать массив count по убыванию (только первые nParties элементов, потому что партий может быть меньше 10), одновременно с перестановкой в массиве count нужно не забывать переставлять соответствующие элементы массива Names, например, так:

for i:=1 to nParties-1 do

for j:=nParties-1 downto i do

if count[j] < count[j+1] then begin

k:=count[j]; count[j]:=count[j+1]; count[j+1]:=k;

s:=Names[j]; Names[j]:=Names[j+1]; Names[j+1]:=s;

end;

здесь k – вспомогательная целая переменная, а s – вспомогательная символьная строка.

  1. вывести элементы массива Names с 1-ого по nParties.

for i:=1 to nParties do writeln(Names[i]);

Осталось разобраться, как искать прочитанное название партии в массиве Names. Предположим, что мы прочитали очередную строку в переменную s:

Readln(s);

Сначала переменной j присваиваем значение 1 (начать с первого элемента массива Names). Затем в цикле while увеличиваем j, пока не просмотрим все партии (j станет больше, чем nParties) или не найдем строку s:

j := 1;

while (j <= nParties) and

(Names[j] <> s) do j:=j+1;

Если после цикла j<=nParties, значит, мы нашли название партии в массиве и нужно увеличить ее счетчик. Если нет – увеличиваем nParties и сохраняем ее имя в очередном элементе массива Names:

if j <= nParties then

count[j]:=count[j]+1

else begin

nParties:=nParties+1;

Names[nParties]:=s;

end;

Вот программа целиком

const MAX=10;

var Names: array[1..MAX] of string;

count: array[1..MAX] of integer;

N, i, j, k, nParties: integer;

s: string;

begin

nParties := 0; { еще нет партий }

{ начальные значения счетчиков = 1 }

for i:=1 to MAX do count[i]:=1;

Readln(N); { количество людей }

for i:=1 to N do begin

Readln(s); { читаем название партии }

{ ищем его в списке }

j := 1;

while (j <= nParties) and

(Names[j] <> s) do j:=j+1;

{ если нашли – увеличили счетчик голосов }

if j <= nParties then

count[j]:=count[j]+1

{ не нашли – добавили в список }

else begin

nParties:=nParties+1;

Names[j]:=s;

end;

end;

{ сортировка массива count по убыванию }

for i:=1 to nParties-1 do

for j:=nParties-1 downto i do

if count[j] < count[j+1] then begin

k:=count[j]; count[j]:=count[j+1]; count[j+1]:=k;

s:=Names[j]; Names[j]:=Names[j+1]; Names[j+1]:=s;

end;

{ вывод отсортированного списка }

for i:=1 to nParties do writeln(Names[i]);

end.

Использование записей позволяет сделать программу немного более профессиональной. Действительно, название партии и счетчик ее голосов тесно связаны, поэтому логично объявить новый тип данных

type TParty = record

Name: string;

count: integer;

end;

и массив этих записей вместо двух отдельных массивов Names и count:

var Parties: array[1..MAX] of TParty;

Вместо Names[j] и count[j] теперь нужно обращаться к полям записи Parties[j].Name и Parties[j].count. Упрощается и сортировка (меняем местами структуры целиком):

for i:=1 to nParties-1 do

for j:=nParties-1 downto i do

if Parties[j].count < Parties[j+1].count then begin

p:=Parties[j];

Parties[j]:=Parties[j+1];

Parties[j+1]:=p;

end;

здесь p – вспомогательная запись, переменная типа TParty. Вот вся программа:

const MAX=10;

type TParty = record

Name: string;

count: integer;

end;

var Parties: array[1..MAX] of TParty;

N, i, j, nParties: integer;

s: string;

p: TParty;

begin

nParties := 0; { еще нет партий }

{ начальные значения счетчиков = 1 }

for i:=1 to MAX do Parties[i].count:=1;

Readln(N); { количество людей }

for i:=1 to N do begin

Readln(s); { читаем название партии }

{ ищем его в списке }

j := 1;

while (j <= nParties) and

(Parties[j].Name <> s) do j:=j+1;

{ если нашли – увеличили счетчик голосов }

if j <= nParties then

Parties[j].count:=Parties[j].count+1

{ не нашли – добавили в список }

else begin

nParties:=nParties+1;

Parties[nParties].Name:=s;

end

end;

{ сортировка массива count по убыванию }

for i:=1 to nParties-1 do

for j:=nParties-1 downto i do

if Parties[j].count < Parties[j+1].count then begin

p:=Parties[j];

Parties[j]:=Parties[j+1];

Parties[j+1]:=p;

end;

{ вывод отсортированного списка }

for i:=1 to nParties do

writeln(Parties[i].Name);

end.

  1. Главная проблема в этой задаче – разобраться с датами. Нужно

  • хранить дату в таком виде, чтобы ее было удобно сравнивать за один этап

  • «разобрать» дату, преобразовать ее из символьного представления в тот формат, который мы выберем

Напрашивается вариант хранения даты в виде трех целых чисел (день, месяц, год). Плюс – естественность для человека. Минус – сложность сравнения двух дат (попробуйте написать условие «дата-1» < «дата-2»).

Поэтому мы пойдем другим путем. Будем хранить дату в виде одного целого числа – числа дней, прошедших (примерно) с Рождества Христова. Примерно – потому, что мы не будем «возиться» с високосными и невисокосными годами, а также не будем учитывать, что разные месяцы имеют разное число дней. Отметим, что в задачах ЕГЭ всегда предполагается, что все данные вводятся без ошибок.

Пусть нам удалось раскодировать день, месяц и год, и записать и соответственно в переменные d, m и y. Тогда будем вычислять дату так:

date := (y - 1)*366 + (m-1)*31 + d–1;

Понятно, что это не точное число дней, прошедших с даты 00.00.0000, но нам вполне достаточно того, что две любые реальные даты в таком формате представляются разными значениями, и их можно сравнивать просто как целые числа.

Проверим, поместится ли это число в ячейку, отводимую для хранения целого числа. По условию наибольшая дата, 31.12.2100, дает значение даты около 2100366800000. В старых версиях Паскаля целые числа занимали 2 байта и были ограничены диапазоном
–32768..32767. В новых версиях, например, в PascalABC, целое число занимает 4 байта и вмещает ±2 млрд., то есть, наше число заведомо помещается. Таким образом, у вас есть два варианта:

      1. написать, что вы используете новую версию, например, PascalABC (это разрешено);

      2. для старых версия использовать тип longint вместо integer.

Теперь сообразим, как раскодировать день, месяц и год из символьной строки s, которую мы прочитаем из входного потока

Readln ( s );

Сначала нужно дойти до второго пробела и выделить фамилию с именем в строковую переменную Name, а все остальное (дату) оставить в s:

p := 1; { начали с первого символа }

while s[p] <> ' ' do p := p+1; { дошли до пробела }

p := p+1; { пропустили этот пробел }

while s[p] <> ' ' do p := p+1; { дошли до второго пробела }

Name := Copy(s, 1, p-1); { выделили фамилию с именем }

s:= Copy(s,p+1,Length(s)-p); { здесь осталась только дата }

Теперь в строке s первые два символа – день, символы 4 и 5 – месяц, а символы 7-10 – год. Преобразуем их в целые числа с помощью стандартной процедуры Val (здесь c – вспомогательная целая переменная, в которой возвращается код ошибки, мы ее далее не используем):

Val(Copy(s,1,2), d, c);

Val(Copy(s,4,2), m, c);

Val(Copy(s,7,4), y, c);

После этого остается «собрать» дату в переменную date:

date := (y - 1)*366 + (m-1)*31 + d–1;

Если новая дата равна минимальной на данный момент, хранящейся в переменной minDate, нужно увеличить счетчик count:

if date = minDate then count:=count+1;

Если новая дата меньше минимальной, нужно запомнить ее в переменной minDate, запомнить имя человека в переменной minName и записать в счетчик count единицу:

if date < minDate then begin

minName := Name;

minDate := date;

count := 1;

end;

В самом начале в переменную minDate нужно записать очень большое число, например, MaxInt (максимальное целое число). Вот полная программа:

{ Версия для PascalABC }

var s, Name, minName: string;

m, d, y, date, minDate: integer;

N, i, p, c, count: integer;

begin

minDate:=MaxInt;

{ вводим количество людей }

Readln(N);

for i:=1 to N do begin

Readln(s); { вводим данные одного человека }

p:=1; while s[p] <> ' ' do p:=p+1;

p:=p+1; while s[p] <> ' ' do p:=p+1;

{ выделили фамилию и имя, отделили дату }

Name := Copy(s, 1, p-1);

s:=Copy(s,p+1,Length(s)-p);

{ выделили день, месяц, год }

Val(Copy(s,1,2), d, c);

Val(Copy(s,4,2), m, c);

Val(Copy(s,7,4), y, c);

{ построили дату }

date := (y-1)*366 + (m-1)*31 + (d-1);

{ сравниваем дату с минимальной }

if date = minDate then count:=count+1;

if date < minDate then begin

minName := Name;

minDate := date;

count := 1;

end;

end;

{ выводим результат }

if count>1 then

writeln(count)

else writeln(minName);

end.



  1. Чтение данных в этой задаче выполняется стандартно (см. разборы предыдущих задач). Важно, что нас интересуют только ученики школы № 50, всех остальных пропускаем.

Заметим, что в условии задачи содержатся лишние данные (например, указано, что номер школы находится в интервале от 1 до 99, это никак не влияет на результат). Возможно, это сделано специально с целью спровоцировать выделение массива.

Самое сложное – определить, как обрабатывать данные. Желательно обойтись без сортировки, в данном случае она совсем не нужна. Запоминать все данные тоже не нужно (и невозможно!), поскольку

  • количество учеников неизвестно

  • нас интересуют только фамилии двух лучших, то есть достаточно ввести всего две символьных переменных (name1 и name2)

Две целых переменных max1 и max2 будут использоваться для хранения баллов, которые набрали два лучших ученика. Кроме того, нужно считать, сколько учеников набрали высший балл. Для этого введем счетчики count1 и count2.

Предположим, что мы прочитали данные очередного ученика (и он из школы № 50!): его имя находится в переменной name, набранные баллы – в переменной ball.

Если балл ученика больше, чем max1, нужно запомнить нового лидера (записать его имя и балл в переменные max1 и name1, в счетчик count1 – единицу), но предварительно записать данные по старому лидеру в переменные max2, name2 и count2:

if ball > max1 then begin

max2:=max1; name2:=name1; count2:=count1;

max1:=ball; name1:=name; count1:=1;

end

else ...

Если балл равен максимальному, нужно увеличить счетчик count1 и запомнить данные нового ученика в переменных max2 и name2 (теперь он второй!)

...

else

if ball = max1 then begin

count1:=count1+1;

max2:=ball; name2:=name;

end

else ...

Если балл находится между max1 и max2, нужно сохранить новые данные по второму ученику (пока он один, поэтому в count2 записываем 1):

...

else

if ball > max2 then begin

max2:=ball; name2:=name; count2:=1;

end

else ...

Если ball = max2, мы нашли еще одного ученика, имеющего второй результат, нужно его посчитать:

...

else

if ball = max2 then count2:=count2+1;

Если ball < max2, ничего делать не нужно. Полный код обработки выглядит так:

if ball > max1 then begin

max2:=max1; name2:=name1; count2:=count1;

max1:=ball; name1:=name; count1:=1;

end

else

if ball = max1 then begin

count1:=count1+1;

max2:=ball; name2:=name;

end

else

if ball > max2 then begin

max2:=ball; name2:=name; count2:=1;

end

else

if ball = max2 then count2:=count2+1;

В этой задаче самая сложная часть – это приведенная выше логика обработки данных очередного ученика. Обратите внимание, что это серия вложенных условных операторов, каждый следующий находится в else-ветке предыдущего. Кроме того, условия проверяются начиная с самого «большего» (ball > max1) в порядке «уменьшения» сравниваемой величины, иначе в некоторых случаях программа будет работать неправильно.

При выводе результата нужно учесть три варианта:

  1. Если count1 = 2 или count1+count2 = 2, выводим фамилии первых двух учеников.

  2. Если count1 =1 и count2 > 1, выводим только фамилию и имя лидера.

  3. Если count1 > 2, выводим только count1.

Вот полная программа:

var name,name1,name2:string;

c:char;

i, j, N, school, ball,

max1, max2, count1, count2: integer;

begin { начальные значения }

max1:=-1; max2:=-1;

count1:=0; count2:=0;

readln(N); { читаем количество учеников }

for i:=1 to N do begin

{ читаем фамилию имя в name }

name := ' ' ;

for j:=1 to 2 do

repeat

read(c) ; name:=name+c;

until c=' ';

readln(school,ball); { читаем школу и баллы }

if school = 50 then { только ученики школы № 50 }

if ball > max1 then begin

max2:=max1; name2:=name1; count2:=count1;

max1:=ball; name1:=name; count1:=1;

end

else

if ball = max1 then begin

count1:=count1+1;

max2:=ball; name2:=name;

end

else

if ball > max2 then begin

max2:=ball; name2:=name; count2:=1;

end

else

if ball = max2 then count2:=count2+1;

end;

{ вывод результата }

if (count1 = 2) or

(count1+count2 = 2) then begin

writeln(name1);

writeln(name2);

end

else

if (count1 = 1) and (count2 > 1) then

writeln(name1)

else { здесь count1 > 2 }

writeln(count1);

end.

  1. Нам нужно считать средний балл по каждой школе, его можно вычислить только после того, как будут прочитаны все данные. Во время чтения нужно накапливать сумму баллов по школе и количество учеников. Поэтому заведем два целочисленных массива с индексами от 1 до 99: в одном из них (назовем его sum) будем накапливать суммы, второй (count) будет массивом счетчиков учеников. Сначала эти массивы нужно обнулить.

var sum, count: array[1..99] of integer;

begin

for i:=1 to 99 do begin

sum[i]:=0; count[i]:=0;

end;

Фамилии и имена учеников нас не интересуют, поэтому будем пропускать их при чтении. Фамилия заканчивается на первом пробеле, имя – на следующем.

repeat read(c) until c=' '; { пропуск фамилии }

repeat read(c) until c=' '; { пропуск имени }

Теперь читаем номер школы (в переменную sch) и количество баллов ученика (в переменную ball):

readln(sch, ball);

Увеличиваем сумму и количество учеников по школе с номером sch:

sum[sch] := sum[sch] + ball;

count[sch] := count[sch] + 1;

После обработки всех входных строк нужно найти среднее по каждой школе и среднее по району. Найти «среднее с точностью до целых» обычно означает «применить округление до ближайшего целого», в Паскале это делает функция round. Проходим в цикле все школы и для тех, в которых число учеников не равно нулю, считаем среднее и записываем его в тот же массив sum:

for i:=1 to 99 do

if count[i] > 0 then

sum[i]:= round(sum[i]/count[i]);

Чтобы найти среднее по району, нам нужна общая сумма баллов. Ее можно вычислить в том же цикле (до вычисления среднего) с помощью переменной total:

total := 0;

for i:=1 to 99 do

if count[i] > 0 then begin

total := total + sum[i];

sum[i]:= round(sum[i]/count[i]);

end;

Количество учеников хранится в переменной N (ее значение считывается в первой строке входных данных), поэтому среднее по району вычислим так:

total := round(total / N);

Дальше остается в цикле пройти по массиву sum и вывести номера всех школ, для которых выполняется условие sum[i] > total.

var sum, count: array[1..99] of integer;

c: char;

i, N, sch, ball, k, total: integer;

begin

{ обнуляем массивы }

for i:=1 to 99 do begin

sum[i]:=0; count[i]:=0;

end;

{ читаем количество учеников }

readln(N);

for i:=1 to N do begin

{ пропускаем фамилию и имя }

repeat read(c) until c=' ';

repeat read(c) until c=' ';

{ читаем номер школы и балл }

readln(sch, ball);

sum[sch] := sum[sch] + ball;

count[sch] := count[sch] + 1;

end;

{ средний балл по району }

total := 0;

for i:=1 to 99 do

if count[i] > 0 then begin

total := total + sum[i];

sum[i]:= round(sum[i]/count[i]);

end;

total := round(total / N);

{ находим школы, где средний балл выше районного }

k := 0;

for i:=1 to 99 do

if sum[i] > total then begin

k := k + 1;

ball := sum[i];

write(i, ' ');

end;

writeln;

if k = 1 then { если такая школа одна }

writeln('Средний балл = ', ball);

end.


  1. Эта задача аналогична задаче 17 в том, что для шифровки используется циклический сдвиг символов алфавита. Чтение строки можно выполнять целиком

readln(s);

учитывая, что ее длина не превышает ограничение стандартного4 Паскаля (255 символов). Дальше в цикле рассматриваем все символы строки. Для того, чтобы определить длину слова, используем переменную len (счетчик символов слова) и логическую переменную (флаг) inside, которая показывает, что мы находимся в середине слова (текущий символ – не первый в слове).

Если очередной символ – буква английского алфавита, проверяется переменная inside. Если она равна True (это не первая буква слова), длину len увеличиваем на единицу. Иначе (если это начало слова) записываем в len единицу и устанавливаем переменной inside значение True:

if s[i] in ['a'..'z','A'..'Z'] then

if inside then len := len+1

else begin

len := 1;

inside := True;

end

else

В else-блоке нужно обработать ситуацию, когда очередная буква не входит в английский алфавит, то есть, слово закончилось. В этом случае нужно зашифровать предыдущие len символов, используя циклический сдвиг на len вправо (то есть, к коду символа добавляется len). Тут еще необходимо учесть цикличность при выходе за границы алфавита: если код символа становится больше кода буквы Z (или z, для строчных букв), нужно вычесть из него 26 (длину латинского алфавита).

...

else

if inside then begin

inside := False;

for j:=1 to len do begin

k := Ord(s[i-j]) + len; { сдвиг кода }

if s[i-j] in ['a'..'z'] then

if k > Ord('z') then k := k - 26;

if s[i-j] in ['A'..'Z'] then

if k > Ord('Z') then k := k - 26;

s[i-j] := Chr(k);

end;

end;

Дадим некоторые пояснения к циклу. Сейчас рассматривается символ s[i], на нем закончилось слово длиной len. Переменная j меняется от 1 до len, в теле цикла обрабатывается символ s[i-j], то есть, меняются все символы от s[i-1] до
s[i-len] включительно. Вот полная программа:

var s: string;

inside: boolean;

i, j, k, len: integer;

begin

readln(s); { читаем строку }

inside := False;

{ цикл по всем символам строки }

for i:=1 to length(s) do begin

{ если латинская буква }

if s[i] in ['a'..'z','A'..'Z'] then

if inside then

len := len+1 { не первая буква слова }

else begin { первая буква слова }

len := 1;

inside := True;

end

else { если не латинская буква }

if inside then begin { закончилось слово }

inside := False;

{ шифруем len символов «назад» }

for j:=1 to len do begin

k := Ord(s[i-j]) + len; { сдвиг кода }

{ цикличность при выходе за границы }

if s[i-j] in ['a'..'z'] then

if k > Ord('z') then k := k - 26;

if s[i-j] in ['A'..'Z'] then

if k > Ord('Z') then k := k - 26;

s[i-j] := Chr(k); { новый символ }

end;

end;

end;

{ вывод результата }

writeln(s);

end.

Интересно рассмотреть обобщение этой задачи на случай, когда входная строка может быть больше 255 символов, то есть, читать ее сразу нельзя. Придется читать по одному символу. Прочитав английскую букву, добавляем ее в конец символьной переменной word, в которой хранится текущее слово. Если прочитан символ, не являющийся английской буквой, смотрим на переменную word. Если она не пустая (хранит английское слово), перекодируем его с помощью циклического сдвига на length(word)и выводим слово на экран, после этого выводим сам прочитанный символ. Цикл останавливается, когда прочитан символ #:

repeat

read(c);

...

until c = '#';

Программа оказывается не сложнее, чем при ограничении на длину строки:

var word: string;

c: char;

i, k, len: integer;

begin

word := '';

repeat

read(c); { чтение символа }

if c in ['a'..'z','A'..'Z'] then

word := word + c

else begin

if word <> '' then begin

len := Length(word);

{ обрабатываем слово }

for i:=1 to len do begin

k := Ord(word[i]) + len;

if word[i] in ['a'..'z'] then

if k > Ord('z') then k := k - 26;

if word[i] in ['A'..'Z'] then

if k > Ord('Z') then k := k - 26;

word[i] := Chr(k);

end;

{ вывод слова без перехода на новую строку}

write(word);

word := ''; { пустая строка }

end;

write(c); { вывод символа после слова }

end;

until c = '#';

writeln;

end.


  1. Для решения задачи нужно сначала прочитать все данные. Нас не интересуют фамилии, имена и номера школ, нужно только знать, сколько участников набрали определенное число баллов. Для этого заведем массив счетчиков count с индексами в интервале от 0 до 100, так что count[i] будет обозначать число участников экзамена, набравших i баллов. В начале массив нужно обнулить, а затем прочитать все данные:

{ обнуляем массив }

for i:=0 to 100 do count[i]:=0;

{ читаем количество строк}

readln(N);

for i:=1 to N do begin

{ пропускаем фамилию и имя}

repeat read(c) until c=' ';

repeat read(c) until c=' ';

readln(sch, ball); { читаем номер школы и балл ученика}

count[ball]:=count[ball]+1;

end;

Определяем 20% от всех участников:

M := N div 5;

и пытаемся найти такой балл i, что M участников получили балл не меньше i:

s:=0; i:=100;

while s < M do begin

s:=s+count[i];

i:=i-1;

end;

i := i + 1;

или так

s:=0; i:=101;

while s < M do begin

i:=i-1;

s:=s+count[i];

end;

Если после этого s = M, то ровно M участников получили балл i и выше, им ставится отличная отметка. Кроме того, «отлично» ставится в том случае, когда более 20% учеников набрали высший балл. Это значит, что s = count[i], то есть, сумма s в самом деле состоит из одного слагаемого. Поэтому

if (s = M) or (s = count[i]) then writeln(i)

else ...

Если ни один из этих вариантов не подошел, то участникам, набравшим i баллов, не будет поставлена отметка «отлично». Но вывести на экран i-1 в виде результата нельзя, потому что может быть так, что i-1 балл никто не набрал. Поэтому ищем первый балл, больший i, который набрал хотя бы один человек:

else begin

repeat

i:=i+1;

until count[i]<>0;

writeln(i);

end;

Вот полная программа:

var count:array[0..100] of integer;

c: char;

i, N, sch, ball, M, s: integer;

begin

{ обнуляем массив }

for i:=0 to 100 do count[i]:=0;

{ читаем количество строк}

readln(N);

for i:=1 to N do begin

{ пропускаем фамилию и имя}

repeat read(c) until c=' ';

repeat read(c) until c=' ';

readln(sch,ball); { читаем номер школы и балл ученика}

count[ball]:=count[ball]+1;

end;

M := N div 5; {вычисляем 20% от количества учеников}

{ ищем минимальный балл этих 20% }

s := 0;

i:=101;

while s < M do begin

i:=i-1;

s:=s+count[i];

end;

{ вывод результата }

if (s = M) or (s = count[i]) then

{ i баллов – «отлично» }

writeln (i)

else begin

{ i баллов не «отлично» }

repeat

i:=i+1;

until count[i]<>0;

writeln(i);

end;

end.




1 Вообще говоря, без массива Total можно обойтись, потому что Total[i] – это сумма i-ой строки матрицы Count. Но его использование сильно упрощает дело при обработке данных. На досуге вы можете написать программу без него.

2 На практике это не обязательно, потому что глобальные переменные и массивы обнуляются автоматически во всех известных автору версиях Паскаля. Тем не менее, на экзамене вы должны показать эксперту, что вы понимаете суть дела.

3 Решение, предложенное в проекте демо-варианта ФИПИ 2010 года, содержит массивы, описанные как array[92..98], что само по себе очень неграмотно.

4 Это ограничение снято в Delphi.

42 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Няня

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Выбранный для просмотра документ answers.doc

isa.muschanov.70@yandex.ru


Ответы на задачи A1-A18:


A1

A2B1

A3

A4

A5

A6

A7

A8

A9

A10

A11

A12

A12k

A13

A14

A15

A16

A17

A18

3

3

3

3

4

3

2

4

1

4

2

4

3

2

3

2

2

4

4

4

2

2

3

4

3

3

2

2

4

3

4

1

4

2

4

1

2

4

2

2

2

2

4

4

2

1

4

3

3

2

3

4

4

2

4

3

2

2

3

1

3

1

3

3

4

3

1

2

4

3

2

2

2

2

1

4

1

3

2

2

2

1

4

2

1

2

4

2

2

2

3

4

2

1

4

3

2

1

4

1

3

2

3

4

4

2

1

1

2

2

1

4

1

4

3

2

2

2

3

2

3

3

4

2

2

1

1

2

1

2

1

1

3

3

3

3

2

2

4

2

4

3

2

3

4

3

1

4

3

2

4

2

3

2

4

2

2

3

1

4

4

3

4

1

2

4

3

2

3

1

3

1

4

4

2

3

3

1

2

3

3

4

1

2

4

3

1

4

4

3

4

3

1

1

3

4

4

4

3

2

1

1


3

1

4

2

1

2

2

3

2

2

3

3

2

1

1

3

4

4


2

4

2

2

3

3

4

4

1

1

4

2

1

4

2

2

4

1


1

3

4

1

3

3

3

3

3

1

3

3

2

1

4


1

2


2

2

2

4

4

3

3

2


4

3

4

4

3

3


2

4


4

1

4

1

4

2

2

1


1

1

2

1

3

4


3

3


2

4

3

3

2

1

1

1


4

2

2

1

4

3


2

1


3

3

2

3

1

3

2

3


3

4

3

2

3

2


3

1


3

2

4

2

3

3

1

2


2

4

2

4

4

2


2

4


3

2

1

1

4

4

4

3



2

3

1

4

3


1



4

4

4

1

2

2

3

3



1

2

4

2

4





1

4

3

2

1

2

1

2



2

3

2

4

2






3

3

3

2

3

3

3




2

4

2

3






2

4

4

4

3

2

4




3

2








2

2

4

2

2


2




4

4








3

3

1

3

3


3




3

4








1



3

4


81




3












3

2


1024




4












4

3


4




3












1

2


2




1













3


81




4













3


21




3













1


108




2













2


4




2













2


2




4













3


1




1













4


27




2













4


256

















2


2



















256



















512



















Ответы на задачи B1-B10:


A2B1

B2

B3

B4

B5

B6

B7

B8

B9

B10

3

2

6, 9, 18

9

11121

1423

625

127

ГВЖЕДБА

БВАГ

2

16

3

4

121211

процессор

3750

85

ВАЖГЕБД

ГВАБ

2

5

4,6,9,12,18,36

0100

12211

ДМК

256

2

3

ГБАВ

3

4

6,8,12,24

6

Назад5

1342

32000

683

ecafgbd

ГБВА

3

24

5

6

12121

М5

480000

341

ДВАЕГБЖ

ГВАБ

2

160

6,9,12,18,36

1000

11122

10576534

8

256

egadbfc

dcab

2

3

5

3

21221

АГЛМ

108

8

fgbadec

bcda

3

8

4,6,8,12,24

0100

1211

МВЕ

2

18

ЕЗБГДВЖА

АГБВ

2

2

8,17,26

4

10

МСК

2560

256

DGAFCEB

bcad

4

25

13,29

145

22112

М

256000

ABAABCD

БВАГ

1

3

14

4,8,9,13,17

192

171

МЕАВ

128

121

ГАВБ

920

3

12

8

47

16

АВМЕ

50

AABCDE

БГАВ

600

4

27

13

1001

1222

СИВФ

2400

AABAAB

ВБГА

810

3

255

2,11, 22

0011

1221

АМВЕ

32

191

ГБАВ

АГВБ

2

2500

5,30

44

2212

С,5

1000

16


ВБАГ

1

6

72

30

2

СМК

44

ABAABC


ВБГА

1

3

7

17

22111

СИ,УБ,ПА,ВМ

1875

ABAAFE


4321

3

263

5

7

12211

А,П

48

BCAABA


3214

2

18

8

10

121221

Настя

512

67


4213

3

25

4

8

142

СРНА

40

127


4213

3

1023

4,24,25

7

4144

РСНА

1250



3421

2


2,6,7,8,18,19,20

7

Назад 5

НРАС

1280



3241

3


194

1

2

СРАН




3124

4


5,13,21

14

2

В





2


11,22

9

1

СМК





3


9,27

6

3






81


8

7

131






1024


7

7

12221






4


7, 14, 28

5







2


6, 14, 22

8







81


7, 16, 25

30







21


10, 26, 42

10







108



1111







4



4







2










1










27










256










2










256










512











2 isa.muschanov.70@yandex.ru


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Решения заданий ЕГЭ по информатике части А1-А30,В1-В10,С1-С4. 8.04.2010г. Автор проекта Мусханов И.Х"

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Получите профессию

Няня

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Краткое описание документа:



А1 (базовый уровень, время – 1 мин)

Тема:  Системы счисления и двоичное представление информации в памяти компьютера.

Что нужно знать:

·    перевод чисел между десятичной, двоичной, восьмеричной и шестнадцатеричной системами счисления (см. презентацию «Системы счисления»)

Полезно помнить, что в двоичной системе:

·     четные числа оканчиваются на 0, нечетные – на 1;

·     числа, которые делятся на 4, оканчиваются на 00, и т.д.; числа, которые делятся на 2k, оканчиваются на kнулей

·     если число N принадлежит интервалу 2k-1 £N < 2k, в его двоичной записи будет всего kцифр, например, для числа 125:

                               26 = 64 £125 < 128 = 27,    125 = 11111012  (7 цифр)

·     числа вида 2kзаписываются в двоичной системе как единица и kнулей, например:

          16 = 24 = 100002

·     числа вида 2k-1записываются в двоичной системе kединиц, например:

          15 = 24-1 = 11112

·     если известна двоичная запись числа N, то двоичную запись числа 2·N можно легко получить, приписав в конец ноль, например:
     15 = 11112,          30 = 111102,         60 = 1111002,    120 = 11110002

·    отрицательные целые числа хранятся в памяти в двоичном дополнительном коде (подробнее см. презентацию «Компьютер изнутри»)

·    для перевода отрицательного числа (-a) в двоичный дополнительный код нужно сделать следующие операции:

o   перевести число a-1 в двоичную систему счисления

o   сделать инверсию битов: заменить все нули на единицы и единицы на нули в пределах разрядной сетки (см. пример далее)

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 663 617 материалов в базе

Скачать материал

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 13.01.2015 24224
    • RAR 3.4 мбайт
    • 17 скачиваний
    • Оцените материал:
  • Настоящий материал опубликован пользователем Мусханов Иса Хамидович. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Мусханов Иса Хамидович
    Мусханов Иса Хамидович
    • На сайте: 9 лет и 3 месяца
    • Подписчики: 0
    • Всего просмотров: 313650
    • Всего материалов: 11

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Экскурсовод

Экскурсовод (гид)

500/1000 ч.

Подать заявку О курсе

Курс профессиональной переподготовки

Педагогическая деятельность по проектированию и реализации образовательного процесса в общеобразовательных организациях (предмет "Математика и информатика")

Учитель математики и информатики

300 ч. — 1200 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Сейчас обучается 38 человек из 18 регионов
  • Этот курс уже прошли 33 человека

Курс профессиональной переподготовки

Педагогическая деятельность по проектированию и реализации образовательного процесса в общеобразовательных организациях (предмет "Информатика")

Учитель информатики

300 ч. — 1200 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Этот курс уже прошли 20 человек

Курс повышения квалификации

Применение компьютерных моделей при обучении математике и информатике в рамках ФГОС ООО

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Сейчас обучается 49 человек из 28 регионов
  • Этот курс уже прошли 178 человек

Мини-курс

Подготовка менеджеров по продажам: аспекты телефонных переговоров

10 ч.

1180 руб. 590 руб.
Подать заявку О курсе

Мини-курс

After Effects: продвинутые техники

8 ч.

1180 руб. 590 руб.
Подать заявку О курсе

Мини-курс

GR-технологии и взаимодействие с СМИ

2 ч.

780 руб. 390 руб.
Подать заявку О курсе
Сейчас в эфире

Информационная интоксикация: методы исцеления

Перейти к трансляции