Снаписанием программы! pascal abc "составьте программу вычисления суммы тех элементов одномерного массива а(n), что одновременно встречаются в массивах b(n) и c(n)"
Const n = 20; { размер массивов } p=0; { минимальное значение элемента } q=15; { максимальное значение элемента } type V=array[1..n] of integer;
procedure VInit(var a:V; s:string); { процедура заполняет элементы массива a случайными значениями из интервала [p;q]. Элементы сформированного массива выводятся с заголовком, в который добавляется значение s } var i,kol:integer; begin kol:=q-p+1; Writeln('Элементы массива ',s); for i:=1 to n do begin a[i]:=Random(kol)+p; Write(a[i],' ') end; Writeln end;
procedure SortBubble(var a:V); { сортировка методом пузырька } var i,j,t:integer; begin for i := 1 to n-1 do for j := 1 to n-i do if a[j] > a[j+1] then begin t := a[j]; a[j] := a[j+1]; a[j+1] := t end end;
procedure VOut(var a:V;s:string); { Элементы массива a выводятся с заголовком s } var i:integer; begin Writeln(s); for i:=1 to n do Write(a[i],' '); Writeln end;
function BinSearch(var a:V;key:integer):boolean; { двоичный поиск элемента со значением key в массиве a Возвращает true, если элемент найден и false, если нет } var li,ri,mi:integer; begin li:=1; ri:=n; while li<ri do begin mi:=(li+ri) div 2; if a[mi]<key then li:=mi+1 else ri:=mi; end; BinSearch:=(a[ri]=key) end;
var a,b,c:V; i,ai1,s:integer; found:boolean; begin Randomize; VInit(a,'A'); SortBubble(a); VOut(a,'Отсортированный массив A'); VInit(b,'B'); SortBubble(b); VOut(b,'Отсортированный массив B'); VInit(c,'C'); SortBubble(c); VOut(c,'Отсортированный массив C'); s:=0; found:=false; for i:=1 to n do begin if found then if a[i]=ai1 then Inc(s,ai1) else found:=false; if not found then begin found:=BinSearch(b,a[i]); if found then found:=BinSearch(c,a[i]); if found then begin ai1:=a[i]; Inc(s,ai1) end end end; Writeln('Искомая сумма равна ',s); end.
Есть два типа исполнителей, формальные и неформальные. Формальные исполняют ровно то, что им приказывают, и имеют конечный список допустимых инструкций. Неформальные исполнители сами решают, как им достичь цели, пути, как они этого добиваются, могут изменяться. Формальные исполнители:- избушка (избушка становится к лесу задом, а к говорящему передом)- печь (на которой катался Емеля) Неформальные исполнители:- Бабка (которую Дед попросить испечь колобок)- Василиса Премудрая (которая в форме лягушки выполняла приказы короля, которые ей передавал Иван-царевич)
cimora-kativ
03.09.2020
Как правило, человек выступает в роли неформального исполнителя. Формальными исполнителями являются преимущественно технические устройства. Человек в роли неформального исполнителя сам отвечает за свои действия. За действия формального исполнителя отвечает управляющий им объект.Рассмотрим более подробно множество формальных исполнителей. Формальные исполнители необычайно разнообразны, но для каждого из них можно указать круг решаемых задач, среду, систему команд, систему отказов и режимы работы.
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Снаписанием программы! pascal abc "составьте программу вычисления суммы тех элементов одномерного массива а(n), что одновременно встречаются в массивах b(n) и c(n)"
n = 20; { размер массивов }
p=0; { минимальное значение элемента }
q=15; { максимальное значение элемента }
type
V=array[1..n] of integer;
procedure VInit(var a:V; s:string);
{ процедура заполняет элементы массива a
случайными значениями из интервала [p;q].
Элементы сформированного массива выводятся
с заголовком, в который добавляется значение s }
var
i,kol:integer;
begin
kol:=q-p+1;
Writeln('Элементы массива ',s);
for i:=1 to n do
begin a[i]:=Random(kol)+p; Write(a[i],' ') end;
Writeln
end;
procedure SortBubble(var a:V);
{ сортировка методом пузырька }
var
i,j,t:integer;
begin
for i := 1 to n-1 do
for j := 1 to n-i do
if a[j] > a[j+1] then
begin t := a[j]; a[j] := a[j+1]; a[j+1] := t end
end;
procedure VOut(var a:V;s:string);
{ Элементы массива a выводятся с заголовком s }
var
i:integer;
begin
Writeln(s);
for i:=1 to n do Write(a[i],' ');
Writeln
end;
function BinSearch(var a:V;key:integer):boolean;
{ двоичный поиск элемента со значением key в массиве a
Возвращает true, если элемент найден и false, если нет }
var
li,ri,mi:integer;
begin
li:=1; ri:=n;
while li<ri do begin
mi:=(li+ri) div 2;
if a[mi]<key then li:=mi+1 else ri:=mi;
end;
BinSearch:=(a[ri]=key)
end;
var
a,b,c:V;
i,ai1,s:integer;
found:boolean;
begin
Randomize;
VInit(a,'A'); SortBubble(a); VOut(a,'Отсортированный массив A');
VInit(b,'B'); SortBubble(b); VOut(b,'Отсортированный массив B');
VInit(c,'C'); SortBubble(c); VOut(c,'Отсортированный массив C');
s:=0; found:=false;
for i:=1 to n do
begin
if found then
if a[i]=ai1 then Inc(s,ai1)
else found:=false;
if not found then begin
found:=BinSearch(b,a[i]);
if found then found:=BinSearch(c,a[i]);
if found then begin ai1:=a[i]; Inc(s,ai1) end
end
end;
Writeln('Искомая сумма равна ',s);
end.
Тестовое решение:
Элементы массива A
4 10 6 4 12 5 5 15 0 14 2 2 0 3 14 1 11 13 3 9
Отсортированный массив A
0 0 1 2 2 3 3 4 4 5 5 6 9 10 11 12 13 14 14 15
Элементы массива B
7 3 13 3 10 11 3 15 12 10 0 5 5 15 13 1 15 9 1 5
Отсортированный массив B
0 1 1 3 3 3 5 5 5 7 9 10 10 11 12 13 13 15 15 15
Элементы массива C
4 10 5 8 14 15 8 14 12 4 12 12 3 11 4 0 12 2 10 0
Отсортированный массив C
0 0 2 3 4 4 4 5 8 8 10 10 11 12 12 12 12 14 14 15
Искомая сумма равна 64