Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Паскаль] Массивы, помогите оч прошу(( 
:(
    Опции темы
Anyutka
Дата 25.12.2009, 20:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Даны две матрицы А(nxn) и B(nxn), а также два вектора х = (x1, x2,..., xn) и y = (y1, y2, ..., yn). Написать программу нахождения скалярного произведения (Ах)*(Ву).
PM MAIL   Вверх
neic
Дата 26.12.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если б кто-нибудь мне объяснил, что такое линейно зависимые, то может быть я бы и сделал.
PM MAIL WWW ICQ Skype   Вверх
darkart
Дата 2.1.2010, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

program ScalarMult;

const
  N = 2;{константа - размерность}

type
  TVector = array[ 1..N ] of integer;{тип - вектор}
  TMatrix = array[ 1..N, 1..N ] of integer;{тип - матрица}

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;

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

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

procedure MultiplyMatrixByVector( var resultVector : TVector; matrix : TMatrix; vector : TVector );
{процедура заполняет вектор resultVector результатом произведения матрицы matrix на вектор vector}
var
  i, j : integer;{счетчики}
begin
  for i := 1 to N do{для каждой строки матрицы}
  begin
    resultVector[ i ] := 0;{инициализация очередного компонента вектора}
    for j := 1 to N do{для каждого элемента строки}
      {суммируем с произведением элемента матрицы и компонента вектора}
      resultVector[ i ] := resultVector[ i ] + matrix[ i ][ j ] * vector[ j ];
  end;
end;

function GetScalarProduct( var vectorA, vectorB : TVector ) : integer;
{функция вычисляет скалярное произведение векторов vectorA и vectorB}
var
  i : integer;{счетчик}
begin
  GetScalarProduct := 0;{инициализация результата}
  for i := 1 to N do
    GetScalarProduct := GetScalarProduct +  vectorA[ i ] * vectorB[ i ];{суммируем результат с произведением соответствующих компонентов векторов}
end;

var
  x, y, res : TVector;{x, y - вводимые вектора, res - вспомогательный вектор}
  A, B : TMatrix;{A, B - вводимые матрицы}
begin
  {ввод матриц}
  writeln( 'Рожалуйста введите матрицу A( ', N, ' x ', N, ' ):' );
  InputMatrix( A );
  writeln( 'Рожалуйста введите матрицу B( ', N, ' x ', N, ' ):' );
  InputMatrix( B );

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

  {печать исходных данных}
  writeln;
  writeln( 'Исходные данные' );

  writeln( 'Матрица A:' );
  PrintMatrix( A );
  writeln( 'Матрица B:' );
  PrintMatrix( B );
  writeln( 'Вектор x:' );
  PrintVector( x );
  writeln( 'Вектор y:' );
  PrintVector( y );

  {печать промежуточных вычислений - векторов}
  writeln;
  writeln( 'Промежуточные вычисления' );

  MultiplyMatrixByVector( res, A, x );
  x := res;
  writeln( 'Вектор (Ax):' );
  PrintVector( res );
  MultiplyMatrixByVector( res, B, y );
  y := res;
  writeln( 'Вектор (By):' );
  PrintVector( res );

  {печать результата - скалярного произведения}
  writeln;
  writeln( 'Результат' );
  writeln( '(Ax)*(By)=', GetScalarProduct( x, y ) );
  readln;{ожидаем ввода}
end.

PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

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


 




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


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

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