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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2014, 09:48   #1
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов.

Заполнение массива
Код:
begin
randomize;
N:=StrToInt(Edit1.Text);
for i:=1 to N do
x[i] := random(100);
Не знаю как написать функцию,чтобы находила максимальное кол-во его одинаковых элементов.
nadyaH вне форума Ответить с цитированием
Старый 19.03.2014, 09:55   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Отсортировать, потом поиск. Не вариант?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 19.03.2014, 10:51   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Vanta11a, в общем случае да. Но если быть уверенным, что элементы всегда будут от 0 до 99 (или какого-нибудь малого диапазона при большом размере исходного массива), то можно завести массив длины 100, пройтись по массиву чисел, увеличивать значение в соответствующей ячейке созданного массива, пройтись по созданному массиву и найти максимальное значение, вывести индекс этого элемента.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 19.03.2014, 14:24   #4
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Код:
function MaxKolOdinEl(a: TArray; N: integer): string;
var
 i,R,r1,j:integer;
begin
if N=1 then
  begin
  result:='Ошибка, N должна быть больше 1';
  end
else
  begin
  r1:=1;
  r:=1;
  result := '';
  for i:=1 to n do 
   begin
   r1:=a[i];
   for j:=i+1 to n do 
    begin
    if a[i]=a[j] then inc(r1); 
    end;
   if r1>r then R:=r1; 
   end;
if R=0 then
 begin
 result:='нету максимально кол-ва одинаковых  элементов';
 end
else
result:=IntToStr(R);
end;end;
Не правильно работает, выдаём просто максимальный элемент массива.
Не знаю что нужно исправить что бы функция работала правильно.

Последний раз редактировалось nadyaH; 19.03.2014 в 14:29.
nadyaH вне форума Ответить с цитированием
Старый 19.03.2014, 14:59   #5
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Массив отсортирован изначально (я не вижу функции сортировки в коде)?
Вообще подход такой: считаете, пока символы одинаковы. Как только символ сменился - сравнение посчитанного, сброс счетчика. Вы счетчик не сбрасываете.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 19.03.2014, 15:06   #6
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

как отсортировать массив?
nadyaH вне форума Ответить с цитированием
Старый 19.03.2014, 15:12   #7
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Тык
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 19.03.2014, 15:34   #8
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
Печаль

Код:
type
  TArray = array[1..100] of Integer;
function ArrayToString(a: TArray; N: integer): string;
var
  i: integer;
begin
  result := '';
  for i:=1 to N-1 do
    result := result  + IntToStr(a[i])+',';
  result := result  + IntToStr(a[N]);
end;

procedure qSort(var A: TArray; min, max: Integer);
var i, j, supp, tmp: Integer;
begin
supp:=A[max-((max-min) div 2)];
i:=min; j:=max;
while i<j do
  begin
    while A[i]<supp do i:=i+1;
    while A[j]>supp do j:=j-1;
    if i<=j then
      begin
        tmp:=A[i]; A[i]:=A[j]; A[j]:=tmp;
        i:=i+1; j:=j-1;
      end;
  end;
if min<j then qSort(A, min, j);
if i<max then qSort(A, i, max);
end;

function MaxKolOdinEl(a: TArray; N: integer): string;
var
 i,R,r1,j:integer;
begin
a[i]:=qSort(A, 0, High(A));
if N=1 then
  begin
  result:='...';
  end
else
 begin
 i:=1;
  if i <= n then
   begin
   R:=1;
   r1:=1;
   for i:=1 to n do
    begin
     r1:=1;
    for j:=i+1 to n do
      begin
      if a[i]=a[j] then inc(r1);
      end;
    end;
if r1>r then
R:=r1;
end;end;
if R=1 then
 begin
 result:='...;';
 end
else
result:=IntToStr(R);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,N: integer;
x: TArray;
begin
randomize;
N:=StrToInt(Edit1.Text);
for i:=1 to N do
x[i] := random(100);
RichEdit1.Lines.Clear;
RichEdit1.Lines.Append(ArrayToString(x,N));
RichEdit2.Lines.Clear;
RichEdit2.Lines.Append(MaxKolOdinEl(x,N));
end;
end.
я запуталась.

Последний раз редактировалось nadyaH; 20.03.2014 в 08:47.
nadyaH вне форума Ответить с цитированием
Старый 20.03.2014, 07:05   #9
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Я вот тоже не понял, чего Вы хотите добиться своей программой. Почему выбрали именно этот алгоритм сортировки?
Это вообще компилируется? Потому что вот тут
Код:
a[i]:=qSort(A, 0, High(A));
значение переменной i может быть любым.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 20.03.2014, 10:12   #10
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Код:
type
TArray = array[1..40] of Integer;
function ArrayToString(a: TArray; N: integer): string;
var
  i: integer;
begin
  result := '';
  for i:=1 to N-1 do
    result := result  + IntToStr(a[i])+',';
  result := result  + IntToStr(a[N]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
r1,r2,R:integer;
N:integer;
j,i,t:integer;
a: TArray;
begin
N:=StrToInt(Edit1.Text);
r:=1;
r1:=0;
r2:=0;
Randomize;
 for i:=1 to N do A[i] := Random(41);
 for i:=1 to N-1 do
  for j:=i+1 to N do
    if A[i] >= A[j] then begin
        t := A[i];
        A[i] := A[j];
        A[j] := t
        end;
for i:=1 to n do
 for j:=i+1 to n do
  if a[i]=a[j] then
   begin
   r:=r+1;
   end
  else
   begin
   r1:=r;
   If r1>=r2 then
    begin
    r2:=r1;
    r1:=0;
    r:=1;
    end
   else
   r:=1;
   r1:=0;
 end;
if r>r2 then r2:=r;
RichEdit1.Lines.Clear;
RichEdit1.Lines.Append(ArrayToString(a,n));
RichEdit2.Lines.Clear;
RichEdit2.Lines.Append(IntToStr(r2));
end;
end.
Правильно работает программа?
nadyaH вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи 7. Дан массив A размера N. Найти минимальный элемент из его элементов с четными номерами: A2, A4, A6, ... nadyaH Помощь студентам 11 18.03.2014 19:51
Дан целочисленный массив X(N,M).среди элементов нечетных столбцов массива найти количество четных чисел. darwin1 Паскаль, Turbo Pascal, PascalABC.NET 1 15.03.2014 17:50
Дан массив размера N. Найти количество участков, на которых его элементы монотонно убывают. ALEXandr20333 Помощь студентам 1 14.02.2014 13:12
Дан целочисленный массив размера N. Определить максимальное количество его одинаковых элементов. cheburashkaRF PHP 10 03.02.2014 12:35
Дан целочисленный массив размера N, содержащий ровно два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номе Alexar Makken Паскаль, Turbo Pascal, PascalABC.NET 1 23.12.2011 22:07