|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.02.2009, 23:12 | #1 |
Пользователь
Регистрация: 19.02.2009
Сообщений: 11
|
Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов
Задача: Даны 6-элементные вещественные векторы х и у и квадратные матрицы А,В,С 6-ого порядка. Надо найти величину (Ах,Ву)+(Сх,у)/(х,Ву)ю Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов оформить ввиде подпрограмм.
Я не знаю, где ошибка. program zad6; uses SysUtils; const n=6; type TMatrix=array[1..n,1..n] of integer; TVekt=array[1..n] of integer; var A,B,C:TMatrix; X,Y,PAX,PBY,PCX, Res:TVekt; SP1,SP2,SP3,R: integer; i,j,sum: integer; procedure VvodA; begin writeln ('Vvod matr A porjdka ',n); for j:=1 to n do for i:=1 to n do begin write ('A[',i,',',j,'] : '); readln (A[i,j]); end; end; {VvodA} procedure VvodB; begin writeln ('Vvod matr B porjdka ',n); for j:=1 to n do for i:=1 to n do begin write ('B[',i,',',j,'] : '); readln (B[i,j]); end; end; {VvodB} procedure VvodC; begin writeln ('Vvod matr C porjdka ',n); for j:=1 to n do for i:=1 to n do begin write ('C[',i,',',j,'] : '); readln (C[i,j]); end; end; {VvodC} procedure VvodX; begin writeln ('Vvod vekt X porjdka ',n); for i:=1 to n do begin write ('X[',i,'] : '); readln (X[i]); end; end; {VvodX} procedure VvodY; begin writeln ('Vvod vekt Y porjdka ',n); for i:=1 to n do begin write ('Y[',i,'] : '); readln (Y[i]); end; end; {VvodY} procedure ProMV ( M : TMatrix; V : TVekt; var MV: TVekt); var i,j: integer; begin SetLEngth (MV, Legth(V)); for i:=0 to Length(V)-1 do begin MV[i]:=0; for j:=0 to Length(V)-1 do begin MV[i]:=MV[i]+M[i,j]*V[j]; end; end; end;{ProMV} function SkalProVekt (var a,b: array of real; n:integer):real; var i:integer; e: real; begin e:=0; for i:=1 to n-1 do e:=e+a[i]*b[i]; SkalProVekt:=e; writeln; end;{SkalProVekt} begin VvodA; VvodB; VvodC; VvodX; VvodY; ProMV(A,X,PAX); ProMV(B,Y,PBY); ProMV(C,X,PCX); SP1:=SkalProVekt(PAX,PBY,n); SP2:=SkalProVekt(PCX,Y,n); SP3:=SkalProVekt(X,PBY,n); R:=SP1+SP2/SP3; writeln ('formula =',R); end. |
19.02.2009, 23:28 | #2 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Вам компилятор говорит где ошибка. Как можно не знать где она?
Вот несколько: в процедуре proMV: Код:
К тому же, еще и опечатка: Код:
Код:
Код:
Код:
Дальше не углублялся. ps Для кода используйте тег CODE.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
19.02.2009, 23:38 | #3 |
Форумчанин
Регистрация: 12.10.2008
Сообщений: 140
|
Дофига там еще косяков, в основном все несоответствие типов
заметил кроме вышеперечисленных Код:
Да, чуть не забыл, ввод можно сделать одной процедурой для каждого типа Последний раз редактировалось Mikhail Bakurov; 19.02.2009 в 23:41. |
19.02.2009, 23:55 | #4 |
Пользователь
Регистрация: 19.02.2009
Сообщений: 11
|
теперь выдает ошибку, что не может найти sysutils.tpu
Помогите, пожалуйста, с типами Я не знаю, как сделать ввод одной процедурой для каждого типа |
20.02.2009, 00:07 | #5 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Подправил самое необходимое. Программа компилируется и даже чего-то выводит.. Проверять, естественно, не стал, т.к. мне стало тоскливо вбивать вручную элементы уже на второй матрице.
Код:
Код:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] Последний раз редактировалось Sazary; 20.02.2009 в 00:09. |
20.02.2009, 00:10 | #6 |
Пользователь
Регистрация: 19.02.2009
Сообщений: 11
|
спасибо большое,
пошла проверять |
20.02.2009, 12:12 | #7 |
Пользователь
Регистрация: 19.02.2009
Сообщений: 11
|
У меня выдает ошибку
Runtime error 205 at 0000:031D Подскажите, что не так? |
20.02.2009, 12:51 | #8 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
zverushka
Мало информации. Какие числа вводите? Runtime error 205, насколько я помню, возникает при переполнении операций с плавающей точкой.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
20.02.2009, 13:00 | #9 |
Пользователь
Регистрация: 19.02.2009
Сообщений: 11
|
я вводила разные,
ошибка даже , если матрицы единичные, а вектора х=1.2.3.4.5.6 и у=1.1.1.1.1.1 ответ должел быть 22 |
20.02.2009, 13:32 | #10 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
zverushka Вы так и вводите что-ли, с точками? о_О
Если да, то естественно будет ошибка. После ввода каждого элемента - <enter>
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
программа на вычисление скалярного произведения | klopp | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 05.12.2008 21:17 |
Класс "векторные операции" для трехмерных векторов. | Студентка@ | Помощь студентам | 1 | 30.01.2008 19:21 |
Умножение матрицы на вектор | Илья Кибель | Помощь студентам | 5 | 27.10.2007 11:02 |