01.06.2008, 15:00
общий
это ответ
<i>Здравствуйте, <b>Щербаков Евгений Николаевич</b>!</i>
Пример находится в приложении. От пользователя требуется только ввести n (не должна превышать константы MASS_SIZE, объявленной выше), массив заполняется самостоятельно.
Обмен элементов массива производится без дополнительных переменных, с использованием функции XOR (Исключающее-ИЛИ).
<em>Удачи!</em>
Приложение:
program q138909;
uses
Crt;
const
{Размерность массива}
MASS_SIZE = 20;
type
Mass = array[1..MASS_SIZE] of Integer;
{Процедура сортировки обменом}
procedure sortExchange(var aMass: Mass; const n: Integer);
var
i, m: Integer;
fin: Boolean;
begin
for m:= 1 to n-1 do
begin
fin:= True;
for i:= n-1 downto m do
if (aMass[i] > aMass[i+1]) then
begin
fin:= False;
{Обмен элементов массива}
aMass[i]:= aMass[i] xor aMass[i+1];
aMass[i+1]:= aMass[i] xor aMass[i+1];
aMass[i]:= aMass[i] xor aMass[i+1];
end;
{Если ничего не переместили, значит сортировка закончена}
if fin then
Exit;
end;
end;
var
D: Mass;
i, n: Integer;
begin
{Очистка экрана}
ClrScr;
repeat
write(‘n = ‘); readln(n);
until ((n > 0) and (n < MASS_SIZE));
{Инициализация}
Randomize;
{Заполнение массива случайными числами}
for i:= 1 to n do
begin
{ Диапазон -250..250 }
D[i]:= Random(501) - 250;
{Сразу выводим массив}
write(D[i]:4, ‘ ‘);
end;
writeln;
{Сортировка}
writeln;
writeln(‘Sorted:‘);
sortExchange(D, n);
{Выводим результат}
for i:= 1 to n do
write(D[i]:4, ‘ ‘);
writeln;
{Ожидание нажатия пользователем любой кнопки}
WriteLn;
WriteLn(‘Press any key...‘);
ReadLn;
end.