![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
ну, собственно вопросы:
1) как реализовать бинарный поиск в массиве чисел, если есть массив и число, которое нужно найти? 2) как создать массив со случайными числами? по первому - не представляю, как за задачу взяться; по второму - задача была выявить в массиве число и напечатать его индекс, что собственно и было реализовано(задача на применение equals), но с фиксированным массивом выглядит как то не интересно и однообразно, а самосоздаваемый массив создать как то не получается( покажите нубу, как это делается собственно сам код программы для второго пункта:
по поводу названия написанного транслитом - я в курсе, что выглядит тупо и так не делается, файл создавался под эту задачку несколько месяцев назад(решаю в рандомном порядке и когда не решается сразу - откладывается в долгий ящик) и просто решила не менять... |
|||
|
||||
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
второй вопрос отпал , для интересующихся, код принял сделующий вид:
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
||||
|
||||
| Michael.de |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 22.3.2005 Где: Deutschland Репутация: нет Всего: 9 |
Rauko, а если так: >> _https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(int[], int, int, int) <<
Но только если это для личных нужд, а не для курсовой/коллоквиума. Ибо нормальный преподаватель такое не пропустит P.S. 1. если maxVal == "максимальное значение случайного эллемента массива", то добавляйте в 15 стр. единицу >>javadoc<< :
2. у Вас нет проверки на одинаковые элементы в массиве {7, 13, 22, 76, 22 ...} P.S.S. форумный движок глючит с линками Это сообщение отредактировал(а) Michael.de - 25.11.2014, 21:48 |
|||
|
||||
| Rauko |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
Michael.de,
мой бинарный поиск имеет такой вид - как дальше просто не могу понять... сижу в сети сейчас с телефона, прочитать что то проблематично...
по поводу курсовой... я свои 9 курсачей и магистерскую уже сдала, но так как ничему полезному в универе не научили(кому нужен фартран и паскаль в наши дни?) учу сама яву - вокруг много объявлений, что нужны явисты... из последних "достижений" - 18 задач на массивы, дошла до последней, сижу и думаю, как ее можно реализовать... учитывая, что много лет не кодила с нуля - прогресс просто немыслемый прослеживается, особенно учитывая, что код получается рабочий и более менее универсальный в плане использования в подобных задачах для "поржать": Для проверки остаточных знаний учеников после летних каникул, учитель младших классов решил начинать каждый урок с того, чтобы задавать каждому ученику пример из таблицы умножения, но в классе 15 человек, а примеры среди них не должны повторяться. В помощь учителю напишите программу, которая будет выводить на экран 15 случайных примеров из таблицы умножения (от 2*2 до 9*9, потому что задания по умножению на 1 и на 10 — слишком просты). При этом среди 15 примеров не должно быть повторяющихся (примеры 2*3 и 3*2 и им подобные пары считать повторяющимися). думаю надо начать уже учиться "резать" программы на мэйн и все остальное... а то моноблоки кода как то не айс выглядят, только для решения простых задач и годятся... возвращаясь к задаче, о которой я спрашивала изначально: из всего условия
по факту не реализовано на выходе только поиск и не до конца поняла с вводом-выводом - чего вообще автор задачи хочет получить на выходе? сравнение дроби? поиск дроби? поиск по целой части? учебник с задачами, откуда была взята задача, имеет пример вывода чисел с плавающей точкой, где выводятся следующие числа(это выдернуто из середины):
совершенно неожиданно вылез вопрос - можно/нужно ли как то ограничивать дробную часть и если можно/нужно - как это сделать? и да, тут фишка не выполнить программу за минимальное количество действий через хитрые библиотеки/коллекции/объекты, а выполнить все это дело вручную... на крайняк разделить программу на несколько классов Это сообщение отредактировал(а) Rauko - 25.11.2014, 23:05 |
||||||
|
|||||||
| baldina |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
Rauko, по идее вас на примере паскаля и фортрана должны были научить программировать вообще, в т.ч. похоже дело в том, что и отсутствии некоторых базовых знаний, увы. вам бы какую-нить книжку по алгоритмам и данным прочитать (того же Н.Вирта например, для начала), и по структурному программированию. можно сразу и по ООП, но наверно тяжело будет. двоичный поиск и в африке двоичный, и на паскале мало отличается от варианта на java. ну как бэ ясно: по-моему, все предельно понятно
что вы имеете в виду? если неточность вычислений с плавающей запятой и, в итоге, бессмысленность проверки на равенство, то здесь не ваш случай. у вас числа уже есть, ими не надо манипулировать, надо только найти искомое (или сказать что нет такого). что за ерунда. число хранится с предельной точностью, допустимой для типа. вводится с этой же точностью. просто сравнивайте, и все. Добавлено @ 23:50 я догадываюсь, что вы хотите от значений типа 51.5895493462739 перейти к коротким, которые вам кажутся более осмысленными. но это лишь попытка переиначить задачу "под себя", введение дополнительных условий (к тому же усложняющих задачу). вы для начала справьтесь с исходной задачей, а уж потом фантазируйте например, если в вашем массиве окажутся те самые "страшные" значения, полученные через rand(), а пользователь введет "51", то программа ему скажет что число не найдено, и покажет два соседних - 49.506819030239846 и 51.43373831951806 кстати.
не так. все же поглядите в вики. и не стоит вычислять одно и то же 3 раза один из вариантов мог бы выглядеть так
если таки захотите сравнивать с какой-то точностью, замените == на Math.abs(userNum-nums[mid])<epsilon Это сообщение отредактировал(а) baldina - 25.11.2014, 23:51 |
||||||||
|
|||||||||
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
я сейчас нахожусь в какой то медвежьей дыре, у меня банально гугл грузится столько времени, что в ожидании можно суп сварить - скачать что либо вообще не реально, идут постоянные разрывы связи, даже на этом форуме с третьей-пятой попытки обновляется страница без ошибок.
на сутки выделено оператором 50 метров на прием - согласитесь, найти что то при условии постоянно перезагружаемой страницы - проблема, поэтому и спрашиваю тут, в надежде что дадут простой ответ хотя бы с указанием направления мысли для дальнейших действий, иначе бы искала какие то мануалы по выполнению нужных деййствий со всеми описаниями, еще бы и перебирала из вредности, что лучше описано автором той или иной книги по поводу введенного пользователем числа... мы вводим число типа double, это понятно, но дальше интересно... допустим, мы ввели 17.0, а ближайшее 16.3... , 17.4... и 17.7... - вопрос, как должна вести себя в этом случае программа? (написать то я это могу, я не знаю, что именно надо описывать в коде) я просто не пойму, как именно требуется сравнивать числа - сравнивать ли только целую часть или и дробную тоже, если можно сравнивать число частично - как это правильно организовать. то есть - обязательно ли по запросу программы копировать из списка число с хз каким количеством символов после запятой или можно ограничиться тремя знаками к примеру? если это допускается - как это выполнить корректно? по поводу двоичного поиска - вроде понятно, попробую сегодня обкатать на работе в перерыв, будут вопросы - вернусь с ними фантазировать в задаче это конечно хорошо, но пока позваляю себе эту вольность только в плане "красивого вывода на экран"(например - заставить двумерный массив выводиться красивыми ровными столбиками...). пока надо научиться выполнять то, что написано в задании Это сообщение отредактировал(а) Rauko - 26.11.2014, 09:58 |
|||
|
||||
| baldina |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
сообщать, что такого числа нет в массиве и выводить ближайшие меньшее и большее, 16.3 и 17.4 Добавлено через 59 секунд
вообще ничего никуда копировать не надо, и вопрос отпадет сам собой. Добавлено через 2 минуты и 52 секунды
сравнение:
вывод на экран
|
||||||||||
|
|||||||||||
| Michael.de |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 22.3.2005 Где: Deutschland Репутация: нет Всего: 9 |
Бинарный поиск (метод деления пополам / дихотомия) - поиск элемента в отсортированном массиве.
На картинке ниже показан поиск числа 76: ![]() Массив остаётся неизменным. И подмассивы не создаются. Лишь (после проверки) сдвигаются (сближаются друг с другом) правая и левая границы поиска. Попробуйте проанализировать и/или сами себе объяснить принцип работы алгоритма с картинки (например, мне это помогает). Отличие вышеприведённого примера от Вашего в том, что у Вас пользователь может ввести число, не являющееся элементом массива (находится: 1. между 2х элементов или 2. вообще за пределами массива) P.S. Округлять, имхо, ничего не надо. Если юзер "угадал" число -> его и выдаёте в ответе. Попал между 2х элементов -> ответ: элем.слева, введённое с клав. число, элем.справа. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |