Программа на паскале

В той из двух матриц, которая не содержит ни одного нулевого элемента, изменить её элементы путём вычитания из них среднего арифметического отрицательных элементов этой матрицы.

Разработать программу для обработки двух матриц разного размера с использованием подпрограмм. При разработке программ необходимо выбрать подходящий тип подпрограммы – процедура или функция. Процедуры ввода и вывода считать «стандартными». Модули использовать не нужно. Для каждой матрицы использовать своё заданное значение. Осуществлять досрочный выход из цикла. Необходимо разработать программу. Ввод и вывод из файлов. Программа на паскале

В чем проблема? Что пробовали? Что получилось, что не получилось?

Как здесь соединяются?

  1. Процедуры ввода и вывода считать «стандартными».
  2. Ввод и вывод из файлов.

Непонятно что за “считать”, но там видимо речь о том, что для ввода/вывода надо использовать стандартные процедуры Паскаля read, write.

стандартными способами ввода/вывода считались клавиатура/монитор, а файловый ввод/вывод то уже плюшки :beerparrot:

Стандартные текстовые файлы Input и Output.

В Паскале существуют два стандартных текстовых файла: Input и Output. Эти файлы считаются известными в любой Pascal-программе (иными словами, они описаны в стандартном модуле System). Они обозначают (по терминологии MS-DOS), соответственно, стандартный файл ввода и стандартный файл вывода. Обычно эти стандартные файлы связаны с конкретными физическими устройствами компьютера. Так, файловая переменная Input связана с клавиатурой, файловая переменная Output - с экраном дисплея. Эти файлы считаются заранее открытыми, а соответствующие идентификаторы можно использовать в операциях ввода-вывода.

интересно, если ТС не получил ответ в первых 2 сообщениях и его уже сутки не видно, зайдет он сюда еще? :wink:

Стандартные потоки ввода/вывода можно перенаправить.

ping google.com > 1.txt

Но автор задачи говорил про стандартные процедуры, а не способы ввода/вывода.

я понял что “процедура ввода” это способ которым вводятся данные, а не procedure. ТЗ мутное :wink:

пускай висит код, всеравно тс он уже без надобности

{
    input_1.dat sample:
    3
    -12
    32
    27
}
program Hello;
const 
    A_SIZE = 100;
type 
    ar = array [1..A_SIZE] of real;
var
    a : array [1..2] of ar;
    n : integer;
    i : byte;
    s_i : string;
    filename : string;
    
Function CheckZeroElements(a : ar; n : integer) : boolean;
var 
    i : integer;
begin
    CheckZeroElements := false;
    for i := 1 to n do 
        if(a[i]=0) then 
        begin
            CheckZeroElements := true;
            break
        end
end;

Function GetAverageOfNegatives(a : ar; n : integer) : real;
var 
    i : integer;
    sum : real;
    count : integer;
begin
    count := 0;
    sum := 0;
    for i := 1 to n do 
       if a[i] < 0 then
       begin
            inc(count);
            sum := sum + a[i]
        end;
    if count > 0 then
        GetAverageOfNegatives := sum / count
    else
        GetAverageOfNegatives := 1
end;

Function SubstractAverage(a : ar; n : integer) : ar;
var 
    avg : real;
    i : integer;
begin
    avg := GetAverageOfNegatives(a, n);
    writeln('average of negatives : ', avg:2:2);
    for i := 1 to n do 
      a[i] := a[i] - avg;
    SubstractAverage := a
end;

Function ReadData(InputFileName : string) : ar;
var 
    i : integer;
    a : ar;
    f : text;
begin
    assign(f,InputFileName);
    reset(f);
    readln(f,n);
    for i := 1 to N do
        readln(f, a[i]);
    close(f);
    ReadData := a
end;

Procedure PrintData(a : ar; n : integer; OutputFileName:string);
var
    i : integer;
    f : text;
begin
    assign(f,OutputFileName);
    rewrite(f);
    for i := 1 to N do 
        writeln(f, a[i]:2:2);
    close(f)
end;

begin
  for i := 1 to 2 do
  begin
      writeln('Array #',i,' performing...');
      str(i, s_i);
      filename := 'input_' + s_i + '.dat';
      a[i] := ReadData(filename);
      if CheckZeroElements(a[i],n) then
          begin
            a[i] := SubstractAverage(a[i],n);
            filename := 'output_' + s_i + '.dat';
            PrintData(a[i],n,filename);
            writeln('done. Check <<' + filename + '>>');
          end
      else
            writeln('array has zerovalued elements. Stop execution!')
  end
end.