Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Степан / Информатика / Паскаль (Яньков).doc
Скачиваний:
70
Добавлен:
20.04.2015
Размер:
660.99 Кб
Скачать

Задача 6-3. В вектореXрасположить элементы в порядке убывания их зна­че­ний.Алгоритм реализуется при помощи д

program P6_3;

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.

вух вложенных циклов. В наружном цикле последовательно перебираются числаx(i) массива и во внутреннем сравниваются со всеми оставшимися числамиx(j) справа от данного. Если выясняется, что какое-то изx(i) меньше сравниваемого, они меняются местами – большее число становится на место меньшего. В программе для наглядности в качестве элементов массива взяты их номера i. Если вектор имеет длину четыре (N=4), будет выполнена следующая последовательность перестановок чисел: 1,2,3,4:

при i=1 – 2,1,3,4; 3,1,2,4; 4,1,2,3; приi=2 – 4,2,1,3; 4,3,1,2; приi=3 – 4,3,2,1.

Здесь для обмена значений элементов x[i]↔x[j]вводится специальная “транзитная” переменная М для временного хранения данных. Действительно, если использовать только операторыx[i]:=x[j]; x[j]:=x[i]мы получим неверный результат. Хотя х[i] и примет значение х[j], операторx[j]:=x[i] ничего не изменит, ведь х[i] теперь равен х[j]. С тем, чтобы не потерять исходное значение х[i], оно запоминается в переменной М.

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

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

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

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

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

Задача 6-4. Заполнить двумерный массивA(N,N) элементами натурального ряда (т.е. числами 1,2,3, и т.д.), начиная с нижнего правого угла в направлении, показанном пунктиром на рис. 6-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;