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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2014, 20:35   #1
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию Найти ближайшее к какому - нибудь целому

Пусть x1 = 0.3; x2 = -0.3; xi = sin(xi-2), i=3,4,...Среди x1,...x100 найти ближайшее к какому - нибудь целому. Объясните, что именно здеь нужно найти. И если можно, то приведите пример. И как с sin считать?? (правильно записана задача 211 здесь http://narhoz-chita.ru/zadachnik/Glava07/index07.htm)
Asya7 вне форума Ответить с цитированием
Старый 30.11.2014, 20:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
найти ближайшее к какому - нибудь целому.
Ващще задание супер...
Если так прикинуть то требуется использовать функцию trunc() чтоб вещественное отчекрыжить в целое. Потом получить разницу между ними, и если она минимальная среди остальных разниц остальных чисел, обработанных таким образом - вывести число с такой разницей на экран.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 21:08   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

При прочтении задание понял так:
1. Заполнить массив вещественных чисел, используя приведенную формулу и начальные значения. Применить цикл
Код:
for i := 3 to 100 do
begin
   rMas[i] := i + sin(rMas[i-2]);
...
...
end;
Там же, в цикле:
2. Использовать функцию trunc(), которая отсекает дробную часть числа.
3. Проверить условие, что дробная часть rA-trunc(rA) <=0.5.
4. Если это так, то ближайшее целое trunc(rA), а иначе - trunc(rA) + 1.
Поскольку sin() <= 1, то все числа xi = i + sin(xi-2) положительные и специальных мер для операции сравнения применять нет необходимости.
Тут - rA - элемент массива.

Как-то так, ...
Как-то так, ...

Последний раз редактировалось ViktorR; 30.11.2014 в 21:11.
ViktorR вне форума Ответить с цитированием
Старый 30.11.2014, 21:28   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Я не понял, а зачем Trunc ?
Почему не Round? Здесь этими целыми могут быть -1,0,1
Искать то, у которого величина Abs((Round(x[и])-x[и])) минимальная.

Последний раз редактировалось type_Oleg; 30.11.2014 в 21:34.
type_Oleg вне форума Ответить с цитированием
Старый 30.11.2014, 21:35   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Посмотрите внимательно на формулу для вычисления элемента:
rMas[i] := i + sin(rMas[i-2]);
Реальное максимальное целое - 100 или 99.
round() - округляет к бли ...

Во блин. Написал и подумал. А почему же не round?

Да! И искать то ведь ничего не надо.

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 30.11.2014, 21:39   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Ну да .. ТС еще и формулу неправильно скопировала с первоисточника.
Тогда не -1,0,1.

Но это не важно. Все равно Round.

Исправил.

Последний раз редактировалось type_Oleg; 30.11.2014 в 21:44.
type_Oleg вне форума Ответить с цитированием
Старый 30.11.2014, 21:56   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему не Round?
Я предполагал что получив целую часть сверка будет делаться не только с ней а и со следующим числом. Впрочем Round пожалуй будет уместнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.11.2014, 22:41   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не знаю, может я и не разобрался в том, что надо,
но я бы искал число, с минимальным значением
Код:
ABS( Frac(X))
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.01.2015, 02:00   #9
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

Всем спасибо! Вот решенная задача:

program r;
var x: array [0..2] of real;
n: real;
i: integer;
begin
x[1] := 0.3;
x[2] := -0.3;
n := x[1];
for i := 3 to 100 do
begin
x[i mod 3] := sin(x[(i - 2) mod 3]);
if (abs(x[i mod 3]) < abs(n)) or (1 - abs(x[i mod 3]) < 1 - abs(n))
then n := x[i mod 3]
end;
write('n = ', n:0:10);
readln
end.
Asya7 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Prolog.Ближайшее значение в списке Lisёноk Помощь студентам 2 28.11.2013 16:36
Как изменить программу так, чтобы круг двигался не по прямой, а по какому - нибудь другому закону.Например,по какой-нибудь кривой kg250493 C++ Builder 2 24.11.2012 13:44
Ближайшее и наименьшее к n из двух чисел turtles Общие вопросы по Java, Java SE, Kotlin 2 25.08.2011 16:19
Найти в массиве число наиболее близокое к целому числу Willow Помощь студентам 2 16.01.2010 13:33