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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2009, 22:15   #1
neon2k
 
Регистрация: 07.01.2009
Сообщений: 8
Восклицание Найти 2 ближайших ел-та в массиве

Сабж на Паскаль/дульфи...
Да если что, то и C++, хотя его я вообще не знаю... желательно тогда с комментами...
Важен сам алгоритм мобщем.

Задача:
Имею числовой отсортированный массив.
Т.е. массив из n-го кол-ва числовых элементов, которые упорядочены по значению... по возрастанию....(если эта информация вообще нужна)
Пользователь вводит число... И надо вывести или это число, если оно имеется(ну это понятно) или 2 ближайших числа сверху и снизу...

Т.е. массив:
1
2
3
9
12
Пользователь вводит "4"...
Ответ: "3" и "9"....

Вот собственно задача.

До пятницы горит!
neon2k вне форума Ответить с цитированием
Старый 07.01.2009, 22:46   #2
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Используйте бинарный поиск. Т.е. берете серединный элемент отсортированного массива и определяете, к какой половине элементов массива ближе искомый. К левой или правой?. К примеру, если ближе к левой, то берете для рассмотрения только левую часть элементов массива. И таким образом доберетесь до искомого элемента (элементов). Если краткое изложение непонятно, почитайте литературу.
MalexG вне форума Ответить с цитированием
Старый 07.01.2009, 22:51   #3
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

Цитата:
Сообщение от MalexG Посмотреть сообщение
Используйте бинарный поиск. Т.е. берете серединный элемент отсортированного массива и определяете, к какой половине элементов массива ближе искомый. К левой или правой?. К примеру, если ближе к левой, то берете для рассмотрения только левую часть элементов массива. И таким образом доберетесь до искомого элемента (элементов). Если краткое изложение непонятно, почитайте литературу.
зачем так сложно то вот так же проще:
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;
var i,n,e,e1,e2:integer;
s:array[1..1000] of integer;
x,y:integer;
begin
try
writeln('vvedi n');
readln(n);
writeln;
for I := 1 to n do
readln(s[i]);
writeln('vvedi element');
readln(e);
x:=1;

while e>s[x] do
x:=x+1;

while e<s[n] do
n:=n-1;
writeln(s[n],' ' ,s[x]);
readln;



except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 08.01.2009, 02:50   #4
neon2k
 
Регистрация: 07.01.2009
Сообщений: 8
По умолчанию

maladoy, огромное спасибо!
neon2k вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В двумерном массиве 4*5 найти сумму элементов по строке или столбцу. bkmz Помощь студентам 11 16.04.2008 11:17
Найти сумму последних L положительных элементов в массиве A={a[i]}. Assembler Kasim Помощь студентам 2 16.12.2007 16:12
Как найти проиизведение в одномерном массиве? kitty Помощь студентам 10 30.11.2007 20:30
В целочисленном массиве найти самое часто повторяющееся число Алена Помощь студентам 2 01.11.2007 19:46