F1=lambda a,b: a/b
f2=lambda a,b: a if a<b else b
f3=lambda a,b: '=' if a==b else ('<' if a<b else '>')
procent=lambda a: a/100
#примеры
p=print
p(f1(8,2),f1(2,4))
p(f2(5,7),f2(4,3))
p(f3(5,6),f3(5,5),f3(7,3))
p(procent(40))
#результат
#4 0.5
#5 3
#< = >
#0.4
<em>MS DOS QBasic 1.0</em>
DIM n AS INTEGER, m AS INTEGER
CLS
INPUT "n,m=", n, m
IF n < 3 THEN
PRINT "n<3"
SYSTEM
END IF
REDIM a(1 TO n, 1 TO m) AS INTEGER
RANDOMIZE TIMER
FOR i = 1 TO n
FOR j = 1 TO m
a(i, j) = INT(50 * RND)
PRINT USING "###"; a(i, j);
NEXT j
PRINT
NEXT i
PRINT
FOR i = 4 TO n
FOR j = 1 TO m
a(i - 1, j) = a(i, j)
NEXT j
NEXT i
FOR i = 1 TO n - 1
FOR j = 1 TO m
PRINT USING "###"; a(i, j);
NEXT j
PRINT
NEXT i
<u>Пример
</u>n,m=5,8
43 6 19 48 44 6 28 10
5 48 44 1 31 30 25 33
19 30 46 27 29 34 45 8
17 37 43 1 37 46 25 45
48 48 27 21 36 48 44 37
43 6 19 48 44 6 28 10
5 48 44 1 31 30 25 33
17 37 43 1 37 46 25 45
48 48 27 21 36 48 44 37
<u>Замечание</u>
Поскольку QBasic не поддерживает сохранение содержимого при изменении размеров динамического массива, для упрощения было решено не заниматься созданием вспомогательного массива, копирования в него всех строк, кроме последней, затем изменение размера исходного массива и обратное копирование в него. Просто считается, что n уменьшилось на 1.
За основу взят алгоритм, изложенный в "Bикипедии" и найденный по запросу "Наибольшая общая подстрока".
Процедура переделана из C# реализации алгоритма, приведенного там же.
<em>// PascalABC.NET 3.2, сборка 1325 от 19.10.2016</em>
function MaxSubstr(s1,s2:string):string;
begin
var a:=new integer[s1.Length+1,s2.Length+1];
var u:=0; var v:=0;
for var i:=0 to s1.Length-1 do
for var j:=0 to s2.Length-1 do
if s1[i+1]=s2[j+1] then begin
a[i+1,j+1]:=a[i,j]+1;
if a[i+1,j+1]>a[u,v] then begin u:=i+1; v:=j+1 end
end;
Result:=s1.Substring(u-a[u,v],a[u,v])
end;
begin
var a:='trapperkaperkatrter';
var b:='appekaperspamer';
Writeln(MaxSubstr(a,b))
end.
Тестовое решение
kaper
На три вроде),...........................