Pohuyumer

Lab 12 unit check

Jan 24th, 2020 (edited)
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.00 KB | None | 0 0
  1. program Proj12c;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils,
  7.   Windows;
  8.  
  9. {Дана матрица A из N строк и N столбцов. Если в матрице А нет элементов, абсолютная величина
  10. которых отличается от заданной величины Р менее, чем на заданную величину Е, найти для каждой
  11. ее строки среднее арифметическое положительных элементов.}
  12.  
  13.   const n_max=5;
  14.  
  15.   type
  16.      matrix=array[1..n_max,1..n_max] of shortint;
  17.  
  18. procedure getConsole;
  19.     begin
  20.         SetConsoleCP(1251);
  21.         SetConsoleOutputCP(1251);
  22.     end;
  23.  
  24. procedure check_files(var dat,rez:textfile); //проверка входного и выходного файла
  25.     begin
  26.       if (paramcount = 0) then
  27.       begin
  28.         writeln ('К ярлыку не привязаны файлы.');
  29.         writeln('...');
  30.         readln;
  31.         halt
  32.       end;
  33.       assignfile(dat,paramstr(1));
  34.       assignfile(rez,paramstr(2));
  35.  
  36.     try //try-except
  37.       Reset(dat);
  38.     except
  39.       writeln('Ошибка при окрытии входного файла.');
  40.       writeln('...');
  41.       readln;
  42.       halt
  43.       end;
  44.  
  45.     try
  46.       Rewrite(rez);
  47.     except
  48.       writeln('Ошибка при создании или открытии выходного файла.');
  49.       close(dat);
  50.       writeln('...');
  51.       readln;
  52.       halt
  53.       end;
  54.     end;
  55.  
  56. procedure check_n(var dat:textfile; out n:shortint; out flag_n:boolean); //проверка размерности матрицы
  57.     begin
  58.       flag_n:=true;
  59.       try
  60.         read(dat,n);
  61.       except
  62.         writeln('Ошибка при чтении размерности матрицы A.');
  63.         flag_n:=false;
  64.         end;
  65.       if ((n<1) or (n>n_max)) and (flag_n=true) then
  66.         begin
  67.           writeln('Размерность матрицы A выходит за диапазон условленных значений.');
  68.           flag_n:=false;
  69.         end;
  70.     end;
  71.  
  72. procedure input(var a:matrix; const n:integer; var dat:textfile; out p,e:shortint);
  73.   var
  74.      i,j:shortint;
  75.   begin
  76.      readln(dat,P);
  77.      readln(dat,E);
  78.      for i := 1 to n do
  79.          begin
  80.             for j := 1 to n do
  81.                 begin
  82.                    read(dat,a[i,j]);
  83.                 end;
  84.          end;
  85.          
  86.   end;
  87.  
  88. procedure check_a(var dat:textfile; const n:shortint; out a:matrix; out flag_a:boolean); //ввод и проверка элементов матрицы
  89.     var
  90.       i,j:byte;
  91.     begin
  92.        i:=0;
  93.        while (i<n) and (flag_a=true) do
  94.              begin
  95.                 inc(i);
  96.                 j:=0;
  97.                 while (j<n) and (flag_a=true) do
  98.                       begin
  99.                          inc(j);
  100.                          flag_a:=true;
  101.                          try
  102.                             read(dat,a[i,j]);
  103.                          except
  104.                             writeln('Ошибка при чтении A[',i,';',j,'].');
  105.                             flag_a:=false;
  106.                          end;
  107.                       end;
  108.              end;
  109.     end;
  110.  
  111. function analysis(const a:matrix; const n,p,e:shortint; out m:shortint):boolean; //проверка на наличие
  112.     var
  113.       i,j:byte;
  114.       flag:boolean;
  115.     begin
  116.        flag:=true;
  117.        for i := 1 to n do
  118.            begin
  119.               for j := 1 to n do
  120.                   begin
  121.                      if ((abs(abs(a[i,j])-abs(P)))<E) then
  122.                         begin
  123.                            flag:=false;
  124.                            m:=a[i,j];
  125.                         end;
  126.                   end
  127.            end;
  128.        analysis:=flag;
  129.     end;
  130.  
  131. procedure check_average_positive(var rez:textfile; var a:matrix; const n:shortint; out av:real); //поиск среднего арифметического положительных элементов каждой строки
  132.     var
  133.       i,j:byte;
  134.       sum:shortint;
  135.     begin
  136.        sum:=0;
  137.        for i := 1 to n do
  138.            begin
  139.               for j := 1 to n do
  140.                   begin
  141.                      if (a[i,j])>0 then
  142.                         sum:=sum+a[i,j];
  143.                   end;
  144.               av:=sum/n;
  145.               writeln(rez, 'Среднее арифметическое ',i,' строки', ' = ',av:4:3,'  ');
  146.               sum:=0;
  147.            end;
  148.     end;
  149.  
  150. procedure output_a(const a:matrix; const n,p,e:shortint; out rez:textfile); //вывод матрицы
  151.     var
  152.       i,j:byte;
  153.     begin
  154.        writeln(rez,'N = ',n);
  155.        writeln(rez,'P = ',P);
  156.        writeln(rez,'E = ',E);
  157.        writeln(rez,'-----------------');
  158.        writeln(rez,'Введённая матрица');
  159.        writeln(rez,'-----------------');
  160.        for i:=1 to n do
  161.            begin
  162.               for j:=1 to n do
  163.                   write(rez,a[i,j],' ');
  164.                   writeln(rez);
  165.            end;
  166.        writeln(rez,'----------------------');
  167.     end;
  168.  
  169. procedure close_pr(var dat,rez:textfile); //выход из программы
  170.     begin
  171.         close(dat);
  172.         close(rez);
  173.         writeln('...');
  174.         readln;
  175.         halt
  176.     end;
  177.  
  178. var
  179.     dat,rez:textfile;
  180.     a:matrix;
  181.     n,p,e,m:shortint;
  182.     av:real;
  183.     flag_n,flag_a:boolean;
  184.  
  185. begin
  186.    getConsole();
  187.  
  188.    check_files(dat,rez);
  189.  
  190.    check_n(dat,n,flag_n);
  191.  
  192.    input(a,n,dat,p,e);
  193.  
  194.    check_a(dat,n,a,flag_a);
  195.  
  196.    output_a(a,n,p,e,rez);
  197.  
  198.    if (analysis(a,n,P,E,m) = true) then
  199.       check_average_positive(rez,a,n,av)
  200.    else
  201.       begin
  202.          writeln(rez,'в матрице А есть элемент(=',m,'), его абсолютная величина');
  203.          writeln(rez,'отличается от заданной величины Р(=',p,') менее, ');
  204.          writeln(rez,'чем на заданную величину Е(=',e,')');
  205.       end;
  206.  
  207.    close_pr(dat,rez);
  208. end.
Add Comment
Please, Sign In to add comment