1) Дискретность - алгоритм должен состоять из отдельных пунктов. 2) Понятность - каждая команда должна быть понятна исполнителю. 3) Результативность - алгоритм должен приводить к заранее продуманному результату. 4) Массовость - он должен решать не одну задачу, а круг таких задач. 5) Определенность - не должно быть команд, которые исполнитель воспримит неоднозначно.
Н-р: 1) 1. Повернуть направо. 2. Пройти 2 шага. 3. Повернуть налево. 2) Не должно быть таких команд: 1. Пройти 2 шага 2. Зачикиниться 3) К примеру, рецепт бутерброда приведет тебя к готовому бутеру (если, конечно, ты поборишь свою лень и встанешь, чтобы приготовить его) 4) Н-р, формула расчета притяжения между телами должна быть ориентирована на различные тела, а не на, к примеру, только Землю и Луну. 5) Не должно быть, н-р, таких команд: 1. Повернуть направо 2. Пройти 2 шага 3. Украсть. 4. Пройти 2 шага назад. 5. Дойти до Машки с пятого подъезда.
// PascalABC.NET 3.0, сборка 1128 begin var m:=ReadInteger('Число строк:'); var n:=ReadInteger('Число колонок'); var a:=MatrixRandom(m,n,-10,20); Writeln('Сгенерированный массив'); for var i:=0 to m-1 do begin for var j:=0 to n-1 do Write(a[i,j]:4); Writeln end; Writeln('Найденные суммы'); for var i:=0 to m-1 do begin var avg:=0.0; for var j:=0 to n-1 do avg+=a[i,j]; avg/=n; var s:=0; for var j:=0 to n-1 do if a[i,j]>avg then s+=a[i,j]; Write(s,' ') end; Writeln end.
1. Помещаем нижеследующий текст в файл UniSum.pas, который должен находиться в директории PABCWork.Net
// PascalABC.NET 3.0, сборка 1128 unit UniSum;
interface
Function UniSumMatrix(a:array[,] of integer):integer; Function UniSumMatrix(a:array[,] of real):real; overload;
implementation
Function UniSumMatrix(a:array[,] of integer):integer; begin Result:=0; for var i:=0 to Length(a,0)-1 do for var j:=0 to Length(a,1)-1 do if a[i,j]>0 then Result+=a[i,j] end;
Function UniSumMatrix(a:array[,] of real):real; overload; begin Result:=0; for var i:=0 to Length(a,0)-1 do for var j:=0 to Length(a,1)-1 do if a[i,j]>0 then Result+=a[i,j] end;
end.
2. Создаем новый файл и помещаем в него тестовую программу
// PascalABC.NET 3.0, сборка 1128 uses UniSum;
begin var m:=ReadInteger('Число строк в матрице:'); var n:=ReadInteger('Число столбцов в матрице:'); var R:=MatrixRandom(m,n,-10,20); Writeln('Сгенерированная матрица'); for var i:=0 to m-1 do begin for var j:=0 to n-1 do Write(R[i,j]:4); Writeln end; Writeln('Сумма положительных элементов: ',UniSumMatrix(R)); m:=ReadInteger('Число строк в матрице:'); n:=ReadInteger('Число столбцов в матрице:'); var S:=MatrixRandomReal(m,n,-15,32); Writeln('Сгенерированная матрица'); for var i:=0 to m-1 do begin for var j:=0 to n-1 do Write(S[i,j]:7:2); Writeln end; Writeln('Сумма положительных элементов: ',UniSumMatrix(S):0:2) end.
Тестовое решение: Число строк в матрице: 4 Число столбцов в матрице: 3 Сгенерированная матрица -10 15 17 -8 -8 7 2 -9 0 -1 5 17 Сумма положительных элементов: 63 Число строк в матрице: 5 Число столбцов в матрице: 6 Сгенерированная матрица 0.74 -7.30 15.97 5.01 1.55 12.02 -3.98 -9.21 3.35 -7.95 -14.10 31.21 13.75 -5.82 -5.34 13.33 14.61 15.76 -5.30 14.65 2.60 20.26 27.30 10.81 11.60 27.43 5.61 -10.29 -10.48 26.61 Сумма положительных элементов: 274.18
Как видно, программа действительно универсальная: она позволяет работать с матрицами разных размеров и даже разного типа данных.
2) Понятность - каждая команда должна быть понятна исполнителю.
3) Результативность - алгоритм должен приводить к заранее продуманному результату.
4) Массовость - он должен решать не одну задачу, а круг таких задач.
5) Определенность - не должно быть команд, которые исполнитель воспримит неоднозначно.
Н-р:
1) 1. Повернуть направо.
2. Пройти 2 шага.
3. Повернуть налево.
2) Не должно быть таких команд:
1. Пройти 2 шага
2. Зачикиниться
3) К примеру, рецепт бутерброда приведет тебя к готовому бутеру (если, конечно, ты поборишь свою лень и встанешь, чтобы приготовить его)
4) Н-р, формула расчета притяжения между телами должна быть ориентирована на различные тела, а не на, к примеру, только Землю и Луну.
5) Не должно быть, н-р, таких команд:
1. Повернуть направо
2. Пройти 2 шага
3. Украсть.
4. Пройти 2 шага назад.
5. Дойти до Машки с пятого подъезда.
Автор: MaciNT