Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Паскаль] Массивы


Автор: Anyutka 25.12.2009, 19:59
Даны два вектора х=(х1, х2, ..., хn), у=(у1, у2, ..., уn). Написать программу, проверяющую являются ли х и у линейно зависимыми. 


Автор: Anyutka 25.12.2009, 20:19
помогите пожалуйста...очень прошу....

Автор: darkart 2.1.2010, 23:48
Код

program vpf_anyutka_linear_independence;

const
  N = 3;{размерность}
  EPSILON = 1e-4;{точность}

type
  TVector = array[ 1..N ] of real;{тип - вектор}

procedure InputVector( var vector : TVector );
{процедура ввода вектора}
var
  i : integer;{счетчик}
begin
  for i := 1 to N - 1 do{для каждого компонента векотра, кроме последнего}
    read( vector[ i ] );{читаем очередной компонент вектора}
  readln( vector[ N ] );{читаем последний компонент вектора с переходом на новую строку}
end;

procedure PrintVector( var vector : TVector );
{процедура печати вектора}
var
  i : integer;{счетчик}
begin
  for i := 1 to N - 1 do{для каждого компонента вектора, кроме последнего}
    write( vector[ i ], ' ' );{печатаем очередной компонент вектора и разделитель - пробел}
  writeln( vector[ N ] );{печатаем последний компонент вектора с переходом на новую строку}
end;

function IsLinearIndependence( var vectorA, vectorB : TVector ) : boolean;
{функция проверки на линейную зависимость двух векторов}
{Система двух векторов линейно зависима тогда и только тогда, когда эти
векторы - коллинеарны }
var
  i : integer;{счетчик}
  scalarProduct, lengthA, lengthB : real;{scalarProduct - скалярное произведение векотров, lengthA, lengthB - длины векторов}
begin
  {инициализация}
  lengthA := 0.0;
  lengthB := 0.0;
  scalarProduct := 0.0;
  for i := 1 to N do{для каждого компонента}
  begin
    lengthA := lengthA + sqr( vectorA[ i ] );{суммируем квадраты компонентов вектора}
    lengthB := lengthB + sqr( vectorB[ i ] );{суммируем квадраты компонентов вектора}
    scalarProduct := scalarProduct + vectorA[ i ] * vectorB[ i ];{вычисляем скалярное произведение}
  end;
  if( ( lengthA < EPSILON ) or ( lengthB < EPSILON ) ) then
  {один из векторов - нулевой => линейная зависимость}
    IsLinearIndependence := true
  else{иначе}
  begin
    lengthA := sqrt( lengthA );{извлекаем корень, чтобы узнать длину вектора}
    lengthB := sqrt( lengthB );{извлекаем корень, чтобы узнать длину вектора}
    { |x||y|cos(alpha) = xy }
    { cos(alpha) = (xy) / ( |x||y| ) }
    { коллинеарность означает, что alpha = 0 => cos( alpha ) = 1 }
    { 1 = (xy) / ( |x||y| ) }
    { проверяем это }
    IsLinearIndependence := abs ( scalarProduct / ( lengthA * lengthB ) - 1 ) < EPSILON;
  end;
end;

var
  x, y : TVector;{вводимые вектора}
begin
  {ввод векторов}
  writeln( 'Пожалуйста введите вектор X с ', N, ' компонентами:' );
  InputVector( x );
  writeln( 'Пожалуйста введите вектор Y с ', N, ' компонентами:' );
  InputVector( y );

  {печать исходных данных}
  writeln;
  writeln( 'Исходные данные' );
  writeln( 'Вектор X:' );
  PrintVector( x );
  writeln( 'Вектор Y:' );
  PrintVector( y );

  {печать результата}
  writeln;
  writeln( 'Результат:' );
  write( 'Вектора - линейно ' );
  if IsLinearIndependence( x, y ) then
    writeln( 'зависимые' )
  else
    writeln( 'независимые' );
  readln;{ждем ввода}
end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)