Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите исправить код (http://www.tehnari.ru/f41/t83656/)

Student 08.01.2013 14:05

Помогите исправить код
 
Задание: 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 08.01.2013 15:00

Ошибку я уже исправил, но есть другая просьба: можете помочь оформить эту задачку через "функцию": макс. и мин. искать в программе, а менять элементы местами с помощью вызова функции. Помогите, кто может, не умею использовать функции!!

Вот рабочий код:

uses crt;

Const nmax = 100;
Var temp, k, r,p,
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);
p:=0;

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
p:=p+1;
temp:=mas[i];
mas[i]:=mas[i_max-p];
mas[i_max-p]:=temp;
end;
end;


if i_max<i_min then
begin
for i:=i_max+1 to (i_max+(k div 2)) do
begin
p:=p+1;
temp:=mas[i];
mas[i]:=mas[i_min-p];
mas[i_min-p]:=temp;
end;
end;



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

end.


Часовой пояс GMT +4, время: 02:59.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.