Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2009, 23:18   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию pascal динамика

Добрый вечер... Мне нужно было написать программу, которая вычисляет средне арифметического значения отрицательных элементов квадратной матрицы A(K,K) расположенных под главной диагональю с ипсользованием динамического массива. Саму матрицу считывают из фала и записывают в файл. Размерность динамического массива задается не пользователем, а при помощи определения размера файла. Вот исходный код:
Код:
program matrix_avg(input, output);
{$R-}
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);
  {+$I}
    reset(fin);
  {-$I}

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.
Программа почему то работает не корректно и ошибку исправить не могу. Скорее всего проблема в считывании матрицы...
Помогите мне исправить задачку...
world12_tk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамика pascal bpystep Фриланс 3 02.04.2009 17:15
Динамика Pascal bpystep Помощь студентам 1 31.03.2009 19:39
Динамика Pascal bpystep Помощь студентам 5 25.03.2009 22:24
Задача (динамика) Witaliy Помощь студентам 3 06.03.2009 19:03