Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [pascal] след квадратной матрицы, пыполнение с помощью процедур и функций 
:(
    Опции темы
s0u1hunter
Дата 12.4.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.4.2009

Репутация: нет
Всего: нет



след квадратной матрицы равен сумме элементов, расположенных на главной диагонали. даны квадратная матрица порядка m, натуральное число n. вычислить следы матриц А, А^2,..,A^n. задачу нужно решить с применением процедур и функций. есть алгоритм умножения матриц, но не получается завязать это все с нахождением следа...
PM MAIL   Вверх
volvo877
Дата 12.4.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Пишешь функцию
Код
function trace(const A: matrix): real;
var i: integer; s: real;
begin
  s := 0;
  for i := low(matrix) to high(matrix) do s := s + A[i, i];
  trace := s;
end;
, и вызываешь ее для той матрицы, для которой нужно... Как возвести матрицу в степень, знаешь?
PM MAIL   Вверх
s0u1hunter
Дата 12.4.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.4.2009

Репутация: нет
Всего: нет



этот алгоритм у меня тоже есть, а вот как сделать чтоб при вызове функции возведения в степень сразу же считался след,  у меня не получается... там куча циклов получается... и в них разобраться не получается... 
PM MAIL   Вверх
volvo877
Дата 12.4.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Это что-ли:
Код
const
  m = 3;
  n = 4;
type
  matrix = array[1 .. m, 1 .. m] of real;

function trace(const A: matrix): real;
var i: integer; s: real;
begin
  s := 0;
  for i := low(matrix) to high(matrix) do s := s + A[i, i];
  trace := s;
end;

procedure mult(var mx: matrix; a, b: matrix);
var i, j, k: integer;
begin
  for i := low(matrix) to high(matrix) do
    for j := low(matrix) to high(matrix) do begin
      mx[i, j] := 0;
      for k := low(matrix) to high(matrix) do
        mx[i, j] := mx[i, j] + a[i, k] * b[k, j]
    end;
end;

procedure print(const mx: matrix);
var i, j: integer;
begin
  for i := low(matrix) to high(matrix) do begin
    for j := low(matrix) to high(matrix) do write(mx[i, j]:7:1);
    writeln;
  end;
end;

const
  A: matrix = (
    (1, 2, 3),
    (3, 2, 1),
    (3, 4, 5)
  );
var
  pwr: matrix;
  i: integer;

begin
  pwr := a;
  for i := 1 to n do begin
    writeln('A^', i, ' = '); print(pwr);
    writeln('trace(A^', i, ') = ', trace(pwr):7:1);
    mult(pwr, pwr, a);
  end;
end.
?

Это сообщение отредактировал(а) volvo877 - 12.4.2009, 15:54
PM MAIL   Вверх
s0u1hunter
Дата 12.4.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.4.2009

Репутация: нет
Всего: нет



чё та я себя совсем дибилом чувствую?  smile а что такое low(matrix) и high(matrix)? 
PM MAIL   Вверх
volvo877
Дата 12.4.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Минимальный и максимальный индекс, допустимый в типе matrix, а ты что подумал? Ну, можешь сделать от 1 до M везде, а я привык писАть универсальные программы, чтоб из на каждый чих переделывать не приходилось.

А понадобится тебе сделать матрицу с индексацией от 0 - сколько тебе надо будет изменений внести в программу? А моя как работала, так и будет работать smile
PM MAIL   Вверх
s0u1hunter
Дата 12.4.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.4.2009

Репутация: нет
Всего: нет



ну мне с профи не тягаться в познаниях smile значит мне надо это заменить на 1 to m и будет работать? smile

Добавлено через 5 минут и 31 секунду
спасибо огромное smile ща еще допишу ввод степени и размера матрицы и все совсем хорошо станет smile)) прям выручил
PM MAIL   Вверх
s0u1hunter
Дата 12.4.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.4.2009

Репутация: нет
Всего: нет



хьюстон, ви хэв э проблем... а как мне теперь прописать сюда процедуру ввода матрицы и степени? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.