Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных / 7 сообщений из 7, страница 1 из 1
10.05.2010, 18:09:45
    #36619828
Олька19
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных
Помогите, пожалуйста) Нужно Отсортировать столбцы матрицы по неубыванию сумм положительных элементов. Сортировка Шелла с заданной в виде локального константного массива последовательностью приращений.
я написала модуль и тестирующую, но ошибка в указателе. Мне нужен указатель на столбцы, вроде так и делаю, но в конечной матрице переставляются строки, а не столбцы(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
interface
   type
   T_Int=integer;
   T_Elem=real;
   T_Key=T_Elem;
   PKey=^TKey;
   TIntarr=array [ 1 .. 10 ] of T_Int;
   T_Real=byte;
   T_Log=boolean;
   T_Long=longint;
   T_Arr=array[ 1 .. 1 ] of T_Elem;
   P_Arr=^T_Arr;
   T_Array=array[ 1 .. 1 ] of P_Arr;
   P_Array=^T_Array;
   P_Matr=^C_Matr;
   TElem=      record
               key :T_Elem;
               data: P_Arr;
               end;
    TKey=array[ 1 .. 1 ] of TElem;

   C_Matr=object
           private
            a:P_Array;
            str , st:T_Int;
{****}
function C_Matr.ShellSort;
var  i,j,k,l,m,i1: T_Int;
     h:TIntarr;
     key: PKey;
     sum,w: T_Elem;
     x: TElem;
begin

begin
clrscr;
for i:= 1  to str do
  begin
  writeln;
  for j:= 1  to st do
                 begin
                 w:=a^[i]^[j];
                 write(w: 7 : 4 ,' ');
                 end;

  readln;
  end;
readln;
end;

if (longint(st*sizeof(TElem)) < Maxavail) and (a<>nil) then
    begin
    ShellSort:=true;
    getmem (key, st*sizeof(TElem));
    for j:= 1  to st do
                   begin
                   sum:= 0 ;
                   for i:= 1  to str do
                   if a^[i]^[j]> 0  then sum:=sum+a^[i]^[j];
                   key^[j].key:=sum;
                   key^[j].data:=a^[j];
                   writeln('sum= ',sum,'  key= ',key^[j].key);
                   end;
    for i1:= 1  to st do
    write(key^[i1].key,'  ');
    readln;

{Cама сортировка Шелла}

h[ 1 ]:= 7 ;
h[ 2 ]:= 5 ;
h[ 3 ]:= 3 ;
h[ 4 ]:= 1 ;
for m:= 1  to  4  do
              begin
              k:=h[m];
              for j:=k+ 1  to st do
              begin
              x:=key^[j];
              l:=j-k;
              while (l> 0 ) and (x.key<=key^[l].key) do
                                               begin
                                               key^[l+k]:=key^[l];
                                               l:=l-k;
                                               end;
              key^[l+k]:=x;
              end;
              end;
  for i1:= 1  to st do
  begin
  write(key^[i1].key,'  ');
  end;
  readln;


for j:= 1  to st do
 a^[j]:=key^[j].data;


Freemem (key, st*sizeof(TElem));
end
else
begin
ShellSort:=false;
Failure( 1 );
end;
end;
...
Рейтинг: 0 / 0
11.05.2010, 00:40:05
    #36620091
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных
Олька19Мне нужен указатель на столбцы, вроде так и делаю, но в конечной матрице переставляются строки, а не столбцы(
Не могу сказать, что я не сплю, но строчка

Код: plaintext
key^[j].data:=a^[j]; 

напрягает, если из общих соображений.
...
Рейтинг: 0 / 0
11.05.2010, 10:42:49
    #36620456
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных
Надо бы исходничек красиво оформить. Ато глаза ломит...

P.S. Олька, вы наверное поэтэсса!

Олька19Отсортировать столбцы матрицы по неубыванию сумм положительных
...
Рейтинг: 0 / 0
11.05.2010, 16:59:03
    #36621531
Олька19
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных
Прям в точку:) Есть такая слабость:))
...
Рейтинг: 0 / 0
12.05.2010, 04:35:14
    #36622246
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных
Олька19Помогите, пожалуйста) Нужно Отсортировать столбцы матрицы по неубыванию сумм положительных элементов. Сортировка Шелла с заданной в виде локального константного массива последовательностью приращений.
я написала модуль и тестирующую, но ошибка в указателе. Мне нужен указатель на столбцы, вроде так и делаю, но в конечной матрице переставляются строки, а не столбцы(
В вашей программе элементу a ij соответсвует a^[i]^[j], поэтому a^[j] - это адрес строки, а не столбца. То есть, все что Вам нужно - это поменять порядок хранения элементов. Если, например, Вы где-то инициализируете г a^[i]^[j] из обычного массива, то нужно поменять
Код: plaintext
1.
      a^[i]^[j]:=ar[i,j];
на
Код: plaintext
        a^[i]^[j]:=ar[j,i];
И поменять в нужных местах (в приведенном фрагменте я нашел таких три)
Код: plaintext
a^[i]^[j]
на
Код: plaintext
a^[j]^[i]
...
Рейтинг: 0 / 0
12.05.2010, 10:31:31
    #36622515
Олька19
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных
Спасибо Я даже знаю, где это нужно в модуле сделать)
...
Рейтинг: 0 / 0
13.05.2010, 12:55:12
    #36625409
Дадуда
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных
олечка, обилие крышечек признак ущербности программиста. звездочками играйтесь в C, он для этого больше подходит.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Паскаль, Отсортировать столбцы матрицы по неубыванию сумм положительных / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]