// PascalABC.NET 3.3, сборка 1607 от 31.12.2017 // Внимание! Если программа не работает, обновите версию!
function GCD(a,b:integer):integer; // НОД begin while b<>0 do begin a:=a mod b; Swap(a,b) end; Result:=a end;
procedure RedFrac(var a,b:integer); // сокращение дроби begin var (sgna,sgnb):=(Sign(a),Sign(b)); // мы должны учитывать знак! (a,b):=(Abs(a),Abs(b)); var d:=Gcd(a,b); (a,b):=((a div d)*sgna,(b div d)*sgnb) end;
begin var (a,b):=ReadInteger2('Числитель и знаменатель 1-й дроби:'); var (c,d):=ReadInteger2('Числитель и знаменатель 2-й дроби:'); var (p,q):=(a*d+b*c,b*d); RedFrac(p,q); Writeln('Результат: ',p,'/',q) end.
Пример Числитель и знаменатель 1-й дроби: -135 36 Числитель и знаменатель 2-й дроби: 31 60 Результат: -97/30
Var A, B: array [1 .. 6, 1 .. 6] of byte; C, D: array [1 .. 6] of byte; M: array [1 .. 12] of byte; i, j, MIN, MAX, evenCountC, evenCountD: byte;
begin randomize; for j := 1 to 6 do begin MAX := 0; MIN := 100; evenCountC := 0; evenCountD := 0; for i := 1 to 5 do begin A[i, j] := random(20); B[i, j] := random(20); if A[i, j] > MAX then MAX := A[i, j]; if B[i, j] < MIN then MIN := B[i, j]; end; C[j] := MAX; D[j] := MIN; end; writeln(' ***Матрица A***'); for i := 1 to 5 do begin for j := 1 to 6 do write(A[i, j]:4); writeln; end; writeln; writeln(' ***Матрица B***'); for i := 1 to 5 do begin for j := 1 to 6 do write(B[i, j]:4); writeln; end; writeln; writeln('***Вектор C***'); for i := 1 to 6 do begin writeln(C[i]:7); if C[i] mod 2 = 0 then evenCountC := evenCountC + 1; end; writeln('Количество четных элементов в векторе C = ', evenCountC); writeln; writeln('***Вектор D***'); for i := 1 to 6 do begin writeln(D[i]:7); if D[i] mod 2 = 0 then evenCountD := evenCountD + 1; end; writeln('Количество четных элементов в векторе D = ', evenCountD); if evenCountC > evenCountD then begin writeln('Добавляем вектор C к матрице A.'); for i := 1 to 6 do A[6, i] := C[i]; writeln(' ***Измененная матрица A***'); for i := 1 to 6 do begin for j := 1 to 6 do write(A[i, j]:4); writeln; end; end else begin writeln('Объединяем два вектора C и D.'); writeln('Новый вектор M'); for i := 1 to 6 do M[i] := C[i]; for i := 7 to 12 do M[i] := D[i - 6]; for i := 1 to 12 do writeln(M[i]:7); end; readln; end.
// Внимание! Если программа не работает, обновите версию!
function GCD(a,b:integer):integer; // НОД
begin
while b<>0 do begin a:=a mod b; Swap(a,b) end;
Result:=a
end;
procedure RedFrac(var a,b:integer); // сокращение дроби
begin
var (sgna,sgnb):=(Sign(a),Sign(b)); // мы должны учитывать знак!
(a,b):=(Abs(a),Abs(b));
var d:=Gcd(a,b);
(a,b):=((a div d)*sgna,(b div d)*sgnb)
end;
begin
var (a,b):=ReadInteger2('Числитель и знаменатель 1-й дроби:');
var (c,d):=ReadInteger2('Числитель и знаменатель 2-й дроби:');
var (p,q):=(a*d+b*c,b*d);
RedFrac(p,q);
Writeln('Результат: ',p,'/',q)
end.
Пример
Числитель и знаменатель 1-й дроби: -135 36
Числитель и знаменатель 2-й дроби: 31 60
Результат: -97/30
A, B: array [1 .. 6, 1 .. 6] of byte;
C, D: array [1 .. 6] of byte;
M: array [1 .. 12] of byte;
i, j, MIN, MAX, evenCountC, evenCountD: byte;
begin
randomize;
for j := 1 to 6 do
begin
MAX := 0; MIN := 100;
evenCountC := 0; evenCountD := 0;
for i := 1 to 5 do
begin
A[i, j] := random(20);
B[i, j] := random(20);
if A[i, j] > MAX then MAX := A[i, j];
if B[i, j] < MIN then MIN := B[i, j];
end;
C[j] := MAX;
D[j] := MIN;
end;
writeln(' ***Матрица A***');
for i := 1 to 5 do
begin
for j := 1 to 6 do write(A[i, j]:4);
writeln;
end;
writeln;
writeln(' ***Матрица B***');
for i := 1 to 5 do
begin
for j := 1 to 6 do write(B[i, j]:4);
writeln;
end;
writeln;
writeln('***Вектор C***');
for i := 1 to 6 do
begin
writeln(C[i]:7);
if C[i] mod 2 = 0 then evenCountC := evenCountC + 1;
end;
writeln('Количество четных элементов в векторе C = ', evenCountC);
writeln;
writeln('***Вектор D***');
for i := 1 to 6 do
begin
writeln(D[i]:7);
if D[i] mod 2 = 0 then evenCountD := evenCountD + 1;
end;
writeln('Количество четных элементов в векторе D = ', evenCountD);
if evenCountC > evenCountD then
begin
writeln('Добавляем вектор C к матрице A.');
for i := 1 to 6 do A[6, i] := C[i];
writeln(' ***Измененная матрица A***');
for i := 1 to 6 do
begin
for j := 1 to 6 do write(A[i, j]:4);
writeln;
end;
end
else
begin
writeln('Объединяем два вектора C и D.');
writeln('Новый вектор M');
for i := 1 to 6 do M[i] := C[i];
for i := 7 to 12 do M[i] := D[i - 6];
for i := 1 to 12 do writeln(M[i]:7);
end;
readln;
end.