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

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

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

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


Новичок
*

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

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


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


Гость






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

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


Новичок
*

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

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


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

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


Гость






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

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

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

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


Новичок
*

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

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


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


Новичок
*

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

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


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

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


Новичок
*

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

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


Спасибо большое
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
dimon1988
сообщение 5.06.2007 10:36
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.06.2007 12:47
Сообщение #10


Гость






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

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

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


Новичок
*

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

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


А,ясно. Большое спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
dimon1988
сообщение 5.06.2007 20:05
Сообщение #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 - 5.06.2007 20:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.06.2007 20:15
Сообщение #13


Гость






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


Новичок
*

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

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


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

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

 



- Текстовая версия 19.07.2025 16:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"