IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача с объектами, матрица,вектор...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


Помогите решить задачу, а то я что-то зашел в тупик...
"Нахождение суммы,разности,присваивания,произведения векторов и матриц различных типов (целого,вещественного,комплексного). С помощью этих объектов найдите n-ю степень матрицы"
Уже столько форумов перерыл, нигде ничего толкового нету...может вы мне поможите sad.gif
Буду очень благодарен
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






В чем именно проблема? По отдельности все присутствует на форуме: и сложение матриц, и перемножение, и вычитание... То же самое и с векторами... Воспользуйся поиском

Собери это все в одну программу и будет то, что тебе нужно (а что тебе нужно - знаешь только ты... Здесь помочь тебе невозможно, ты НИЧЕГО не написал конкретного - только общие слова).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


Фишка в том что надо сделать все с объектами...
Надо создать объект матрицу и вектор, в котором должен быть набор функций нахождения суммы,разности,присваивания,произведения различных типов (целого,вещественного,комплексного).

Сообщение отредактировано: dimon1988 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






http://volvo71.narod.ru/faq_folder/dyn_arr.htm#dyn_mx_1

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

P.S.
Там же на сайте описан способ, как заставить программу работать с любым типом данных...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


Спасибо,сейчас посмотрю
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


volvo, не могли бы вы показать мне, например, реализацию умножения матриц,чтобы я мог по аналогии уже дальше делать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Используя мои определения типов - так:
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;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


Спасибо большое
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


У меня возникает ошибка "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", когда я пытаюсь добавить в варе еще одну матрицу. Вот код:
Может кто-нибудь знает в чем дело?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
Может кто-нибудь знает в чем дело?
В ограничении суммарного размера всех переменных размером сегмента данных... Т.е., больше 64К под статические переменные ты отвести не можешь. Что происходит у тебя, посмотри:

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

Добавляешь еще одну - получаешь 120К. Перебор...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


А,ясно. Большое спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


Еще вопросик, я вот написал сам умножение матриц,вроде все работает только почему-то иногда вылетают какие-то левые числа. Никак не пойму в чем дело


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;



Сообщение отредактировано: dimon1988 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






А что обязательно перевернуть все с ног на голову, а потом искать ошибку? Что, нельзя посмотреть, как сделано здесь: Массивы. Матрицы. Типичные задачи. (вычисление произведения "сцепленных" матриц) и сделать по аналогии, а обязательно перепутать ВСЕ циклы местами? Хотя с ТАКИМИ названиями переменных это не мудрено... Что у тебя a.m - число строк или число столбцов - это известно только тебе... Назвать поле, скажем, a.rowsCount - просто никак нельзя, правда? Слишком просто все получится... Сложностей не создаст тебе программа - это нехорошо...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: asdf

Репутация: -  0  +


Эххх,это да,ладно,спасибо. Буду разбираться
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.09.2020 17:50
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name