Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2011, 14:56   #1
kristya94
Новичок
Джуниор
 
Регистрация: 28.10.2011
Сообщений: 1
Восклицание модуль для обработки одномерного массива

В одномерном массиве, состоящем из n целых элементов, вычислить:
1) количество элементов, присутствующих в массиве в единственном экземпляре.
2) сумму модулей элементов, стоящих на чётных местах в массиве.
3) Сформировать новый массив из элементов, взятых по одному из каждой группы равных членов заданного массива.
kristya94 вне форума Ответить с цитированием
Старый 28.10.2011, 16:58   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Огласите бюджет, пожалуйста, либо представляйте свои наработки.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 29.10.2011, 07:15   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Кристя, вот так примерно..

1) Это задание проще делать, если массив упорядочен. Но если мы его сейчас упорядочим - мы не сможем решать задание 2. Поэтому переходим к нему, а потом вернемся к 1.

2) Предполагаю, что массив занумерован от 1 до n.
Код:
var
  a: array[1..n] of integer;
  s: longint;  {сумма может быть очень большой}
...
  s:= 0;
  for i:=1 to n div 2 do s:= s + Abs(a[i*2]);
Теперь возвращаемся к 1

1) Отсортируем массив по возрастанию:
Код:
  for i:=2 to n do
    for j:=n downto i do if a[j]<a[j-1] then begin
      b:= a[j];
      a[j]:= a[i];
      a[i]:= b
    end;
Теперь подсчитаем, сколько уникальных элементов.
Код:
  u:= 0;
  for i:=1 to n do
    if ((i=1) or (a[i-1]<a[i])) and ((i=n) or (a[i]<a[i+1])) then inc(u);
  writeln(u,' elements are unique');
И переходим сразу к 3, поскольку 2 уже есть.

3) Собственно, нужно делать то же самое, что и в 1, только добавить заполнение массива c.
Код:
  u:= 0;
  for i:=1 to n do
    if ((i=1) or (a[i-1]<a[i])) and ((i=n) or (a[i]<a[i+1])) then begin
      inc(u);
      c[u]:= a[i]
    end;
Если хочешь, пункты 1 и 3 можно объединить в один цикл.
Вот и все .

Одна оговорка: элементы в сформированном массиве упорядочены по возрастанию. В самом задании не сказано ничего про порядок, но если все-таки нужно, чтоб они шли в порядке первой встречи в заданном массиве, то решение изменится. Уточни, нужно ли тебе это.
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 29.10.2011 в 07:20.
TinMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка одномерного массива Валюша Общие вопросы C/C++ 8 29.05.2011 12:16
решение одномерного массива starburger511 Помощь студентам 6 14.05.2011 14:12
Задачи обработки одномерного массива на C# PolevchikovaA Помощь студентам 1 04.03.2011 05:32
Сортировка одномерного массива Гамбит Помощь студентам 2 02.11.2009 00:28
перестановка эл. одномерного массива quartzz Общие вопросы C/C++ 19 28.06.2009 17:28