Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11678
Последний выпуск: 19.06.2015

Oбработка одномерных числовых массивов

87K
09 декабря 2014 года
koshe4ka
1 / / 09.12.2014
Составьте программу вычисления суммы элементов встречающихся только в одном из массивов A(N) или B(N).
88K
10 декабря 2014 года
Roleri
9 / / 02.12.2014
Отсортируем оба массива по возрастанию.
Затем просмотрим массивы параллельно: на каждом шаге увеличиваем индекс в том массиве, чей элемент сейчас меньше, таким образом "отстающий" индекс будет всегда догонять "опережающий". Это позволит обнаружить все значения, присутствующие в обоих массивах. Остальные просуммируем.

Код:
program SumUnique;
const
  N = 100;
type
  A = array [1..N] of Real;
procedure Sort(var a : A);
  var
  { TODO: переменные для сортировки }
  begin
  { TODO: реализуйте любой алгоритм сортировки }
  end;
var
  a1, a2 : A;
  i1, i2 : Integer;
  sum, prev : Real;
begin
  sum := 0.0;
  { TODO: реализуйте ввод исходных данных в массивы a1, a2 }
  Sort(a1);
  Sort(a2);
  i1 := 1;
  i2 := 1;
  while (i1 <= N) and (i2 <= N) do
    begin
      if a1[i1] < a2[i2] then
        begin
          sum := sum + a1[i1];
          inc(i1);
        end
      else if a2[i2] < a1[i1] then
        begin
          sum := sum + a2[i2];
          inc(i2);
        end
      else
        { нашли неуникальное значение: a1[i1] = a2[i2] }
        begin
          prev := a1[i1];
          inc(i1);
          inc(i2);
          { пропускаем все такие значения }
          while (i1 <= N) and (a1[i1] = prev) do
            inc(i1);
          while (i2 <= N) and (a2[i2] = prev) do
            inc(i2);
        end;
    end;
  { один из массивов кончился, из второго нужно просуммировать остатки }
  while i1 <= N do
    begin
      sum := sum + a1[i1];
      inc(i1);
    end;
  while i2 <= N do
    begin
      sum := sum + a2[i2];
      inc(i2);
    end;
  writeln('Sum = ', sum:4:2);
end.
P.S. Идея заимствована у алгоритма сортировки слиянием.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог