Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача с объектами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
dimon1988
Помогите решить задачу, а то я что-то зашел в тупик...
"Нахождение суммы,разности,присваивания,произведения векторов и матриц различных типов (целого,вещественного,комплексного). С помощью этих объектов найдите n-ю степень матрицы"
Уже столько форумов перерыл, нигде ничего толкового нету...может вы мне поможите sad.gif
Буду очень благодарен
volvo
В чем именно проблема? По отдельности все присутствует на форуме: и сложение матриц, и перемножение, и вычитание... То же самое и с векторами... Воспользуйся поиском

Собери это все в одну программу и будет то, что тебе нужно (а что тебе нужно - знаешь только ты... Здесь помочь тебе невозможно, ты НИЧЕГО не написал конкретного - только общие слова).
dimon1988
Фишка в том что надо сделать все с объектами...
Надо создать объект матрицу и вектор, в котором должен быть набор функций нахождения суммы,разности,присваивания,произведения различных типов (целого,вещественного,комплексного).
volvo
http://volvo71.narod.ru/faq_folder/dyn_arr.htm#dyn_mx_1

Разберешься?

P.S.
Там же на сайте описан способ, как заставить программу работать с любым типом данных...
dimon1988
Спасибо,сейчас посмотрю
dimon1988
volvo, не могли бы вы показать мне, например, реализацию умножения матриц,чтобы я мог по аналогии уже дальше делать?
volvo
Используя мои определения типов - так:
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
Спасибо большое
dimon1988
У меня возникает ошибка "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
Цитата
Может кто-нибудь знает в чем дело?
В ограничении суммарного размера всех переменных размером сегмента данных... Т.е., больше 64К под статические переменные ты отвести не можешь. Что происходит у тебя, посмотри:

...
mas: array[1..100,1..100] of real; { размер = 100*100*sizeof(real) = 60000 байт }
...

Добавляешь еще одну - получаешь 120К. Перебор...
dimon1988
А,ясно. Большое спасибо)
dimon1988
Еще вопросик, я вот написал сам умножение матриц,вроде все работает только почему-то иногда вылетают какие-то левые числа. Никак не пойму в чем дело


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
А что обязательно перевернуть все с ног на голову, а потом искать ошибку? Что, нельзя посмотреть, как сделано здесь: Массивы. Матрицы. Типичные задачи. (вычисление произведения "сцепленных" матриц) и сделать по аналогии, а обязательно перепутать ВСЕ циклы местами? Хотя с ТАКИМИ названиями переменных это не мудрено... Что у тебя a.m - число строк или число столбцов - это известно только тебе... Назвать поле, скажем, a.rowsCount - просто никак нельзя, правда? Слишком просто все получится... Сложностей не создаст тебе программа - это нехорошо...
dimon1988
Эххх,это да,ладно,спасибо. Буду разбираться
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.