1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| ProtasSoft |
12.08.2005 17:18
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
Задана большая матрица вещественных чисел размером 1000 на 2000 в текстовом файле.
Необходимо произвести попарную обработку обработку ее строк, т.е. для каждой пары СТРОКАi и СТРОКАj строк необходимо вычислить функцию от элементов этих строк, например, Ain - элементы СТРОКИi и Bjn - элементы СТРОКИj. Из результатов вычисления функции F(Ai1,...,Ai1000;Bj1,...,Bj2000) сформировать новую матрицу и записать в новый файл. Подскажите как мне действовать. Насколько я понимаю с большими массивами Borland Pascal не работает. |
![]() ![]() |
| ProtasSoft |
16.08.2005 15:48
Сообщение
#2
|
|
Новичок ![]() Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
Коллеги, вот что у меня получилось с учетом Ваших советов и вроде рабоает.
Правда, я не смог справиться с глобальной переменной массива 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 |
16.08.2005 16:35
Сообщение
#3
|
|
Гость |
Цитата(ProtasSoft @ 16.08.05 15:48) Кстати, изменил размерность до 1000Х2000 программа перстала работать. Насколько я вижу, эта программа и не должна работать при больших размерностях - здесь Var тоже был упущен, следовательно при изменении размерности до 1000х2000 программа отказывается работать - просто переполняется стек, так как массив передается не по ссылке, а по значению. Вот так измени: procedure Funky(Var Matrix_: Matrix; nn, mm: integer); |
ProtasSoft Обработка прямоугольных матриц 12.08.2005 17:18
kent
Используй динамическую матрицу. 12.08.2005 17:27
volvo
Borland Pascal - нет. Зато Free Pascal прекрасно ... 12.08.2005 17:32
ProtasSoft У меня нет Free Pascal. Если поделитесь дистрибути... 12.08.2005 17:51
volvo klem4,
Если бы тебе предложили тот компилятор, ко... 13.08.2005 11:01
volvo Последнюю версию (2.0.0) можно взять на официально... 12.08.2005 18:02
Malice
Совсем не обязательно считывать сразу весь масси... 12.08.2005 19:05
volvo
... изобретения велосипеда. А зачем? Если на 32-б... 12.08.2005 19:21
Malice Согласен, не подумай, что я против FP, но вдруг эт... 12.08.2005 19:27
klem4 А вот мое мнение что FPC тут не выход, так как нав... 13.08.2005 10:05
ProtasSoft FPC я скачал и установил.
Вопрос следующий: подск... 15.08.2005 12:08
klem4 Не очень ясен вопрос... могу предположить что тебе... 15.08.2005 12:09
volvo ProtasSoft,
не путай такое (Паскаль не использует ... 15.08.2005 15:19
ProtasSoft procedure EnterMatrixFromFile (var Matr: Matrix);
... 15.08.2005 16:32
Malice
j всегда равен 1 ? Поставь j=1 до цикла While. 15.08.2005 16:57
klem4 у тебя файл текстовый и информация в нем записана ... 15.08.2005 16:55
klem4 примерно это должно выглядеть вот так :
{$N... 15.08.2005 17:36
volvo klem4, смысл читать содержимое, как строку? Внимат... 15.08.2005 18:44
Malice
iy тоже, имхо, сбрасывать надо.. 15.08.2005 19:38
ProtasSoft Вот этот код работает
program ReadMatrixFromFile;... 16.08.2005 9:25
volvo Да, :rolleyes: тогда iy := 1 между первым и вторы... 15.08.2005 19:48
volvo ProtasSoft, ТОЛЬКО приведенный тобой код работает?... 16.08.2005 9:36
ProtasSoft Если что-то не так сказал прошу прощения.
Далее на... 16.08.2005 10:28
klem4
1) для функции funky не определены размеры прочт... 16.08.2005 10:40
klem4 Я убрал все синтаксические ошибки, и кое-что добав... 16.08.2005 11:29
volvo klem4, как ты думаешь, что будет в массиве Matr по... 16.08.2005 12:52
klem4 Да, это я проглядел :yes: ... ProtasSoft в заголо... 16.08.2005 12:54
ProtasSoft Изменил , все равно не работает. :unsure: 16.08.2005 16:51
volvo Значит, так... Поменяй следующее:
1. procedure Pr... 16.08.2005 17:05
ProtasSoft Я извиняюсь, вроде заработало. 16.08.2005 17:25
ProtasSoft Коллеги, вот что у меня получилось
program Matrix... 17.08.2005 11:59
ProtasSoft Коллеги, пробовал ниже приведенную программку на м... 18.08.2005 10:52
volvo Заархивируй свой исходник вместе с файлом данных и... 18.08.2005 11:05
volvo ProtasSoft, та программа, которую ты привел, завер... 18.08.2005 11:39
ProtasSoft Огромное спасибо. Заработало!
:flowers:
Сообщ... 18.08.2005 12:18
ProtasSoft Снабдил программу Гаммой-функцией и процедурой инт... 19.08.2005 16:55
volvo Если ты про проблему с компиляцией функции Simps, ... 19.08.2005 17:13
ProtasSoft После запуска проги выскакивает системная ошибка.... 19.08.2005 17:34
volvo const
NMAX = 20;
MMAX = 20;
увеличивать не пр... 19.08.2005 17:43
volvo А вот и причина возникающей ошибки (RunTime Error ... 19.08.2005 18:08
ProtasSoft Можно это так обойти
function Gamma(x: extended):... 19.08.2005 18:33
klem4 Так к слову : в паскале есть встроенная константа ... 19.08.2005 18:46
volvo
:yes: ProtasSoft, ты будешь смеяться, но и функц... 19.08.2005 18:50![]() ![]() |
|
Текстовая версия | 8.12.2025 14:12 |