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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2009, 18:25   #1
rev1ver
 
Регистрация: 14.01.2009
Сообщений: 9
По умолчанию сортировка стоблцов матрицы по убыванию сумм их элементов

помогите пожалуйста
задача-упорядочить столбцы в матрице 10х15 по убыванию сумм их элементов)
опустим описание и ввод матрицы. у меня получилось такое:
k:=1;
while k<>0 do
begin
for j:=1 to m-1 do
begin
k:=0;
for i:=1 to n do
sum1:=sum1+a[i,j];
for i:=1 to n do
sum2:=sum2+a[i,j+1];
if sum1>sum2 then
begin
k:=1;
for i:=1 to n-1 do
begin
p:=a[i,j];
a[i,j]:=a[i,j+1];
a[i,j+1]:=p;
end;
end;
sum1:=0;
sum2:=0;
end;
end;

но упорядочивает оно только первые два столбца, дальше не хочет ни в какую, виснет(
rev1ver вне форума Ответить с цитированием
Старый 14.01.2009, 18:41   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
uses crt;
const m=10;
      n=15;
var a:array [1..m,1..n] of real;
    b,temp:array[1..n] of real;
    x:real;
    i,j,k:integer;

begin
randomize;
clrscr;
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(10);
    write(a[i,j]:3:0);
   end;
   writeln;
 end;
for j:=1 to n do
 begin
  b[j]:=0;
   for i:=1 to m do
    b[j]:=b[j]+a[i,j];
 end;

 for i:=2 to n do
  for j:=n downto i do
    if b[j]>b[j-1] then
   begin
     x:=b[j];
     b[j]:=b[j-1];
     b[j-1]:=x;
     for k:=1 to m do
      temp[k]:=a[k,j];
     for k:=1 to m do
      a[k,j]:=a[k,j-1];
     for k:=1 to m do
      a[k,j-1]:=temp[k];
   end;
writeln('==============================');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:3:0);
  writeln;
 end;
writeln('==============================');
for i:=1 to n do
 write(b[i]:3:0,' ');
end.
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 14.01.2009 в 19:09.
alex_fcsm вне форума Ответить с цитированием
Старый 14.01.2009, 18:49   #3
rev1ver
 
Регистрация: 14.01.2009
Сообщений: 9
По умолчанию

спасибо теперь можешь объяснить, что ты в этой проге делаешь?
и кстати,
элементы вещественные
rev1ver вне форума Ответить с цитированием
Старый 14.01.2009, 18:51   #4
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Чем конкретнее вопрос тем конкретнее ответ

Смысл такой: сначала считаем по всем столбцам суммы элементов и записываем их в массив. Начинаем сортировать массив, при этом происходит перестановка элементов и при этом переставляем столбцы на соответствующих местах

integer на real никак не меняется? И по-моему у меня сортировка по возрастанию. Надеюсь догадаетесь что, где заменить
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 14.01.2009, 19:03   #5
rev1ver
 
Регистрация: 14.01.2009
Сообщений: 9
По умолчанию

ээ а че менять-то надо? что ни меняю, всеравно не получается(
ап: все поменял, вс еработает) огромное спасибо

Последний раз редактировалось rev1ver; 14.01.2009 в 19:08.
rev1ver вне форума Ответить с цитированием
Старый 14.01.2009, 19:09   #6
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Посмотрите вверху я поправил если Вам так тяжело

P.S. Нечего раньше времени паниковать
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 14.01.2009, 19:18   #7
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию Задача! Не забудь отзыв! xD

Мой вариант - смысл тот же:

Код:
program masss;
const
 m = 10;
 n = 15;
type
 DataItem = array [1..m,1..n] of real;
 MasItem = array [1..n] of real;
var
 A : DataItem;
 ST : MasItem;
 sum,x : real;
 i,j,k : byte;
begin

  randomize;
  writeln ('Input:');
  for i:=1 to m do
  begin
    for j:=1 to n do
    begin
      A[i,j]:=random(3);
      write(A[i,j]:0:1,'|')
    end;
    writeln
  end;
  writeln;
  writeln ('Sum:');
  sum:=0;
  for i:=1 to n do
  begin
    for j:=1 to m do sum:=sum+A[j,i];
    ST[i]:=sum;
    write (i,' column: (',sum:0:1,'); ');
    sum:=0
  end;
  writeln;

  for i:=1 to n-1 do
  begin
    j:=i;
    for k:=i+1 to n do
     if ST[k]>ST[j] then j:=k;
    x:=ST[j];
    ST[j]:=ST[i];
    ST[i]:=x;
    for k:=1 to m do
    begin
      x:=A[k,i];
      A[k,i]:=A[k,j];
      A[k,j]:=x
    end
  end;
  writeln;
  writeln ('Output:');
  for i:=1 to m do
  begin
    for j:=1 to n do write (A[i,j]:0:1,'|');
    writeln
  end;

  readln;
end.
capta1n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка TAdoTable по убыванию mm_mauser БД в Delphi 8 05.12.2007 12:37
Сортировка по убыванию Костя БД в Delphi 3 20.11.2007 08:37
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16
количество элементов матрицы, больших среднего арифмитического всех её элементов finch Помощь студентам 3 27.08.2007 15:48