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

Несколько вещей по паскалю

Post Reply
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Несколько вещей по паскалю

Post by ParadoX »

На личном опыте и помощи Миралекса были изучены вот такие вещи:

1)Чтобы передать массив в функцию нужно чтобы ВЫ обьявили тип этого массива одним словом.. тоесть в начале кода пишем

Code: Select all

Type MyArray = array[0..300] of Array[1..4] of Cardinal;
2)Непосредственное обьявление функции

Code: Select all

procedure Tralyalya(i,u,o : integer ; GGG : MyArray);
3)важная деталь, что в паскале массив и указатель не так взаимосвязаны как в С. поэтому если вы хотите чтобы функция изменила передаваемые вами массивы и переменные, используется var

Code: Select all

Procedure lol(i : integer; var y);
так функция, заканчивая свою работу не изменит переменную идентичную i вызываемой её функции, но изменит y

вот пример

Code: Select all

var m,n : integer;

procedure lol(i : integer; var y : integer);
begin
i:=100;
y:=100;
end;

begin
lol(m,n);
addtosystemjournal(inttostr(m));
addtosystemjournal(inttostr(n));
end.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

работа с таймером

Code: Select all

program lalala;
var
time :Cardinal;

......

Begin  // Main program start!!!
time :=Timer;
while true do
begin
	if Timer > Time + 10*60*1000 then
	begin
		Hungry(1,$FFFFFFFF);
		time :=Timer;
	end;
......

end;

End.
раз в 10 минут будет вызываться Hungry(1,$FFFFFFFF);
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

скинуть вам чтоли чтобы кординаты из файла брало...

Code: Select all

procedure StrBreakApart(const S, Delimeter : string; Parts : Tstringlist);
var
  CurPos: integer;
  CurStr: string;
begin
  Parts.clear;
  Parts.BeginUpdate();
  try
    CurStr:= S;
    repeat
      CurPos:= Pos(Delimeter, CurStr);
      if (CurPos>0) then 
      begin
        Parts.Add(Copy(CurStr, 1, Pred(CurPos)));
        CurStr:= Copy(CurStr, CurPos+Length(Delimeter),
                    Length(CurStr)-CurPos-Length(Delimeter)+1);
      end else
        Parts.Add(CurStr);
    until CurPos=0;
  finally
    Parts.EndUpdate();
  end;
end;

Function load(InFile : string; var xArray : MyArray) : Boolean;

VAR
MyList,tmp : TStringList;
i,j : integer;

begin
tmp := TStringList.Create;
MyList := TStringList.Create;
MyList.LoadFromFile(InFile);
Xarray[0][1]:=Mylist.count;
if Mylist.count>0 then
	for i:=0 to Mylist.count-1  do
	begin
	StrBreakApart(mylist.strings[i],' ',tmp);
		for j:=0 to 3 do
			try
			xArray[i+1][j+1]:=StrToInt(tmp.strings[j]);
			except
			addtosystemjournal('Ошибка в '+inttostr(i+1)+' строке кординат')
			end;
	tmp.clear;
	result:=True;
end 
else Result:=False;
tmp.free;
MyList.free;
end;

просто вызываем load('c:\etc',mass) {массив должен быть не менее [0..n][1..4]}

при этом mass[0][1] - присваивается оличество элементов

и не забудьте обьявить класс MyArray (см выше)
Post Reply