Целочисленная квадратная матрица - Pascal (3937)
Формулировка задачи:
Решение задачи: «Целочисленная квадратная матрица»
const n=6; type mas=array[1..n,1..n] of integer; var a:mas; z,k,kk, i,j,ii,jj, ki,kj,tmp:integer; procedure vvod_mas(var x:mas;f:boolean); var i,j:integer; begin for i:=1 to n do for j:=1 to n do if f then a[i,j]:=random(100) else begin write('a[',i,',',j,']=');readln(a[i,j]) end end; procedure viv_mas(x:mas;s:string); var i,j:integer; begin writeln(s); for i:=1 to n do begin for j:=1 to n do write(a[i,j]:4); writeln end end; procedure next(i1,j1:integer;var i2,j2:integer); begin if (i1=1)and(j1<n) then begin i2:=1;j2:=j1+1 end else if (i1>=1)and(i1<n)and(j=n) then begin i2:=i1+1;j2:=n end else if (i1=n)and(j1>1)and(j1<=n) then begin i2:=i1;j2:=j1-1 end else begin i2:=i1-1;j2:=1 end end; begin writeln('Как задать массив:'); repeat writeln('1: - автоматически'); writeln('2: - с клавиатуры'); readln(z) until z in [1,2]; vvod_mas(a,z=1); viv_mas(a,'A:'); write('введите k: ');readln(k); kk:=0; for i:=1 to n-1 do for j:=i+2 to n do if a[i,j] mod k = 0 then inc(kk); writeln('количество чисел кратных числу ',k,', среди элементов расположенных выше главной диагонали: ',kk); for ki:=1 to 4*(n-1)-1 do begin i:=1;j:=1; for kj:=1 to 4*(n-1)-i do begin next(i,j,ii,jj); if a[i,j]>a[ii,jj] then begin tmp:=a[i,j];a[i,j]:=a[ii,jj];a[ii,jj]:=tmp end; i:=ii;j:=jj end end; viv_mas(a,'сортировка A:'); end.
Объяснение кода листинга программы
const n = 6; type mas = array[1..n,1..n] of integer; var a: mas; var z, k, kk, i, j, ii, jj, ki, kj, tmp: integer; procedure vvod_mas(var x: mas; f: boolean); var i, j: integer; begin for i := 1 to n do for j := 1 to n do if f then a[i,j] := random(100) else begin write('a[', i, ',', j, '] ='); readln(a[i, j]); end; end; procedure viv_mas(x: mas; s: string); var i, j: integer; begin writeln(s); for i := 1 to n do begin for j := 1 to n do write(a[i, j]: 4); writeln; end; end; procedure next(i1, j1: integer; var i2, j2: integer); begin if (i1 = 1) and (j1 < n) then begin i2 := 1; j2 := j1 + 1; end else if (i1 >= 1) and (i1 < n) and (j = n) then begin i2 := i1 + 1; j2 := n; end else if (i1 = n) and (j1 > 1) and (j1 <= n) then begin i2 := i1; j2 := j1 - 1; end else begin i2 := i1 - 1; j2 := 1; end; end; end; begin writeln('Как задать массив:'); repeat writeln('1: - автоматически'); writeln('2: - с клавиатуры'); readln(z); until z in [1, 2]; vvod_mas(a, z = 1); viv_mas(a, 'A:'); write('введите k: '); readln(k); kk := 0; for i := 1 to n-1 do for j := i+2 to n do if a[i,j] mod k = 0 then inc(kk); writeln('количество чисел кратных числу ',k,', среди элементов расположенных выше главной диагонали: ',kk); for ki := 1 to 4(n-1)-1 do begin i := 1; j := 1; for kj := 1 to 4(n-1)-i do begin next(i, j, ii, jj); if a[i,j] > a[ii,jj] then begin tmp := a[i,j]; a[i,j] := a[ii,jj]; a[ii,jj] := tmp; end; i := ii; j := jj; end; end; viv_mas(a, 'сортировка A:'); end;