Помогите решить задачу, а то я что-то зашел в тупик... "Нахождение суммы,разности,присваивания,произведения векторов и матриц различных типов (целого,вещественного,комплексного). С помощью этих объектов найдите n-ю степень матрицы" Уже столько форумов перерыл, нигде ничего толкового нету...может вы мне поможите Буду очень благодарен
volvo
5.06.2007 3:14
В чем именно проблема? По отдельности все присутствует на форуме: и сложение матриц, и перемножение, и вычитание... То же самое и с векторами... Воспользуйся поиском
Собери это все в одну программу и будет то, что тебе нужно (а что тебе нужно - знаешь только ты... Здесь помочь тебе невозможно, ты НИЧЕГО не написал конкретного - только общие слова).
dimon1988
5.06.2007 3:23
Фишка в том что надо сделать все с объектами... Надо создать объект матрицу и вектор, в котором должен быть набор функций нахождения суммы,разности,присваивания,произведения различных типов (целого,вещественного,комплексного).
P.S. Там же на сайте описан способ, как заставить программу работать с любым типом данных...
dimon1988
5.06.2007 3:29
Спасибо,сейчас посмотрю
dimon1988
5.06.2007 3:58
volvo, не могли бы вы показать мне, например, реализацию умножения матриц,чтобы я мог по аналогии уже дальше делать?
volvo
5.06.2007 5:03
Используя мои определения типов - так:
procedure mult(const m1, m2: tmatrix; var r: tmatrix); var i, j, k: integer; begin r.zero(m1.get_row_count, m2.get_vector(1)^.size);
for i := 1 to m1.get_row_count do for j := 1 to m2.get_vector(1)^.size do begin
for k := 1 to m2.get_row_count do r.get_vector(i)^.put(j, r.get_vector(i)^.get(j)^ + m1.get_vector(i)^.get(k)^ * m2.get_vector(k)^.get(j)^);
end; end;
dimon1988
5.06.2007 13:21
Спасибо большое
dimon1988
5.06.2007 14:36
У меня возникает ошибка "Too many variables", когда я пытаюсь добавить в варе еще одну матрицу. Вот код:
program objects; uses crt; type matrix = object n,m:integer; mas: array[1..100,1..100] of real; procedure Init(var a:matrix); procedure Print(var a:matrix); end;
procedure matrix.Init; var i,j:byte; begin writeln('Vvedite kolichestvo stolbcov matrici: '); readln(a.n); writeln('Vvedite kolichestvo strok matrici: '); readln(a.m); for i:=1 to a.n do begin for j:=1 to a.m do begin writeln('Vvedite element [',i,',',j,']'); readln(a.mas[i,j]); end; end; end;
procedure matrix.Print; var i,j:byte; begin for j:=1 to a.m do begin if j<>1 then writeln(''); for i:=1 to a.n do begin write(a.mas[i,j]:8:0); end; end; end;
var x1:matrix; begin clrscr; x1.Init(x1); x1.print(x1); end.
Добавлено через 2 мин. У меня возникает ошибка "Too many variables", когда я пытаюсь добавить в варе еще одну матрицу. Вот код: Может кто-нибудь знает в чем дело?
volvo
5.06.2007 16:47
Цитата
Может кто-нибудь знает в чем дело?
В ограничении суммарного размера всех переменных размером сегмента данных... Т.е., больше 64К под статические переменные ты отвести не можешь. Что происходит у тебя, посмотри:
... mas: array[1..100,1..100] of real; { размер = 100*100*sizeof(real) = 60000 байт } ...
Добавляешь еще одну - получаешь 120К. Перебор...
dimon1988
5.06.2007 17:24
А,ясно. Большое спасибо)
dimon1988
6.06.2007 0:05
Еще вопросик, я вот написал сам умножение матриц,вроде все работает только почему-то иногда вылетают какие-то левые числа. Никак не пойму в чем дело
procedure matrix.Init; var i,j:byte; begin writeln('Vvedite kolichestvo stolbcov matrici: '); readln(a.n); writeln('Vvedite kolichestvo strok matrici: '); readln(a.m); for i:=1 to a.m do begin for j:=1 to a.n do begin writeln('Vvedite element [',i,',',j,']'); readln(a.mas[i,j]); end; end; end;
procedure matrix.Umnozh; label endproc; var i,j,r:byte; c:matrix; k,p:integer; begin if a.n<>b.m then begin writeln('Nelza umnozhit'); goto endproc; end; c.n:=b.n; c.m:=a.m; for j:=1 to a.m do begin for i:=1 to a.n do begin r:=0; for k:=1 to c.m do begin r:=r+a.mas[i,k]*b.mas[k,j]; end; c.mas[i,j]:=r; end; end; result:=c; endproc: end;
volvo
6.06.2007 0:15
А что обязательно перевернуть все с ног на голову, а потом искать ошибку? Что, нельзя посмотреть, как сделано здесь: Массивы. Матрицы. Типичные задачи. (вычисление произведения "сцепленных" матриц) и сделать по аналогии, а обязательно перепутать ВСЕ циклы местами? Хотя с ТАКИМИ названиями переменных это не мудрено... Что у тебя a.m - число строк или число столбцов - это известно только тебе... Назвать поле, скажем, a.rowsCount - просто никак нельзя, правда? Слишком просто все получится... Сложностей не создаст тебе программа - это нехорошо...
dimon1988
6.06.2007 0:17
Эххх,это да,ладно,спасибо. Буду разбираться
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.