// PascalABC.NET 3.0, сборка 1128 const nmax=100; var n,i,j,nn,nz,np,t:integer; a,an,az,ap:array[1..nmax] of integer; begin // формируем массив и выводим его Write('Количество элементов в массиве: '); Read(n); for i:=1 to n do begin a[i]:=Random(11)-5; Write(a[i],' ') end; Writeln; // разбиваем массив на три подмассива nn:=0; nz:=0; np:=0; for i:=1 to n do if a[i]<0 then begin nn:=nn+1; an[nn]:=a[i] end else if a[i]=0 then begin nz:=nz+1; az[nz]:=a[i] end else begin np:=np+1; ap[np]:=a[i] end; // сортируем массив с отрицательными элементами по убыванию for i:=1 to nn-1 do for j:=1 to nn-1 do if an[j]<an[j+1] then begin t:=an[j]; an[j]:=an[j+1]; an[j+1]:=t end; // сортируем массив с положительными элементами по возрастанию for i:=1 to np-1 do for j:=1 to np-1 do if ap[j]>ap[j+1] then begin t:=ap[j]; ap[j]:=ap[j+1]; ap[j+1]:=t end; // формируем новое содержимое массива a i:=0; for j:=1 to nz do begin i:=i+1; a[i]:=az[j] end; for j:=1 to np do begin i:=i+1; a[i]:=ap[j] end; for j:=1 to nn do begin i:=i+1; a[i]:=an[j] end; // вывод результата for i:=1 to n do Write(a[i],' '); Writeln end.
// PascalABC.Net 3.0, сборка 1064 // "Классическое" решение const nn=20;
type SqMatrix=array[1..nn,1..nn] of integer;
function AvgRow(row,cols:integer; a:SqMatrix):double; var j,s:integer; begin s:=0; for j:=1 to cols do s:=s+a[row,j]; AvgRow:=s/cols end;
var i,j,n,k:integer; cavg:double; M:SqMatrix;
begin Write('Количество строк (столбцов) в матрице: '); Read(n); Write('Ограничение для среднего арифметического: '); Read(cavg); Randomize; // Инициализация и вывод исходной матрицы Writeln('*** Сгенерированная матрица ***'); for i:=1 to n do begin for j:=1 to n do begin M[i,j]:=Random(51)-20; Write(M[i,j]:4) end; Writeln end; // Собственно, решение задачи k:=0; for i:=1 to n do if AvgRow(i,n,M)<cavg then Inc(k); Writeln('Количество отобранных строк равно ',k) end.
Второе решение дано для демонстрации возможностей современного Паскаля. Оно не подходит в качестве ответа в той части, что не использует отдельную функцию для нахождения среднего. По лаконичности записи оно вполне может соперничать с постепенно набирающим популярность языком, как Python
// PascalABC.Net 3.0, сборка 1064 // Решение, использующее возможности версии 3.0
var n: integer; cavg: double; M: array of array of integer;
begin Write('Количество строк (столбцов) в матрице: '); Read(n); Write('Ограничение для среднего арифметического: '); Read(cavg); // Инициализация и вывод исходной матрицы Writeln('*** Сгенерированная матрица ***'); SetLength(M, n); for var i := 0 to n - 1 do begin M[i] := ArrRandom(n, -25, 25); M[i].Println end; // Собственно, решение задачи var k:=M.Select(x->x.Average < cavg).Count(x->x=True); Writeln('Количество отобранных строк равно ', k) end.
аты:құдайберген
тегі:сатыбалдиев