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

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

MAXMUS 20.05.2012 18:13

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

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[i]);
end;
for i:=2 to 5 do

begin
e:=a[i];
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[i],' ');:tehnari_ru_942::tehnari_ru_942::tehnari_ru_942 ::tehnari_ru_942::tehnari_ru_942:
end.

Vladimir_S 20.05.2012 20:08

Цитата:

Сообщение от MAXMUS (Сообщение 735308)
Помогите,пожалуйста, дописать прогу. Задача : в одномерном массиве из 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;

MAXMUS 20.05.2012 20:44

Спасибо, объясните пожалуйста a[0]:=2000000000;

Vladimir_S 20.05.2012 20:52

Цитата:

Сообщение от MAXMUS (Сообщение 735386)
Спасибо, объясните пожалуйста a[0]:=2000000000;

При сортировке массива методом вставки удобно добавить спереди (в нулевую позицию) "вспомогательный" элемент - заведомо бОльший (при выстраивании по убыванию, как в Вашем случае) или заведомо меньший (при выстраивании по возрастанию) всех прочих элементов. Тогда программа получается проще и компактнее. Вот я это и применил. В формате Integer таковым (округленно) для нормального Паскаля является 32000, а для этого ущербно-ублюдочного АВС - 2000000000.

MAXMUS 20.05.2012 21:44

Благодарю за подробную консультацию


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

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