• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите исправить код

  • Автор темы Автор темы Student
  • Дата начала Дата начала

Student

Новые
Регистрация
14 Дек 2012
Сообщения
13
Реакции
0
Баллы
0
Помогите исправить код

Задание: 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:=random(v_max-v_min+1)+v_min;
write(mas:4);
end;
WriteLn;

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

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

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

for i:=1 to n do
If (mas<min) Then
Begin
min:=mas;
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;
mas:=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;
mas:=mas[i_min-i+1];{ошибка скорее всего здесь}
mas[i_min-i+1]:=temp;
end;
end;



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

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

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

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:=random(v_max-v_min+1)+v_min;
write(mas:4);
end;
WriteLn;

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

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

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

for i:=1 to n do
If (mas<min) Then
Begin
min:=mas;
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;
mas:=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;
mas:=mas[i_min-p];
mas[i_min-p]:=temp;
end;
end;



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

end.
 
Назад
Сверху