Само задание.
Г) Напишите собственные процедуры и функции обработки строк,
повторяющие те, что встроены в Паскаль. Дайте им названия, похожие на
стандартные, например: MyCopy, MyDelete и так далее.
Модераторы: Oleg_D, Модераторы
Г) Напишите собственные процедуры и функции обработки строк,
повторяющие те, что встроены в Паскаль. Дайте им названия, похожие на
стандартные, например: MyCopy, MyDelete и так далее.
{
Функция-аналог Pos
}
function MyPos(SubS: string; S: string): Integer;
var i, j, r, L1, L2 : integer;
begin
r:= 0; { Предполагаемый результат заносим в r }
L1:= Length(SubS); { длина искомой строки }
L2:= Length(S); { длина строки, в которой ищем }
{ i перебирает символы строки, где ищем }
for i:= 1 to 1+L2-L1 do begin
r:= i; { Предполагаемый результат заносим в r }
{ j перебирает символы искомой строки }
for j:=1 to L1 do begin
if Subs[j] <> S[i+j-1] then begin
{ если символы не совпали, то сброс попытки }
r:= 0;
Break;
end
end;
{ Если найдено совпадение, то прекратить перебор строки }
if r<>0 then Break;
end;
MyPos:=r;
end;
{
Main
}
begin
Writeln(Pos('123','01234'));
Writeln(MyPos('123','01234'));
Writeln(MyPos('321','01234'));
Writeln(MyPos('01234','01234'));
Writeln(MyPos('012345','01234'));
Readln;
end.
Fors писал(а):Вся проблема сводится к одному. Неспособности правильно представить ту или иную задачу в виде блок-схемы.
Function TForm1.MyPos (substr,str:String):integer;
var
tmp:string;
i,j,k:integer;
begin
j:=length(substr);
tmp:='';
k:=0;
while (substr<>tmp) and (k<=(length(str)-j+1)) do begin
tmp:='';
inc(k);
for i:=k to j+k-1 do begin
tmp:=tmp+str[i];
end;
end;
if k>(length(str)-j+1) then result:=0 else result:=k;
end;
function MyPos(const ss, s: String): Integer;
var i, j, k, n: Integer;
begin
MyPos:=0; n:=Length(ss);
for i:=1 to Length(s)-n+1 do begin
j:=i; k:=1;
while (k<=n) and (s[j]=ss[k]) do begin
Inc(j); Inc(k);
end;
if k>n then begin
MyPos:=i; Exit;
end;
end;
end;
function MyPos(const ss, s: String): Integer;
var i, j, k, n: Integer;
begin
MyPos:=0; n:=Length(ss);
for i:=1 to Length(s)-n+1 do begin
j:=i+n-1; k:=n;
while (k>0) and (s[j]=ss[k]) do begin
Dec(j); Dec(k);
end;
if k=0 then begin
MyPos:=i; Exit;
end;
end;
end;
function MyPos(const ss, s: String): Integer;
var i: Integer; p, q, e: PChar;
begin
MyPos:=0; e:=@ss[Length(ss)];
for i:=1 to Length(s)-Length(ss)+1 do begin
p:=@s[i]; q:=@ss[1];
while (q<=e) and (p^=q^) do begin
Inc(p); Inc(q);
end;
if q>e then begin
MyPos:=i; Exit;
end;
end;
end;
function MyPos(const ss, s: String): Integer;
var i: Integer; p, q, e, f: PChar;
begin
MyPos:=0; e:=@ss[Length(ss)]; f:=@s[1];
for i:=1 to Length(s)-Length(ss)+1 do begin
p:=f; Inc(f); q:=@ss[1];
while (q<=e) and (p^=q^) do begin
Inc(p); Inc(q);
end;
if q>e then begin
MyPos:=i; Exit;
end;
end;
end;
Вернуться в Книга "Песни о Паскале"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6