Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Proj12c;
- {$APPTYPE CONSOLE}
- uses
- SysUtils,
- Windows;
- {Дана матрица A из N строк и N столбцов. Если в матрице А нет элементов, абсолютная величина
- которых отличается от заданной величины Р менее, чем на заданную величину Е, найти для каждой
- ее строки среднее арифметическое положительных элементов.}
- const n_max=5;
- type
- matrix=array[1..n_max,1..n_max] of shortint;
- procedure getConsole;
- begin
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- end;
- procedure check_files(var dat,rez:textfile); //проверка входного и выходного файла
- begin
- if (paramcount = 0) then
- begin
- writeln ('К ярлыку не привязаны файлы.');
- writeln('...');
- readln;
- halt
- end;
- assignfile(dat,paramstr(1));
- assignfile(rez,paramstr(2));
- try //try-except
- Reset(dat);
- except
- writeln('Ошибка при окрытии входного файла.');
- writeln('...');
- readln;
- halt
- end;
- try
- Rewrite(rez);
- except
- writeln('Ошибка при создании или открытии выходного файла.');
- close(dat);
- writeln('...');
- readln;
- halt
- end;
- end;
- procedure check_n(var dat:textfile; out n:shortint; out flag_n:boolean); //проверка размерности матрицы
- begin
- flag_n:=true;
- try
- read(dat,n);
- except
- writeln('Ошибка при чтении размерности матрицы A.');
- flag_n:=false;
- end;
- if ((n<1) or (n>n_max)) and (flag_n=true) then
- begin
- writeln('Размерность матрицы A выходит за диапазон условленных значений.');
- flag_n:=false;
- end;
- end;
- procedure input(var a:matrix; const n:integer; var dat:textfile; out p,e:shortint);
- var
- i,j:shortint;
- begin
- readln(dat,P);
- readln(dat,E);
- for i := 1 to n do
- begin
- for j := 1 to n do
- begin
- read(dat,a[i,j]);
- end;
- end;
- end;
- procedure check_a(var dat:textfile; const n:shortint; out a:matrix; out flag_a:boolean); //ввод и проверка элементов матрицы
- var
- i,j:byte;
- begin
- i:=0;
- while (i<n) and (flag_a=true) do
- begin
- inc(i);
- j:=0;
- while (j<n) and (flag_a=true) do
- begin
- inc(j);
- flag_a:=true;
- try
- read(dat,a[i,j]);
- except
- writeln('Ошибка при чтении A[',i,';',j,'].');
- flag_a:=false;
- end;
- end;
- end;
- end;
- function analysis(const a:matrix; const n,p,e:shortint; out m:shortint):boolean; //проверка на наличие
- var
- i,j:byte;
- flag:boolean;
- begin
- flag:=true;
- for i := 1 to n do
- begin
- for j := 1 to n do
- begin
- if ((abs(abs(a[i,j])-abs(P)))<E) then
- begin
- flag:=false;
- m:=a[i,j];
- end;
- end
- end;
- analysis:=flag;
- end;
- procedure check_average_positive(var rez:textfile; var a:matrix; const n:shortint; out av:real); //поиск среднего арифметического положительных элементов каждой строки
- var
- i,j:byte;
- sum:shortint;
- begin
- sum:=0;
- for i := 1 to n do
- begin
- for j := 1 to n do
- begin
- if (a[i,j])>0 then
- sum:=sum+a[i,j];
- end;
- av:=sum/n;
- writeln(rez, 'Среднее арифметическое ',i,' строки', ' = ',av:4:3,' ');
- sum:=0;
- end;
- end;
- procedure output_a(const a:matrix; const n,p,e:shortint; out rez:textfile); //вывод матрицы
- var
- i,j:byte;
- begin
- writeln(rez,'N = ',n);
- writeln(rez,'P = ',P);
- writeln(rez,'E = ',E);
- writeln(rez,'-----------------');
- writeln(rez,'Введённая матрица');
- writeln(rez,'-----------------');
- for i:=1 to n do
- begin
- for j:=1 to n do
- write(rez,a[i,j],' ');
- writeln(rez);
- end;
- writeln(rez,'----------------------');
- end;
- procedure close_pr(var dat,rez:textfile); //выход из программы
- begin
- close(dat);
- close(rez);
- writeln('...');
- readln;
- halt
- end;
- var
- dat,rez:textfile;
- a:matrix;
- n,p,e,m:shortint;
- av:real;
- flag_n,flag_a:boolean;
- begin
- getConsole();
- check_files(dat,rez);
- check_n(dat,n,flag_n);
- input(a,n,dat,p,e);
- check_a(dat,n,a,flag_a);
- output_a(a,n,p,e,rez);
- if (analysis(a,n,P,E,m) = true) then
- check_average_positive(rez,a,n,av)
- else
- begin
- writeln(rez,'в матрице А есть элемент(=',m,'), его абсолютная величина');
- writeln(rez,'отличается от заданной величины Р(=',p,') менее, ');
- writeln(rez,'чем на заданную величину Е(=',e,')');
- end;
- close_pr(dat,rez);
- end.
Add Comment
Please, Sign In to add comment