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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 23:47   #1
vbas
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 21
По умолчанию вектор

Здравсвтуйте мне нужна ваша помощь, задали такую задачку:

данно массив вектор. выбрано из него любое число. Оперделить ближайшее к нему число этого же массива и вывести его номер. (одно число)

мне не нужен код, помогите понять суть решения

спасибо.
vbas вне форума Ответить с цитированием
Старый 24.12.2009, 23:51   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Можно свести эту задачу к поиску минимума в массиве, только искать не самый минимальный элемент, а минимальную разницу выбранного пользователем элемента и остальных элементов массива
netrino вне форума Ответить с цитированием
Старый 24.12.2009, 23:58   #3
vbas
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 21
По умолчанию

цетирую препода: ответ решения смешной и простой

а искать разницу тут скорее всего цикл нужен..
vbas вне форума Ответить с цитированием
Старый 25.12.2009, 00:04   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Да, нужен цикл, иначе никак задачу не решить. Разницу искать не так сложно на самом деле ) В принципе, можно сначала отсортировать массив, а потом найти опять же разницу заданного элемента и отличных от него чисел слева и справа и сравнить её, с каким из элементов разница меньше - тот и ближе к заданному.
netrino вне форума Ответить с цитированием
Старый 25.12.2009, 00:12   #5
vbas
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 21
По умолчанию

я предлагал такое решение сказал что слишком глобально, может найти второе по величине число?
*ступил сори

вот это ему глобально


Код:
var n,i,max: integer;
min: double;
A: array[0..79] of double;
begin
max:=100;
for i:=0 to 79 do
begin
A[i]:=(1+Random(max))/(2+Random(50));
end;
min:=max; n:=0;
Memo1.Clear;
for i:=0 to 79 do
begin
Memo1.Lines.Add(IntToStr(i+1)+' - ' +FloatToStr(A[i]));
if (Abs(A[i]-Int(A[i]))<min) then
begin
min:=Abs(A[i]-Int(A[i]));
N:=i+1;
end;
end;
Memo1.Lines.Add('Наиболее близкое к целому числу - число № '+ IntToStr(N));
end;

Последний раз редактировалось vbas; 25.12.2009 в 00:18.
vbas вне форума Ответить с цитированием
Старый 25.12.2009, 02:45   #6
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Вот такой вариант настряпал на скорую руку, проверил, вроде работает. Но на всякий случай лучше еще раз перепроверить
Код:
const n=5;.
var
  a:array[1..n] of byte;
  i,k,m,r,l,nom:byte;
begin
randomize;
for i:=1 to n do
  begin
    a[i]:=random(51);
    write(a[i],' ');
  end;
writeln;
write('Введите номер выбранного вами элемента:');
readln(i);
writeln(' Это число:', a[i]);
k:=i;                                   //запоминаем номер
if k>1 then /                        /для того случая если пользователь выбрал НЕ первый элемент
  begin
    m:=abs(l-a[1]);               //сначала минимальная разница между нашим элементом и первым
    r:=1;                              //вспомогательная переменная для цикла,чтобы знать с какого значения i начинать
    nom:=r;                         //непосредственно,номер нашего элемента
  end;
if k=1 then                        //если все-таки выбрал первый элемент
  begin
    m:=abs(l-a[2]);
    r:=2;
    nom:=r;
  end; 
for i:=r+1 to n do
  begin
    if i=k then continue;                //чтобы сам с собой не сравнивался
    if abs((a[k]-a[i]))<m then
      nom:=i;
  end;
writeln;
writeln(' Ближайший по значению элемент: a[',nom,']=',a[nom]);
end.

Последний раз редактировалось tools; 25.12.2009 в 02:52.
tools вне форума Ответить с цитированием
Старый 25.12.2009, 03:32   #7
vbas
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 21
По умолчанию

Спасибо tools, но мне пока не нужно решение, он говорит что ответ вообще дан в условие, давал всякие подсказки про mod
3 и 5 пятый класс, что к примеру я умею считать только до 10 и т.д

послед 1 2 3 4

выбрано 3
vbas вне форума Ответить с цитированием
Старый 25.12.2009, 03:41   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от vbas Посмотреть сообщение
цетирую препода: ответ решения смешной и простой
Цитата:
Сообщение от tools Посмотреть сообщение
Код:
if i=k then continue;                //чтобы сам с собой не сравнивался
А вот тут-то собака и зарыта! Вчитайтесь в своё задание «аки робот»!

Последний раз редактировалось Sasha_Smirnov; 25.12.2009 в 05:00. Причина: цитаты-подсказки.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 25.12.2009, 03:48   #9
vbas
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
А вот тут-то собака и зарыта! Вчитайтесь в своё задание «аки робот»!
я вас не понимаю.. это вы относительно моего топа..?
vbas вне форума Ответить с цитированием
Старый 25.12.2009, 04:03   #10
vbas
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от vbas Посмотреть сообщение
я вас не понимаю.. это вы относительно моего топа..?
забыл написать еще он сказал что: "задача из области на смекалку - т.е ответ в условии написан"
vbas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный вектор? jojahti Общие вопросы C/C++ 4 14.09.2012 15:00
Вектор? Slavik Microsoft Office Excel 0 23.02.2009 10:30
N-мерный вектор xtraSHAD0W Паскаль, Turbo Pascal, PascalABC.NET 4 16.04.2008 08:18