PascalABC.NET 3.3.5, сборка 1644 от 23.03.2018 Внимание! Если программа не работает, обновите версию!
function SubArray(subarr,arr:array of integer):integer; begin var ns:=subarr.Length; var p1:=arr.Length-ns; // поиск на [0..p1] var ii:=arr[:p1+1].IndexesOf(t->t=subarr[0]); Result:=-1; foreach var i in ii do if arr[i:i+ns].Zip(subarr,(a,b)->a=b).All(t->t) then begin Result:=i; exit end end;
begin var a:=ReadArrInteger('Введите элементы:',ReadInteger('n=')); var b:=ReadArrInteger('Введите элементы:',ReadInteger('n=')); var p:integer; if a.Length<b.Length then begin p:=SubArray(a,b); if p>-1 then Writeln('Первый массив является подмассивом с позиции ',p+1) else Writeln('Подмассив не обнаружен') end else begin p:=SubArray(b,a); if p>-1 then Writeln('Второй массив является подмассивом с позиции ',p+1) else Writeln('Подмассив не обнаружен') end end.
Примеры n= 4 Введите элементы: 1 2 3 4 n= 11 Введите элементы: 0 1 2 3 1 4 1 2 3 4 5 Первый массив является подмассивом с позиции 7
while not Eof(FileText) do begin case Counter of 1: Readln(FileText, Names[1]); 2: Readln(FileText, Numbers[1]); 4: Readln(FileText, Names[2]); 5: Readln(FileText, Numbers[2]); 7: Readln(FileText, Names[3]); 8: Readln(FileText, Numbers[3]); end;
counter := counter + 1; end;
close(FileText);
while CFE = false do begin Bol := false;
Write('Введите Фамилию и инициалы сотрудника (0 - выход): '); Readln(worker);
if (worker = '0') then CFE := true
else begin for i := 1 to 3 do begin if (worker = Names[i]) then begin Writeln('Телефон: ', Numbers[i]); Writeln(); Bol := true; end; end;
if (Bol = false) then begin Writeln(); Writeln('Сотрудник не обнаружен!'); Writeln(); end; end; end;
Внимание! Если программа не работает, обновите версию!
function SubArray(subarr,arr:array of integer):integer;
begin
var ns:=subarr.Length;
var p1:=arr.Length-ns; // поиск на [0..p1]
var ii:=arr[:p1+1].IndexesOf(t->t=subarr[0]);
Result:=-1;
foreach var i in ii do
if arr[i:i+ns].Zip(subarr,(a,b)->a=b).All(t->t) then begin
Result:=i;
exit
end
end;
begin
var a:=ReadArrInteger('Введите элементы:',ReadInteger('n='));
var b:=ReadArrInteger('Введите элементы:',ReadInteger('n='));
var p:integer;
if a.Length<b.Length then begin
p:=SubArray(a,b);
if p>-1 then Writeln('Первый массив является подмассивом с позиции ',p+1)
else Writeln('Подмассив не обнаружен')
end
else begin
p:=SubArray(b,a);
if p>-1 then Writeln('Второй массив является подмассивом с позиции ',p+1)
else Writeln('Подмассив не обнаружен')
end
end.
Примеры
n= 4
Введите элементы: 1 2 3 4
n= 11
Введите элементы: 0 1 2 3 1 4 1 2 3 4 5
Первый массив является подмассивом с позиции 7
n= 4
Введите элементы: 1 2 3 5
n= 11
Введите элементы: 0 1 2 3 1 4 1 2 3 4 5
Подмассив не обнаружен
//Не забудьте указать новое расположение файла, если решите создать файл f1 в другом месте
//Данная программа работает только для определенной записи сотрудников и номеров (как указано на фото)
--------------------------------------
Program Test;
Uses crt;
var FileText: text; Names: array[1..3] of string; Numbers: array[1..3] of string; counter, i: integer; worker: string; Bol, CFE: boolean;
Begin
clrscr;
counter := 1;
CFE := false;
assign (FileText, 'C:\Test\f1.txt');
reset (FileText);
while not Eof(FileText) do
begin
case Counter of
1: Readln(FileText, Names[1]);
2: Readln(FileText, Numbers[1]);
4: Readln(FileText, Names[2]);
5: Readln(FileText, Numbers[2]);
7: Readln(FileText, Names[3]);
8: Readln(FileText, Numbers[3]);
end;
counter := counter + 1;
end;
close(FileText);
while CFE = false do
begin
Bol := false;
Write('Введите Фамилию и инициалы сотрудника (0 - выход): ');
Readln(worker);
if (worker = '0') then
CFE := true
else
begin
for i := 1 to 3 do
begin
if (worker = Names[i]) then
begin
Writeln('Телефон: ', Numbers[i]);
Writeln();
Bol := true;
end;
end;
if (Bol = false) then
begin
Writeln();
Writeln('Сотрудник не обнаружен!');
Writeln();
end;
end;
end;
End.