![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Tribunal |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
допустим,если использовать самый простой способ хранения разреженных матриц-
хранение значений, номера строк и столбцов в трёх одномерных массивах... собственно,вопрос стоит в том,чтобы складывать и умножать две мптрицы,заданные таким образом. для сложения вроде процедуру придумала...только вот она считает сумму элементов тогда,когда индексы не совпадают... Код var i,j:integer; begin h:=1; for i:=1 to k do for j:=1 to c do begin if (ia[i]=ib[j]) and (ja[i]=jb[j]) then begin cn[h]:=an[i]+bn[j]; ic[h]:=ia[i]; jc[h]:=ja[i]; h:=h+1;end else begin cn[h]:=an[i]; ic[h]:=ia[i]; jc[h]:=ja[i]; h:=h+1; cn[h]:=bn[j]; ic[h]:=ib[j]; jc[h]:=jb[j]; h:=h+1;end; end; end; здесь k,c кол-во полученных элементов в матрицах а и b соответственно. для умножения не могу сообразить условие,по которому выполнялась бы эта операция... не могли бы вы помочь мне в этих вопросах? -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Обязательно самопальные алгоритмы писАть? Чем готовые не устраивают?
AlgLib: Разреженные матрицы |
Tribunal |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
не устраивают способом. мне нужно перемножать и складывать матрицы,заданные совершенно простым способом. да и хотя бы просто интересно,почему не работает полученный мной алгоритм -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата мне нужно перемножать и складывать матрицы,заданные совершенно простым способом. ![]() Цитата почему не работает полученный мной алгоритм Ты полностью программу приведи (вместе с ЗАПОЛНЕНИЕМ матрицы, и желательно с теми данными, на которых ты все это тестировала), а то придется все заново писать, чтобы проверить твои 20 строк, а кому это надо? |
Tribunal |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
в общем так,правда это на делфи
Код type savematr=array [1..100] of integer; var an,bn,cn,dn,ia,ib,ic,id,ja,jb,jc,jd:savematr; k,c,m,n,h:integer; procedure TForm1.Button1Click(Sender: TObject); begin k:=k+1; ia[k]:=StrToInt(Edit1.Text); ja[k]:=StrToInt(Edit2.Text); an[k]:=StrToInt(Edit3.Text); Edit1.Clear; Edit2.Clear; Edit3.Clear; end; procedure TForm1.Button2Click(Sender: TObject); begin c:=c+1; ib[c]:=StrToInt(Edit4.Text); jb[c]:=StrToInt(Edit5.Text); bn[c]:=StrToInt(Edit6.Text); Edit4.Clear; Edit5.Clear; Edit6.Clear; end; procedure TForm1.Button3Click(Sender: TObject); var mia,mib,mja,mjb,i:integer; begin mia:=ia[1]; for i:=1 to k do if ia[i]>mia then mia:=ia[i]; mja:=ja[1]; for i:=1 to k do if ja[i]>mja then mja:=ja[i]; mib:=ib[1]; for i:=1 to c do if ib[i]>mib then mib:=ib[i]; mjb:=jb[1]; for i:=1 to c do if jb[i]>mjb then mjb:=jb[i]; if mia>mib then n:=mia else n:=mib; if mja>mjb then m:=mja else m:=mjb; Label21.Caption:=IntToStr(n); Label22.Caption:=IntToStr(m); end; procedure TForm1.Button4Click(Sender: TObject); var v,b,i,g:integer; begin v:=StrToInt(Edit7.Text); b:=StrToInt(Edit8.Text); for i:=1 to k do if (ia[i]=v) and (ja[i]=b) then begin Label11.Caption:=IntTostr(an[i]); g:=1;end; if g<>1 then Label11.Caption:=IntToStr(0); end; procedure TForm1.Button5Click(Sender: TObject); var v,b,i,g:integer; begin v:=StrToInt(Edit7.Text); b:=StrToInt(Edit8.Text); for i:=1 to c do if (ib[i]=v) and (jb[i]=b) then begin Label11.Caption:=IntTostr(bn[i]); g:=1;end; if g<>1 then Label11.Caption:=IntToStr(0); end; procedure TForm1.Button6Click(Sender: TObject); var i,j:integer; begin h:=1; for i:=1 to k do for j:=1 to c do begin if (ia[i]=ib[j]) and (ja[i]=jb[j]) then begin cn[h]:=an[i]+bn[j]; ic[h]:=ia[i]; jc[h]:=ja[i]; h:=h+1;end else begin cn[h]:=an[i]; ic[h]:=ia[i]; jc[h]:=ja[i]; h:=h+1; cn[h]:=bn[j]; ic[h]:=ib[j]; jc[h]:=jb[j]; h:=h+1;end; end; end; procedure TForm1.Button7Click(Sender: TObject); var v,b,i,g:integer; begin v:=StrToInt(Edit9.Text); b:=StrToInt(Edit10.Text); for i:=1 to h do if (ic[i]=v) and (jc[i]=b) then begin Label15.Caption:=IntTostr(cn[i]); g:=1;end; if g<>1 then Label15.Caption:=IntToStr(0); end; end. ещё программу саму прилагаю.посмотрите,пожалуйста Прикрепленные файлы ![]() -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
![]() Неужели нельзя давать "говорящие" имена переменным и процедурам? "A", "C", "K", "CN" ну не говорят они ничего постороннему человеку !!! Чего куда вводить? Ты бы лучше сделала процедуру, в которую поступает разреженная матрица в общем виде, а на выходе - в твоем... А так - извини, но тыкать по кнопкам в надежде, что делаешь это правильно, НЕ ЗНАЯ (хотя я просил тебя привести) исходных данных - это пускай кто-нибудь другой делает... P.S. Если это нужно тебе именно на Дельфи - я перенесу тему в соответствующий раздел... Эскизы прикрепленных изображений ![]() |
![]() ![]() |
![]() |
Текстовая версия | 9.07.2025 1:46 |