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

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

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 не работает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
ProtasSoft
сообщение 16.08.2005 15:48
Сообщение #2


Новичок
*

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

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


Коллеги, вот что у меня получилось с учетом Ваших советов и вроде рабоает.
Правда, я не смог справиться с глобальной переменной массива Matr в первой процедуре ввода массива из файла.
Может чего подскажите.

Кстати, изменил размерность до 1000Х2000 программа перстала работать. unsure.gif

Исходный код
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.08.2005 16:35
Сообщение #3


Гость






Цитата(ProtasSoft @ 16.08.05 15:48)
Кстати, изменил размерность до 1000Х2000 программа перстала работать. unsure.gif

Насколько я вижу, эта программа и не должна работать при больших размерностях - здесь 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   Коллеги, вот что у меня получилось с учетом Ваших ...   16.08.2005 15:48
volvo   Насколько я вижу, эта программа и не должна работ...   16.08.2005 16:35
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


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

 



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