| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > бинарный поиск и рандомайзер для массива |
| Автор: Rauko 22.11.2014, 20:15 | ||
| ну, собственно вопросы: 1) как реализовать бинарный поиск в массиве чисел, если есть массив и число, которое нужно найти? 2) как создать массив со случайными числами? по первому - не представляю, как за задачу взяться; по второму - задача была выявить в массиве число и напечатать его индекс, что собственно и было реализовано(задача на применение equals), но с фиксированным массивом выглядит как то не интересно и однообразно, а самосоздаваемый массив создать как то не получается( покажите нубу, как это делается собственно сам код программы для второго пункта:
по поводу названия написанного транслитом - я в курсе, что выглядит тупо и так не делается, файл создавался под эту задачку несколько месяцев назад(решаю в рандомном порядке и когда не решается сразу - откладывается в долгий ящик) и просто решила не менять... |
| Автор: Rauko 22.11.2014, 23:54 | ||
второй вопрос отпал , для интересующихся, код принял сделующий вид:
|
| Автор: baldina 23.11.2014, 23:00 |
сначала изучить тему. в вики даже код есть |
| Автор: Michael.de 25.11.2014, 21:38 | ||
| Rauko, а если так: >> _https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(int[], int, int, int) << Но только если это для личных нужд, а не для курсовой/коллоквиума. Ибо нормальный преподаватель такое не пропустит P.S. 1. если maxVal == "максимальное значение случайного эллемента массива", то добавляйте в 15 стр. единицу >>http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt(int)<< :
2. у Вас нет проверки на одинаковые элементы в массиве {7, 13, 22, 76, 22 ...} P.S.S. форумный движок глючит с линками |
| Автор: Rauko 25.11.2014, 22:55 | ||||||
| Michael.de, мой бинарный поиск имеет такой вид - как дальше просто не могу понять... сижу в сети сейчас с телефона, прочитать что то проблематично...
по поводу курсовой... я свои 9 курсачей и магистерскую уже сдала, но так как ничему полезному в универе не научили(кому нужен фартран и паскаль в наши дни?) учу сама яву - вокруг много объявлений, что нужны явисты... из последних "достижений" - 18 задач на массивы, дошла до последней, сижу и думаю, как ее можно реализовать... учитывая, что много лет не кодила с нуля - прогресс просто немыслемый прослеживается, особенно учитывая, что код получается рабочий и более менее универсальный в плане использования в подобных задачах для "поржать": Для проверки остаточных знаний учеников после летних каникул, учитель младших классов решил начинать каждый урок с того, чтобы задавать каждому ученику пример из таблицы умножения, но в классе 15 человек, а примеры среди них не должны повторяться. В помощь учителю напишите программу, которая будет выводить на экран 15 случайных примеров из таблицы умножения (от 2*2 до 9*9, потому что задания по умножению на 1 и на 10 — слишком просты). При этом среди 15 примеров не должно быть повторяющихся (примеры 2*3 и 3*2 и им подобные пары считать повторяющимися). думаю надо начать уже учиться "резать" программы на мэйн и все остальное... а то моноблоки кода как то не айс выглядят, только для решения простых задач и годятся... возвращаясь к задаче, о которой я спрашивала изначально: из всего условия
по факту не реализовано на выходе только поиск и не до конца поняла с вводом-выводом - чего вообще автор задачи хочет получить на выходе? сравнение дроби? поиск дроби? поиск по целой части? учебник с задачами, откуда была взята задача, имеет пример вывода чисел с плавающей точкой, где выводятся следующие числа(это выдернуто из середины):
совершенно неожиданно вылез вопрос - можно/нужно ли как то ограничивать дробную часть и если можно/нужно - как это сделать? и да, тут фишка не выполнить программу за минимальное количество действий через хитрые библиотеки/коллекции/объекты, а выполнить все это дело вручную... на крайняк разделить программу на несколько классов |
| Автор: Rauko 26.11.2014, 08:36 |
| я сейчас нахожусь в какой то медвежьей дыре, у меня банально гугл грузится столько времени, что в ожидании можно суп сварить - скачать что либо вообще не реально, идут постоянные разрывы связи, даже на этом форуме с третьей-пятой попытки обновляется страница без ошибок. на сутки выделено оператором 50 метров на прием - согласитесь, найти что то при условии постоянно перезагружаемой страницы - проблема, поэтому и спрашиваю тут, в надежде что дадут простой ответ хотя бы с указанием направления мысли для дальнейших действий, иначе бы искала какие то мануалы по выполнению нужных деййствий со всеми описаниями, еще бы и перебирала из вредности, что лучше описано автором той или иной книги по поводу введенного пользователем числа... мы вводим число типа double, это понятно, но дальше интересно... допустим, мы ввели 17.0, а ближайшее 16.3... , 17.4... и 17.7... - вопрос, как должна вести себя в этом случае программа? (написать то я это могу, я не знаю, что именно надо описывать в коде) я просто не пойму, как именно требуется сравнивать числа - сравнивать ли только целую часть или и дробную тоже, если можно сравнивать число частично - как это правильно организовать. то есть - обязательно ли по запросу программы копировать из списка число с хз каким количеством символов после запятой или можно ограничиться тремя знаками к примеру? если это допускается - как это выполнить корректно? по поводу двоичного поиска - вроде понятно, попробую сегодня обкатать на работе в перерыв, будут вопросы - вернусь с ними фантазировать в задаче это конечно хорошо, но пока позваляю себе эту вольность только в плане "красивого вывода на экран"(например - заставить двумерный массив выводиться красивыми ровными столбиками...). пока надо научиться выполнять то, что написано в задании |
| Автор: baldina 26.11.2014, 15:46 | ||||||||||
сообщать, что такого числа нет в массиве и выводить ближайшие меньшее и большее, 16.3 и 17.4 Добавлено через 59 секунд
вообще ничего никуда копировать не надо, и вопрос отпадет сам собой. Добавлено через 2 минуты и 52 секунды
сравнение:
вывод на экран
|
| Автор: Michael.de 26.11.2014, 22:56 |
| Бинарный поиск (метод деления пополам / дихотомия) - поиск элемента в отсортированном массиве. На картинке ниже показан поиск числа 76: ![]() Массив остаётся неизменным. И подмассивы не создаются. Лишь (после проверки) сдвигаются (сближаются друг с другом) правая и левая границы поиска. Попробуйте проанализировать и/или сами себе объяснить принцип работы алгоритма с картинки (например, мне это помогает). Отличие вышеприведённого примера от Вашего в том, что у Вас пользователь может ввести число, не являющееся элементом массива (находится: 1. между 2х элементов или 2. вообще за пределами массива) P.S. Округлять, имхо, ничего не надо. Если юзер "угадал" число -> его и выдаёте в ответе. Попал между 2х элементов -> ответ: элем.слева, введённое с клав. число, элем.справа. |