1. На ленте записано слово в алфавите {, , }. Реализовать машину Тьюринга, которая проверяет, что входное слово содержит каждый из символов алфавита, и при этом хотя бы один из символов встречается в слове два раза подряд. В случае положительного ответа выводится символ , в противном
случае – символ .
2. На ленте записано два -разрядных слова в алфавите {0, 1}, разделённых символом *. Реализовать машину Тьюринга, которая считает количество
единиц в их побитовой дизъюнкции (десятичное число) и выводит это число в
качестве ответа.
Нужны просто алгоритмы с идеей и комментарием
begin
var s:=ReadlnString('>');
var delims:=' ,:;!?'.ToCharArray; // разделители
var a:=s.ToWords(delims).JoinIntoString; // очистка от мусора
var aw:=a.MatchValues('([A-Za-zА-Яа-яЁё])+').ToArray;
var ad:=a.MatchValues('([-\d.])+').ToArray;
Print('Слова:'); aw.Println;
Print('Самое длинное слово:');
var ind:=aw.Select(x->x.Length).ToArray.IndexMax;
Println(aw[ind]);
var m:=aw[ind].Length; // самая большая длина слова
aw:=aw.Select(x->x.PadRight(m)).ToArray;
Print('Числа:'); ad.Println;
Print('Самое длинное число:');
Println(ad[ad.Select(x->x.Length).ToArray.IndexMax]);
for var j:=1 to m do begin
for var i:=0 to aw.Length-1 do Print(aw[i][j]);
Writeln
end;
end.
Тестовое решение:
> Длина составляет 1.2 метра; ширина 0.93 метра!
Слова: Длина составляет метра ширина метра
Самое длинное слово: составляет
Числа: 1.2 0.93
Самое длинное число: 0.93
Д с м ш м
л о е и е
и с т р т
н т р и р
а а а н а
в а
л
я
е
т
Из-за того, что тут используется пропорциональный шрифт, нарушено взаимное расположение символов на выводе. Истинная картина дана во вложении.
//PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016)
const m = 31;
var a:array[1..m] of integer;
i,s,n:integer;
begin
for i:=1 to m do begin
a[i]:=random(-20,20);
if a[i]>0 then begin
s:=s+a[i];n:=n+1;
end;
end;
println('Температуры за месяц :'); a.println;
writeln('Средняя в оттепель :',s/n:0:3);
end.
Тестовое решение:
Температуры за месяц :
16 7 19 -7 -18 6 12 -18 -5 -10 8 -4 10 4 10 5 -3 14 -7 -8 2 7 4 -7 18 4 -12 -5 -9 7 -5
Средняя в оттепель :9.000
//Задание №2
//PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016)
const m = 10;
var a:array[1..m] of integer;
i,s,n:integer;
begin
for i:=1 to m do begin
a[i]:=random(-20,20);
if i mod 2<>0 then s:=s+a[i];
end;
writeln('Исходный массив :'); a.println;
for i:=1 to m do
if i mod 2=0 then a[i]:=s;
writeln('Сумма на нечетных местах = ',s);
writeln('Изиененный массив :'); a.println;
end.
Тестовое решение:
Исходный массив :
-6 15 5 -11 18 4 17 -9 -15 -16
Сумма на нечетных местах = 19
Изиененный массив :
-6 19 5 19 18 19 17 19 -15 19