Метод пузырьковой сортировки
Пусть задан массив a из n элементов. Сравниваются пары значений a[i] и a[i+1] в интервале от 1 до n-1: если a[i] > a[i+1], то значения меняются местами. Алгоритм останавливается, когда больше нечего переставлять; в этом случае массив отсортирован. В каждом цикле проверки самый «легкий» элемент оказывается наверху списка. Поэтому на i-том цикле сортировку массива начинают с i-того элемента.
Сортировка методом отбора
При первом проходе ищется минимальное значение массива a, которое затем меняется местами с первым элементом a[1]. Затем поиск продолжается на оставшихся n-1 элементах, ищется второй минимум, который переставляется с элементом a[2] и т.д.
Сортировка методом вставки
На первом шаге выполняется сортировка первых двух элементов массива. Далее алгоритм ставит третий элемент в порядковую позицию, соответствующую его положению относительно первых двух элементов. Затем в этот список вставляется четвертый элемент и т.д. Процесс продолжается до тех пор, пока все элементы не будут отсортированы.
Задания для самостоятельной работы
Разработать программу на Турбо Паскале, которая обеспечивает решение поставленной задачи в соответствии с предложенным вариантом. Первая цифра - номер задания, вторая - номер варианта.
Задачи
1. Разработать программу, для решения поставленной задачи
1.1. В заданном массиве Х(N) замените нулями все отрицательные
компоненты.
1.2. Осуществите циклический сдвиг компонент заданного вектора A(N) влево на одну позицию, то есть получите вектор
А = (a2 , a3 , ..., aN , a1 ).
1.3. В заданном массиве A(N) поменяйте местами наибольший и наименьший элементы.
1.4. В заданном массиве A(N) определите число соседств двух положительных чисел.
1.5. В заданном массиве A(N) определите количество элементов, которые меньше заданного значения.
1.6. В заданном массиве A(N) вместо a1 запишите наибольший элемент массива, а вместо aN — наименьший элемент массива.
1.7. В заданном массиве A(N) определите число соседств двух чисел разного знака.
1.8. Выведите на печать номера элементов заданного массива Y(N), удовлетворяющих условию 0 < yi < 1.
1.9. Осуществите циклический сдвиг компонент заданного вектора A(N) вправо на две позиции, то есть получите вектор A = (aN-1 , aN , a1 , a2 , ... , aN-2 ).
1.10. Подсчитайте число и сумму положительных, число и произведение отрицательных элементов заданного массива A(N).
1.11. В заданном массиве A(N) замените нулями все положительные
компоненты.
1.12. В заданном массиве X(N) определите число соседств двух положительных чисел.
2. Разработать программу, для решения поставленной задачи
2.1. Элементы заданного массива B(N) перепишите в новый массив A(N) в обратном порядке.
2.2. Заданные векторы X(N) и Y(N) преобразуйте по правилу: большее из xi и yi примите в качестве нового значения xi , а меньшее — в качестве нового значения yi .
2.3. Из заданного вектора A(3N) получите вектор B(N), очередная компонента которого равна среднему арифметическому очередной тройки компонент вектора А.
2.4. Вычислите сумму квадратов всех элементов заданного массива X(N), за исключением элементов, кратных пяти.
2.5. Запишите подряд в массив A(N) элементы заданного массива В(2N), стоящие на чётных местах, а элементы, стоящие на нечетных местах, запишите в массив С(N).
2.6. Выведите на печать номера точек, лежащих в круге радиусом R с центром в начале координат. Координаты точек заданы массивами X(N) и Y(N).
2.7. Дан массив A(2N). Постройте массив с элементами, соответственно равными a1 , aN+1 , a2, aN+2 , ... , aN , a2N.
2.8. В заданном массиве A(N) положительные элементы уменьшите вдвое, а отрицательные замените на значения их индексов.
2.9. Из заданных векторов X(N) и Y(N) получите вектор Z(2N ) c элементами (x1 , y1 , x2 , y2 , ..., xN , yN) .
2.10. Дан массив A(2N). Постройте массив с элементами, соответственно равными a2N, a1 , a2N-1 , a2 , ... , aN+1 , aN .
2.11. Заданные векторы X(N) и Y(N) преобразуйте по правилу: большее из xi и yi примите в качестве нового значения xi , а меньшее — в качестве нового значения yi .
2.12. Элементы заданного массива B(N) перепишите в новый массив A(N) в обратном порядке.
3. Разработать программу, для решения поставленной задачи
3.1. В каждой строке заданной матрицы A(N, M) вычислите сумму, количество и среднее арифметическое положительных элементов.
3.2. Дана матрица A(N, M). Найдите количество элементов этой матрицы, больших среднего арифметического всех её элементов.
3.3. В заданной матрице A(N, M) поменяйте местами столбцы с номерами P и Q.
3.4. Даны две целочисленные матрицы A(N, M) и B(N, M). Подсчитайте (в отдельности) количество тех пар (ai j , bi j ) , для которых ai j < bi j.
3.5. Дана матрица A(N, M). Вычислите вектор X(M), где значение Xj равно сумме положительных элементов j-го столбца матрицы A.
3.6. Дана матрица A(N, M). Получите вектор X(M), равный P-й строке матрицы.
3.7. Дана матрица A(N, N). Перепишите элементы её главной диагонали в одномерный массив Y(N).
3.8. Найдите наибольший элемент главной диагонали заданной матрицы A(N, N) и выведите на печать всю строку, в которой он находится.
3.9. Даны две целочисленные матрицы A(N, M) и B(N, M). Подсчитайте (в отдельности) количество тех пар (ai j , bi j ) , для которых ai j > bi j.
3.10. Дана матрица A(N, M). Определите число ненулевых элементов в каждой строке матрицы.
3.11. Дана матрица A(N, M). Вычислите вектор X(M), где значение Xi равно сумме положительных элементов i-ой строки матрицы A.
3.12. В заданной матрице A(N, M) поменяйте местами строки с номерами K и L.
Контрольные вопросы
- Сформулируйте основные правила, использующиеся при оформлении исходного текста программы.
- Сформулируйте правила использующиеся при создании нового идентификатора.
- Опишите способы использования в выражениях встроенных функций Турбо Паскаля.
- Для чего используются структурные скобки begin … end?
- Приведите пример использования полной и сокращённой формы записи условного оператора.
- В каких случаях лучше использовать оператор цикла с параметром, а в каких оператор цикла с предусловием?
- Какое условие проверяется в операторе цикла с постусловием Турбо Паскаля?
- Можно ли в Турбо Паскале описать массив, каждый элемент которого является массивом, записью?
- Для чего используется оператор выбора case?
- Как распределяется приоритет выполнения операций Турбо Паскаля?
- В каких случаях используются массивы?
- Какой оператор цикла лучше использовать при работе с массивами? Почему?
Библиографический список
1. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. Учебное пособие. – 2000 г.
2. Долинский М.С. Алгоритмизация и программирование на Turbo Pascal: от простых до олимпиадных задач: Учебное пособие. – СПб.: Питер, 2005.
3. Зуев Е.А. Turbo Pascal. Практическое программирование – М.: «Издательство ПРИОР», 1999.