![]() |
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 Пол: Мужской Репутация: ![]() ![]() ![]() |
Коллеги, вот что у меня получилось
Исходный код program Matrix_Process; (****************************************************** * Демонстрация работы с двумерными массивами * * (матрицами) * ******************************************************) const NMAX = 3000; MMAX = 3000; type Matrix = array [1..NMAX, 1..MMAX] of real; var Funk, Matr: 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 (Var 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; (****************************************************** Процедура печати матрицы размерности nn в текстовый файл ******************************************************) procedure PrintMatrixToFile (Var 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(Var Matrix_: Matrix; nn, mm: integer); var i,j,k,p: integer; Sum1,Sum2,Sum3: real; 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; end; (*********************************************** Процедура замены точки на запятую в текстовом файле ************************************************) procedure RedactirFile; var f,g:text; char_:char; begin assign(g,'matres.txt'); reset(g); assign (f,'matres_v.txt'); rewrite(f); while not eof(g) do begin while not eoln(g) do begin read(g,char_); if char_='.' then write(f,',') else write (f,char_); end; readln(g); writeln(f); end; close(f); close(g); end; begin EnterMatrixFromFile; readln; {PrintMatrix (Matr,n,m);} Funky (Matr,n,m); PrintMatrixToFile(Funk,n); RedactirFile; end. |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 12:40 |