Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

возврат значений из процедур

тут можно задать вопрос по скриптингу
Post Reply
volhram
Novice
Novice
Posts: 73
Joined: 25.08.2006 22:47

возврат значений из процедур

Post by volhram »

люди, помогите кому не лень...
паскаль изучал 100 лет назад...ничего не помню
как заставить процедуру возвращать значение?
или процедуры этого делать не умеют и нужно писать функцию??
а функцию можно вызывать инклудом??
что нужно писать внутри функции?..есть какойнить оператор типа return ?
обьявляется вроде так
function test(Item : Cardinal) : Boolean
begin
end;
volhram
Novice
Novice
Posts: 73
Joined: 25.08.2006 22:47

Post 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 вернёт процедура???
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post 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.
Во втором варианте можно использовать и ф-цию, если тебя волнует какойто общий результат, зависящий от передаваемых параметров в нее.
volhram
Novice
Novice
Posts: 73
Joined: 25.08.2006 22:47

Post by volhram »

воот..огромное спасибо))
volhram
Novice
Novice
Posts: 73
Joined: 25.08.2006 22:47

Post 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
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post 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);
{---------------------------------------------}

Acronym
Novice
Novice
Posts: 114
Joined: 10.05.2005 18:42
Location: Odessa, NDW
Contact:

Post by Acronym »

Спасибо, Miralex
Post Reply