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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 22:51   #1
Juniorshka
 
Регистрация: 12.12.2013
Сообщений: 6
По умолчанию Упорядочьте элементы столбцов массива по убыванию модулей элементов (Pascal)

Упорядочьте элементы столбцов массива по убыванию модулей элементов методом двоичного дерева.
Juniorshka вне форума Ответить с цитированием
Старый 17.12.2013, 23:01   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

http://wiki.sources.ru/doku.php?id=pascal:sorting:start
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 17.12.2013, 23:21   #3
Meloiso
Новичок
Джуниор
 
Регистрация: 17.12.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
Там же только подпрограмма?
Meloiso вне форума Ответить с цитированием
Старый 17.12.2013, 23:24   #4
Juniorshka
 
Регистрация: 12.12.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Meloiso Посмотреть сообщение
Там же только подпрограмма?
Да,я все ни как не могу их объединить
Juniorshka вне форума Ответить с цитированием
Старый 17.12.2013, 23:25   #5
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

1. Берете столбец матрицы, кидаете его в одномерный массив.
2. Сортируете методом (процедура сортировки по ссылке есть)
3. Кидаете одномерный массив обратно в столбец
И так для всех столбцов матрицы
Я бы так и сделал, имея готовую процедуру сортировки.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 18.12.2013, 17:56   #6
Juniorshka
 
Регистрация: 12.12.2013
Сообщений: 6
По умолчанию

Помогите пожалуйста ее сделать,так и не получилось привести в ее рабочей вид
только сильнее запуталась.
Juniorshka вне форума Ответить с цитированием
Старый 18.12.2013, 18:01   #7
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Так вы покажите вашу попытку, поможем, подправим.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 18.12.2013, 18:29   #8
Juniorshka
 
Регистрация: 12.12.2013
Сообщений: 6
По умолчанию

Сохранился только такой вариант...
Цитата:
uses crt;
const n=5;
type mass=array[1..n,1..n] of integer;
procedure init (var a:mass);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
a[i,j]:=-50+random(101);
end;
procedure print (a:mass);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
end;
procedure sort(var a:mass;k:integer);
procedure HeapSort(var Arr : array of Real; N : Integer);
var
I,J,K,T : Integer;
Tmp : Real;
begin
i:=2;
repeat
t:=i;
while t<>1 do
begin
k:=t div 2;
if Arr[k-1]>=Arr[t-1] then t:=1
else
begin
Tmp:=Arr[k-1];
Arr[k-1]:=Arr[t-1];
Arr[t-1]:=Tmp;
t:=k;
end;
end;
inc(i)
until not(i<=n);
i:=n-1;
repeat
Tmp:=Arr[i];
Arr[i]:=Arr[0];
Arr[0]:=Tmp;
t:=1;
while t<>0 do
begin
k:=2*t;
if k>i then t:=0
else
begin
if k<i then
if Arr[k]>Arr[k-1] then inc(k);
if Arr[t-1]>=Arr[k-1] then t:=0
else
begin
Tmp:=Arr[k-1];
Arr[k-1]:=Arr[t-1];
Arr[t-1]:=Tmp;
t:=k;
end;
end;
end;
dec(i)
until not(i>=1);
end;
end;
while r>1 do
begin
x:=a[1,k];
a[1,k]:=a[r,k];
a[r,k]:=x;
dec(r);
sift(1,r)
end;
end;
var m:mass;
j:integer;
begin
init(m);
writeln('Исходная мат');
print(m);
for j:=1 to n do
sort(m,j);
writeln('Сортировка');
print(m);
readln;
Juniorshka вне форума Ответить с цитированием
Старый 18.12.2013, 19:11   #9
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Вам остается только подправить порядок сортировки. И не забыть, что "модулей элементов".
Код:

const
  n=5;
type
  vector=array [0..n-1] of real;
var
  a : array [0..n-1,0..n-1] of real;
  r : vector;
  x : real;
  i,j : integer;

(*******************************************************
Процедура для сортировки массива.
Принимает:
    *массив значений a с индексами элементов от 0 до N-1
    *число элементов N
*******************************************************)
procedure HeapSort(var Arr : array of real; N : Integer);
var
    I,J,K,T   :   Integer;
    Tmp :   Real;
begin
    i:=2;
    repeat
        t:=i;
        while t<>1 do
        begin
            k:=t div 2;
            if Arr[k-1]>=Arr[t-1] then t:=1
            else
            begin
                Tmp:=Arr[k-1];
                Arr[k-1]:=Arr[t-1];
                Arr[t-1]:=Tmp;
                t:=k;
            end;
        end;
        inc(i)
    until not(i<=n);
    i:=n-1;
    repeat
        Tmp:=Arr[i];
        Arr[i]:=Arr[0];
        Arr[0]:=Tmp;
        t:=1;
        while t<>0 do
        begin
            k:=2*t;
            if k>i then t:=0
            else
            begin
                if k<i then
                   if Arr[k]>Arr[k-1] then inc(k);
                if Arr[t-1]>=Arr[k-1] then t:=0
                else
                begin
                    Tmp:=Arr[k-1];
                    Arr[k-1]:=Arr[t-1];
                    Arr[t-1]:=Tmp;
                    t:=k;
                end;
            end;
        end;
        dec(i)
    until not(i>=1);
end;

begin
  randomize;
  writeln('Исходный массив');
  for i:=0 to n-1 do
    begin
      for j:=0 to n-1 do
        begin
          a[i,j]:=random*10;
          write(a[i,j]:8:2);
        end;
      writeln;
    end;

  writeln;
  writeln('Отсортированный массив');
  for i:=0 to n-1 do
    begin
     for j:=0 to n-1 do
        r[j]:=a[j,i];
     heapsort(r,n);
     for j:=0 to n-1 do
       a[j,i]:=r[j];
    end;


  for i:=0 to n-1 do
    begin
      for j:=0 to n-1 do
        begin
          write(a[i,j]:8:2);
        end;
      writeln;
    end;

  readln;
end.

Последний раз редактировалось ZX Spectrum-128; 18.12.2013 в 19:15.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 18.12.2013, 20:34   #10
Juniorshka
 
Регистрация: 12.12.2013
Сообщений: 6
По умолчанию

Спасибо большое! Но почему при запуске вашей прогр.
Поя-ся ошибка
Program1.pas(86) : Неправильный тип параметров подпрограммы
Код:
 heapsort(r,n);
r : vector; И почему r вектор?
Или похоже дело в том что я использовала ABC,через TP запустилась

Последний раз редактировалось Juniorshka; 18.12.2013 в 20:44.
Juniorshka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упорядочьте элементы столбцов массива по убыванию модулей элементов (Pascal) Juniorshka Помощь студентам 0 12.12.2013 23:18
массив С, состоящий из N элементов. Все отрицательные элементы массива перенести в его начало и расположить по убыванию ( Делфи ) zloykoreec Помощь студентам 0 17.05.2012 11:54
задача Pascal - Поменять местами элементы массива 8 и 3 столбцов mefos Помощь студентам 4 03.02.2012 22:57
Упорядочить матрицу по убыванию модулей элементов x3 aka a-droo Microsoft Office Excel 2 12.12.2011 01:21
[Pascal] Нахождение наибольшей из сум модулей элементов многомерного массива just4smth Помощь студентам 3 16.05.2011 20:00