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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2009, 14:07   #1
nitrolighter
 
Регистрация: 17.10.2009
Сообщений: 3
По умолчанию Улучшить алгоритм нахождения элемента, чаще всего повторяющегося в возрастающем массиве

Здравствуйте, друзья!
вот, мне оказалась дана функция нахождения элемента, который чаще всего повторяется в упорядоченном возрастающем массиве:


Код:
const m = ...;
n = ...;
type masyv = array [m..n] of integer;
function Daug (a : masyvas) : integer;
var i, r,         {элемент и его значение}
   k,            {какой по счету элемент повторяющийся}
   sk : integer; {количество повторяющихся элементов}
begin
 r := a[m];
 sk := 1; k := 1;
 for i := m + 1 to n do
   begin
     if a[i] = a[i – 1]
       then begin
              k := k + 1;
              if k > sk
                then begin
                       r := a[i];
                       sk := k
                     end
            end
       else k := 1
   end;
 daug := r
end;
Так вот, надо улучшить этот алгоритм так, чтобы улучшенном варианте было на ОДНУ ПЕРЕМЕННУЮ и на одну УПРАВЛЯЮЩУЮ СТРУКТУРУ меньше.
Для справки, Генри Ледгард (автор книг по Паскалю) предложил сотне людей улучшить этот алгоритм, они не сумели, как и я , надеюсь вы будете 101-ми
Буду очень благодарен за помощь
nitrolighter вне форума Ответить с цитированием
Старый 17.10.2009, 14:44   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Для данного алгоритма нет нужды иметь информацию о том какой элемент по счету повторяется, поэтому можно обойтись без k. Все равно его значение передается потом Sk.
Вы нуждаетесь в помощи или хотите позлорадствовать?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 17.10.2009, 14:50   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Это замануха. Он думает мы все сейчас ломанемся его улучшать. Типа мы все тут умнее 100 человек.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 17.10.2009, 18:11   #4
nitrolighter
 
Регистрация: 17.10.2009
Сообщений: 3
По умолчанию

нет, правда не хотел вас ввести в заблуждение и тем более злорадствовать.. просто у меня в моих заданиях было написано, думал, просто поделится этим фактом
nitrolighter вне форума Ответить с цитированием
Старый 17.10.2009, 20:30   #5
NeshSoft
Максим Николаев
Форумчанин
 
Аватар для NeshSoft
 
Регистрация: 15.02.2009
Сообщений: 170
По умолчанию

Код:
const m = ...;
n = ...;
type masyv = array [m..n] of integer;
function Daug (a : masyvas) : integer;
var i,         {элемент и его значение}
   k,            {какой по счету элемент повторяющийся}
   sk : integer; {количество повторяющихся элементов}
begin
 daug := a[m];
 sk := 1; k := 1;
 for i := m + 1 to n do
   begin
     if a[i] = a[i – 1] then 
         begin
         k := k + 1;
         daug:=daug*round(sk/k-0.5)+a[i]*round(k/sk-0.5);
         sk:=round((sk+k+0.5)/2);    
         end
      else k := 1
   end;
end;
Ну собственно вот

Учим математику, господа.

nitrolighter, на олимпиаду чтоли на какую?
NeshSoft. Программирование на заказ для студентов. Delphi/Pascal. Подробнее на сайте neshsoft.narod.ru
NeshSoft вне форума Ответить с цитированием
Старый 17.10.2009, 22:54   #6
nitrolighter
 
Регистрация: 17.10.2009
Сообщений: 3
По умолчанию

Максим, спасибо большое! Нет не на олимпиаду - это заочная школа программирования..
nitrolighter вне форума Ответить с цитированием
Старый 18.10.2009, 13:33   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от NeshSoft Посмотреть сообщение

Учим математику, господа.
Там не математика, а логика. Код нужно просто внимательно просмотреть.
Касательно управляющей структуры, если убрать из алгоритма переменную к, то вложенное условие можно не использовать. Поэтому присказка про 100 человек, которые не смогли улучшить алгоритм явный бред (ну не знаю может он не программистам предлагал, а блондинкам...).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск максимального элемента в массиве Alexus999 Помощь студентам 8 08.06.2009 19:47
Алгоритм нахождения обратной мтарицы AlinAA Помощь студентам 1 22.03.2009 12:20
Существование элемента в массиве Carbon Помощь студентам 10 31.03.2008 19:03
Составить программу нахождения максимального элемента Red Devel Помощь студентам 3 25.12.2007 19:08
алгоритм нахождения интеграла методом трапеций pirozho4ek Паскаль, Turbo Pascal, PascalABC.NET 2 11.06.2007 02:44