![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
ProtasSoft |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задана большая матрица вещественных чисел размером 1000 на 2000 в текстовом файле.
Необходимо произвести попарную обработку обработку ее строк, т.е. для каждой пары СТРОКАi и СТРОКАj строк необходимо вычислить функцию от элементов этих строк, например, Ain - элементы СТРОКИi и Bjn - элементы СТРОКИj. Из результатов вычисления функции F(Ai1,...,Ai1000;Bj1,...,Bj2000) сформировать новую матрицу и записать в новый файл. Подскажите как мне действовать. Насколько я понимаю с большими массивами Borland Pascal не работает. |
![]() ![]() |
ProtasSoft |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: ![]() ![]() ![]() |
Коллеги, вот что у меня получилось с учетом Ваших советов и вроде рабоает.
Правда, я не смог справиться с глобальной переменной массива Matr в первой процедуре ввода массива из файла. Может чего подскажите. Кстати, изменил размерность до 1000Х2000 программа перстала работать. ![]() Исходный код program Matrix_Process; (****************************************************** * Демонстрация работы с двумерными массивами * * (матрицами) * ******************************************************) const NMAX = 20; MMAX = 20; type Matrix = array [1..NMAX, 1..MMAX] of real; var Matr, M1,M2: Matrix; n,m: integer; (*************************************************** Процедура ввода матрицы из текстового файла ****************************************************) procedure EnterMatrixFromFile; var i,j: integer; f:text; begin assign(f,'matrixdat.txt'); reset(f); i := 1; while not eof(f) do begin j := 1; while not eoln(f) do begin read(f,Matr[i, j]); writeln('Matr[',i,',',j,']',Matr[i,j]); inc(j); end; readln(f); inc(i); end; close(f); n:=i-1; m:=j-1; writeln('n=',n,',','m=',m); end; (****************************************************** Процедура печати матрицы реальной размерности (n,m) на экране, располагающая одну строку матрицы на одной строке экрана ******************************************************) procedure PrintMatrix (Matrix_: Matrix; nn, mm: integer); var i, j: integer; begin for i:=1 to nn do begin for j:=1 to mm do writeln('Matrix_[',i,',',j,']',Matrix_[i,j]); writeln; end; end; (****************************************************** Процедура вывода квадратной матрицы размерности (n,n) в текстовый файл ******************************************************) procedure PrintMatrixToFile (Matrix_: Matrix; nn: integer); var i, j: integer; g:text; begin assign(g,'matres.txt'); rewrite(g); for i:=1 to nn do begin for j:=1 to nn do begin write (g,Matrix_[i,j]); end; writeln(g); end; close(g); end; procedure Funky(Matrix_: Matrix; nn, mm: integer); var i,j,k,p: integer; Sum1,Sum2,Sum3: real; Funk:Matrix; begin for k:=1 to nn do begin for p:=1 to nn do begin Sum1:=0; Sum2:=0; Sum3:=0; for j:=1 to mm do begin Sum1:=Sum1+Matrix_[k,j]; Sum2:=Sum2+Matrix_[p,j]; end; for j:=1 to mm do begin If (Matrix_[k,j]+Matrix_[p,j])<>0 then Sum3:=Sum3 + 1/(Matrix_[k,j]+Matrix_[p,j])* (Matrix_[k,j]/Sum1-Matrix_[p,j]/Sum2)* (Matrix_[k,j]/Sum1-Matrix_[p,j]/Sum2) else Sum3:=Sum3; end; Funk[k,p]:=Sum1*Sum2*Sum3; writeln('Funk[',k,',',p,']',Funk[k,p]); end; end; PrintMatrixToFile(Funk,nn); end; begin EnterMatrixFromFile; readln; PrintMatrix (Matr,n,m); PrintMatrixToFile(Matr,n); readln; Funky (matr,n,m); readln; end. Сообщение отредактировано: volvo - 9.09.2005 10:00 |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата(ProtasSoft @ 16.08.05 15:48) Кстати, изменил размерность до 1000Х2000 программа перстала работать. ![]() Насколько я вижу, эта программа и не должна работать при больших размерностях - здесь Var тоже был упущен, следовательно при изменении размерности до 1000х2000 программа отказывается работать - просто переполняется стек, так как массив передается не по ссылке, а по значению. Вот так измени: procedure Funky(Var Matrix_: Matrix; nn, mm: integer); |
![]() ![]() |
![]() |
Текстовая версия | 23.06.2025 0:31 |