Advertisement
silleghost

Untitled

Dec 12th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.60 KB | None | 0 0
  1. program lab11;
  2.  
  3. {R+}
  4.  
  5. const Nmax=10;
  6.  
  7. type matrix=array[1..Nmax,1..Nmax] of integer;
  8.      flags=array[1..3] of boolean;
  9.      averages=array[1..3] of real;
  10.  
  11. Procedure IO(var file1,file2:textfile; const name:char; out M:matrix; out n:byte);
  12. var i,j:byte;
  13. Begin
  14.   readln(file1,n);
  15.   for i:=1 to n do Begin
  16.       for j:=1 to n do read(file1,M[i,j]);
  17.   end;
  18.   writeln(file2,'Исходная матрица ',name,'(',n,'x',n,')',': ');
  19.   for i:=1 to n do Begin
  20.       for j:=1 to n do write(file2,M[i,j],' ');
  21.   writeln(file2,' ');
  22.   end;
  23. End;
  24.  
  25. Procedure find_average(const M:matrix; const n:integer; out average_i:real; out flag_i:boolean);
  26. var i,j:byte;
  27.     sum,count:integer;
  28. Begin
  29. sum:=0;
  30. count:=0;
  31. for i:=1 to n do
  32.     if M[i,n]=1 then Begin
  33.     flag_i:=True;
  34.     for j:=1 to n do Begin
  35.         sum:=sum+M[i,j];
  36.         count:=count+1;
  37.         average_i:=sum/count;
  38.      end;
  39.     end;
  40. end;
  41.  
  42. Function find_max(const average:averages; const flag:flags; out flag_max:boolean):real;
  43. var i:byte;
  44.     max:real;
  45. Begin
  46. flag_max:=false;
  47. i:=1;
  48. while (i<=3) and not flag_max do Begin
  49.       if (flag[i]=true) then Begin
  50.       max:=average[i];
  51.       flag_max:=true;
  52.       end
  53.       else inc(i);
  54.       end;
  55. if (flag_max=true) then Begin
  56.    while (i<=3) do Begin
  57.        if (flag[i]=true) and (average[i]>max)  then find_max:=average[i];
  58.        inc(i);
  59.    end;
  60. end;
  61. end;
  62.  
  63. Procedure print_result(var fout:textfile; const flag_max:boolean; const max:real; const average:averages; const flag:flags);
  64. var i:byte;
  65. begin
  66. for i:=1 to 3 do Begin
  67. if (flag[i]=true) then writeln(fout,'Среднее арифметическое ',i,' матрицы равно: ',average[i]:3:3)
  68. else writeln(fout,'Среднее арифметическое ',i,' матрицы не существует');
  69. end;
  70. if (flag_max=True) then writeln(fout,'Максимум равен ',max:3:3)
  71. else writeln(fout,'Не удалось найти максимум');
  72. end;
  73.  
  74. var A,B,C:matrix;
  75.   fin1,fin2,fin3,fout:textfile;
  76.   na,nb,nc:byte;
  77.   average:averages;
  78.   flag:flags;
  79.   max:real;
  80.   flag_max:boolean;
  81.  
  82.  
  83. begin
  84.   Assignfile(fin1,Paramstr(1));Assignfile(fin2,Paramstr(2));Assignfile(fin3,Paramstr(3));Assignfile(fout,Paramstr(4));
  85.   Reset(fin1);Reset(fin2);Reset(fin3);Rewrite(fout);
  86.   IO(fin1,fout,'A',A,na);
  87.   IO(fin2,fout,'B',B,nb);
  88.   IO(fin3,fout,'C',C,nc);
  89.   find_average(A,na,average[1],flag[1]);
  90.   find_average(B,nb,average[2],flag[2]);
  91.   find_average(C,nc,average[3],flag[3]);
  92.   max:=find_max(average,flag,flag_max);
  93.   print_result(fout,flag_max,max,average,flag);
  94.   closefile(fin1);
  95.   closefile(fout);
  96. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement