- •введение
- •1. правила оформления документов
- •2. работа с текстом документа
- •2.1. Создание шаблона
- •2.2. Создание документа на основе шаблона
- •2.3. Создание макросов
- •3. задание на практику
- •4. Введение в базы данных
- •5. Общие требования к выполнению и оформлению лабораторных работ
- •6. Знакомство с системой Access
- •7. Создание таблиц базы данных
- •7.1. Проектирование базы данных
- •7.3. Создание и изменение таблиц средствами языка SQL
- •7.3.1. Управляющие запросы и запросы на изменение таблиц
- •7.3.2. Управляющий запрос на создание таблицы
- •7.3.3. Запрос на создание таблицы из других таблиц
- •7.3.4. Запрос на добавление
- •7.3.5. Запрос на удаление
- •7.3.6. Запрос на обновление
- •Контрольные вопросы
- •8. Проектирование запросов
- •8.1. Конструктор запросов
- •8.2. Вычисления в запросе
- •8.3. Параметрические запросы
- •Контрольные вопросы
- •9. Создание запросов на выборку с помощью языка SQL
- •9.1. Структура запроса. Условия поиска
- •9.2. Параметрические запросы
- •9.3. Перекрестные запросы
- •9.4. Поиск в связанных таблицах
- •9.5. Запросы на объединение
- •Контрольные вопросы
- •10. Создание форм
- •11. Разработка отчетов
- •11.1. Работа с простейшими отчетами
- •ТЕМЫ ЗАДАНИЙ НА ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ «КАФЕДРА»
- •Программирование на языках высокого уровня (pascal)
- •12. типы данных и структуры программм
- •Тип данных Integer
- •Действия с целыми числами
- •Операции над целыми числами
- •Тип данных Real
- •Действия с действительными числами
- •Стандартные функции и операции
- •Программы с линейной структурой
- •Условный оператор. Оператор многозначного ветвления
- •Оператор выбора CASE
- •Примеры решений задач
- •Операторы повтора
- •Примеры решений задач
- •Список задач раздела 12
- •13. массивы
- •Одномерные массивы
- •Пример решения задачи
- •Сортировка одномерных массивов
- •Двумерные массивы
- •Список задач раздела 13
- •14. Функции и процедуры
- •Процедуры
- •Функции
- •Примеры решений задач
- •Рекурсия
- •Список задач раздела 14
- •содержание
Рассмотрим массив целых или действительных чисел А1,
..., Аn. Пусть требуется переставить элементы этого массива так, чтобы после перестановки они были упорядочены по не убыванию А1<=A2<=...<=An. Эта задача называется задачей сортировки или упорядочения массива. Для решения этой задачи можно воспользоваться следующими алгоритмами:
I. Сортировка выбором
Найти элемент массива, имеющий наибольшее значение, переставить его с первым элементом, затем проделать то же самое, начав со второго элемента и т.д.
II. Сортировка обменами (метод пузырька)
Последовательным просмотром чисел А1, ..., Аn найти наименьшее i такое, что А(i)>A(i+1). Поменять местами A(i) и A(i+1), возобновить просмотр с элемента A(i+1) и т.д. Тем самым наибольшее число передвинется на последнее место. Следующие просмотры начинать опять сначала, уменьшая на единицу количество просматриваемых элементов. Массив будет упорядочен после просмотра, в котором участвовали только первый и второй элементы.
III. Сортировка простыми вставками
Просматривать последовательно A2, ..., An и каждый новый элемент Ai вставлять на подходящее место в уже упорядоченную совокупность A(1)...A(i-1). Это место определяется последовательным сравнением Ai с упорядоченными элементами A(1), ..., A(i-1).
Двумерные массивы
Двумерные массивы являются аналогами матриц. Первый индекс элемента двумерного массива определяет номер строки, а второй – номер столбца, на пересечении, которых расположен элемент. Строки и столбцы нумеруются либо от единого заранее установленного минимального значения индекса, либо от граничного значения, заданного одновременно с объявлением массива.
81
Для задания значений двухмерного массива можно воспользоваться процедурой с использованием генератора случайных чисел.
Например:
Program Array_Full;
Const n=10;
Type mas = array [1..n, 1..n] of Integer; Var m:mas;
Procedure Enter (Var tabl: mas); Var i, j: Integer;
Begin
For i:= 1 to n do For j:= 1 to n do
tabl[i,j]:=Random(10);
End;
Begin
Randomize;
Enter (m);
End.
С помощью процедуры Enter осуществляется ввод двумерного массива размерностью 10 10 случайными числами из диапазона от 0 до 10. Задание диапазона значений определяется константой n=10.
Описание двухмерного массива производится следующим образом:
Const
n=<ранг матрицы>;
Type
matr=array [1..n,1..n] of <тип элементов матрицы>;
Var
<имя матрицы>: matr;
82
Список задач раздела 13
2.1.Ввести массив из M x N элементов. Сформировать новый массив, повернув исходный на 90 градусов против часовой стрелки.
2.2.Последовательность (массив) a с элементами из множества {0,1}. Проводятся следующие действия. Если a имеет вид 1,0,1,… , то она укорачивается на первые три элемента. В противном случае начальный элемент последовательности переносится в её конец. Указанные действия повторяются до тех пор, пока имеется возможность укоротить текущую последовательность.
2.3. Прямоугольное поле m на n разбито на mn квадратных клеток. Некоторые клетки покрашены в черный цвет. Известно, что все черные клетки могут быть разбиты на несколько непересекающихся и не имеющих общих вершин черных прямоугольников. Считая, что цвета клеток даны в виде массива типа array [1..m] of array [1..n] of boolean;
подсчитать число черных прямоугольников, о которых шла речь. Число действий должно быть порядка m*n.
2.4.Дан массив x: array [1..n] of integer. Найти количество различных чисел среди элементов этого массива. (Число действий должно быть порядка n*n.)
2.5.Дан массив x: array [1..n] of integer. Найти количество различных чисел среди элементов этого массива, если известно, что все элементы массива - числа от 1 до k и число действий должно быть порядка n+k.
2.6.Дан массив x [1]..x[n] целых чисел. Не используя других массивов, переставить элементы массива в обратном порядке.
2.7. Дан массив целых чисел x[1]..x[m+n], рассматриваемый как соединение двух его отрезков: начала x[1]..x[m] длины m и конца x[m+1]..x[m+n] длины n. Не используя дополнительных массивов, переставить начало и конец. (Число действий порядка m+n.)
83
2.8.Коэффициенты многочлена хранятся в массиве a: array [0..n] of integer (n - натуральное число, степень многочлена).
Вычислить значение этого многочлена в точке x (т. е. a[n]*(x в степени n)+...+a[1]*x+a[0]).
2.9.Дан массив x: array [1..n, 1..n] of integer. Произвести перестановку строк массива таким образом, чтобы в первой
строке был наименьший элемент массива, во второй наименьший из оставшихся и т.д..
2.10.В массивах a:array [0..k] of integer и b: array [0..l] of integer хранятся коэффициенты двух многочленов степеней k и l. Поместить в массив c: array [0..m] of integer коэффициенты их произведения. (Числа k, l, m - натуральные, m = k + l; элемент массива с индексом i содержит коэффициент при x в степени i.)
2.11.В неупорядоченном массиве целых чисел (как положительных, так и отрицательных) найти сегмент с максимальной суммой элементов.
1.2.12. Даны два возрастающих массива x: array [1..k] of integer и y: array [1..l] of integer. Найти количество общих элементов в этих массивах (т. е. количество тех целых t, для которых t = x[i] = y[j] для некоторых i и j). (Число действий порядка k+l.)
2.13.Массив длины N в случайном порядке заполнен целыми числами из диапазона от 0 до N. Каждое число встречается в массиве не более одного раза. Найти отсутствующее число (дырку). Использование дополнительной памяти, пропорциональной длине массива, не допускается.
2.14.Даны два неубывающих массива x: array [1..k] of integer и y: array [1..l] of integer. Найти число различных элементов среди x[1],...,x[k], y[1],...,y[l]. (Число действий порядка k+l.)
2.15.Даны два массива x[1] <= ... <= x[k] и y[1] <= ... <= y[l]. "Соединить" их в массив z[1] <= ... <= z[m] (m = k+l; каждый элемент должен входить в массив z столько раз, сколько раз он входит в общей сложности в массивы x и y). Число действий порядка m.
2.16.Даны два массива x[1] <= ... <= x[k] и y[1] <= ... <= y[l].
Найти их "пересечение", т.е. массив z[1] <= ... <= z[m], содержащий их общие элементы, причем кратность каждого
84
элемента в массиве z равняется минимуму из его кратностей в массивах x и y. Число действий порядка k+l.
2.17.Даны два массива x[1]<=...<=x[k] и y[1]<=...<=y[l] и
число q. Найти сумму вида x[i]+y[j], наиболее близкую к числу q. (Число действий порядка k+l, дополнительная память - фиксированное число целых переменных, сами массивы менять не разрешается.).
2.18.Некоторое число содержится в каждом из трех целочисленных неубывающих массивов x[1] <= ... <= x[p], y[1] <=
... <= y[q], z[1] <= ... <= z[r]. Найти одно из таких чисел. Число действий должно быть порядка p + q + r.
2.19.Дана матрица размера М х N. В каждом ее столбце найти количество элементов, больших среднего арифметического всех элементов этого столбца.
2.20.Дана матрица размера M × N. Упорядочить ее столбцы так, чтобы их максимальные элементы образовывали возрастающую последовательность.
2.21.Дана матрица размера M × N. Элемент матрицы называется ее локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При решении допускается использовать вспомогательную матрицу.
2.22.Дана матрица размера M × N. Найти максимальный среди элементов тех столбцов, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные столбцы в матрице отсутствуют, то вывести 0.
2.23.Дан неубывающий массив положительных целых чисел a[1] <= a[2] <=...<= a[n]. Найти наименьшее целое положительное число (не равное 1), не представимое в виде суммы нескольких элементов этого массива (каждый элемент массива может быть использован не более одного раза). Число действий порядка n.
2.24.Даны действительные числа А1, ..., Аn, Р, натуральное число k (A1<=...<=An, k<=n). Удалить из А1, ..., Аn элемент с номером k (т.е. Ak) и вставить элемент. равный Р, так, чтобы не нарушилась упорядоченность .
85
2.25.В целочисленном массиве a[1]..a[n] хранится перестановка чисел 1..n (каждое из чисел встречается по одному разу). Не используя других массивов, заменить перестановку на обратную (если до работы программы a[i]=j, то после должно быть a[j]=i).
2.26.Дана матрица размера М х N. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке.
2.27.Дана матрица размера M × N. Упорядочить ее строки так, чтобы их первые элементы образовывали возрастающую последовательность.
2.28.Дан массив a[1]..a[n] и число m<=n. Для каждой группы из m стоящих рядом членов (таких групп, очевидно, n-m+1) вычислить ее сумму. Общее число действий должно быть порядка n.
2.29.Дана квадратная таблица a[1..n][1..n] и число m<=n.
Для каждого квадрата размера m на m в этой таблице вычислить сумму стоящих в нем чисел. Общее число действий должно быть порядка n*n.
2.30.Ввести числовую квадратную матрицу N x N элементов. Найти суммы элементов на периметрах всех вложенных квадратных подматриц, центр которых совпадает с центром исходной матрицы.
2.31.Дана целочисленная матрица размера M × N, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы.
2.32.Дана целочисленная матрица размера M × N. Найти номер последнего из ее столбцов, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких столбцов нет, то вывести 0.
2.33.Дана целочисленная матрица размера M × N. Найти количество ее столбцов, все элементы которых различны.
2.34. Дана матрица размерам х N. Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы (при этом поменяются местами строки с номерами 1 и М, 2 и М - 1 и
т. д.).
86