Условие: Реализуйте функцию Ф преобразования вектора А, состоящего из натуральных чисел (без изменения длины вектора), которая определяется следующим образом:
procedure Recurs(var V: Vector; First,Last,Size: Byte); var Element: Word; Center: Byte; CurrentSize: Byte; begin CurrentSize:=Last-First+1; Center:=CurrentSize div 2+1; if CurrentSize>1 then if CurrentSize=2 then begin if V[First]>V[Last] then begin // Замена на возрастание Element:=V[Last]; V[Last]:=V[First]; V[First]:=Element; end; end else begin Recurs(V,First,Last div 2,Size); Recurs(V,Center,Last div 2,Size); end; end;
Вот. Но это все не работает, к сожалению. Я даже не знаю, как правильно написать, чтобы при делении вектора обрабатывалась и левая часть и правая часть.
Алена
10.12.2006 21:39
Rattter, тесты какие-нибудь есть? На массиве <1, 2, 3, 4, 5, 3, 4, 7, 8, 2> что должно выдавать, например?
У меня выдает < 1 2 3 4 3 4 5 7 2 8>
Rattter
11.12.2006 22:01
Например, на векторе 2,1,3,4,6,5,7 должно быть следующее:
procedure Recurs(var V: Vector; First, Last: Byte); var Element: Word; size, Center: Byte; begin size := (last - first + 1); if size = 1 then exit;
Center:= first + (size div 2); if Size <= 2 then begin
if V[First]>V[Last] then begin Element:=V[Last]; V[Last]:=V[First]; V[First]:=Element; end
end else begin Recurs(V,First,center); Recurs(V,Center,Last); end;
end;
var i: integer; begin recurs(a, 1, sz); for i := 1 to sz do write(a[i]:4); writeln; end.
Rattter
12.12.2006 1:33
Спасибо, Алена!!! Не поверишь, но у меня буквально перед прочтением этой страницы родилась-таки идея. Написал почти тоже самое, что и ты. Но всер равно спасибо за участие!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.