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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2010, 21:38   #1
nemoI3
 
Регистрация: 22.11.2010
Сообщений: 3
По умолчанию Кол-во повторяющихся элементов, delphi-объектное

Для массива А1,...А20 найти кол-во повторяющихся элементов

Код:
var i,j,k,m:integer; a:array[1..20] of integer;
begin
randomize; m:=0;  for i:=1 to 20 do begin
 a[i]:=random(20)-10;
 stringgrid1.Cells[0,i-1]:=inttostr(a[i]);
                                   end;
for i:=1 to 19 do
for j:=i+1 to 20 do begin
 if a[i]=a[j] then k:=1 else k:=0;
  m:=m+k;
                    end;
                    label1.caption:=inttostr(m);
end.
чувствую, что где-то ошибся, но не вижу где!
Выручите пожалуйста!
nemoI3 вне форума Ответить с цитированием
Старый 22.11.2010, 22:22   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а можно уточнить, что Вы понимаете под словами "кол-во повторяющихся элементов" ?
например,
для массива
1 2 1 2 2 3 1 4 1
чему равно это количество?



p.s. мне кажется, что простота этой задачи - кажущаяся...
впрочем, посмотрим, что именно Вы хотите получить,
тогда точно будет ясно, как эту задачку можно решить...

Последний раз редактировалось Serge_Bliznykov; 22.11.2010 в 22:28.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.11.2010, 00:09   #3
nemoI3
 
Регистрация: 22.11.2010
Сообщений: 3
По умолчанию

Ответ: 2.
т.к. повторяются только цифры 1 и 2...вот)
nemoI3 вне форума Ответить с цитированием
Старый 23.11.2010, 01:33   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вариантов решения задачи — множество!

проблема, собственно одна - как не посчитать те элементы, которые уже были ранее...

например, вот три разных алгоритма:
1. При поиске, если какой-то элемент совпал, тогда его заменять на число, которого заведомо не может быть в массиве, ну, пускай это будет -65333 или -MaxInt или какое хотите..
Разумеется, если встретилось такое число, то проверять его уже не надо.
примерно так:
Код:
  m := 0;
  for i := 1 to MaxSize-1 do
    if a[i] <> -MaxInt then begin
      k := 0;
      for j := i + 1 to MaxSize do
        if a[i] = a[j] then begin
          k := 1;
          a[j] := -MaxInt;
        end;
      m := m + k;
    end;
  ShowMessage(inttostr(m));
2. При проверке очередного числа. Если мы его нашли в оставшихся элементах массива, то нужно проверить, чтобы этого же числа не было ранее
(т.е. добавить ещё один цикл и проверить элементы массива от 1 до i-1)

примерно так:
Код:
  m := 0;
  for i := 1 to MaxSize - 1 do begin
    k := 0;
    for j := i + 1 to MaxSize do
      if a[i] = a[j] then begin
        k := 1;
        break;
      end;

      {дополнительная проверка,
         что такого элемента не было ещё}
    if k = 1 then
      for j := 1 to i - 1 do
        if a[i] = a[j] then begin
          k := 0;
          break;
        end;

    m := m + k;
  end;

3 вариант. Использовать VCL объект, в котором накапливать встреченные значения (например, TList или его наследники, например, TStringList). Тогда, когда нашли какой-то повторяющийся элемент, через .IndexOf(Величина) проверяем наличие этого элемента. Если там его ещё нет - добавляем в список объектов и увеличиваем счётчик повторяющихся элементов. Если он там уже есть - то ничего не делаем, переходим к следующему элементу массива...
Приводить рабочий пример кода не буду, ибо лень.. Да и просто там всё. Да и необходимости в этом примере, имхо, уже нет..

удачи.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.11.2010, 19:52   #5
nemoI3
 
Регистрация: 22.11.2010
Сообщений: 3
По умолчанию

воооо...спасибо огромное)))
nemoI3 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ поиск повторяющихся (строковых) элементов в массиве danslash Помощь студентам 5 29.03.2010 01:35
поиск повторяющихся элементов в матрице I_newbie Помощь студентам 2 15.03.2010 22:44
количество повторяющихся элементов в массиве Андрей.12 Помощь студентам 1 28.01.2010 23:57
определение количества повторяющихся элементов в строке Alex Cones Общие вопросы Delphi 15 09.08.2009 18:55