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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2013, 00:19   #1
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию Помогите найти ошибку

Программа реализирует умножение марицы на матрицу и поиск корня квадратного из суммы квадратов элементов полученной вследствии умножения матрицы

Код:
uses crt;
type Tmat=array [1..4,1..4] of real;
var f:text;
    i,j:integer;
    D:Tmat;
    kvodrat:real;

PROCEDURE multiply (var D:Tmat);
var f:text;
    i,j,k:integer;
    C,E:Tmat;
Begin
 assign (f, 'matrix.txt');
 reset (f);
 readln (f);
  for i:=1 to 4 do
  for j:=1 to 4 do
   read (f, C[i,j]);
 close (f);
 assign (f, 'result.txt');
 rewrite (f);
  for i:=1 to 4 do
  for j:=1 to 4 do
  for k:=1 to 4 do begin
  E[i,j]:=E[i,j]+C[i,k]*D[k,j];
  write (f, E[i,j]); end;
 close (f);
 end;
 
FUNCTION kvadrat (E:Tmat);
 var summa, kvadr:real;
     f:text;
 Begin
 assign (f, 'result.txt');
 reset (f);
 Summa:=0;
 for i:=1 to 4 do
 for j:=1 to 4 do begin
  read (f, E[i,j]);
  Summa:=Summa+E[i,j]*E[i,j]; end;
 close (f);
 kvadr:=sqrt(Summa);
end;

BEGIN
writeln ('Введите матрицу D:');
for i:=1 to 4 do
 for j:=1 to 4 do
  read (D[i,j]);
multiply (D);
kvodrat:=kvadrat(E);
writeln ('Квадрат', kvodrat);
end.
orandzheviyman вне форума Ответить с цитированием
Старый 11.12.2013, 09:50   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

В процедуре multiply результат умножения матриц с (берется из файла) и d (подается на вход из главной программы) заносится в матрицу e. А на выход из процедуры идет матрица d - var d:tmat. Var перед переменной означает, что именно эта переменная будет выдаваться в главную программу.
Сделайте так:
PROCEDURE multiply (var E:Tmat); и из раздела var е убрать
На вход будет подаваться ссылка на глобальная матрица d и результат будет записан в нее же.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 11.12.2013, 23:10   #3
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
В процедуре multiply результат умножения матриц с (берется из файла) и d (подается на вход из главной программы) заносится в матрицу e. А на выход из процедуры идет матрица d - var d:tmat. Var перед переменной означает, что именно эта переменная будет выдаваться в главную программу.
Сделайте так:
PROCEDURE multiply (var E:Tmat); и из раздела var е убрать
На вход будет подаваться ссылка на глобальная матрица d и результат будет записан в нее же.
поправил это, но теперь ошибка где
Код:
FUNCTION kvadrat (var E:Tmat);
и не подскажете статеечку, где оооооочень понятно написано всё про процедуры и функции?
orandzheviyman вне форума Ответить с цитированием
Старый 11.12.2013, 23:19   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

http://life-prog.ru/view_algoritmleng.php?id=103
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку REztor Помощь студентам 5 16.03.2009 20:04
Помогите найти ошибку Devoto Общие вопросы Delphi 4 18.11.2008 00:26
Помогите найти ошибку N!ckeL Общие вопросы Delphi 9 05.05.2008 14:15