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

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

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

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

Сортировка в одномерном массиве

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

MAXMUS

Ученик
Регистрация
20 Май 2012
Сообщения
5
Реакции
0
Баллы
0
Сортировка в одномерном массиве

Помогите,пожалуйста, дописать прогу. Задача : в одномерном массиве из

n элементов методом вставки отсортировать по убыванию только те элементы, которые стоят на четных позициях . Например было 742918 стало---792814

program ryryr;
uses crt;
var
a: array [1..5] of integer;
i,j,e,g:integer;
begin:tehnari_ru_837:
for i:=1 to 5 do
begin
write('a[',i,']=');
readln(a);
end;
for i:=2 to 5 do

begin
e:=a;
j:=1;

while e<a[j] do
inc(j);
for g:=i-1 downto j do
a[g+1]:=a[g];
a[j]:=e;
end;
for i:=1 to 5 do

write(a,' ');:tehnari_ru_942::tehnari_ru_942::tehnari_ru_942::tehnari_ru_942::tehnari_ru_942:
end.
 
Помогите,пожалуйста, дописать прогу. Задача : в одномерном массиве из n элементов методом вставки отсортировать по убыванию только те элементы, которые стоят на четных позициях . Например было 742918 стало---792814
Держите:
Код:
var
 a:array[0..255] of integer;
 N,i,j:byte;
 e:integer;

begin
 write('N= ');
 readln(N);

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

 a[0]:=32000;

 for i:=1 to N do write(a[i]:8);
 writeln;
 writeln;

 for j:=1 to (N div 2) do
  begin
   i:=2*j;
   while a[i]>a[i-2] do
    begin
     e:=a[i];
     a[i]:=a[i-2];
     a[i-2]:=e;
     dec(i,2);
    end;
  end;

 for i:=1 to N do write(a[i]:8);

 readln
end.
И на будущее: модуль CRT следует присоединять, только если Вы используете его команды, а Вашей программе таковые не обнаруживаются. Значит, нечего и утяжелять им программу.
P.S. Ах вот что - выясняется, что речь о Паскале ABC. Об сразу про это написать - и речи нет, ручонки отвалятся. Ладно, тогда замените
a[0]:=32000;
на
a[0]:=2000000000;
 
Спасибо, объясните пожалуйста a[0]:=2000000000;
 
Спасибо, объясните пожалуйста a[0]:=2000000000;
При сортировке массива методом вставки удобно добавить спереди (в нулевую позицию) "вспомогательный" элемент - заведомо бОльший (при выстраивании по убыванию, как в Вашем случае) или заведомо меньший (при выстраивании по возрастанию) всех прочих элементов. Тогда программа получается проще и компактнее. Вот я это и применил. В формате Integer таковым (округленно) для нормального Паскаля является 32000, а для этого ущербно-ублюдочного АВС - 2000000000.
 
Благодарю за подробную консультацию
 
Назад
Сверху