Информатика в задачах, примерах, алгоритмах
.pdf
8. Логика
После игры оказалось, что двое болельщиков ошиблись, а один угадал. Как закончился финал, если никакие два участника не заняли одно и то же место?
Ответ: Саша — первый, Володя — второй, Аркадий — третий.
281. В финал шахматного турнира вышли Аркадий, Володя, Саша. Перед финалом болельщики высказали предположения:
I. Первое место займет Аркадий; II. Саша не будет последним;
III. Володя не будет на первом месте.
После игры оказалось, что один болельщик ошибся, а двое угадали. Какие варианты финала возможны, если никакие два участника не заняли одно и то же место?
Ответ:
a.Аркадий — первый, Володя — второй, Саша — третий;
b.Саша — первый, Аркадий — второй, Володя — третий;
c.Саша — первый, Володя — второй, Аркадий — третий.
282.N хотел пригласить в гости A, B, C, D, E, F, G, H. При этом он столкнулся со следующими трудностями:
— А никогда не придет, если пригласить В или С, или если одновременно придут D и Е;
— D придет только в том случае, если будет приглашен и Е;
—Е не примет приглашения, если придет В;
—F наносит визиты только в сопровождении G;
—H не будет возражать против присутствия F только в том случае, если будет приглашен и А;
—если не будет приглашен F, то H будет против приглашения Е;
—чтобы пришел G, необходимо пригласить D или H;
—G откажется от приглашения, если пригласят Е без А, а также в случае приглашения В или С.
Кого мог пригласить N?
Ответ: A, E, F, G, H.
283. В составе экспедиции должно быть шесть специалистов: биолог, врач, синоптик, гидролог, механик и радист. Имеется восемь кандидатов, из которых нужно выбрать шесть участников экспедиции. Условные имена претендентов: A, B, C, D, E, F, G, H.
111
Информатика в задачах, примерах, алгоритмах
Обязанности биолога могут выполнять E и G, врача — A и D, синоптика — F и G, гидролога — B и F, радиста — C и D, механика — C и H. Предусмотрено, что в экспедиции каждый выполняет только одну обязанность.
Кого и в какой должности следует включить в экспедицию, если F не может ехать без B, D — без H и без C, C не может ехать вместе с G, A — вместе с B?
Ответ: B — гидролог, C — радист, D — доктор, E — биолог, F — синоптик, H — механик.
284. Пятеро друзей — Андрей, Борис, Виктор, Григорий и Дмитрий решили записаться в кружок любителей логических задач. Руководитель кружка задал им задание. Они должны были приходить на занятия по возможности чаще, но в разных сочетаниях, соблюдая следующие условия:
—если Андрей приходит вместе с Дмитрием, то Борис должен присутствовать;
—если Дмитрий отсутствует, то Борис должен быть, а Виктор должен отсутствовать;
—если приходит Дмитрий, то Григорий пусть не приходит;
—Андрей и Виктор не могут одновременно ни присутствовать, ни отсутствовать;
—если Борис отсутствует, то Дмитрий должен присутствовать, но в том случае, если не присутствует Виктор;
—если Виктор присутствует, но отсутствует Борис, то Григорий должен быть, а Дмитрий должен отсутствовать.
Âкаких сочетаниях друзья могли посещать занятия?
Ответ:
1.Андрей, Борис, Григорий;
2.Андрей, Борис, Дмитрий;
3.Борис, Виктор, Дмитрий;
4.Андрей, Борис.
285.Пятеро друзей — Андрей, Борис, Виктор, Григорий и Дмитрий решили записаться в кружок любителей логических задач. Руководитель кружка предложил им выдержать вступительный экзамен. Им следовало приходить на занятия по возможности чаще, но в разных сочетаниях, соблюдая следующие условия:
112
8. Логика
—если Андрей приходит вместе с Дмитрием, то Борис должен присутствовать;
— если Дмитрий отсутствует, то Борис должен быть,
àВиктор должен отсутствовать;
—если приходит Дмитрий, то Григорий пусть не приходит;
—Андрей и Виктор не могут одновременно ни присутствовать, ни отсутствовать;
—если Борис отсутствует, то Дмитрий должен присутствовать, но в том случае, если не присутствует Виктор;
—если Виктор присутствует, то Григорий должен быть,
àДмитрий должен отсутствовать.
Âкаких сочетаниях друзья могли посещать занятия?
Ответ:
1.Андрей, Борис, Григорий;
2.Андрей, Борис, Дмитрий;
3.Андрей, Борис.
286.Коллектив некоторого учреждения периодически собирается на собрания, причем замечено, что:
— если Борис не пришел на собрание, то отсутствует и Алексей;
— если Борис пришел на собрание, то присутствуют Алексей и Валерий.
Спрашивается, обязательно ли присутствует на собрании Алексей, если Валерий отсутствует; присутствует ли на собрании Валерий, если Алексей отсутствует?
Ответ: При данных логических утверждениях програм-ма выдаст следующие варианты: на собрания ходят или все трое, или один Валерий.
287.Ввести с экрана три числа:a, b, c. Считая, что это стороны треугольника, дать ему определение: равносторонний, равнобедренный, разносторонний. Если треугольник равнобедренный, то вывести на экран длину основания.
Ответ: Ïðè a = 2, b = 4, c = 2 треугольник равнобедренный, дли-
на основания = 4.
288.Ввести с экрана три числа: a, b, c. Считая, что это стороны треугольника, дать ему определение: прямоугольный, остроугольный, тупоугольный. (Для нахождения углов можно воспользовать-
ся теоремой косинусов: a 2 = b 2 + c 2 − 2bcCos α и соотношением
113
Информатика в задачах, примерах, алгоритмах
между Cos è tg : tg α = |
|
1 − Cos 2 α |
, так как для вычисления углов |
|
|||
|
|
Cos α |
|
можно использовать только одну функцию — ATN() — арктан- |
||||
генс. ATN возвращает угол в радианах. Для перевода в градусы не- |
||||
обходимо полученное значение разделить на число |
|
π |
, ãäå |
|
180 |
||||
|
|
|||
π = 3,1415.) |
|
|
|
|
Ответ: Ïðè a = 3, b = 4, c = 5 получаются следующие значения углов: α = 36,8698973°; β = 53,13010177°; γ = 90,00000249°; òðå-
угольник — прямоугольный.
289. Даны углы четырехугольника ABCD. Выяснить, является ли данный четырехугольник параллелограммом, трапецией, прямоугольником, ни тем, ни другим. Воспользоваться свойством этих фигур — противоположные углы равны (параллелограмм); сумма смежных углов равна 180°. Обязательно вставить проверку на наличие че- тырехугольника с такими углами (сумма всех углов равна 360°.)
Ответ: При значениях углов, 90, 90, 90, 90 — прямоугольник;
67, 113, 67, 113 — параллелограмм; 67, 113, 120, 60 — трапеция; 120, 59, 115, 65 — не существует;
120, 59, 115, 66 — произвольный четырехугольник.
290. Даны три числа. Определить, являются ли они частью арифметической прогрессии, геометрической прогрессии, ни то, ни другое. (Воспользоваться свойством арифметической прогрессии: разность между двумя рядом стоящими членами прогрессии есть постоянное число; частное от деления рядом стоящих членов прогрессии есть постоянное число — для геометрической прогрессии.)
Ответ: При значениях 2, 4, 6 — арифметическая прогрессия;
2, 4, 8 — геометрическая прогрессия; 5, 8, 10 — не прогрессия.
291. Даны длины смежных сторон параллелограмма и угол между ними. Дать параллелограмму определение: квадрат, ромб, прямоугольник (не квадрат), параллелограмм.
Ответ: Ïðè 2, 2, 90 — квадрат;
3, 3, 120 — ромб; 2, 3, 90 — прямоугольник;
5, 7, 70 — параллелограмм.
114
8. Логика
292. Треугольник задан координатами своих вершин |
A |
( |
x |
a |
, y |
a ) |
||||||||||
|
|
, |
||||||||||||||
B |
( |
x |
b |
, y |
b ) |
( |
x |
c |
, y |
c ) |
|
|
|
|
|
|
|
|
, C |
|
|
. Определить, пересекают ли его стороны оси |
|||||||||||
координат. (Воспользоваться тем свойством, что если точки расположены по разные стороны осей координат, то одинаковые координаты этих точек имеют противоположные знаки.)
Ответ: При значениях (2, –3), (1, 4), (–4, –1) — пересекают;
(2, 3), (1, 4), (7, 8) — не пересекают.
293. Даны действительные положительные числа a, b, c, d. Выяснить, можно ли прямоугольник со сторонами a, b поместить внутри прямоугольника со сторонами c, d так, чтобы каждая из сторон одного прямоугольника была параллельна или перпендикулярна сторонам другого прямоугольника.
Ответ: При значениях 2, 3, 4, 3 можно;
3, 2, 4, 2 — нельзя.
294. Кирпич имеет размеры a, b, c. Выяснить, пройдет ли этот кирпич в прямоугольное отверстие со сторонами õ, ó. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия.
Ответ: При значениях (6, 12, 24), (7, 13) пройдет;
(6, 12, 24), (15, 8) — пройдет; (6, 12, 24), (8, 5) — не пройдет.
295. Через иллюминатор затонувшего корабля необходимо вытащить сундук с драгоценностями. Возможно ли это, если иллюминатор представляет собой круг с радиусом R, а сундук — прямоугольный параллелепипед со сторонами a, b, c? (Воспользоваться тем свойством, что прямоугольник только тогда поместится в круг, когда его диагональ не больше диаметра круга. Диагональ прямоугольника вычисляется по формуле: d = 
a 2 + b 2 .)
Ответ: При R = 0,5 м, a = 0,5 м, b = 0,7м, c = 1,25 м — можно; при R = 0,4 м, a = 0,5 м, b = 0,7 м, с = 1,25 м — нельзя.
296. Даны площадь круга и площадь квадрата. Выяснить, поместится ли круг в квадрате, квадрат в круге? (Квадрат поместится в круге, если его диагональ не больше диаметра круга. Круг помес-
115
Информатика в задачах, примерах, алгоритмах
тится в квадрат, если его диаметр не больше стороны квадрата.
Sкруга = π R 2 , Sквадрата = a2.)
Ответ: Ïðè Sкруга = 25, Sквадрата = 25 — ни то, ни другое; ïðè Sкруга = 39,5, Sквадрата = 25 квадрат помещается в круг; ïðè Sкруга = 25, Sквадрата = 31,85 круг помещается в квадрат.
9. Циклы и массивы
Массивы данных представляют собой последовательность однотипных простых переменных. Каждая отдельно взятая переменная называется элементом массива. Каждому элементу массива может быть присвоено одно числовое или символьное значение, поэтому различаются массивы числовые и символьные. Кроме того, массивы могут быть одномерными и многомерными.
Одномерный массив можно представить как строку или столбец переменных, а двумерный — как таблицу или матрицу, в которой переменные расположены в m строках и n столбцах.
Определение массивов. Массивы в программе должны быть определены в операторе DIM.
Различаются динамические и статические массивы. Статиче- ские массивы — это массивы, величина которых известна в начале выполнения программы. Динамические массивы-это массивы, величина которых определяется во время выполнения программы. Но независимо от типа массива имя массива должно быть определено в начале программы. Если это статический массив, то сразу указывается его размерность.
DIM имя_массива (размерность_1[,размерность_2]) as {тип элементов массива}
Ãäå:
Имя_массива |
имя переменной, определяемое по общим правилам за- |
|
писи переменой, возможно с указанием типа хранимых |
|
данных (суффикса); |
размерность_1; |
индексы массива — целые положительные числа. Ин- |
размерность_2 |
декс массива определяет число элементов массива в од- |
|
ном измерении; |
тип элементов массива |
определяет значение элементов; массива: “целые чис- |
|
ла”, “вещественные числа”, “символьные переменные”. |
116
9. Циклы и массивы
Пример.
DIM A$(2,2)
определяет двумерный массив, состоящий из четырех символьных переменных:
A$(0,0) A$(0,1) — первая строка,
A$(1,0) A$(1,1) — вторая строка, или
A$(0,0) A$(1,0) — первый столбец,
A$(0,1) A$(1,1) — второй столбец.
Оператор DIM по умолчанию присваивает всем числовым переменным нулевые значения, а символьным переменным - значе- ние текстового пробела. Другой формат записи оператора DIM позволяет определять индексы массива с произвольного числа.
Формат оператора DIM
DIM имя_переменной(нач.зн.TO кон.зн.[,нач.зн.TO кон.зн]) As {тип элементов массива}
Ãäå:
íà÷.çí. |
начальное значение индекса; |
êîí.çí. |
конечное значение индекса. |
Этот формат удобен, когда есть желание придать больше смысла выражениям программы. Например, необходимо программно обработать данные работников в зависимости от года и месяца рождения. Тогда есть смысл определить массив следующим образом:
DIM påopl$(1910 to 1980, 1 to 12).
Тогда при обработке элемента массива pеopl$(1950,1) нетрудно догадаться, что речь идет о работнике, который родился в январе 1950 года.
Размерность массива может быть записана в виде арифметиче- ского выражения, значение которого должно быть положительным числом или равно нулю. Если арифметическое выражение имеет дробное значение, то оно округляется, и целая часть определяет размерность массива.
117
Информатика в задачах, примерах, алгоритмах
Если размерность массива не определена, т.е. массив не определен в операторе DIM (что также допускается в Бейсике), то по умолчанию определяется массив в десять элементов.
Если не определено дополнительно, то минимальное значение индекса массива равно нулю.
Пример.
DIM a$(2,2) 'определение символьного массива
'из четырех элементов
a$(0,0)="сегодня “: a$(0,1)=”в школе “ a$(1,0)="4 “: a$(1,1)=”урока"
PRINT a$(0,0);a$(0,1);a$(1,0);a(1,1)
Результат
сегодня в школе 4 урока
Оператор DIM описывает либо статические, либо динамиче- ские массивы. Если область хранения массива не была описана в операторах STATIC, DYNAMIC или COMMON, массивы, размер которых был задан в числах, являются статическими, а массивы, размер которых был задан в переменных, — динамическими.
Область хранения статического массива выделяется при запуске программы и остается постоянной. Область хранения динами- ческого массива выделяется при работе программы.
В Visual Basic существует возможность определять динамиче- ский массив следующим образом:
Dim A() as {тип элементов массива}.
Размерность массива вообще не указывается. В этом случае до первого использования переменной массива в программе он должен быть переопределен с помощью оператора Redim (см. пример 2).
9.1. Заполнение массива
Пример 1. Составить таблицу умножения для числа 13 от 1 до 100. Возможный вариант программы:
118
9. Циклы и массивы
QBasic
DIM tabl(1 TO 100) AS INTEGER 'определяем массив
|
'для целых чисел |
FOR i = 1 TO 100 |
'начало цикла |
|
' i — переменная цикла(счетчик) |
tabl(i) = 13 * i |
'заполнение массива |
NEXT |
'конец цикла |
В результате в каждом i-м элементе массива tabl находится произведение i*13.
Сортировка массивов
Как метод ускорения поиска информации в больших массивах используется сортировка. Цель накопления и хранения больших массивов информации — извлечение нужной информации по мере необходимости. При достаточно частом обращении к неупорядоченному массиву даже при использовании высокопроизводительных компьютеров затрачивается много времени на поиск и извлечение нужной информации. В отсортированных массивах такой поиск происходит значительно быстрее. Еще нагляднее необходимость сортировки информации наблюдается в тех случаях, когда с результатами машинной обработки информации приходится работать человеку с его медлительностью. Можно представить себе положение работника отдела кадров, когда ему необходимо найти данные работника коллектива в несколько тысяч че- ловек в неупорядоченных списках работающих.
Вопросы сортировки информации и слияния отсортированных массивов занимали программистов и постановщиков задач с самого начала компьютерной обработки информации. Разработано несколько способов сортировки информации в зависимости от использования оперативной памяти компьютера, причем чем мощнее, то есть быстрее сортировка, тем больше памяти она требует.
Для понимания сущности сортировки мы будем использовать сортировку методом пузырька. Этот метод основан на сравнении двух рядом стоящих элементов. В зависимости от условий сортировки (по возрастанию или по убыванию) вперед ставится или меньший элемент (по возрастанию), или больший (по убыванию.) Здесь необходимо отметить, что машинные коды цифр и букв
119
Информатика в задачах, примерах, алгоритмах
возрастают от 0 до 9 (цифры) и от A до Z, далее a-z, далее А-Я, далее а-я.
Задача. При помощи датчика случайных чисел заполнить массив в 100 элементов, отсортировать его по возрастанию и вывести его на второй лист рабочей книги Excel.
VisualBasic
Sub сортировка()
'При помощи датчика случайных чисел заполнить массив. 'Размерность массива ввести с клавиатуры 'и вывести его в первый столбец второго листа рабочей книги.
'Отсортировать массив в порядке возрастания и вывести его 'во второй столбец второго листа рабочей книги.
Dim a() As Integer, N As Integer, t As Integer Dim i As Integer, j As Integer, col As Integer, _ numb As Integer
Sheets(“ëèñò2").Select: Cells.Delete 'очистить весь лист
N = Val(InputBox(“Введите порядок матрицы”)) ReDim a(1 To N) 'переопределяем массив
Randomize Timer 'инициируем генератор случайных 'чисел
For i = 1 To N 'заполняем матрицу a(i) = Rnd * 99 + 1.1
Cells(i, 1) = a(i) 'и первый столбец рабочего листа
Next i
'Приступаем к сортировке
For i = 1 To N - 1 flag = True
For j = 1 To N - 1
If a(j + 1) < a(j) Then
'если второй элемент меньше 'первого,тогда меняем их местами
t = a(j): a(j) = a(j + 1): a(j + 1) = t
flag = False |
'была перестановка |
End If |
|
Next j |
|
If flag Then Exit For |
|
Next i |
'конец сортировки |
120
