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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2010, 13:58   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Поиск в массиве

Как найти элемент массива, который наиболее всего близок к заданному числу?
Aleksandr вне форума Ответить с цитированием
Старый 30.01.2010, 14:14   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

В цикле по массиву, берем модуль разности от эталонного, если меньше текущего минимума - заносим номер элемента в память, если нет - идем дальше
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2010, 15:05   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Код:
 for i:=1 to strtoint(edit1.Text) do
         a[i]:=abs(StrToInt(StringGrid1.Cells[i-1,0])-strtoint(edit2.Text));
      zn:=strtoint(edit2.Text);
      min:=1; 
     for i:=2 to strtoint(edit1.Text) do
         if a[i]<zn then min:=i;
          label2.caption:='Наиболее близкий элемент:'+IntToStr(a[min])
что у меня не так? Если ввожу числа в массив произвольным образом , то выводит не правильно
Aleksandr вне форума Ответить с цитированием
Старый 30.01.2010, 19:51   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не разбираясь особо где и как задаётся массив и границы, просто, чтобы проиллюстрировать алгоритм, абсолютно верно предложенный Вам Alex Cones:
Код:
     for i:=1 to strtoint(edit1.Text) do
         a[i]:=abs(StrToInt(StringGrid1.Cells[i-1,0])-strtoint(edit2.Text));
     zn:=strtoint(edit2.Text);
     min:=1; 
     for i:=2 to strtoint(edit1.Text) do
         if abs(a[i]-zn)<abs(a[min]-zn) then min:=i;
     label2.caption:='Наиболее близкий элемент:'+IntToStr(a[min])
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск информации в массиве dozor Общие вопросы C/C++ 3 10.12.2009 16:18
Поиск в массиве VladimirAleks Общие вопросы Delphi 3 06.11.2009 15:00
Поиск минимума в массиве. Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 17.09.2009 19:39
Поиск в массиве ADSoft PHP 1 07.08.2009 11:17
Поиск в массиве Paul_AG Общие вопросы C/C++ 9 03.06.2009 01:29