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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2016, 18:24   #1
lanabanana
Новичок
Джуниор
 
Регистрация: 22.02.2016
Сообщений: 2
По умолчанию узнать есть ли в массиве одинаковые числа

Такое задание, что нужно узнать, если ли в массиве одинаковые значения, если нет, то выводить 0, если есть, то выводить значение, что повторяется и количество повторений, если оно не одно, то с новой строки. Как это все сделать? Напишите, пожалуйста..
lanabanana вне форума Ответить с цитированием
Старый 22.02.2016, 19:04   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Вот вариант с сортировкой массива.

Сначала массив отсортировать. Потом обходить его по такому алгоритму. Если i-й элемент не равен предыдущему, то переходить на следующую итерацию цикла.
Если равен, то запустить внутренний цикл, начиная с i+1 до индекса последнего элемента в этом массиве с рассматриваемым значением. Количество итераций такого цикла будет равно количеству повторений текущего элемента. После завершения внутреннего цикла перейти к элементу, следующему за последним элементом с только что рассмотренним значением и повторять всё сначала.

Вариант без сортировки массива.

В начале i равно 1
"Встаём" на i-й элемент массива. Рассматривали ли мы такой элемент. Если рассматривали, то просто переходим к следующему элементу массива. если не рассматривали, по помещаем этот элемент в список уже рассматриваемых и приступаем к рассмотрению всех элементов, следующих за текущим. Считаем, сколько элементов равно текущему. Оно и будет количеством повторов. После завершения внутреннего рассмотрения увеличиваем i на 1 и повторяем алгоритм сначала.

Последний раз редактировалось Вадим Мошев; 22.02.2016 в 19:40.
Вадим Мошев вне форума Ответить с цитированием
Старый 22.02.2016, 22:51   #3
lanabanana
Новичок
Джуниор
 
Регистрация: 22.02.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Вот вариант с сортировкой массива.

Сначала массив отсортировать. Потом обходить его по такому алгоритму. Если i-й элемент не равен предыдущему, то переходить на следующую итерацию цикла.
Если равен, то запустить внутренний цикл, начиная с i+1 до индекса последнего элемента в этом массиве с рассматриваемым значением. Количество итераций такого цикла будет равно количеству повторений текущего элемента. После завершения внутреннего цикла перейти к элементу, следующему за последним элементом с только что рассмотренним значением и повторять всё сначала.

Вариант без сортировки массива.

В начале i равно 1
"Встаём" на i-й элемент массива. Рассматривали ли мы такой элемент. Если рассматривали, то просто переходим к следующему элементу массива. если не рассматривали, по помещаем этот элемент в список уже рассматриваемых и приступаем к рассмотрению всех элементов, следующих за текущим. Считаем, сколько элементов равно текущему. Оно и будет количеством повторов. После завершения внутреннего рассмотрения увеличиваем i на 1 и повторяем алгоритм сначала.
а как это все в делфи написать? нужен код..
lanabanana вне форума Ответить с цитированием
Старый 22.02.2016, 23:18   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А сами что? Вот вам будут "помогать" таким образом, а что вы на экзамене делать будете?
Вадим Мошев вне форума Ответить с цитированием
Старый 22.02.2016, 23:18   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

lanabanana, приложение консольное или оконное?

И, допустим, Вы не можете написать простенький код по сортировке массива и поиску одинаковых элементов.
А что Вы можете? Описать массив и заполнить его исходными данными можете?
Тогда показывайте свои наработки.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.02.2016, 23:57   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

ИМХО, вариант без сортировки - проще.
Вадим Мошев вне форума Ответить с цитированием
Старый 23.02.2016, 01:44   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
lanabanana, приложение консольное или оконное?

И, допустим, Вы не можете написать простенький код по сортировке массива и поиску одинаковых элементов.
А что Вы можете? Описать массив и заполнить его исходными данными можете?
Тогда показывайте свои наработки.
А при чём тут некая сортировка?
northener вне форума Ответить с цитированием
Старый 23.02.2016, 06:01   #8
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  Arr: array[0..11] of Integer = (1, 10, 20, 10, 40, 20, 11, 11, 5, 10, 40, 0);

var
  TempArr: array[0..40] of Integer;
  I: Integer;

begin
  FillChar(TempArr, SizeOf(TempArr), #0);

  for I := Low(Arr) to High(Arr) do
    Inc(TempArr[Arr[I]]);

  for I := Low(TempArr) to High(TempArr) do
  begin
    if TempArr[I] > 1 then
      Writeln(I, ': ',  TempArr[I]);
  end;
  Readln;
end.
Подробности тут.
Filka вне форума Ответить с цитированием
Старый 23.02.2016, 07:38   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
А при чём тут некая сортировка?
Потому, что это самый простой способ решения. А код от Filka плох тем, что очень жесткие рамки. В массиве -2000000000 и 2000000000, приехали
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.02.2016, 12:59   #10
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

var
  mass: array[0..5999] of Integer;
  tmp: array of Integer;
  i, max: Integer;
begin
  Randomize;
  for i:= Low(mass) to High(mass) do
   mass[i]:= Random(6000);
   max:= MaxIntValue(mass);
  {******************************}
   SetLength(tmp, max);
  for i:= Low(mass) to High(mass) do
   tmp[mass[i]]:= tmp[mass[i]] + 1;
  for i:= Low(tmp) to High(tmp) do
  //  if tmp[i] <> 0 then
    Writeln(IntToStr(i) + ' - ' + IntToStr(tmp[i]));
    Readln;
end.

Последний раз редактировалось Iron Monk; 23.02.2016 в 13:05.
Iron Monk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Даны 2 целых числа. Есть ли у них одинаковые(по значению) разряды? votsar Помощь студентам 3 10.12.2015 15:24
В двумерном числовом массиве размером n*m, определить, есть ли столбец, в котором имеются одинаковые элементы (Delphi) Arnold9131 Помощь студентам 3 15.03.2013 21:07
С++ Выяснить, есть ли в записи натурального числа N две одинаковые цифры. Anya She Помощь студентам 4 21.12.2012 16:04
В одномерном массиве выводятся одинаковые числа. Женька Good Помощь студентам 5 20.12.2011 21:52
Есть ли одинаковые числа! kloyn91 Microsoft Office Excel 3 29.10.2009 14:07