Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль (прогр) 2008июль.doc
Скачиваний:
1
Добавлен:
17.11.2018
Размер:
900.61 Кб
Скачать

Var I,j,m,n: integer; X:array [1..10] of integer;

begin

readln(n); {ввод размерности X}

for i:=1 to n do readln(x[i]); {ввод X}

for i:=1 to n-1 do {сортировка}

for j:=i+1 to n do if x[i]<x[j] then begin m:=x[i]; x[i]:=x[j]; x[j]:=m end;

for i:=1 to n do writeln(x[i]); {вывод X}

end.

Задания для самостоятельного решения

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

6.9. Сортировка обменом. Метод заключается в анализе соседних элементов массива. Если х[i]<x[i+1] элементы меняются местами. По достижении конца массива в нижней клетке окажется самое маленькое значение. Затем процесс повторяется, но уже без последнего элемента и т.д. Такой просмотр вектора нужно выполнить N раз. Однако его можно сократить, если зафиксировать факт прекращения обменов.

6.10. Пусть имеется таблица работников цеха со столбцами: Имя, Бригада, Отработано дней, Зарплата. Отсортировать любым методом таблицу по возрастанию значений столбца “Отработано дней”.

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

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

6.13. Поиск в отсортированном массиве. Очевидно, что найти нужное значение X в некотором массиве можно сплошным перебором данных. Однако в худшем случае (если искомое значение находится внизу или его нет вовсе) нам придется просмотреть все элементы массива. Если массив отсортирован, имеется гораздо более быстрый алгоритм поиска, называемый бинарным. Массив делится пополам и X сравнивается со средним элементом. Если X оказался больше, пополам делится нижняя часть, если нет – верхняя и поиск ведется там т.д. Напишите программу поиска.

Пример 6-4. Заполнить двумерный массив A(N,N) элементами натурального ряда (т.е. числами 1,2,3, и т.д.), начиная с нижнего правого угла в направлении, показанном пунктиром на рис. 6.4а. Чтобы выявить необходимые законы перемещения по матрице, в ее клетках показаны индексы элементов. Заметим, что в зависимости от того, с какой стороны матрицы мы находимся, нам необходимо совершать следующие движения:

1). если у правой стороны матрицы, то вверх на одну клетку и вниз-влево по диагонали до нижней границы;

2). если у нижней границы, то влево на одну клетку и вверх-вправо по диагонали до правой границы;

3). у верхней границы – влево на одну клетку и вниз-влево до левой границы;

4). у левой границы – вверх на одну клетку и вверх-вправо до правой границы.

В любом случае движение прекращается при достижении клетки A(1,1). Результат заполнения массива A на рис. 6.4б.

Программа приведена ниже. Здесь ST – номер текущей строки (первоначально N, поскольку движение начинается с последней ячейки массива A(N,N)), KL – номер текущей колонки (первоначально N), K – растущее значение натурального ряда (первоначально 1). Самый внешний цикл (while k<n*n) ограничивает все действия достижением растущим значением натурального ряда K значения N*N, поскольку именно столько клеток имеется в квадратной матрице размерности N. Внутри цикла организованы четыре разные группы операций в зависимости от того, какое из четырех типовых элементарных действий (см. выше) выполняется. Определяет тип действия оператор if/else if, в котором выясняется, где именно вы находитесь. Внутри каждого IF организован цикл while, в котором осуществляются необходимые перемещения в матрице в соответствии с одним из четырех алгоритмов. По завершении всех действий, т.е. после достижения последней клетки (в нашем случае A(1,1)), выполняется последовательная печать строк матрицы A с заполненными клетками.

program P6-4;

uses crt;