Page 1 of 1
возврат значений из процедур
Posted: 28.08.2006 16:28
by volhram
люди, помогите кому не лень...
паскаль изучал 100 лет назад...ничего не помню
как заставить процедуру возвращать значение?
или процедуры этого делать не умеют и нужно писать функцию??
а функцию можно вызывать инклудом??
что нужно писать внутри функции?..есть какойнить оператор типа return ?
обьявляется вроде так
function test(Item : Cardinal) : Boolean
begin
end;
Posted: 29.08.2006 7:23
by L'inconnu
Posted: 29.08.2006 8:15
by volhram
это я прочёл...но в логику не въехал
если внутри процедуры у меня присваивается значение нескольким переменным того же типа, который процедура должна возвратить, то какую переменную она вернёт?..как ей это указать, вот что меня интересует.
procedure test(x : Integer; y : Integer) : Boolean
var a,b : Boolean
begn
if (x+y)>0 then a:=true
if (x+y)<0 then b:=true
end;
не говоите, что можно обойтись одной переменной, это я для примера, какую из переменных a или b вернёт процедура???
Posted: 29.08.2006 8:52
by Miralex
1. Возврат значения путем ф-ции:
(Возвращаемое значение должно присваиваться в переменную
Result)
Code: Select all
var a,b : Integer;
function test(c , d : Integer) : Integer;
begin
Result := c + d;
end;
Begin
a := 1; b := 2;
AddToSystemJournal(IntToStr(Test(a,b)));
End.
2. Работа с переменными напрямую:
(Обрати внимание на
var, который стоит перед передаваемыми параметрами)
Code: Select all
var a,b : Integer;
procedure test(var a1,b1 : Integer);
begin
a1 := 3;
b1 := -1;
end;
Begin
a := 1; b := 2;
test(a,b);
AddToSystemJournal(IntToStr(a)+' '+IntToStr(b));
End.
Во втором варианте можно использовать и ф-цию, если тебя волнует какойто общий результат, зависящий от передаваемых параметров в нее.
Posted: 29.08.2006 9:17
by volhram
воот..огромное спасибо))
Posted: 29.08.2006 14:43
by volhram
кусочек из программы, должен брать кирку, когда её в руках нету
вроде делал по аналогии со скриптами на форуме....
Result := false;
{---------------------------------------------}
if ObjAtLayer(RHandLayer) = 0 then
begin
if FindType($0E85,backpack) > 0 then
Equip(RhandLayer,finditem);
else //15
if FindType($0E86,backpack) > 0 then
Equip(RhandLayer,finditem);
else
Exit;
end;
Result := true;
wait(1000);
{---------------------------------------------}
ввёл ещё один возможный тип кирки, пришлось использовать else
и с ним появились проблемы
Compiler: [Error] (MINING1.sc at 15:7): Identifier expected
нужно, что бы брал один из двух типов, если таких нет в сумке, возвращал false
Posted: 29.08.2006 15:26
by Miralex
Из-за написания кода в "столбик" без отступов ты сам себя запутал.
Стоит всего лишь расставить пробелы и табуляции, чтобы легко понять где ошибка. Вот исправленный код:
Code: Select all
Result := false;
{---------------------------------------------}
if ObjAtLayer(RHandLayer) = 0 then
begin
if FindType($0E85,backpack) > 0 then
begin
Equip(RhandLayer,finditem);
end
else
if FindType($0E86,backpack) > 0 then
begin
Equip(RhandLayer,finditem);
end
else
Exit;
end;
Result := true;
wait(1000);
{---------------------------------------------}
Posted: 31.08.2006 8:43
by Acronym
Спасибо, Miralex