IPB
ЛогинПароль:

> Функциональная эквивалентность подпрограмм.
Olya
сообщение 6.04.2007 12:18
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


А это ещё одно задание.. wub.gif
Даны две подпрограммы. являются ли они функционально эквивалентными? Если да, то напишите две общих спецификации для них – одну полную, другую нет.

Я считаю, что да являются yes2.gif , вот эти подпрограммы:
1. cool.gif
{$N+}
type
  TSignedInt=integer;
  TshortUnSignedInt=byte;
  TReal=single;
  TReal2=double;
  PStr=^TStr;
  TStr=array[1..1] of TReal;
  PMatr=^TMatr;
  TMatr=array[1..1] of PStr;

function Alg1(n,m:TsignedInt; const matr:PMatr; var maxsum: TReal2):
TShortUnSignedInt; 
  var
   i,j:TSignedInt;
   sum:TReal2;
   flag,ok:boolean;

begin
if(n<1)or(m<1)or(matr=nil) then Alg1:=1
  else 
    begin
      maxsum:=-1e38;
      flag:=false; 
         for j:=1 to m do 
            begin
               sum:=0;
               i:=1;
               ok:=true;
                  while(i<n)and ok do 
                     begin
                       ok:=(matr^[i]^[j]<=matr^[i+1]^[j]);
                       inc(i);
                  end;
         if ok then 
            begin
               sum:=0; 
                  for i:=1 to n do 
                     sum:=sum+matr^[i]^[j];
                     flag:=true;
                       if sum>maxsum then maxsum:=sum; 
                  end;
         end;
         if flag then Alg1:=0 
              else Alg1:=2; 
         end;
end;



2. wink.gif
function Alg2(n,m:TSignedInt; matr:PMatr; var maxsum: TReal2):
TShortUnSignedInt;

 var
   i,j:TSignedInt;
   sum:TReal2;
   flag,ok:Boolean;

begin
   if(n<1)or(m<1)or(matr=nil) then Alg2:=1
      else
        begin
          flag:=false; {Расчёт закончить}
          for j:=1 to m do
             begin
               i:=1;
               ok:=true;
                 while(i<n) and ok do
                    begin
                      ok:=(matr^[i]^[j]<=matr^[i+1]^[j]);
                      inc(i);
                 end; 
               if ok then
                 begin
                   sum:=0; 
                     for i:=1 to n do sum:=sum+matr^[i]^[j];
                        if flag then 
                            if sum>maxsum then maxsum:=sum
                               else
                                  else
                                      maxsum:=sum;
                                      flag:=true;
               end;{EndIF}
          end;{EndFor}
         if flag then
             Alg2:=0
                else
                  Alg2:=2;
  end;{EndElseIf}
end;


wacko.gif Помогите пожалуйста разобраться со спецификациями...что делают данные подпрограммы, вот моя попытка их составить blink.gif :
Подпрограмма рассчитывает максимальное значение суммы элементов упорядоченного столбца.
Входные данные: матрица размерностью n x m, где n – число строк, m – число столбцов.
Выходные данные: matr – вывод матрицы, maxsum – вывод результата расчёта.

Возвращаемые функцией Alg1 значения:
1 – побочный эффект при аварийном завершении (данных нет),
0 – хоть один столбец упорядочен, продолжить расчёт,
2 – расчёт успешно завершён.

Возвращаемые функцией Alg2 значения:
1 – побочный эффект при аварийном завершении (данных нет),
0 – в любом случае, кроме вырожденного, продолжить расчёт,
2 – расчёт успешно завершён.
Правильно ли составлена спецификация, если нет, то помогите пожалуйста дополнить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 0:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"