Добрый вечер... Мне нужно было написать программу, которая вычисляет средне арифметического значения отрицательных элементов квадратной матрицы A(K,K) расположенных под главной диагональю с ипсользованием динамического массива. Саму матрицу считывают из фала и записывают в файл. Размерность динамического массива задается не пользователем, а при помощи определения размера файла. Вот исходный код:
Код:
program matrix_avg(input, output);
uses CRT;
const
MAX_DIM = 50;
type
Matrix = array [1..1, 1..1] of integer;
Matrix_din=^Matrix;
procedure Send;
begin
CLRSCR;
writeln ('Программа для вычисления средне арифметического значения отрицательных элементов квадратной матрицы A(K,K)');
writeln ('расположенных под главной диагональю');
writeln ('для продолжении работы нажмите клавишу Enter');
readln;
end;
procedure InputFile(var input_name:string;var fin:text);
begin
writeln('введите имя файла');
readln(input_name);
assign(fin,input_name);
reset(fin);
end;
procedure Dinamycs(input_name:string;var matr:matrix_din;var size:longint);
var
fin_temp:File of char;
begin
assign(fin_temp,input_name);
reset(fin_temp);
size:=FileSize(fin_temp);
Getmem(matr,size);
close(fin_temp);
end;
procedure InputMatrix (var fin:text; var dim:integer; var matr:matrix_din);
var
i,j:integer;
begin
readln(fin,dim);
for i:=1 to dim do
for j:=1 to dim do
begin
read (fin,matr^[i,j]);
end;
close(fin);
end;
procedure OutputMatrix(dim:integer; var matr:matrix_din);
var
i,j:integer;
begin
writeln('Матрица прочитана успешно');
for i := 1 to dim do
begin
for j := 1 to dim do
write(matr^[i, j] , ' ');
writeln;
end;
end;
procedure AverageArithmeticsValueOfMatrix (size:longint;dim:integer; var matr:matrix_din;
var num_neg: integer;var sum_neg: double);
var
i, j: integer;
begin
sum_neg := 0;
num_neg := 0;
for i := 2 to dim do
for j := 1 to i-1 do
if matr^[i, j] < 0 then
begin
num_neg := num_neg + 1;
sum_neg := sum_neg + matr^[i, j];
end;
FreeMem(matr,size);
end;
procedure OutputInFileAverageArithmeticsValueOfMatrix (num_neg:integer; sum_neg:double);
var
sum:double;
fout:text;
begin
assign(fout,'output.txt');
rewrite(fout);
if num_neg > 0 then
begin
sum:= -1*sum_neg/num_neg;
write(fout,'среднее арифметическое значение под главной диагональю = ',sum:4:3);
end
else
write(fout,'отрицательных элементов под главной диагональю нет');
close(fout);
writeln('результаты программы сохранены в файле OUTPUT.TXT');
writeln ('для завершении работы нажмите клавишу Enter');
readln;
end;
var
matr:Matrix_din;
dim: integer;
sum_neg: double;
num_neg: integer;
fin:text;
input_name:string;
size:longint;
begin
Send;
InputFile(input_name,fin);
Dinamycs(input_name,matr,size);
InputMatrix (fin,dim,matr);
OutputMatrix(dim,matr);
AverageArithmeticsValueOfMatrix (size,dim,matr,num_neg,sum_neg);
OutputInFileAverageArithmeticsValueOfMatrix (num_neg,sum_neg);
end.
Программа почему то работает не корректно и ошибку исправить не могу. Скорее всего проблема в считывании матрицы...
Помогите мне исправить задачку...