Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УПП Программирование 2102,2202.doc
Скачиваний:
17
Добавлен:
20.04.2015
Размер:
760.32 Кб
Скачать

Var I,j,n,m: integer;

X:array [1..10] of integer;

begin

write('n='); readln(n);

for i:=1 to n do x[i]:=i;

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 write(x[i],' ');

end.

Контрольные задания.

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

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

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

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

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

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

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

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

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

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

В любом случае движение прекращается при достижении клетки A(1,1). Результат заполнения массива А показан на рис. 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;