Помощь - Поиск - Пользователи - Календарь
Полная версия: Функциональная эквивалентность подпрограмм.
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Алгоритмы
Olya
А это ещё одно задание.. 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 – расчёт успешно завершён.
Правильно ли составлена спецификация, если нет, то помогите пожалуйста дополнить.
Lapp
Olya, не обижайся, но у меня такое ощущение, что ты начиталась Маяковского smile.gif

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;


Прежде чем разбирать вопросы, которые ты задаешь, надо хотя бы отформатировать текст правильно. Пожалуйста, уважай собеседников - не заставляй их делать это за тебя.
В одной из твоих предыдущих тем я дал тебе исчерпывающие рекомендации и привел пример. Пожалуйста, разберись.
Имхо, это базис, без которого разобраться в мало-мальски большом тексте невозможно.
Сделаешь - приходи smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.