• Помогите, пожалуйста, с написанием программы! Pascal abc
    "Составьте программу вычисления суммы тех элементов одномерного массива А(N), что одновременно встречаются в массивах B(N) и C(N)"

Ответы 6

  • спасибо!)
    • Автор:

      sebastian
    • 5 лет назад
    • 0
  • Пожалуйста
    • Автор:

      trey4
    • 5 лет назад
    • 0
  • Надеюсь, алгоритм понятен из текста программы.
  • Есть еще более оптимальный алгоритм, где иной поиск и одновременный подсчет, но он сложнее для понимания.
  • с алгоритмом сейчас разберусь)
  • 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;  Writelnend;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 endend;procedure VOut(var a:V;s:string);{ Элементы массива a выводятся с заголовком s }var  i:integer;begin    Writeln(s);  for i:=1 to n do Write(a[i],' ');  Writelnend;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.Тестовое решение:Элементы массива A4 10 6 4 12 5 5 15 0 14 2 2 0 3 14 1 11 13 3 9 Отсортированный массив A0 0 1 2 2 3 3 4 4 5 5 6 9 10 11 12 13 14 14 15 Элементы массива B7 3 13 3 10 11 3 15 12 10 0 5 5 15 13 1 15 9 1 5 Отсортированный массив B0 1 1 3 3 3 5 5 5 7 9 10 10 11 12 13 13 15 15 15 Элементы массива C4 10 5 8 14 15 8 14 12 4 12 12 3 11 4 0 12 2 10 0 Отсортированный массив C0 0 2 3 4 4 4 5 8 8 10 10 11 12 12 12 12 14 14 15 Искомая сумма равна 64
    • Автор:

      jonás69
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years