Помогите решить задачу, а то я что-то зашел в тупик... "Нахождение суммы,разности,присваивания,произведения векторов и матриц различных типов (целого,вещественного,комплексного). С помощью этих объектов найдите 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 := 1to m1.get_row_count dofor j := 1to m2.get_vector(1)^.size dobeginfor k := 1to 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:=1to a.n dobeginfor j:=1to a.m dobegin
writeln('Vvedite element [',i,',',j,']');
readln(a.mas[i,j]);
end;
end;
end;
procedure matrix.Print;
var i,j:byte;
beginfor j:=1to a.m dobeginif j<>1then
writeln('');
for i:=1to a.n dobegin
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:=1to a.m dobeginfor j:=1to a.n dobegin
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;
beginif a.n<>b.m thenbegin
writeln('Nelza umnozhit');
goto endproc;
end;
c.n:=b.n;
c.m:=a.m;
for j:=1to a.m dobeginfor i:=1to a.n dobegin
r:=0;
for k:=1to c.m dobegin
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
Эххх,это да,ладно,спасибо. Буду разбираться
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.