Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program lab11;
- {$APPTYPE CONSOLE}
- uses
- SysUtils,
- Windows;
- const n_max=10;
- type
- matrix=array[1..n_max,1..n_max] of integer;
- mass=array[1..n_max] of integer;
- procedure rus; {русификация}
- begin
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- end;
- procedure check_files(var dat1,dat2,dat3,rez:textfile); {проверка входных файлов}
- begin
- if (paramcount = 0) then
- begin
- writeln ('К ярлыку не привязаны файлы.');
- writeln('...');
- readln;
- halt
- end;
- assignfile(dat1,paramstr(1));
- assignfile(dat2,paramstr(2));
- assignfile(dat3,paramstr(3));
- assignfile(rez,paramstr(4));
- try
- Reset(dat1);
- except
- writeln('Ошибка при окрытии входного файла №1.');
- writeln('...');
- readln;
- halt
- end;
- try
- Reset(dat2);
- except
- writeln('Ошибка при окрытии входного файла №2.');
- close(dat1);
- writeln('...');
- readln;
- halt
- end;
- try
- Reset(dat3);
- except
- writeln('Ошибка при окрытии входного файла №3.');
- close(dat1);
- close(dat2);
- writeln('...');
- readln;
- halt
- end;
- try
- Rewrite(rez);
- except
- writeln('Ошибка при создании или открытии выходного файла.');
- close(dat1);
- close(dat2);
- close(dat3);
- writeln('...');
- readln;
- halt
- end;
- end;
- procedure close_pr(var dat1,dat2,dat3,rez:textfile); {выход из программы}
- begin
- close(dat1);
- close(dat2);
- close(dat3);
- close(rez);
- writeln('...');
- readln;
- halt
- end;
- procedure check_n(var dat1:textfile; matrix_name:string; var n1:integer; out flag_n1:boolean); {ввод и проверка N на читабельность и диапазон}
- begin
- try
- read(dat1, n1);
- except
- writeln('Ошибка при чтении размерности матрицы ',matrix_name,'.');
- flag_n1:=false;
- end;
- flag_n1:=true;
- if ((n1<1) or (n1>n_max)) and (flag_n1=true) then
- begin
- writeln('Размерность матрицы ',matrix_name,' выходит за диапазон условленных значений.');
- flag_n1:=false;
- end;
- end;
- procedure check_mass(var dat1:textfile; matrix_name:string; var a:matrix; var n1:integer; out flag_a:boolean); {ввод массива и проверка его элементов}
- var
- i,j:integer;
- begin
- i:=0;
- flag_a:=false;
- while (i<n1) and (flag_a=false) do
- begin
- inc(i);
- j:=0;
- while (j<n1) and (flag_a=false) do
- begin
- inc(j);
- try
- read(dat1, a[i,j]);
- except
- writeln('Ошибка при чтении',matrix_name,'[',i,';',j,'].');
- flag_a:=true
- end;
- if (abs(a[i,j])>10)and (flag_a=false) then
- begin
- writeln(matrix_name,'[',i,';',j,'] выходит за диапазон условленных значений.');
- flag_a:=true
- end;
- end;
- readln(dat1);
- end;
- end;
- procedure quest(const a:matrix; var n1:integer; out d:mass; out inv1:integer); {подсчет инверсий и форммирование массива}
- var
- i,j,count:integer;
- begin
- inv1:=0;
- for i:=1 to n1 do
- begin
- count:=0;
- for j:=1 to n1-1 do
- begin
- if (a[i,j]>a[i,j+1]) then
- inc(count);
- end;
- if count>2 then
- d[i]:=1
- else
- d[i]:=0;
- inv1:=inv1+count;
- end;
- end;
- procedure output_matrix(var rez:textfile; matrix_name:string; const a:matrix; var n1:integer); {вывод матрицы}
- var
- i,j:integer;
- begin
- writeln(rez,'Матрица ',matrix_name,' из',n1:2,' строк и',n1:2,' столбцов:');
- writeln(rez);
- for i:=1 to n1 do
- begin
- for j:=1 to n1 do
- begin
- write(rez, a[i,j]:5,' ');
- end;
- writeln(rez);
- end;
- writeln(rez);
- end;
- procedure output_mass(var rez:textfile; mass_name:string; const d:mass; var n1:integer); {вывод массива}
- var
- i:integer;
- begin
- writeln(rez);
- writeln(rez,'Массив ',mass_name,': ');
- for i:=1 to n1 do
- begin
- write(rez,d[i],' ');
- end;
- writeln(rez);
- end;
- procedure search_max(var rez: textfile; var inv1,inv2,inv3:integer); {поиск максимального количества инверсий}
- begin
- if (inv1=0) and (inv2=0) and (inv3=0) then
- begin
- writeln(rez);
- writeln(rez,'Ни в одной из матриц нет инверсий.')
- end
- else
- begin
- writeln(rez);
- writeln(rez,'Общее количество инверсий матрицы A: ', inv1);
- writeln(rez);
- writeln(rez);
- writeln(rez,'Общее количество инверсий матрицы B: ', inv2);
- writeln(rez);
- writeln(rez);
- writeln(rez,'Общее количество инверсий матрицы C: ', inv3);
- writeln(rez);
- if inv1>inv2 then
- begin
- if inv1>inv3 then
- writeln(rez,'В матрице A самое большое количество инверсий.')
- else
- writeln(rez,'В матрице C самое большое количество инверсий.');
- end
- else
- begin
- if inv2>inv3 then
- writeln(rez,'В матрице B самое большое количество инверсий.')
- else
- writeln(rez,'В матрице C самое большое количество инверсий.');
- end;
- end;
- end;
- var
- n1,n2,n3,inv1,inv2,inv3:integer;
- a,b,c:matrix;
- d,e,f:mass;
- dat1,dat2,dat3,rez:textfile;
- a_name,b_name,c_name,d_mass,e_mass,f_mass:string;
- flag_n1,flag_n2,flag_n3,flag_a,flag_b,flag_c:boolean;
- begin
- a_name:='A';
- b_name:='B';
- c_name:='C';
- d_mass:='D';
- e_mass:='E';
- f_mass:='F';
- rus;
- check_files(dat1,dat2,dat3,rez);
- check_n(dat1,a_name,n1,flag_n1);
- if (flag_n1=false) then
- close_pr(dat1,dat2,dat3,rez);
- check_n(dat2,b_name,n2,flag_n2);
- if (flag_n2=false) then
- close_pr(dat1,dat2,dat3,rez);
- check_n(dat3,c_name,n3,flag_n3);
- if (flag_n3=false) then
- close_pr(dat1,dat2,dat3,rez);
- check_mass(dat1,a_name,a,n1,flag_a);
- if (flag_a=true) then
- close_pr(dat1,dat2,dat3,rez);
- check_mass(dat2,b_name,b,n2,flag_b);
- if (flag_b=true) then
- close_pr(dat1,dat2,dat3,rez);
- check_mass(dat3,c_name,c,n3,flag_c);
- if (flag_c=true) then
- close_pr(dat1,dat2,dat3,rez);
- closefile(dat1);
- closefile(dat2);
- closefile(dat3);
- quest(a,n1,d,inv1);
- quest(b,n2,e,inv2);
- quest(c,n3,f,inv3);
- writeln(rez,'Лабораторная работа №11.');
- writeln(rez);
- output_matrix(rez,a_name,a,n1);
- output_matrix(rez,b_name,b,n2);
- output_matrix(rez,c_name,c,n3);
- writeln(rez,'___________________________________________________________________________');
- output_mass(rez,d_mass,d,n1);
- output_mass(rez,e_mass,e,n2);
- output_mass(rez,f_mass,f,n3);
- search_max(rez,inv1,inv2,inv3);
- closefile(rez);
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement