var a: array[1..100, 1..100] of real; max, min: real; sum, product: real; i, j, m, n, k: integer;
begin {ввод матрицы} if handsfree then begin n := random(20) + 2; m := random(20) + 2; end else begin write('n, m ='); readln(n, m); end;
writeln('Данные матрицы:'); for i := 1 to m do begin for j := 1 to n do if handsfree then begin a[i, j] := random(100) - 50; write(a[i, j]:4, ' ') end else read(a[i, j]); writeln; end;
{минимумы и максимумы} max := a[1, 1]; min := a[1, 1]; for i := 1 to m do for j := 1 to n do begin if max < a[i, j] then max := a[i, j]; if min > a[i, j] then min := a[i, j]; end; writeln('max = ', max); writeln('min = ', min);
{сумма, произведение, пр. агригаты} sum := 0; product := 1; for i := 1 to m do for j := 1 to n do if a[i, j] <> 0 then {если нужен фильтр} begin sum := sum + a[i, j]; product := product * a[i, j]; k := k + 1; end; writeln('sum = ', sum); writeln('product = ', product); writeln('average = ', sum / (n * m)); writeln('average (selected) = ', sum / k); end.
vladimirkirv
20.09.2022
1. Вот так сейчас решают подобные задачи:
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016 begin Writeln(Range(1,100).Select(i->sin(i)*cos(i)).Where(x->x<>0).Average) end.
Тестовое решение: -0.00136006072493969
2. А вот так учат писать это же школьные учителя:
// PascalABC.NET 3.1, сборка 1174 от 22.02.2016 var m:array[1..100] of real; i,k:integer; s:real;
begin s:=0; k:=0; for i:=1 to 100 do begin m[i]:=sin(i)*cos(i); if m[i]<>0 then begin s:=s+m[i]; k:=k+1 end end; Writeln(s/k) end.
Тестовое решение: -0.00136006072493969
IP1379
20.09.2022
Если элементы массива идут по возрастанию, то вот так
program wstawka; uses crt; const min=1; max=20; type zona=min..max; massiw=array[zona] of integer; var mas:massiw; i,j:zona; a,N,M:integer; T:boolean; BEGIN randomize; clrscr; N:=random(20); writeln('4ucJlo N = ',N); M:=random(20); Writeln('4ucJlo M = ',M); for i:=min to max-2 do begin mas[i+1]:=mas[i]+random(5); write(mas[i],' '); end; for i:=min to max-2 do if (mas[i]>N) and (t=false) then begin t:=true; a:=mas[i]; mas[i]:=N; for j:=i+1 to max do begin N:=mas[j]; mas[j]:=a; a:=N; end; end; for i:=min to max-1 do if (mas[i]>M) and (t=true) then begin t:=false; a:=mas[i]; mas[i]:=M; for j:=i+1 to max do begin M:=mas[j]; mas[j]:=a; a:=M; end; end; writeln; for i:=min to max do write(mas[i],' '); readkey; END.
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Обработка двумерных массивов. алгоритм вычисления среднего значения массива, пример программы
const
handsfree = true;
var
a: array[1..100, 1..100] of real;
max, min: real;
sum, product: real;
i, j, m, n, k: integer;
begin
{ввод матрицы}
if handsfree then begin
n := random(20) + 2;
m := random(20) + 2;
end
else begin
write('n, m =');
readln(n, m);
end;
writeln('Данные матрицы:');
for i := 1 to m do
begin
for j := 1 to n do
if handsfree then begin
a[i, j] := random(100) - 50;
write(a[i, j]:4, ' ')
end
else
read(a[i, j]);
writeln;
end;
{минимумы и максимумы}
max := a[1, 1];
min := a[1, 1];
for i := 1 to m do
for j := 1 to n do
begin
if max < a[i, j] then max := a[i, j];
if min > a[i, j] then min := a[i, j];
end;
writeln('max = ', max);
writeln('min = ', min);
{сумма, произведение, пр. агригаты}
sum := 0;
product := 1;
for i := 1 to m do
for j := 1 to n do
if a[i, j] <> 0 then {если нужен фильтр}
begin
sum := sum + a[i, j];
product := product * a[i, j];
k := k + 1;
end;
writeln('sum = ', sum);
writeln('product = ', product);
writeln('average = ', sum / (n * m));
writeln('average (selected) = ', sum / k);
end.