15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|||||||||||
1 | |||||||||||
Возможно-ли упростить код?17.08.2012, 14:19. Показов 1605. Ответов 22
Метки нет (Все метки)
При выполнении хотя бы одного условия равенства, вывести только один из двух равных элементов. На выходе: b[i] и три элемента из c[i], c[j], d[i], d[j].
Код для упрощения:
В одномерном массиве с четным количеством элементов(2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1,y1,x2,y2,x3,y3…Определить номера точек, которые могут являться вершинами равнобедренного треугольника. И сам код (его упрощать не надо!):
0
|
17.08.2012, 14:19 | |
Ответы с готовыми решениями:
22
Упростить код, если возможно Возможно ли как-то упростить код? Возможно ли упростить код для асинхронной отправки электронной почты Уважаемые знатоки, подскажите возможно ли как то упростить данный код |
8 / 8 / 1
Регистрация: 13.08.2012
Сообщений: 18
|
|||||||||||
17.08.2012, 14:35 | 2 | ||||||||||
// ...
1
|
32 / 32 / 8
Регистрация: 04.07.2012
Сообщений: 50
|
||||||
17.08.2012, 14:37 | 3 | |||||
Вообще, по логике не нужно два раза выполнять сравнение, мне кажется.
1
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
17.08.2012, 14:45 [ТС] | 4 |
SubTerran, Спасибо, но по-большому счёту эта функция особо код не упрощает, но всё же спасибо за ответ.
Добавлено через 1 минуту Thirteen, Спасибо, уже исправил, но мне всё же важнее было знать можно-ли избежать такое количество строк?
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
17.08.2012, 14:55 [ТС] | 6 |
novi4ok, Так ведь если я каждую проверку добавлю в функцию, то функций тоже будет 4 штуки, как и проверок или я ошибаюсь? Просто я с функциями ещё не разу не работал и толком нечего не знаю про них и про их написание.
0
|
17.08.2012, 15:12 | 7 | ||||||||||
начнем с начала. что здесь делается?
дальше ты в векторы что-то набиваешь непонятно зачем. почему ты для ввода вектор не используешь? ведь ты заранее не знаешь, сколько точек тебе дадут. или сразу забей массив макс длины, и проверяй степень заполнения, и прекращай ввод, когда больше некуда.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||||||
17.08.2012, 16:04 | 8 | |||||
Ну и самое примитивное
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||
17.08.2012, 21:55 [ТС] | 9 | |||||
novi4ok, Вообще-то там написано
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
18.08.2012, 07:21 | 11 |
Для статически создаваемых массивов, размер должен быть известен при компиляции. Тебе нужно использовать int a = new int[n]; ... delete[] a;
0
|
18.08.2012, 10:34 | 12 | ||||||||||
1 В n у тебя значение - фиг знает что.
2 Массив можно создовать только константной переменной.
0
|
18.08.2012, 11:31 | 13 |
в общем, с массивом, думаю, ясно.
но я - за vector. вводим точки и дописываем их в вектор. после этого проверяем, действительно ли у вектора четная длина и находится ли там по крайней мере 3 точки (6 элементов). затем перебираем все сочетания точек, которые могли бы быть вершинами треугольника. но для этого нужно исключить вхождение в треугольник одной и той же точки, проверку одного и того же несколько раз и т.д. т.е. цикл внешний должен начинаться с нуля, но заканчиваться не доходя две точки до конца, первый вложенный - от текущего значения индекса внешнего цикла по предпоследнюю точку, и внутренний - от текущего значения индекс первого вложенного по последнюю включительно. при таком подходе все возможные треугольники будут проверены, причем только они и только один раз.
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||
18.08.2012, 12:36 [ТС] | 14 | |||||
novi4ok,Программирую в Dev c++ там код и компилируется и запускается спокойно.
Собственно я написал так:
0
|
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
|
|
18.08.2012, 13:27 | 16 |
0
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||||||||||||
18.08.2012, 18:12 [ТС] | 18 | |||||||||||||||
novi4ok,
Если код выглядит вот так:
В таком случае:
НО, если код написать вот так:
1
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
18.08.2012, 22:08 | 19 |
Для простоты отладки я бы посоветовал заполнять вектор не вручную, а автоматически - из файла или рандомно.
Если уж используете вектора, то и массив a тоже лучше сделать вектором. Координаты точек лучше хранить в виде структуры или std:: pair. Вызов sqrt можно не делать вовсе - результат от этого не изменится. Чтобы не делать столько сравнений в одном месте, можно работать с каждой точкой отдельно. Поясню - берем первую точку из массива точек, высчитываем расстояния до всех других точек и тут же ищем одинаковые расстояния. Если находим - выводим сообщение о найденных равнобедренных треугольниках. Затем переходим к другой точке. Как-то так, надеюсь поможет и успехов в изучении.
1
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
18.08.2012, 23:00 [ТС] | 20 |
I.M., Большое спасибо за советы. На счёт структур и std:: pair: слышал про эти два пункта, но я с ними дела ещё не имел так что не знаю как их использовать.
0
|
18.08.2012, 23:00 | |
18.08.2012, 23:00 | |
Помогаю со студенческими работами здесь
20
Возможно ли упростить запрос? Возможно ли упростить цикл? Возможно ли упростить сортировку массива по значению? Возможно ли упростить мою функцию по переключению картинок? Возможно ли упростить так, чтобы не осталось тригонометрических функций? Упростить код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |