прога. 1 в прямоугольной матрице в каждом столбце поставить на первое место максимальный элемент столбца и, если среди полученных элементов первой строки не окажется элементов,
Скачать 46.13 Kb.
|
1 В прямоугольной матрице в каждом столбце поставить на первое место максимальный элемент столбца и, если среди полученных элементов первой строки не окажется элементов, по модулю меньших заданной величины, разделить элементы последней строки на соотвутствующие элементы первой строки. Unit Z433_1; interface Const n=3;m=5; Type matr=array[1..n,1..m] of real; Var i,j:integer; t,p:boolean; a:matr; eps:real; procedure vvod(Var a:matr; eps:real); procedure proverka(Var t:boolean;eps:real;a:matr); procedure proverka1(Var p:boolean;a:matr); procedure delenie(Var a:matr); procedure sortirovka(Var a:matr;j:integer); implementation procedure vvod(Var a:matr; eps:real); Begin writeln('введите матрицу '); for i:=1 to n do for j:=1 to m do readln(a[i,j]); writeln('введите точность'); readln(eps); end; procedure proverka(Var t:boolean;eps:real;a:matr); Var sh,j:integer; Begin sh:=0; for j:=1 to m do if abs(a[1,j]) if sh=0 then t:=true else p:=false; end; procedure proverka1(Var p:boolean;a:matr); Var sh,j:integer; Begin sh:=0; for j:=1 to m do if a[1,j]=0 then sh:=sh+1; if sh=0 then p:=true else p:=false; end; procedure delenie(Var a:matr); Var j:integer; Begin for j:=1 to m do a[n,j]:=a[n,j]/a[1,j]; end; procedure sortirovka(Var a:matr;j:integer); Var i,k,nom:integer; max,p:real; Begin for i:=1 to (n-1) do Begin max:=a[i,j]; nom:=i; for k:=(i+1) to n do if a[k,j]>max then Begin max:=a[k,j]; nom:=k; end; p:=a[i,j];a[i,j]:=a[nom,j];a[nom,j]:=p; end; end; begin end. program Z433_1; uses Z433_1; const n=3;m=5; Begin {основная программа} clrscr; vvod(a,eps); for j:=1 to m do sortirovka(a,j); proverka(t,eps,a); if t=true then Begin proverka1(p,a); if p=true then Begin delenie(a); for i:=1 to n do for j:=1 to m do write(a[i,j]:3:1,' '); end else writeln('в полученной 1 строке есть нулевые элементы'); end else writeln('в полученной 1 строке есть элементы по мод.< eps'); repeat until keypressed; end. 2 Если первая строка прямоугольной матрицы имеет максимальное количество отрицательных элементов, проверить, как изменится среднее арифметическое всей матрицы, если заменить все отрицательные элементы их модулями. program z433_2; uses z433_2; Var A:matr; L:inmass; i,j:integer; s1,s2:real; BEGIN for i := 1 to n do for j := 1 to m do readln(A[i,j]); Negative(A,L); if Maximum(L) then Begin s1 := SrArifm(A); write('Среднее арифметическое исходной матрицы: '); writeln(s1:5:3); Replacement(A); s2 := SrArifm(A); write('Среднее арифметическое положительно определенной матрицы: '); writeln(s2:5:3); write('Разность: '); writeln((s2 - s1):5:3) end; readln; END. Unit Z433_2; interface Const n = 3; m = 4; Type matr = array[1..n,1..m] of real; inmass = array[1..n] of integer; procedure Negative(A:matr; Var L:inmass); {записывает в целочисленный массив L количество отрицательных элементов по строкам} function Maximum(L:inmass):boolean; {возвращает true, если L[1] - максимален} function SrArifm(A:matr):real; {возвращает среднее арифметическое матрицы} procedure Replacement(Var A:matr); {меняет все отрицательные элементы матрицы их модулями} implementation procedure Negative(A:matr; Var L:inmass); Var i,j,k:integer; Begin for i := 1 to n do Begin k := 0; for j := 1 to m do if A[i,j] < 0 then k := k + 1; L[i] := k; end; end; {Negative} function Maximum(L:inmass):boolean; Var i:integer; b:boolean; Begin b := true; i := 1; repeat i := i + 1; if L[i] > L[1] then b := false until (i >= n) or (not b); Maximum := b; end; {Maximum} function SrArifm(A:matr):real; Var s:real; i,j:integer; Begin s := 0; for i := 1 to n do for j := 1 to m do s := s + A[i,j]; SrArifm := s / (m * n); end; {SrArifm} procedure Replacement(Var A:matr); Var i,j:integer; Begin for i := 1 to n do for j := 1 to m do if A[i,j] < 0 then A[i,j] := abs(A[i,j]); end; {Replacement} begin END. 3 Если в прямоугольной матрице все суммы элементов строк попадают на заданный отрезок, определить номер строки с максимальной суммой элементов, иначе определить номера строк, сумма элементов которых не попала на заданный отрезок. Program z433_3; uses z433_3; Var A:matr; S:mass; L:inmass; b:boolean; xn,xk:real; i,j,k:integer; BEGIN for i := 1 to n do for j := 1 to m do readln(A[i,j]); writeln('Введите границы отрезка: '); readln(xn,xk); Sum(A,S); InArea(S,xn,xk,L,k,b); if b then writeln('Строка с максимальной суммой элементов: ',Maximum(S):5) else Begin writeln('Номера строк, сумма элементов которых выходит за пределы отрезка: '); for i := 1 to k do write(L[i],' '); end; readln; END. Unit Z433_3; interface Const n = 3; m = 4; Type matr = array[1..n,1..m] of real; mass = array[1..n] of real; inmass = array[1..n] of integer; procedure Sum(A:matr; Var S:mass); {Записывает в массив S суммы элементов строк матрицы A} procedure InArea(S:mass; xn,xk:real; Var L:inmass; Var k:integer; Var b:boolean); {b = true, если все элементы массива S попадают в отрезок [xn,xk], иначе b = false и целочисленный массив L содержит k номеров элементов S, не попавших в отрезок} function Maximum(S:mass):integer; {Возвращает номер максимального элемента массива S} implementation procedure Sum(A:matr; Var S:mass); Var i,j:integer; ss:real; Begin for i := 1 to n do Begin ss := 0; for j := 1 to m do ss := ss + A[i,j]; S[i] := ss; end; end; {Sum} procedure InArea(S:mass; xn,xk:real; Var L:inmass; Var k:integer; Var b:boolean); Var i:integer; Begin k := 0; for i := 1 to n do L[i] := 0; for i := 1 to n do if (S[i] < xn) or (S[i] > xk) then Begin k := k + 1; L[k] := i; end; if k = 0 then b := true else b := false; end; {InArea} function Maximum(S:mass):integer; Var max:real; i,k:integer; Begin k := 1; max := S[1]; for i := 2 to n do if S[i] > max then Begin max := S[i]; k := i; end; Maximum := k; end; {Maximum} begin END. 4 Для заданного массива В составить процедуру формирования массива из индексов элементов, для которых f1(Bi)>f2(Bi). Дана матрица А, у которой 6 строк и 6 столбцов. Для каждой строки матрицы А определить сумму тех элементов, для которых Aik3>eAik. Unit Z432_20; interface Const N=6; type fun=function(x:real):real; matr=array[1..N,1..N] of real; mas=array[1..N] of real; inmas=array[1..N] of integer; var A:matr;B:mas;l:inmas;s:real;i,j,k,t,tt:integer; function f1(x:real):real; function f2(x:real):real; procedure p(B:mas; f1,f2:fun; var l:inmas; var k:integer); implementation {$F+} function f1(x:real):real; begin f1:=sqr(x)*x end; function f2(x:real):real; begin f2:=exp(x) end; {$F-} procedure p(B:mas; f1,f2:fun; var l:inmas; var k:integer); var i,t,tt:integer; begin k:=0; for i:=1 to n do if f1(B[i])>f2(B[i]) then begin k:=k+1; l[k]:=i; end; end; {procedure_p} end. program z432_20; uses Z432_20; type fun=function(x:real):real; matr=array[1..N,1..N] of real; mas=array[1..N] of real; inmas=array[1..N] of integer; var A:matr;B:mas;l:inmas;s:real;i,j,k,t,tt:integer; begin{основной программы} for i:=1 to n do for j:=1 to n do readln(A[i,j]); {ввод матрицы} for i:=1 to n do begin {перепись j-ой строки матрицы в дополнительный массив B} for j:=1 to n do B[j]:=A[i,j]; p(B,f1,f2,l,k) if k<>0 then begin s:=0; for t:=1 to k do begin tt:=l[t]; s:=s+B[tt] end; writeln(s); end; end; end. 5 Определить столбец прямоугольной матрицы с максимальной суммой элементов и, если его номер больше заданного, сформировать матрицу из стобцов исходной до найденного столбца, иначе сформировать массив из элементов заданного столбца. program Z433_5; uses Z433_5; Var A,B:matr; C:mass1; S:mass2; i,j,k,G:integer; BEGIN for i := 1 to n do for j := 1 to m do readln(A[i,j]); readln(G); Sum(A,s); Maximum(S,k); if k > G then Begin CreateMatr(A,k,B); for i := 1 to n do Begin for j := 1 to k do write(B[i,j]:5:3,' '); writeln; end; end else Begin CreateMass(A,k,C); for i := 1 to n do writeln(C[i]:5:3); end; readln; END. Unit Z433_5; interface Const n = 3; m = 4; Type matr = array[1..n,1..m] of real; mass1 = array[1..n] of real; mass2 = array[1..m] of real; procedure Sum(A:matr; Var S:mass2); {записывает в массив S суммы элементов столбцов матрицы A} procedure Maximum(S:mass2; Var k:integer); {k - максимальный элемент массива S} procedure CreateMatr(A:matr; k:integer; Var B:matr); {формирует матрицу из столбцов исходной до k-го} procedure CreateMass(A:matr; k:integer; Var C:mass1); {формирует массив из элементов k-го столбца исходной матрицы} implementation procedure Sum(A:matr; Var S:mass2); Var i,j:integer; Begin for j := 1 to m do Begin S[j] := 0; for i := 1 to n do S[j] := S[j] + A[i,j]; end; end; {Sum} procedure Maximum(S:mass2; Var k:integer); Var i:integer; max:real; Begin max := S[1]; k := 1; for i := 2 to m do if S[i] > max then Begin max := S[i]; k := i; end; end; {Maximum} procedure CreateMatr(A:matr; k:integer; Var B:matr); Var i,j:integer; Begin for i := 1 to n do for j := 1 to k do B[i,j] := A[i,j]; end; {CreateMatr} procedure CreateMass(A:matr; k:integer; Var C:mass1); Var i:integer; Begin for i := 1 to n do C[i] := A[i,k]; end; {CreateMass} END. 6 Если заданная квадратная целочисленная матрица является треугольной(элементы выше главной диагонали равны нулю),вычислить её среднее арифметическое, иначе определить, сколько элементов, лежащих выше главной диагонали, отличны от нуля. program z433_6; uses Z433_6; Var A:matr; i,j,k:integer; s:real; b:boolean; BEGIN for i := 1 to n do for j := 1 to n do readln(a[i,j]); Triangle(A,k,b); if b then Begin SrArifm(A,s); writeln(s); end else writeln(k); readln; END. Unit Z433_6; interface Const n = 3; Type matr = array[1..n,1..n] of integer; procedure SrArifm(A:matr; Var s:real); {s - среднее арифметическое матрицы A} procedure Triangle(A:matr; Var k:integer; Var b:boolean); {Если b = true, то матрица треугольная; k - число элементов выше главной диагонали, отличных от нуля} implementation procedure Triangle(A:matr; Var k:integer; Var b:boolean); Var i,j:integer; Begin b := true; k := 0; for i := 1 to n do for j := 1 to n do if (j > i) and (A[i,j] <> 0) then Begin b := false; k := k + 1; end; end; {Rect} procedure SrArifm(A:matr; Var s:real); Var i,j:integer; Begin s := 0; for i := 1 to n do for j := 1 to n do s := s + A[i,j]; s := s / (n * n); end; {SrArifm} begin END. 7 Если к-й столбец прямоугольной матрицы имеет минимальную сумму элементов, определить сумму элементов столбцов до к-ого, иначе - сумму элементов столбцов после к-ого. Unit Z433_7; interface Const n = 3, m = 4; Type matr = array[1..n,1..m] of real; mas = array[1..m] of real; procedure p1(A:matr; Var S:mas); {записывает в массив S суммы элементов столбцов} procedure p2(S:mas; Var nom:integer); {l - минимальный элемент массива S} procedure p3(A:matr; l1,l2:integer; Var sum:real); implementation procedure p1; Var i,j:integer; Begin for j := 1 to m do Begin S[j] := 0; for i := 1 to n do S[j] := S[j] + A[i,j]; end; end; {p1} procedure p2; Var j:integer; Smin:real; Begin Smin := S[1]; nom := 1; for j := 1 to m do if S[j] < Smin then Begin Smin := S[j]; nom := j; end; end; {p2} procedure p3; Var i,j:integer; Begin sum := 0; for i := 1 to n do for j := l[1] to 1[2] do sum := sum + A[i,j]; end; {p3} end. program z433_7; uses 433_7; const n = 3, m = 4; Type matr = array[1..n,1..m] of real; mas = array[1..m] of real; Var A:matr; S:mas; i,j,k,nom:integer; sum1,sum2:real; Begin for i := 1 to n do for j := 1 to m do readln(A[i,j]); readln(k); p1(A,S); p2(S,nom); if (nom = k) then Begin p3(A,1,k,sum1); Writeln (sum1) end else Begin p3(A,k+1,m,sum2); writeln(sum2); end; end. 8 Если целочисленная квадратная матрица симметрична относително главной диагонали, обнулить все элементы, лежащие выше главной диагонали, и определить сумму элементов, лежащих ниже главной диагонали. program z433_8; uses Z433_8; Var A:matr; i,j,s:integer; BEGIN for i := 1 to n do for j := 1 to n do readln(A[i,j]); if Sim(A) then Begin NulSum(A,s); write('Сумма элементов, лежащих ниже главной диагонали: '); writeln(s); end else writeln('Матрица не симметрична относительно главной диагонали.'); for i := 1 to n do Begin for j := 1 to n do write(A[i,j],' '); writeln; end; END. Unit Z433_8; interface Const n = 3; Type matr = array[1..n,1..n] of integer; function Sim(A:matr):boolean; {Возвращает true, если матрица симметрична относительно главной диагонали} procedure NulSum(Var A:matr; Var s:integer); {Обнуляет элементы, лежащие выше главной диагонали, и подсчитывает их сумму} implementation function Sim(A:matr):boolean; Var i,j,k:integer; b:boolean; Begin k := 0; b := true; for i := 1 to n do for j := 1 to n do if (j < i) and (A[i,j] <> A[j,i]) then k := k + 1; if k <> 0 then b := false; Sim := b; end; {Sim} procedure NulSum(Var A:matr; Var s:integer); Var i,j:integer; Begin s := 0; for i := 1 to n do for j := 1 to n do if j > i then Begin s := s + A[i,j]; A[i,j] := 0; end; end; {NulSum} END. 9. Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конце столбца. Распечатать часть полученной матрицы, состоящую из n первых строк, не имеющих отрицательных элементов. program z433_9; uses Z433_9; Var A:matr; i,j,l:integer; BEGIN for i := 1 to n do for j := 1 to m do readln(A[i,j]); Transpos(A,l); if l > 0 then PrintL(A,L) else writeln('Ненулевых строк нет.'); END. Unit Z433_9; interface Const n = 3; m = 4; Type matr = array[1..n,1..m] of real; procedure Transpos(Var A:matr; Var l:integer); {Переставляет в каждом столбце матрицы A все отрицательные элементы в конец столбца, l - число строк с ненулевыми элементами} procedure PrintL(A:matr; l:integer); {печатает l первых строк матрицы A} implementation procedure Transpos(Var A:matr; Var l:integer); Var i,j,k:integer; r:real; Begin l := 0; for j := 1 to m do Begin k := 0; for i := 1 to n do Begin while A[n-k,j] < 0 do k := k + 1; if (A[i,j] < 0) and (i <= (n - k)) then Begin r := A[i,j]; A[i,j] := A[n-k,j]; A[n-k,j] := r; k := k + 1; end; end; if k > l then l := k; end; l := n - l; end; {Transpos} procedure PrintL(A:matr; l:integer); Var i,j:integer; Begin for i := 1 to l do Begin for j := 1 to m do write(A[i,j]:5:3,' '); writeln; end; end; {PrintL} END. 10 Если все точки плоскости, заданные своими координатами, попадают в круг с радиусом R и центром в начале координат, определить их среднюю абсциссу и ординату, иначе распечатать номера точек, не попавших в заданый круг. Unit Z433_10; interface Const n = 5; Type mass = array[1..n] of real; function InArea(X,Y:mass; R:real):boolean; {возвращает true, если все точки попали в круг радиусом R} procedure SrZnach(A:mass; Var s:real); {Вычисляет среднее значение массива A} procedure PrintNum(X,Y:mass; R:real); {Печатает номера точек, не попавших в круг радиусом R} implementation function InArea(X,Y:mass; R:real):boolean; Var i:integer; b:boolean; Begin b := true; i := 0; repeat i := i + 1; if sqrt((sqr(X[i]) + sqr(Y[i]))) > R then b := false until (not b) or (i >= n); InArea := b; end; {InArea} procedure SrZnach(A:mass; Var s:real); Var i:integer; Begin s := 0; for i := 1 to n do s := s + A[i]; s := s / n; end; {SrZnach} procedure PrintNum(X,Y:mass; R:real); Var i:integer; Begin for i := 1 to n do if sqrt((sqr(X[i]) + sqr(Y[i]))) > R then write(i,' '); end; {PrintNum} END. program z433_10; uses Z433_10; Var X,Y:mass; i:integer; R,sx,sy:real; BEGIN for i := 1 to n do Begin write('X: '); readln(X[i]); write('Y: '); readln(Y[i]); end; write('R: '); readln(R); if InArea(X,Y,R) then Begin SrZnach(X,sx); SrZnach(Y,sy); writeln('A: ',sx,' O: ',sy) end else Begin write('N: '); PrintNum(X,Y,R); end; END. 11 Если столбцы заданной прямоугольной целочисленной матрицы расположены в порядке возрастания числа нулевых элементов в них, то подсчитать число нулевых элементов во всей матрице, иначе определить столбец с максимальным количеством нулей. program z433_11; uses Z12433_11; Var A:matr; S:mass; i,j,ch,nmax:integer; BEGIN for i := 1 to n do for j := 1 to m do readln(A[i,j]); NulS(A,S); if Vozr(S) then Begin NulCh(S,ch); write('ch: '); writeln(ch); end else Begin Maximum(S,nmax); write('nmax: '); writeln(nmax); end; END. Unit Z433_11; interface Const n = 3; m = 4; Type matr = array[1..n,1..m] of integer; mass = array[1..m] of integer; procedure NulS(A:matr; Var S:mass); {Записывает в массив S число нулей в каждом столбце} function Vozr(S:mass):boolean; {возвращает true, если в массиве S элементы расположены в порядке возрастания} procedure NulCh(S:mass; Var ch:integer); {ch - количество нулей в матрице} procedure Maximum(S:mass; Var nmax:integer); {nmax - номер столбца с максимальным количеством нулей} implementation procedure NulS(A:matr; Var S:mass); Var i,j,k:integer; Begin for j := 1 to m do Begin k := 0; for i := 1 to n do if A[i,j] = 0 then k := k + 1; S[j] := k; end; end; {NulS} function Vozr(S:mass):boolean; Var i,k:integer; b:boolean; Begin k := 0; for i := 2 to m do if S[i] > S[i-1] then k := k + 1; if k = m - 1 then b := true else b := false; Vozr := b; end; {Vozr} procedure NulCh(S:mass; Var ch:integer); Var i:integer; Begin ch := 0; for i := 1 to m do ch := ch + S[i]; end; {NulCh} procedure Maximum(S:mass; Var nmax:integer); Var i,max:integer; Begin max := S[1]; nmax := 1; for i := 2 to m do if S[i] > max then Begin max := S[i]; nmax := i; end; end; {Maximum} END. 12,Если максимальный элемент квадратной матрицы находится выше главной диагонали, транспонировать матрицу,иначе определить сумму элементов строки и столбца с номерами, равными индексам максимального элемента. program z433_12; uses Z433_12; Var A:matr; i,j,k,l:integer; b:boolean; s:real; BEGIN for i := 1 to n do for j := 1 to n do readln(A[i,j]); Maximum(A,k,l,b); if b then Begin Transpos(A); for i := 1 to n do Begin for j := 1 to n do write(A[i,j]:5:3,' '); writeln; end; end else Begin Sum(A,k,l,s); write('Сумма элементов строки и столбца, содержащих максимальный элемент: '); writeln(s:5:3); end;END. Unit Z433_12; interface Const n = 3; Type matr = array[1..n,1..n] of real; procedure Maximum(A:matr; Var k,l:integer; Var b:boolean); {b = true, если максимальный элемент матрицы находится выше главной диагонали, k,l - индексы максимального элемента} procedure Transpos(Var A:matr);{Транспонирует матрицу} procedure Sum(A:matr; k,l:integer; Var s:real); {s - сумма элементов k-й строки и l-го столбца} implementation procedure Maximum(A:matr; Var k,l:integer; Var b:boolean); Var i,j:integer; max:real; Begin k := 1;l := 1; max := A[1,1]; for i := 1 to n do for j := 1 to n do if A[i,j] > max then Begin max := A[i,j]; k := i; l := j; end; if l > k then b := true else b := false; end; {Maximum} procedure Transpos(Var A:matr); Var i,j:integer; r:real; Begin for i := 1 to n do for j := 1 to n do if i > j then Begin r := A[i,j]; A[i,j] := A[j,i]; A[j,i] := r; end;end; {Transpos} procedure Sum(A:matr; k,l:integer; Var s:real); Var i:integer; Begin s := 0; for i := 1 to n do s := s + A[i,l] + A[k,i]; s := s - A[k,l]; end; {Sum}END. 13 Дана квадратная матрица. Увеличить все элементы строки с минимальной суммой элементов на среднее арифметическое элементов матрицы, лежащих выше главной диагонали. Unit Z433_13; interface Const n = 3; Type matr = array[1..n,1..n] of real; mass = array[1..n] of real; procedure Sum(A:matr; Var S:mass); {Записывает в массив S суммы элементов матрицы A по строкам} procedure Minimum(S:mass; Var k:integer); {k - номер минимального элемента массива S} procedure SrArifm(A:matr; Var sr:real); {sr - среднее арифметическое элементов матрицы, лежащих выше главной диагонали} procedure Increase(k:integer; sr:real; Var A:matr); {Увеличивает элементы k-й строки матрицы на величину sr} implementation procedure Sum(A:matr; Var S:mass); Var i,j:integer; Begin for i := 1 to n do Begin S[i] := 0; for j := 1 to n do S[i] := S[i] + A[i,j]; end; end; { procedure Sum } procedure Minimum(S:mass; Var k:integer); Var i:integer; min:real; Begin min := S[1]; k := 1; for i := 2 to n do if S[i] < min then Begin min := S[i]; k := i; end; end; { procedure Minimum } procedure SrArifm(A:matr; Var sr:real); Var i,j,k:integer; Begin k := (n * n - n) div 2; sr := 0; for i := 1 to n do for j := 1 to n do if j > i then sr := sr + A[i,j]; sr := sr / k; end; { procedure SrArifm } procedure Increase(k:integer; sr:real; Var A:matr); Var j:integer; Begin for j := 1 to n do A[k,j] := A[k,j] + sr; end; { procedure Increase } END. program z433_13; uses Z433_13; Var A:matr; S:mass; i,j,k:integer; sr:real; BEGIN for i := 1 to n do for j := 1 to n do readln(A[i,j]); Sum(A,S); Minimum(S,k); SrArifm(A,sr); Increase(k,sr,A); for i := 1 to n do Begin for j := 1 to n do write(A[i,j]:5:3,' '); writeln; end; END. 14 Изменить заданную прямоугольную матрицу так, чтобы на первом месте стояла строка с максимальной, а на последнем месте строка с минимальной суммой элементов, сохранив все элементы исходной матрицы. program z433_14; uses Z433_14; const n=3; m=4; BEGIN writeln('Введите матрицу'); for i:=1 to n do for j:=1 to m do readln( a[i,j]); max(a,k); min(a,b); zamena(k,a); for i:=1 to n do begin for j:=1 to m do write(A[i,j]:0:1,' ' ); writeln; end; END. Unit Z433_14; const n=3; m=4; type matr=array[1..n,1..m] of real; var a:matr;b,k,i,j:integer; Procedure max(var a:matr;var k:integer); procedure min(var a:matr; var k:integer); procedure zamena(k:integer;var a:matr); implementation Procedure max(var a:matr;var k:integer); var t,sum:real; begin sum:=0; t:=0; for i:=1 to n do begin for j:=1 to m do sum:=sum+a[i,j]; if sum>t then begin t:=sum;k:=i;end; sum:=0; end; end; procedure min(var a:matr; var k:integer); var b,sum:real; begin sum:= 0; b:= 0; for i:= 1 to n do begin for j:= 1 to m do sum:=sum+a[i,j]; if sum sum:=0; end; end; procedure zamena(k:integer;var a:matr); var t:real; begin for j:=1 to m do begin t:=a[1,j]; a[1,j]:=a[k,j]; a[k,j]:=t; end; end; end. 15.Задачка с длинным условием и разными бяками=) program Z433_15; uses Z433_15; Var a:matr; c:mas; i,j,k:integer; sr:real; Begin vvodm(a); k:=0; sr:=0; for i:=1 to n-1 do Begin for j:=1 to n do c[j]:=a[i,j]; k:=k+chktri(c,i); end; vyvodm(a); if k=0 then Begin for i:=1 to n do Begin for j:=1 to n do c[j]:=a[i,j]; sr:=sr+sredmas(c); end; writeln('Srednee arifmeticheskoe=',sr/n:2:3); end else writeln('Chislo ne nulevyx=',k); readln; end. Unit Z433_15; interface uses crt; Const n=4; Type mas= array [1..n] of real; procedure vvodm(Var a:mas); procedure vyvodm(a:mas); function iter(x,e:real):real; implementation procedure vvodm; Var i:integer; Begin clrscr; writeln('Vvod elementov massiva:'); for i:=1 to n do Begin write('[',i,']='); readln(a[i]); end; end; procedure vyvodm; Var i:integer; Begin writeln; writeln('Soderganie massiva:'); for i:=1 to n do write(a[i]:3:2,' '); writeln; end; function iter; Var i:integer; y,y1,y2:real; Begin y:=1/x; repeat y1:=(3*y/2)-(x*y*y*y/2); y2:=(3*y1/2)-(x*y1*y1*y1/2); y:=y1; until(abs(y1-y2)<=e); iter:=y2; end; end. end. 16 Если все заданные точки плоскости принадлежат первой четверти, определить координаты точки, наиболее удаленной от начала коодинат, иначе определить координаты точке, не попавших в первую четверть. unit Z433_16; interface uses crt; Const n=5; Type mas=array[1..n] of real; inmas=array[1..n] of real; Var x,y:mas; l:inmas; k,i,t,c:integer; procedure check(x,y:mas; k:integer); procedure coord(x,y:mas;c:integer); implementation procedure check(x,y:mas; k:integer); Begin k:=0; for i:=1 to n do Begin if (x[i]>0) and (y[i]>0) then k:=k+1 end; if k=n then t:=1 else t:=0; end; procedure coord(x,y:mas;c:integer); Begin if(not(x[i]>0) and (y[i]>0)) then Begin k:=k+1; l[k]:=i end; end; end. program Z433_16; uses Z433_16; Var x,y:mas; l:inmas; k,i,t,c:integer; Begin for i:=1 to n do Begin writeln('vvedite kordinati x'); readln(x[i]); writeln('vvedite koordinati y'); readln(y[i]); check(x,y,k); coord(x,y,c); writeln(t, k, l[k]); readln; end; end. 17 Найти максимальный среди отрицательных и минимальный среди положительных элементов прямоугольной матрицы. если они отличаются по модолю меньше чем на заданную величину, заменить все отриц элементы их модулями. program Z433_17; uses Z433_17; Var a:matr; max,min,eps:real; i,j:integer; Begin for i:=1 to n do for j:=1 to t do readln(a[i,j]); readln(eps); max(a,max); min(a,min); if abs(max-min) for i:=1 to n do for j:=1 to t do if a[i,j]<0 then a[i,j]:=abs(a[i,j]); end; for i:=1 to n do for j:=1 to t do writeln(a[i,j]); end. unit Z433_17; interface Const n=5; Const m=6; Type matr=array[1..n,1..m]of real; procedure max(a:matr;Var max:real); procedure min(a:matr;Var min:real); implementation procedure max(a:matr;Var max:real); Var i,j:integer; Begin for i:=1 to n do for j:=1 to m do if a[i,j]<0 then max:=abs(a[i,j]); for i:=1 to n do for j:=1 to m do if a[i,j]<0 and abs(a[i,j]) then max:=abs(a[i,j]); end; procedure min(a:matr;Var min:real); Var i,j:integer; Begin for i:=1 to n do for j:=1 to m do if a[i,j]>0 then min:=a[i,j]; for i:=1 to n do for j:=1 to t do if a[i,j]>0 and abs(a[i,j]) then min:=abs(a[i,j]); end; end. 18 Определить по экзаменациооной ведомости попадает ли группа на конкурс лучших групп. Условие конкурса: средний балл группы выше четырех, отсутствие неуспевающих, число студентов не имеющих тройки больше половины всех студентов группы program Z433_18; uses Z433_18; Var A: matr; sum, sr_bal: real; T: vector; k, i, j, kol: integer; Begin {осн. программы} For i:=1 to n do For j:=1 to m do readln(A[i,j]); Bal(A,sum, sr_bal); USPEVAEMOST(A, k); TROIKI(A, T, kol); If (sr_bal>4) and (k=0) and (kol>(m/2)) then writeln('Gruppa_popadaet') else writeln('ne_popadaet'); end. Unit Z433_18; interface Const n=3; m=4; Type matr=array[1..n,1..m] of real; vector=array [1..m] of integer; Var A: matr; sum, sr_bal: real; T: vector; k, i, j, kol: integer; Procedure BAL(A: matr; Var sum, sr_bal: real); Procedure USPEVAEMOST(A: matr; Var k: integer); Procedure TROIKI(A:matr; Var T:vector; Var kol: integer); implementation Procedure BAL(A: matr; Var sum, sr_bal: real); Var i, j: integer; Begin sum:=0; sr_bal:=0; For i:=1 to n do For j:=1 to m do sum:=sum+A[i,j]; sr_bal:=sum/(n*m); end; Procedure USPEVAEMOST(A: matr; Var k: integer); Var i, j: integer; Begin k:=0; For i:=1 to n do For j:=1 to m do If A[i, j]<3 then k:=k+1 end; Procedure TROIKI(A:matr; Var T:vector; Var kol: integer); Var i, j: integer; Begin kol:=0; For i:=1 to n do For j:=1 to m do If A[i,j]>3 then T[j]:=1 else T[j]:=0; For j:=1 to m do If T[j]=1 then kol:=kol+1 end; end. 19 Подсчитать как изменится среднее арифметическое элементов матрицы, если во всех столбац с номерами, большими, чем номер столбца с максимальным количеством отрицательных элементов, заменить все отрицательные элементы по их модулям. Unit Z433_19; interface Const n=5; Type Matr = array [1..n,1..n] of real; Var p,i,j: integer; V,A:matr; w: string; r,sr1,sr2:real; Procedure SrAr (A:matr; Var sr:real); Procedure nomer (A:matr; Var P:integer); Procedure Zamena(P:integer; A:matr; Var V:matr); Procedure Pods4et (sr1,sr2:real;Var w:string; Var r:real); implementation Procedure SrAr (A:matr; Var sr:real); Var i,j : integer; Begin For i:=1 to n do For j:=1 to n do Sr:=sr+A[i,j]; Sr:=sr/sqr(n); End; { Procedure SrAr } Procedure nomer (A:matr; Var P:integer); Var Z,B, i,j : integer; Begin For i:=1 to n do If A[i,1]<0 then Begin Z:=z+1; P:=1; End; For j :=2 to n do Begin For i:=1 to n do If A[i,j]<0 then B:=b+1; If b>z then Begin Z:=b; P:=j; End; End; End; { Procedure nomer } Procedure Zamena(P:integer; A:matr; Var V:matr); Var I,j:integer; Begin For j:=1 to n do If i>n then For i:=1 to n do If A[i,j]<0 then V[i,j]:=abs (A[i,j]); End; { Procedure Zamena } Procedure Pods4et (sr1,sr2:real;Var w:string; Var r:real); Begin If sr1>sr2 then Begin R:=sr1-sr2; W:='уменьшилось'; End Else If sr1 Begin R:=sr1-sr2; W:='увелчилось'; End; End; { Procedure Pods4et } end. Program Z433_19; Uses Z433_19; Var p,i,j: integer; V,A:matr; w: string; r,sr1,sr2:real; BEGIN for i:=1 to n do for j:=1 to n do readln(a[i,j]); SrAr(A,sr1); Nomer(A,N); Zamena(N,A,V); SrAr (A,sr2); Pods4et(sr1,sr2,w,r); Writeln (w, 'на', r); End. 20 В заданной прямоугольной матрице поставить на первое место столбец с наименьшим количеством нулевых элементов, перестаиви все нули в конец этого столбца. (Измененная матрица должна сожержать все элементы исходной матрицы). program Z433_20; uses Z433_20; Var a:matr; i,j:integer; Begin for i:=1 to n do for j:=1 to m do read(a[i,j]); obmen_nul(a); for j:=1 to m do for i:=1 to n do writeln(a[i,j]); end. unit Z433_20; interface Const n=4; Const m=5; Type matr=array[1..n,1..m] of real; Var a:matr; i,j:integer; procedure nul_schet(a:matr; Var k:mas); procedure nom_stol(k:mas; Var w:integer); procedure obmen_nul(Var a:matr); implementation procedure nul_schet; Var i,j:integer; Begin for j:=1 to m do for i:=1 to n do if a[i,j]=0 then k[j]:=k[j]+1; end; end;{proc1} procedure nom_stol; Var i,j:integer; Begin w:=0; for j:=1 to m do if k[j]>k[j+1] then w:=i+1; end; end;{proc2} procedure obmen_nul; Var j, k,l:integer; Begin k:=1; l:=m; for i:=1 to n do for j:=1 to m do while k<>l do Begin if a[i,k]=0 then Begin if a[i,l]=0 then l:=l-1 else Begin a[i,l]:=a[i,k]; a[i,k]:=0; k:=k+1; l:=l+1; end; end else k:=k+1; end; end;{proc} 21(1) Для массива С из N элементов составить процедуру, которая находит m наименьших значений С1,С2…СN и т.д. program 432_1; const n=6; type fun=function(x:real):real; matr=array[1..n,1..n] of real; mas=array[1..n] of real; var A:matr; c:mas; i,j,m:integer; S:real; procedure UPOR_P(c:mas;f:fun;m:integer;s:real); var i,j,k,l:integer; w,min:real;z:array[1..m] of real; begin for j:=1 to n-1 do begin min:=c[j]; k:=j; for i:=j to n do if c[i] then begin min:=c[i]; k:=1; end; w:=c[j]; c[j]:=c[k]; c[k]:=w; end; for l:=1 to n do z[l]:=c[l]; s:=0; for l:=1 to m do s:=s+f(z[l]); end; {$F+} function G(x:real):real; begin G:=SQR(x); end; {$F-}; begin for i:=1 to n do for j:=1 to n do readln A[i,j]; read(m); for i:=1 to n do begin for j:=1 to n do c[j]:=A[i,j]; p(c,G,m,S); writeln(S); end; end. 22 Дана квадратная матрица. Если номер столбца с максимальной суммой элементов совпадает с номером строки с максимальной суммой элементов, определить сумму найденных элементов строки и столбца, иначе - распечатать номера найденных строки и столбца с максимальными суммами. unit Z433_22; interface Const n=5; Type matriza=array[1..n,1..n]of real; massiv=array[1..n]of real; procedure colmax(a:matriza;Var ncol:integer;Var sumcol:massiv;Var maxcol:real); procedure rowmax(a:matriza;Var nrow:integer;Var sumrow:massiv;Var maxrow:real); procedure summa(a:matriza;ncol:integer;nrow:integer;Var sumelem:real); implementation procedure colmax(a:matriza;Var ncol:integer;Var sumcol:massiv;Var maxcol:real); Var i,j:integer; Begin for j:=1 to n do Begin sumcol[j]:=0; for i:=1 to n do sumcol[j]:=sumcol[j]+a[i,j]; end; maxcol:=sumcol[1]; for j:=2 to n do if sumcol[j]>maxcol then Begin maxcol:=sumcol[j]; ncol:=j; end; end; { procedure colmax } procedure rowmax(a:matriza;Var nrow:integer;Var sumrow:massiv;Var maxrow:real); Var i,j:integer; Begin for i:=1 to n do Begin sumrow[i]:=0; for j:=1 to n do sumrow[i]:=sumrow[i]+a[i,j]; end; maxrow:=sumrow[1]; for i:=2 to n do if sumrow[i]>maxrow then Begin maxrow:=sumrow[i]; nrow:=i; end; end;{ procedure rowmax } procedure summa(a:matriza;ncol:integer;nrow:integer;Var sumelem:real); Var i,j:integer; Begin sumelem:=0; for i:=1 to n do for j:=1 to n do if (i=nrow) or (j=ncol) then sumelem:=sumelem+a[i,j]; end; { procedure summa } end. program Z433_22; uses Z433_22; Var a:matriza; sumcol,sumrow:massiv; sumelem,maxcol,maxrow:real; ncol,nrow,i,j:integer; Begin for i:=1 to n do for j:=1 to n do readln(a[i,j]); colmax(a,ncol,sumcol,maxcol); rowmax(a,nrow,sumrow,maxrow); if ncol=nrow then Begin summa(a,ncol,nrow,sumelem); writeln(sumelem); end else writeln(nrow,ncol); end. 23 program Z433_23; uses Z433_23; Var x,y:mass; t:boolean; z:mass1; i:integer; Begin{osnovnaya programma} writeln('x[i]='); for i:=1 to n do readln(x[i]); writeln('y[i]='); for i:=1 to n do readln(y[i]); ysl(x,y,t); if t then Begin form_massiv(x,y,z); for i:=1 to n do writeln (z[i]); end else writeln('yslovie ne vupolneno'); end. unit Z433_23; interface; Const n=2; Type mass=array[1..n] of integer; mass1=array[1..n] of real; function fact(n:integer):integer; procedure ysl(x,y:mass; Var t:boolean); procedure form_massiv(x,y:mass; Var z:mass1); implementation function fact(n:integer):integer; Var y,i:integer; Begin y:=1; for i:=1 to n do y:=y*i; fact:=y; end; procedure ysl(x,y:mass; Var t:boolean); Var i:integer; Begin for i:=1 to n do if (y[i]>x[i]) then t:=true else t:=false; end; procedure form_massiv(x,y:mass; Var z:mass1); Var i:integer; Begin for i:=1 to n do z[i]:=fact(y[i])/(fact(x[i])*(fact(y[i])-fact(x[i]))); end; end. |