Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.07.2012, 12:50
Irusya Irusya вне форума
Прохожий
 
Регистрация: 10.07.2012
Сообщения: 2
Репутация: 10
Восклицание Переставить строки матрицы NxN

Переставить строки матрицы NxN так, чтобы по главной диагонали матрицы были расположены элементы наибольшие по абсолютной величине.
Ответить с цитированием
  #2  
Старый 10.07.2012, 13:10
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

Цитата:
Сообщение от Irusya
главной диагонали матрицы
что это такое? / \ сегодня вики не работает...
sorry for offtop
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 10.07.2012, 13:15
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
что это такое? / \ сегодня вики не работает...
sorry for offtop
Слева-направо, сверху-вниз
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 10.07.2012, 13:38
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

алгоритм требует допиливания, думаю разберётесь
Код:
type
  TValue = integer;
  TRow = array of TValue;
  Tmatrix = array of TRow;

function row(values: array of TValue): TRow;
var i: integer;
begin
  SetLength(result, 0);

  for i := 0 to high(values) do
  begin
    SetLength(result, length(result)+1);
    result[length(result)-1] := values[i];
  end;
end;

function matrix(rows: array of tRow): Tmatrix;
var i: integer;
begin
  SetLength(result, 0);

  for i := 0 to high(rows) do
  begin
    SetLength(result, length(result)+1);
    result[length(result)-1] := rows[i];
  end;
end;

function to_str(this: TValue): string; overload;
begin
  result := IntToStr(this);
end;

function to_str(this: TRow): string; overload;
const delimiter = ', ';
var i: integer;
begin
  result := '';

  for i := 0 to high(this) do
  begin
    if i <> 0 then result := result + delimiter;
    result := result + to_str(this[i]);
  end;
end;

function to_str(this: Tmatrix): string; overload;
const delimiter = #13#10;
var i: integer;
begin
  result := '';

  for i := 0 to high(this) do
  begin
    if i <> 0 then result := result + delimiter;
    result := result + to_str(this[i]);
  end;
end;

function index_of_max_abs(this: TRow): integer;
var i: integer; max: TValue;
begin
  result := -1;
  max := -MaxInt - 1;
  for i := 0 to high(this) do
    if abs(this[i]) > max then
    begin
      max := abs(this[i]);
      result := i;
    end;
end;

function swap_rows(this: tmatrix; i, j: integer): tmatrix;
var k: TRow;
begin
  k := this[i];
  this[i] := this[j];
  this[j] := k;

  result := this;
end;

function max_abs_diagonal(matrix: tmatrix): tmatrix;
var i: integer;
begin
  for i := 0 to high(matrix) do
    matrix := swap_rows(matrix, i, index_of_max_abs(matrix[i]));
    
  result := matrix;
end;

procedure TForm1.Button1Click(Sender: TObject);
var one, two: Tmatrix;
begin
  one := matrix([row([1, 2, 3]), row([3, 2, 1]), row([2, 3, 1])]);
  two := max_abs_diagonal(one);
  Memo1.Text := to_str(two);
end;
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
Irusya (10.07.2012)
  #5  
Старый 10.07.2012, 17:21
Irusya Irusya вне форума
Прохожий
 
Регистрация: 10.07.2012
Сообщения: 2
Репутация: 10
Радость

огромное спасибо...буду разбираться)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter