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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2011, 21:32   #1
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию Сортировка элементов в матрице

На главную диагональ матрицы А(К,К), К =< 100 (=< - меньше или равно) поместить наибольшие элементы этой матрицы (сначала наибольший, затем следующий по величине и т.д.), а диагональные элементы - на место наибольших.
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 21.11.2011, 07:48   #2
g101k
 
Регистрация: 17.11.2011
Сообщений: 8
По умолчанию

Какой язык программирования?
Или тебе в матлаб?
g101k вне форума Ответить с цитированием
Старый 21.11.2011, 18:40   #3
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

все это в паскале
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 21.11.2011, 18:46   #4
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Использовать промежуточный массив 3х(К*К) для хранения значений и координат элемента. Отсортировать его по возрастанию значений, и затем первые К элементов вставляем в диагональ, а элементы оттуда по координатам из массива.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 21.11.2011, 19:54   #5
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

а по подробнее можно?
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 22.11.2011, 10:07   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно и поподробнее...

Код:
(*
На главную диагональ матрицы А(К,К), К =< 100 (=< - меньше или
равно) поместить наибольшие элементы этой матрицы (сначала
наибольший, затем следующий по величине и т.д.), а диагональные
элементы - на место наибольших.
*)

type
  IndexArray = record
     Row,Col : integer
  end;

Const
  MaxK = 100;

var
  A : array[1..MaxK, 1..MaxK] of integer;
  SortArr : array[1..MaxK*MaxK] of IndexArray;
  OneIndex : IndexArray;
  i, j, K, m, t : integer;
begin
  Randomize;

  WriteLn('Введите размерность массива K (1<=K<=100) :');
  {Readln(K);}
  K := 7;

  {заполнение исходного массива}
  for i:=1 to K do
    for j:=1 to K do
      A[i,j] := Random(100); {случайные числа от 0 до 99}

  {вывод исходного массива на экран}
  WriteLn('Исходная матрица: ');
  for i:=1 to K do begin
    for j:=1 to K do
      Write(A[i,j]:4,' ');
    WriteLn;
  end;
  WriteLn;

  {подготовим временный массив SortArr с индексами для сортировки
   Внимание! ВАЖНО!
       Сразу исключим из сортировки элементы главной диагонали!
       (их индексы НЕ будем помещать в массив)}
  m := 0;
  for i:=1 to K do
    for j:=1 to K do
      if i<>j then begin
        inc(m);
        SortArr[m].Row := i;
        SortArr[m].Col := j;
      end;


  (* *** Сортировка *** *)
  {отсортируем временный массив SortArr по ЗНАЧЕНИЯМ из массива A}

  {сортировка массива по убыванию методом простых обменов ("пузырька") }
  for i:=1 to m-1 do
    for j:=i+1 to m do
      if A[SortArr[i].Row, SortArr[i].Col] <
            A[SortArr[j].Row, SortArr[j].Col] then
      begin
        OneIndex := SortArr[i];
        SortArr[i] := SortArr[j];
        SortArr[j] := OneIndex
      end;


  {для проверки правильности работы алгоритма выведем
     наибольшие элементы массива A}
  WriteLn('Отладочная информация! Первые ',K,
      ' наибольших элементов (без учёта гл.диагонали): ');
  for i:=1 to K do
    Write('A[',SortArr[i].Row,',',SortArr[i].Col,'] = ',
       A[SortArr[i].Row, SortArr[i].Col]:4,'   ');
  WriteLn;
  WriteLn;

  {теперь всё просто. Поместим найденные наибольшие элементы
  на место элементов главной диагонали, а диагональные - на места
  наибольших элементов}
  for i:=1 to K do begin
    t := A[ i, i];
    A[ i, i] :=A[SortArr[i].Row, SortArr[i].Col];
    A[SortArr[i].Row, SortArr[i].Col] := t;
  end;

  {выведем полученный результат}
  {вывод исходного массива на экран}
  WriteLn('Результирующая матрица: ');
  for i:=1 to K do begin
    for j:=1 to K do
      Write(A[i,j]:4,' ');
    WriteLn;
  end;


  Readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.11.2011, 20:30   #7
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Огромное спасибо
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 04.12.2011, 18:01   #8
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Уважаемый Serge_Bliznykov, составленная вами программа оказалось не корректна. По словам преподавателя должны по диагонали быть выстроены все элементы, в том числе и с учетом диагональных, и еще данное задание следует выполнить без использования типов. Ваши предложения?...т.к. я сломал всю голову, но так и не понимаю как это сделать.
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...

Последний раз редактировалось McFrey; 04.12.2011 в 18:41.
McFrey вне форума Ответить с цитированием
Старый 05.12.2011, 17:29   #9
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

Люди, спасайте...ау
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...

Последний раз редактировалось McFrey; 05.12.2011 в 23:27.
McFrey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск повторяющихся элементов в матрице I_newbie Помощь студентам 2 15.03.2010 22:44
В матрице упорядочить строки по возрастанию максимальных элементов. Помогите найти ошибку. amerhant Помощь студентам 3 16.01.2010 19:39
Сортировка элементов в матрице Lazy_Bitch Паскаль, Turbo Pascal, PascalABC.NET 2 26.09.2009 16:22
Сортировка столбцов в матрице WhistlerW Общие вопросы Delphi 3 12.06.2009 23:01
поиск элементов в матрице, не равных нулю ciaonataha Общие вопросы C/C++ 37 29.03.2009 21:29