Упорядочивания матрицы

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, dr.Jekill, MOTOCoder, Medved

Ответить
KreN.del
Сообщения: 6
Зарегистрирован: 26 ноя 2006, 20:43

14 дек 2006, 18:33

Требования:
1)Как console apllication
2)Использовать, пока только то что прошли, а тоесть массивы и циклы
Задача:
Дана целочисленная матриц А(n,m).Упорядочить по возрастанию элементы каждого столбца матрицы.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

15 дек 2006, 10:53

Делаешь цикл по каждому столбцу
В цикле каждый элемент столбца переписать в массив
Упорядочить массив любым методом, которых несколько сотен. Самый банальный - сортировка пузырьком
Переписать упорядоченный массив в соответствующий столбец матрицы
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
KreN.del
Сообщения: 6
Зарегистрирован: 26 ноя 2006, 20:43

18 дек 2006, 00:32

Ребят вот какой-то код наваял.. Ошибка в просчете появляется лишь в некоторых столбцах...
Немогли ли вы мне баг мой найти?
var
x:TDarr;
i,j,n,m,d,max,imax,c,z:integer;
begin
write('kol-vo ctroc=');
readln(n);
write('kol-vo ctolbcov=');
readln(m);
setlength(x,n,m);
for i:=0 to n-1 do
for j:=0 to m-1 do
read(x[j]);
for j:=0 to m-1 do
for i:=0 to n-1 do
for d:=1 to n-1 do
begin
max:=x[0][0];
imax:=0;
for c:=0 to n-d do
if(x[c][j]>max)then
begin
max:=x[c][j];
imax:=c;
end;
x[imax][j]:=x[n-d][j];
x[n-d][j]:=max;
end;
//вывод построчно
for i:=0 to n-1 do
begin
writeln;
for j:=0 to m-1 do
write(x[j],' ');
end;
readln;
readln;
end.
Аватара пользователя
Oleg_Rus
Сообщения: 330
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

20 дек 2006, 04:00

ну я прям не знаю, что делать.

попробуй циклы организовывать от 1 до n и m, хотя тут косяка быть не должно, но ты попробуй...
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

21 дек 2006, 14:48

С паскалем помочь не могу, если поможет - вот код на Си.

Код: Выделить всё

int i,j,k,tmp;
for (i=0;i<m;i++)
{
 for (j=0;j<n;j++)
 {
  for (k=j;k<n;k++)
  {
   if (A[j][i]>A[k][i])
   {
    tmp=A[j][i];
    A[j][i]=A[k][i];
    A[k][i]=tmp;
   }
  }
 }
}
хотя щас попробую на паскаль перевести :)

Код: Выделить всё

const n=10;
const m=10;
var i,j,k,tmp: integer;
var A:array[n][m] of integer;
begin
{ -- Здесь вводи массив А с клавиатуры либо рандомно заполняй его -- }
for i = 0 to m-1 do
begin
 for j = 0 to n-1 do
 begin
  for k = j to n-1 do
  begin
   tmp:=A[j][i];
   A[j][i]:=A[k][i];
   A[k][i]:=tmp;
  end;
 end;
end;
end.
Даже самое длинное путешествие начинается с первого шага.
Ответить