30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
|||||||||||
1 | |||||||||||
Найти значение lg (x) от каждого элемента и переставить на 1 место элемент, значение функции от которого максимально02.03.2021, 21:11. Показов 4472. Ответов 24
Здравствуйте! Есть такое задание:
Дан массив целых чисел. Решить заданную согласно варианта задачу и переставить найденный элемент обоими методами поиска (линейным и бинарным) в начало списка. Для упорядочивания массива использовать пузырьковую сортировку. Найти значение lg (x) от каждого элемента и переставить на 1 место элемент, значение функции от которого максимально. В общем-то, столкнулась с такой проблемой, не знаю, что делать с отрицательными числами. Десятичный логарифм от отрицательного числа не берётся, не совсем понимаю, как осуществить это с отрицательными числами. Вот код, что написала:
Добавила ещё линейный поиск в программу, чтобы находил позицию введённого числа, но по заданию нужно, чтобы он автоматом находил максимальное, попробовала поиграться с max, но что-то не выходит
0
|
02.03.2021, 21:11 | |
Ответы с готовыми решениями:
24
Для каждого столбца заданной матрицы Т(5,3) найти и напечатать элемент, значение которого максимально Найти максимальный элемент массива среди каждого третьего, значение которого превышает значение m Вставить в массив на первое место элемент, значение которого меньше минимального элемента В каждом столбце матрицы найти элемент, значение которого максимально отличается от среднего арифметического |
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
|
03.03.2021, 11:40 [ТС] | 2 |
В принципе, с отрицательным значениями можно работать, но при вводе первым числом отрицательного или нуля, то дальше он не ищет максимальное, нужно как-то бы сделать так, чтобы, если ввод происходил первого отрицательного, то максимальное число вычислялось со второго, если и второе отрицательное, то с третьего, но у меня не получается реализовать
0
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
||||||
03.03.2021, 19:00 [ТС] | 3 | |||||
Попыталась добавить ещё бинарный поиск, но что-то не совсем он правильно работает, где-то ошибка, не знаю где
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
03.03.2021, 19:47 | 4 | |||||
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
|
03.03.2021, 20:24 [ТС] | 5 |
oleg-m1973, Ввод починился, но вся загвоздка в том, что, когда "float" использовала, при вводе отрицательного числа логарифм просто не считается, только положительные считает, а сейчас, он считает и отрицательные, но там какие-то огромные цифры выводит, а с поиском всё равно проблема, линейный выполняется без проблем, а вот бинарный не хочет
Добавлено через 3 минуты oleg-m1973, Просто логарифма от отрицательного числа не существует, поэтому я и не знаю, как к этому подступиться
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
03.03.2021, 20:29 | 6 |
Поэтому я тебе и сказал использовать unsigned int, в нём не бывает отрицательных чисел
Второе - а логарифм, он разве не монотонно возрастает, т.е. максимальное значение логарифма будет у максимального элемента массива? (я математикой уже лет 20 не занимался)
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
|
03.03.2021, 20:33 [ТС] | 7 |
oleg-m1973, Да, правильно, чем больше значение, тем больше логарифм, положительные он считает правильно, но если я ввожу в консоль отрицательное число, то при подсчёте отрицательного числа он выводит огромное положительное, которое непонятно откуда берётся и, соответственно, выводит его как максимальный элемент
Добавлено через 2 минуты oleg-m1973, А введённое отрицательное число (логарифм) он выводит как 9.63296, любое введённое, пусть то -10 или -40, а максимальное 4294967286
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
03.03.2021, 20:42 | 8 | |||||
Это нормально, так представляются отрицательные числа в положительном типе. Сделай тип int и просто проверь после ввода, что число положительное.
Логарифм он, вроде, только в начале быстро изменяется, а на больших числах - практически прямая.
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
|
03.03.2021, 20:51 [ТС] | 9 |
oleg-m1973, Немного не понимаю, просто, получается, что он это отрицательное (которое стало положительным) выводит и показывает, что оно является максимальным элементом в массиве, но это же не так. Я вот сделала, что при вводе отрицательного он выводит , что не может посчитать логарифм просто, положительные считает, находит среди них максимальный элемент, у которого максимальный логарифм, т.е. находит просто максимальный элемент, сортирует изначальный массив. Проблема вот в том, что при вводе первым числом отрицательного элемента, он его не считает и, получается, не вбивает его значение, из-за этого поиск максимума ломается, но если первое будет положительным, а дальше уже как угодно, то всё работает, может что-то с этим сделать можно?
Добавлено через 43 секунды oleg-m1973, Я пыталась как-то через условие сделать проверку, чтобы, если первое число отрицательное, то при подсчёте максимального он его пропускал пока не найдёт положительное, или что-то вроде того
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
03.03.2021, 20:59 | 10 | |||||
Оно не отрицательное, а положительное. Я просто не знал, что std::cin не умеет толком работать с беззнаковыми целыми. Сделай проверку
Добавлено через 56 секунд Проверяй при вводе, чтоб вводились только положительные, как я показал. И покажи, как сделала Добавлено через 1 минуту Или тупо пропускай отрицательные при вводе, заполняй массив только положительными числами Добавлено через 1 минуту
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
||||||
03.03.2021, 21:02 [ТС] | 11 | |||||
oleg-m1973, Почему-то условие он не выполняет, всё равно позволяет вводить отрицательные
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
03.03.2021, 21:07 | 12 | |||||
Сообщение было отмечено ANGELin04ka как решение
Решение
Ну а зачем я по-твоему через переменную сделал?
Добавлено через 3 минуты Либо
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
||||||
03.03.2021, 21:13 [ТС] | 13 | |||||
oleg-m1973, Спасибо, всё работает, классно, теперь нельзя ввести отрицательные. Но что теперь делать с бинарным поиском, элемента? Их вообще можно вместе совмещать, вот линейный работает отлично, всё верно находит, а вот бинарный с косяками?
0
|
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
|
|
03.03.2021, 21:15 | 14 |
как и соответствия написанного условию задачи:
целые это отрицательные, ноль и положительные для неположительных вывести "функция не определена" но целом условие бредовое. как можно что-то переставить поиском ? поиском можно найти. и если переставить максимальное, зачем сортировать ? при сортировке по убыванию максимальное и так окажется на первом месте есть подозрение что нужно найти максимальное положительных чисел. но это не точно. я бы такую задачу вернул тому кто её Вам её дал. точно неправильно. для целых тип int
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
|
03.03.2021, 21:17 [ТС] | 15 |
Yetty, Это точно, я и не знала, что с логарифмом делать отрицательным. При вводе отрицательного я сделала вывод ошибки, он пишет, что логарифм не определён, т.к. отрицательное введено, но косяк, что нельзя его ввести первым, если первым ввести отрицательное, то ломается поиск максимального элемента
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||||||
03.03.2021, 21:24 | 16 | ||||||||||
Сообщение было отмечено ANGELin04ka как решение
Решение
Это можно не делать на каждой итерации, просто вынеси за цикл
Что-то до меня не сразу дошло, что значит "если первым ввести отрицательное, то ломается поиск максимального элемента"
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
||||||
03.03.2021, 21:36 [ТС] | 17 | |||||
oleg-m1973, Линейный поиск поменяла, а что на счёт бинарного, а то он через раз показывает, и, получается, если я в линейном поиске ввела, например, 50, то в бинарном я уже не могу ввести это число?
Добавлено через 2 минуты
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
03.03.2021, 21:37 | 18 |
1
|
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
|
|
03.03.2021, 21:38 [ТС] | 19 |
oleg-m1973, Сортирует пузырьком хорошо, я сделала по убыванию сортировку, потому что в задании написано, что переставить максимальный на первое место, не знаю, правильно оно или нет
0
|
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
03.03.2021, 21:40 | 20 | |||||
Что-то здесь лишнее
Тогда и в бинарном поиске надо поменять условия на противоположные if (arr[mid] < bin)
1
|
03.03.2021, 21:40 | |
03.03.2021, 21:40 | |
Помогаю со студенческими работами здесь
20
Вывести значение каждого третьего элемента последовательности, значение которого кратно трем Найти среднее арифметическое из каждого столбца и поставить это значение на место элемента находящегося на главной диагонали в новом массиве Найти значение t, при котором значение функции максимально В одномерный массив после каждого элемента, номер которого или значение которого кратно трём, вставить цифру 3 Есть ли отрицательные элементы ниже и правее элемента, для которого значение f(Xij]) максимально. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |