Показать сообщение отдельно
Старый 08.01.2013, 14:05   #1 (permalink)
Student
Member
 
Регистрация: 14.12.2012
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите исправить код

Задание: 1) в векторе найти макс. и мин. элементы.
2) элементы между макс. и мин. элементами поменять местами (первый с последним, 2ой с предпоследним и т.д.) - так называемый "поплавок". Например:
входной вектор: 123456789
мин.=1 макс.=9
выходной вектор: 187654329

помогите со вторым заданием, пожалуйста - не всегда правильно выводит
очень нужна помощь - задание нужно сделать до завтра
Вот код:

uses crt;

Const nmax = 100;
Var temp, k, r,
v_min, v_max,
max, min,
i_max,i_min,
i, j, n: Integer;
mas : Array [1..nmax] Of Integer;

Begin

write('Vhodnye dannye dly n=');
readln(n);
Write('v_min= ');
ReadLn(v_min);
Write('v_max= ');
ReadLn(v_max);
WriteLn;

WriteLn('Ishodny vector:');
randomize;
for i:=1 to n do
begin
mas[i]:=random(v_max-v_min+1)+v_min;
write(mas[i]:4);
end;
WriteLn;

max:=mas[1];
i_max:=1;

For i:=1 To n Do
If (mas[i]>max) Then
Begin
max:=mas[i];
i_max:=i;
End;

min:=mas[1];
i_min:=1;

for i:=1 to n do
If (mas[i]<min) Then
Begin
min:=mas[i];
i_min:=i;
End;


writeln;
WriteLn('Max chislo=',max, ' index:',i_max);
WriteLn('Min chislo=',min, ' index:',i_min);
WriteLn;

r:=i_min-i_max;
k:=abs(r);

write('длина между max и min=',k);
writeln;


if i_max>i_min then
begin
for i:=i_min+1 to (i_min+(k div 2)) do
begin
temp:=mas[i];
mas[i]:=mas[i_max-i+1];{ошибка скорее всего здесь}
mas[i_max-i+1]:=temp;
end;
end;


if i_max<i_min then
begin
for i:=i_max+1 to (i_max+(k div 2)) do
begin
temp:=mas[i];
mas[i]:=mas[i_min-i+1];{ошибка скорее всего здесь}
mas[i_min-i+1]:=temp;
end;
end;



For i:=1 to n do
write(mas[i]:4);
writeln;
readln;

end.
Student вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070