Помогите сделать это в Pascal Пусть дан фрагмент программы. Опишите функцию Sum(A, SI,...

0 голосов
65 просмотров

Помогите сделать это в Pascal

Пусть дан фрагмент программы. Опишите функцию Sum(A, SI, S2), вычи¬сляющую сумму тех элементов матрицы А, номера строк и номера столб¬цов которых принадлежат соответственно непустым множествам S1 и S2 типа num.
Const
n = 10;
Type
number = 1..n;
matrix = array [number, number] of real;
num = set of number;
Var
A : matrix;
S1, S2 : num;


Информатика (30 баллов) | 65 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
Традиционнный Pascal:
function Sum(var M:matrix;n:integer;s1,s2:num):real;
var
  i,j:number;
  s:real;
begin
  s:=0;
  for i:=1 to n do
    if i in s1 then
      for j:=1 to n do
        if j in s2 then s:=s+M[i,j];
  Sum:=s
end;

В PascalABC.Net можно написать короче:
function Sum(var M:matrix;n:integer;s1,s2:num):real;
var
  i,j:number;
begin
  result:=0;
  foreach i in s1 do
    foreach j in s2 do result:=result+M[i,j]
end;

(142k баллов)
0

Вообще в традиционном Паскале убийственно плохо реализована работа с множествами. Его элементы нельзя просто так вывести, нельзя узнать их текущее количество. Если множество описано, как содержащее N элементов, то надо в цикле по I от 1 до N проверить, есть ли I-й элемент в этом множестве, и если он есть, то с ним можно работать. Есть варианты пройти множество по Succ(), но они еще мудренее.