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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2008, 22:08   #21
Tomoyo
Пользователь
 
Регистрация: 04.11.2008
Сообщений: 32
По умолчанию

Лучше с ним)
Объясните, пожалуйста, момент с перестановками. Я запуталась в обозначениях(((
И еще вот это: det:=1.0
Tomoyo вне форума Ответить с цитированием
Старый 04.11.2008, 22:32   #22
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
det:=1.0
В начале цикла умножения начальное значение всегда равно 1 (1.0 чтобы знать, что число вещественное). Потом на него умножают и результат растет. Так при возведении в степень, при подсчете факториала в цикле и т.д.
Процедура перестановки строк нужна когда главный элемент, на который нужно делить либо ноль(делить нельзя) либо число очень близкое к нолю(получается недостоверный результат).
В этом случае ищут строку, у которой главный элемент максимальный и строки переставляют местами. От этого значение определителя не меняется, меняется его знак.
Код:
procedure Per(k,n:integer;var a:Tmatrix;var p:integer);
//входные параметры - к-номер текущей строки;n-размер матрицы; 
//входной и выходной параметр - матрица а; выходной параметр - количество перестановок -р;
var z:Real;j,i:integer;//z-буфер для обмена элементов строк
begin
 z:=abs(a[k,k]);//запоминаем модуль текущего главного элемента
 i:=k; //запоминаем номер текущей строки
 p:=0; //перестановок еще нет
 for j:=k+1 to n-1 do//смотрим по строкам от следующей до последней
   begin
     if abs(a[j,k])>z then //если в этом столбце какой то элемент больше
        begin
          z:=abs(a[j,k]);//запоминаем этот элемент
          i:=j;  //запоминаем номнр строки
          p:=p+1;//увеличиваем счетчик перестановок
        end;
   end;
   if i>k then  //если нужная строка ниже текущей
   for j:=k to n-1 do //то переставляем(меняем местами) соответствующие элементы строк
      begin
        z:=a[i,j]; //запоминаем
        a[i,j]:=a[k,j];//ставим на место a[i,j]->a[k,j]
        a[k,j]:=z;    //ставим на место a[k,j]->a[i,j]
      end;
end;
puporev вне форума Ответить с цитированием
Старый 04.11.2008, 22:37   #23
Tomoyo
Пользователь
 
Регистрация: 04.11.2008
Сообщений: 32
По умолчанию

Огромное спасибо! Вот бы наш препод так хорошо объяснял материал. И давал бы его побольше...
Tomoyo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определитель матрицы Snake_ua Помощь студентам 7 10.02.2010 10:44
матрицы chelsi Паскаль, Turbo Pascal, PascalABC.NET 13 25.04.2008 10:07
Написать рекурсивную функцию вычисления определителя квадратной матрицы Лёха Паскаль, Turbo Pascal, PascalABC.NET 1 23.03.2008 08:43
Формирование квадратной матрицы порядка n по заданному образцу. NeAlSe Помощь студентам 7 05.12.2007 16:04