Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2008, 19:35   #1
~AngelOK~
 
Регистрация: 20.10.2008
Сообщений: 8
По умолчанию Сортировка неполбного массива.

Подскажите, пожалуйста, как отсортировать массив между максимальным и минимальным элементами. вернее, я уже почти всю программу написала, но надо как-то вывести новый массив. выложу тут программу, может что неправильно.

Program maxmin;
Var A:array[1..100] of integer;
B:array[1..100] of integer;
Var N,i,max,min,maxi,mini,j,P,C:integer ;
Begin
Writeln('Skolko elementov v massive?');
Readln(N);
for i:=1 to N do
begin
Writeln ('Vvedi element');
Readln(A[i]);
end;
for i:=1 to N do
Writeln('A[',i,']=',A[i]);
max:=A[1];
min:=A[1];
for i:=1 to N do
begin
if A[i]>max then max:=A[i];
maxi:=i;
end;
for i:=1 to N do begin
if A[i]<min then min:=A[i];
mini:=i;
end;
Writeln('max=',max);
Writeln('min=',min);
C:=ABS(maxi-mini);
for j:=1 to C do
for i:=1 to C-j do
if A[i]>A[i+1] then begin
P:=A[i];
A[i]:=A[i+1];
A[i+1]:=P;
end;

вот до этого момента я дописала, подскажите, пожалуйста, что дальше.
Не смотрите на мою дату рождения))Мне меньше на два года))
~AngelOK~ вне форума Ответить с цитированием
Старый 27.11.2008, 19:48   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

предполагаем что max левее чем min(индекс max больше индекса min)

Код:
for i:=max+1 to min do
    for j:=min downto i do
      if a[j-1]>a[j] then
        begin
          Temp:=a[j-1];
          a[j-1]:=a[j];
          a[j]:=temp;
        end;
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 27.11.2008, 19:51   #3
~AngelOK~
 
Регистрация: 20.10.2008
Сообщений: 8
По умолчанию

Я уже отсортировала вроде, надо как-то вывести новый массив. Вот только как?
Не смотрите на мою дату рождения))Мне меньше на два года))
~AngelOK~ вне форума Ответить с цитированием
Старый 27.11.2008, 19:54   #4
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

А что за новый массив?
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 27.11.2008, 19:59   #5
~AngelOK~
 
Регистрация: 20.10.2008
Сообщений: 8
По умолчанию

Ну, тот же массив, только с отсортированными между максимумом и минимумом элементами.
Не смотрите на мою дату рождения))Мне меньше на два года))
~AngelOK~ вне форума Ответить с цитированием
Старый 27.11.2008, 20:03   #6
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Нужно искать не только max и min но и и их индексы

for i:=[индекс мах]+1 to [индекс min]-1

Код:
max:=a[1];min:=a[1];x:=1;y:=1;
for i:=2 to n do
  if a[i]>max then begin
                    max:=a[i];
                    x:=i;
                   end
     else if a[i]<min then begin
                            min:=a[i];
                            y:=i;
                           end;
if y>x then begin
            max:=x;
            x:=y;
            y:=max;
            end;
 for i:=x+1 to y-1 do
   write(a[i], ' ');
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 27.11.2008, 20:14   #7
~AngelOK~
 
Регистрация: 20.10.2008
Сообщений: 8
По умолчанию

Индексы у меня уже найдены.
В новом массиве элементов должно быть столько же, сколько и в старом, те элементы которые не попадают в область между максимумом и минимумом тоже должны выводиться. то есть
если старый массив: A={ -9;4;2;1;8;3} , минимум тут -9, максимум 8,
то новый должен быть B={-9; 1;2;4;8;3}
Не смотрите на мою дату рождения))Мне меньше на два года))
~AngelOK~ вне форума Ответить с цитированием
Старый 28.11.2008, 11:17   #8
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Так в чем проблема? Отсортировать элементы между max и min а потом их вывести?

Код:
uses crt;
const n=10;
var a,b:array[1..n] of integer;
    max,min,i,j,temp:integer;

begin
clrscr;
randomize;
for i:=1 to n do
 begin
  a[i]:=random(100);
  write(a[i],' ');
 end;
writeln;
max:=1;min:=1;
for i:=2 to n do
 if a[i]>a[max] then max:=i
    else if a[min]>a[i] then min:=i;
if max>min  then begin
                 i:=max;
                 max:=min;
                 min:=i;
                 end;
for i:=max+2 to min-1 do
    for j:=min-1 downto i do
      if a[j-1]>a[j] then
        begin
          Temp:=a[j-1];
          a[j-1]:=a[j];
          a[j]:=temp;
        end;
for i:=1 to n do
 begin
  b[i]:=a[i];
  write(b[i],' ');
 end;
end.
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 28.11.2008 в 14:57.
alex_fcsm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива ManU Помощь студентам 1 21.09.2008 10:41
Сортировка массива Kraven Общие вопросы Delphi 3 25.06.2008 18:22
Сортировка массива...? Roberto Помощь студентам 2 11.04.2008 13:32
Сортировка массива vitalik007 Общие вопросы Delphi 2 22.09.2007 20:04
Сортировка массива MuRdErDoLL Помощь студентам 2 20.12.2006 00:58