Домашнее задание по информатике №4 Оглавление

advertisement
Домашнее задание по информатике №4
Оглавление
Задача №1 ................................................................................................................. 2
Задача №2 ................................................................................................................. 3
Задача №3 ................................................................................................................. 4
Решения и ответы к задачам .................................................................................. 6
Список использованных источников .................................................................. 13
Задача №1
В базе данных метеорологических измерений хранятся результаты
единовременных
замеров
трёх
параметров
(температура,
влажность,
давление) для различных моментов времени. Диапазоны допустимых
значений для параметров следующие: температура – от 10,0 до 40,0
включительно, влажность – от 60,0 до 90,0 включительно, давление – от
740,0 до 780,0 включительно. Известно, что не было замеров, у которых
значение хотя бы одного параметра с учётом точности измерения совпадало
со значением этого параметра в другом замере. Известно количество записей,
получаемых в ответ на ряд запросов к этой базе:
1). Температура <= 40,0 and Влажность <= 90,0 and Давление <= 780,0 –
70 записей.
2). Температура <=40,0 and Влажность < 75,0 and Давление <=780,0 – 30
записей.
3). Температура <= 40,0 and Влажность <= 90,0 and Давление >=760,0
and Давление <= 780,0 – 40 записей.
4). Температура < 25,0 and Влажность >= 75,0 and Влажность <=90,0
and Давление < 760,0 – 8 записей.
5). Температура <=40,0 and Влажность < 75,0 and Давление >=760,0 and
Давление <=780,0 – 15 записей.
Определить, сколько записей будет получено в ответ на запрос:
Температура >= 25,0 and Температура <=40,0 and Влажность >= 75,0 and
Влажность <=90,0 and Давление < 760,0 ? В ответе укажите целое число.
2
Задача №2
Прямоугольную матрицу размером n на m заполнили целыми числами
по алгоритму, представленному ниже на блок-схеме. Какое количество
отрицательных чисел получилось в матрице, если n=12, а m=20? В ответе
укажите число.
Рисунок 1− блок-схема алгоритма к задаче №2.
3
Задача №3
Дана блок-схема алгоритма обработки двумерного массива. Какова
будет сумма элементов массива после обработки? При обращении к
элементам массива первый индекс обозначает номер строки, а второй индекс
– номер столбца. Нумерация элементов массива начинается с [1,1]. В ответ
напишите число. Исходные значения элементов массива:
Рисунок 2− исходный массив данных к задаче №3.
4
Рисунок 3− блок-схема алгоритма к задаче №3.
5
Решения и ответы к задачам
Решение задачи №1:
Обратим внимание, что во всех запросах к базе данных для каждого
параметра (температура, влажность, давление) устанавливается соответствие
выбираемой записи одному из двух диапазонов значений параметра:
1) для температуры – [10,0; 25;0) и [25,0; 40,0]
2) для влажности – [60,0; 75;0) и [75,0; 90,0]
3) для давления – [740,0; 760;0) и [760,0; 780,0]
Также по условию задачи в базе не может быть двух записей, в которых
совпадали бы значения хотя бы одного параметра. Следовательно, можно
представить
все
множество
записей
как
совокупность
8-ми
непересекающихся областей:
Тогда количество записей, полученных в ответ на представленные в
условии запросы можно представить как суммы обозначенных выше
областей следующим образом:
1). Температура <= 40,0 and Влажность <= 90,0 and Давление <= 780,0 –
70 записей = A+B+C+D+E+F+G+H.
2). Температура <=40,0 and Влажность < 75,0 and Давление <=780,0 – 30
записей = A+C+E+G.
6
3). Температура <= 40,0 and Влажность <= 90,0 and Давление >=760,0
and Давление <= 780,0 – 40 записей = E+F+G+H.
4). Температура < 25,0 and Влажность >= 75,0 and Влажность <=90,0
and Давление < 760,0 – 8 записей = D.
5). Температура <=40,0 and Влажность < 75,0 and Давление >=760,0 and
Давление <=780,0 – 15 записей = E+G.
Количество записей, получаемых в результате целевого запроса
Температура >= 25,0 and Температура <=40,0 and Влажность >= 75,0 and
Влажность <=90,0 and Давление < 760,0 тогда можно обозначить как B.
A+B+C+D+E+F+G+H=70; A+C+E+G = 30,
следовательно B+D+F+H = 40 = E+F+G+H,
следовательно B+D =E+G = 15,
D = 8, следовательно B = 7.
Ответ: 7 записей.
Решение задачи №2:
Согласно представленной блок-схеме алгоритма, первый элемент
каждой строки заполняемой матрицы будет равен удвоенному квадрату
номера строки (заметим, что нумерация начинается с единицы). Каждый
последующий элемент строки получается вычитанием из предыдущего
числа, равного номеру этой строки. В заполняемой матрице будет 12 строк и
20 столбцов. Рассмотрим первую строку. Её первый элемент будет равен 2.
Соответственно строка будет содержать 3 неотрицательных элемента (2, 1, 0)
и 17 отрицательных элементов (-1, -2, …, -17). Рассуждая аналогично, можно
сделать вывод, что вторая строка будет содержать пять неотрицательных (8,
6, 4, 2, 0) и 15 отрицательных элементов, а третья строка – 7
неотрицательных (18, 15, 12, 9, 6, 3, 0) и 13 отрицательных элементов.
Заметим, что количество отрицательных элементов убывает в зависимости от
возрастания номера строки в порядке арифметической прогрессии с первым
7
членом равным 17 и шагом, равным -2. При этом, начиная с 10 строки,
строки не будут содержать отрицательных элементов. Рассчитав сумму
членов этой арифметической прогрессии, получим, что она равна 81.
Ответ: 81 отрицательное число.
Решение задачи №3:
Составьте самостоятельно программу решения данной задачи.
Ответ: 0.
8
Решение задачи о восьми ферзях
Постановка задачи. Как на шахматной доске расположить восемь ферзей
таким образом, чтобы никакие два из них не угрожали друг другу.
Решение. Рассмотрим шахматную доску, клетки которой помечены с
помощью системы координат следующим образом:
Можно заметить, что два ферзя, которые находятся в клетках с
координатами (x1, y1) и (x2, y2), будут бить друг друга если выполняется
хотя бы одно из следующих равенств:
1). x1 = x2, то есть ферзи находятся на одной вертикали;
2). y1 = y2, то есть ферзи находятся на одной горизонтали;
3). x1+y1 = x2+y2, то есть ферзи находятся на одной диагонали, идущей
снизу вверх слева направо. Это равенство верно только для приведённой
нумерации клеток шахматной доски;
4). x1−y1 = x2−y2, то есть ферзи находятся на одной диагонали, идущей
сверху вниз слева направо. Это равенство также верно только для
приведенной нумерации клеток шахматной доски.
Очевидно, что все восемь ферзей находятся на разных вертикалях
шахматной доски, иначе найдутся два из них, которые бьют друг друга.
Поэтому нам нужно перебрать для каждого ферзя все возможные
горизонтали, где он может встать и проверить, чтобы все ферзи не были под
боем. Заведём массив q, индекс которого соответствует номеру ферзя, а
значение q[i] указывает на какой по счету горизонтали находится i-й ферзь.
9
Поскольку решение предполагает переборный алгоритм, заведем восемь
переменных q1, ... , q8, которые будут пробегать от 1 до 8 и
устанавливать
соответствующего
ферзя
на
выбранную
горизонталь.
Например, если qi = 4, это значит, что i-го ферзя необходимо поставить на 4ю горизонталь.
Зададим функцию boy(c), которая в качестве аргумента будет принимать
номер ферзя и проверять, не бьют ли ферзя с номером c ферзи с 1-го до c − 1го. Эта функция возвращает значение истина в случае если c-го ферзя бьёт
хотя бы один ферзь и ложь в противном случае. Это делается так:
1 function boy( c : integer ) : boolean ;
2 var j : integer ;
3 res : boolean ;
4 begin
5 re s := false ;
6 for j :=1 to c−1 do
7 res := res or ( ( c=j ) or ( q [ c]=q [ j ] ) or
8 (( c+q [ c ])=( j+q [ j ] ) ) or ( ( c−q [ c ])=( j−q [ j ] ) ) ) ;
9 boy:= res ;
10 end ;
Тогда задача решается с помощью следующей программы:
1 program Queens ;
2 var q : array [ 1 . . 8 ] of integer ;
3 i , q1 , q2 , q3 , q4 , q5 , q6 , q7 , q8 , n : integer ;
4 function boy( c : integer ) : boolean ;
5 var j : integer ;
6 res : boolean ;
7 begin
8 re s := false ;
9 for j :=1 to c−1 do
10 res := res or ( ( c=j ) or ( q [ c]=q [ j ] ) or
11 (( c+q [ c ])=( j+q [ j ] ) ) or ( ( c−q [ c ])=( j−q [ j ] ) ) ) ;
12 boy:= res ;
10
13 end ;
14
15 begin
16 n:=1;
17 for i :=1 to 8 do q [ i ]:=1;
18 for q1:=1 to 8 do
19 begin
20 q [ 1 ] : = q1 ;
21 for q2:=1 to 8 do
22 begin
23 q [ 2 ] : = q2 ;
24 i f ( not( boy ( 2 ) ) ) then
25 for q3:=1 to 8 do
26 begin
27 q [ 3 ] : = q3 ;
28 i f ( not( boy ( 3 ) ) ) then
29 for q4:=1 to 8 do
30 begin
31 q [ 4 ] : = q4 ;
32 if ( not( boy ( 4 ) ) ) then
33 for q5:=1 to 8 do
34 begin
35 q [ 5 ] : = q5 ;
36 i f ( not( boy ( 5 ) ) ) then
37 for q6:=1 to 8 do
38 begin
39 q [ 6 ] : = q6 ;
40 i f ( not( boy ( 6 ) ) ) then
41 for q7:=1 to 8 do
42 begin
43 q [ 7 ] : = q7 ;
44 if ( not( boy ( 7 ) ) ) then
45 for q8:=1 to 8 do
46 begin
11
47 q [ 8 ] : = q8 ;
48 i f ( not( boy ( 8 ) ) ) then
49 begin
50 writeln ( ’Solution ’ ,n ) ;
51 for i :=1 to 8 do writeln ( ’(’ , i , ’,’ ,q [ i ] , ’) ’ , boy ( i ) ) ;
52 inc (n ) ;
53 end ;
54 end ;
55 end ;
56 end ;
57 end ;
58 end ;
59 end ;
60 end ;
61 end ;
62 end .
Данная программа находит все 92 возможных решения задачи.
12
Список использованных источников
1 http://olymp.ifmo.ru
13
Download