Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 20.05.2012, 18:13   #1 (permalink)
MAXMUS
Новичок
 
Регистрация: 20.05.2012
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Сортировка в одномерном массиве

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

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

program ryryr;
uses crt;
var
a: array [1..5] of integer;
i,j,e,g:integer;
begin
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 :
end.
MAXMUS вне форума   Ответить с цитированием

Старый 20.05.2012, 18:13
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Схожие топики помогут вам в решении проблемы

В одномерном массиве, состоящем из n вещественных элементов, вычислить
Сортировка в Vista
Поиск двух MAX в одномерном массиве
Сортировка по алфавиту

Старый 20.05.2012, 20:08   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от MAXMUS Посмотреть сообщение
Помогите,пожалуйста, дописать прогу. Задача : в одномерном массиве из 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;
Vladimir_S вне форума   Ответить с цитированием
Старый 20.05.2012, 20:44   #3 (permalink)
MAXMUS
Новичок
 
Регистрация: 20.05.2012
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо, объясните пожалуйста a[0]:=2000000000;
MAXMUS вне форума   Ответить с цитированием
Старый 20.05.2012, 20:52   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от MAXMUS Посмотреть сообщение
Спасибо, объясните пожалуйста a[0]:=2000000000;
При сортировке массива методом вставки удобно добавить спереди (в нулевую позицию) "вспомогательный" элемент - заведомо бОльший (при выстраивании по убыванию, как в Вашем случае) или заведомо меньший (при выстраивании по возрастанию) всех прочих элементов. Тогда программа получается проще и компактнее. Вот я это и применил. В формате Integer таковым (округленно) для нормального Паскаля является 32000, а для этого ущербно-ублюдочного АВС - 2000000000.
Vladimir_S вне форума   Ответить с цитированием
Старый 20.05.2012, 21:44   #5 (permalink)
MAXMUS
Новичок
 
Регистрация: 20.05.2012
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Благодарю за подробную консультацию
MAXMUS вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.