Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Перестановка массива

Автор: Amele 18.05.2007 21:08

Плз, помогите решить задачу. Нужно оч срочно. Я над ней голову уже 2 недели ломаю, никак.
Переставить в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами.



Автор: klem4 18.05.2007 21:10

Как делала то показывай ... Минимальный и максимальный находить умеешь ? Если нет, воспользуйся поиском, решалось много-много раз.

Автор: Amele 18.05.2007 21:19

Вот я её попыталась решить:

Код
program rtt;
var a:array  [1..10] of integer;
i,max,min,k,b,k1,c,v,d:integer;f:char;
begin
for i:= 1 to 10 do begin
readln(a[i]);
end;
max:=a[1]; k:=1;  c:=0; v:=0;
min:=a[1]; k1:=1;
for i:= 1 to 10 do begin
if a[i]<min then begin min:=a[i]; k:=i end;
if a[i]>max then begin max:=a[i]; k1:=i end;
end;
if (k1 mod 2=0) and (k<k1) then c:=k1 div 2
if (k1 mod 2<>0) and (k<k1) then c:=(k1-1) div 2;
If (k mod 2=0) and (k1<k) then v:=k div 2
If (k mod 2<>0) and (k1<k) then  v:=(k-1) div 2;
for i:= k to c do begin
b:=a[k+i]; a[k+i]:=a[k1-i]; a[k1-i]:=b;
end;
for i:= k1 to v do begin
d:=a[k1+i]; a[k1+i]:=a[k-i]; a[k-i]:=d;
end;
for i:= 1 to 10 do begin
write(a[i]:3);
end;
readln(f);
end.

Но почему-то не получается. В чем ошибки-то?

Автор: klem4 18.05.2007 21:49

uses crt;
const
n = 10;

var
x: Array [1..n] of Integer;
i, nMin, nMax, T: Integer;

begin
clrscr;

for i := 1 to n do begin
write('x[', i, '] = '); readln(x[i]);
end;

nMin := 1; nMax := 1;

for i := 2 to n do begin
if x[i] > x[nMax] then nMax := i;
if x[i] < x[nMin] then nMin := i;
end;

if nMax < nMin then begin
T := nMin; nMin := nMax; nMax := T;
end;

clrscr;

for i := 1 to n do write(x[i]:4);

inc(nMin); dec(nMax);


for i := nMin to nMin + (nMax - nMin) div 2 do begin
T := x[i];
x[i] := x[nMax - i + nMin];
x[nMax - i + nMin] := T;
end;

writeln;
for i := 1 to n do write(x[i]:4);

readln;
end.

Автор: Amele 18.05.2007 22:14

Огромное спасибо.

Автор: Tan 18.05.2007 23:47

Amele, но решение klem4 верно только если вам надо найти первый интервал на векторе. То есть код ищет первый Мах Мin или Min Max интервал и меняет порядок в нём, но если вам надо чтобы на всех возможных интервалах удовлетворяющих условию задания порядок менялся, надо доделывать. То есть вариант 1 2 3 10 4 5 6 7 8 1 выдаст 1 3 2 10 4 5 6 7 8 1, хотя по идее ответ 1 3 2 10 8 7 6 5 4 1 будет правильнее. Вообще если лексически рассмотреть вопрос, то фраза

Цитата
между минимальным и максимальным элементами.
подразумевает, что интервалов может быть больше 1, если бы речь шла об одном то по - идее было бы написано так :
Цитата
между минимальным и максимальным элементом
Возможно я перемудрил.