Снаписанием программы! 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.