Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Glacius
Сообщений: n/a
#1

Способы решения тривиальных/не тривиальных задач - C++

13.11.2010, 01:58. Просмотров 1747. Ответов 20
Метки нет (Все метки)

Други! В этой теме я предлагаю выкладывать свои способы решения тривиальных/не тривиальных задач и стремиться к элегантности их решения, то бишь к совершенству кода. Это будет способствовать повышению профессионализма и навыков кодерства. Оптимизация должна быть интересной
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2010, 01:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Способы решения тривиальных/не тривиальных задач (C++):

Нужна литература и примеры решения задач - C++
Помогите найти полный учебник по Visual C++ и программы которые нужны для языка.

Программа для решения транспортных задач - C++
Помогите плиз умоляю, ребята. Составить программу решающую подобные задачи. Единственное условие: Выбор столбцов и строк в массивах...

Составить программы для решения задач - C++
помогите пожалуйста реализовать в код ( 5 вариант) П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других...

Сайты для решения задач по программированию - C++
Дайте ссылки на сайты, на которых можно, решая задачи, зарабатывать баллы и т. п.

Пригоден ли С++ для решения однотипных задач по механике - C++
Всем здравствуйте. Иногда страдаю решением однотипных задач по механике, в которых очень много формул. Значения переменных для формул...

Где взять решения задач из книги Дейтелов - C++
Здраствуйте. Откуда я могу найти решения задач по Дейтел?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.11.2010, 01:59 #2
Glacius, Оптимизация не всегда есть элегантность и совершенство. Ненужная оптимизация - зло
Glacius
Сообщений: n/a
13.11.2010, 02:01 #3
Таки давайте стремиться к предельному
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.11.2010, 02:19 #4
Glacius, К предельному идиотизму? Ну начинайте, может кто-то и подтянеться.

Оптимизируйте swap двух чисел без использования третьей.

Задача n-ое кол-во раз была на форуме, но с чего-то ведь надо начинать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
void swap(int& a, int &b)
{
    a+=b;
    b=a-b;
    a-=b;
}
 
int main()
{
    int a=10, b=5;
    swap(a, b);
    std::cout<<a<<' '<<b<<'\n';
    return 0;
}
Glacius
Сообщений: n/a
13.11.2010, 02:34 #5
Вы не использовали 3-ю переменную.
Но задачу можно решить используя оператор "XOR", т.е. "^=":
C++
1
2
3
a ^= b;
b ^= a;
a ^= b;
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.11.2010, 02:42 #6
Glacius, Верно. А можно и
C++
1
a^=b^=a^=b;
Только оптимизация ли это?
Glacius
Сообщений: n/a
13.11.2010, 02:52 #7
Это один из вариантов. Но тема не столько для оптимизаций, сколько для мыслей и рассуждений.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.11.2010, 02:53 #8
Glacius, Намного ли быстрее работает XOR чем сложение и вычитание на современных компьютерах?
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.11.2010, 04:41 #9
ForEveR, ещё можно вспомнить недавнюю тему про реверс строки - там же уже это обсуждалось - даже ассемблерный код приводился...
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.11.2010, 10:44 #10
silent_1991, Да, я помню. Ненамного быстрее все же, насколько я понимаю.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.11.2010, 10:47 #11
Да там вроде сошлись во мнении, что практически всегда по скорости обе реализации один в один совпадают.
Glacius
Сообщений: n/a
13.11.2010, 11:07 #12
Имеете ввиду что тема исчерпала себя до своего создания?
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
13.11.2010, 11:42 #13
Цитата Сообщение от ForEveR Посмотреть сообщение
Намного ли быстрее работает XOR чем сложение и вычитание на современных компьютерах?
Да и на не современных одинаково, только XOR в отличие от сложений и вычитаний переполнений и переходов через ноль не вызывает.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,270
Записей в блоге: 2
Завершенные тесты: 1
13.11.2010, 11:43 #14
Цитата Сообщение от silent_1991 Посмотреть сообщение
Да там вроде сошлись во мнении, что практически всегда по скорости обе реализации один в один совпадают.
Ага, так как это делает компилятор C++.
Если бы на ассемблере писал человек, то можно было бы несколко тактов выиграть( в случае с XOR), просто компилятор гененрирует более общий вариант поставленной задачи, а человек будет подходить к этому как к частному случаю.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
13.11.2010, 14:53 #15
Цитата Сообщение от ForEveR Посмотреть сообщение
Код C++
1
a^=b^=a^=b;
К сожалению, это не оптимизация, а с точностью до наоборот. Хотя этот код стотыщпицот раз уже приводили как "правильный пример". Так вот, это - пример того, как не надо писать. В соответствии с точным смыслом Стандарта языка, этот код приводит к неопределенному поведению программы. А неопределенное поведение, оно такое - может, ничего не произойдет, а может и "бабахнуть".....
А по скорости в сравнении с кодом Glacius - выигрыша нет. Зато код Glacius не обладает UB.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2010, 14:53
Привет! Вот еще темы с ответами:

Нужно Описание математического метода решения задач - C++
помогите, нужно Описание математического метода решения задач 1. Найти среднеарифметическое значение элементов массива. 2. Сосчитать...

Литература по C++ для решения вычислительных и математических задач - C++
Доброго времени суток! Прошу совета: требуется использовать язык C++ для решения вычислительных и математических задач. Каким образом...

Симплекс метод решения задач линейного программирования - C++
Как реализовать в программе симплек метод решения задач линейного программирования

Применение симплекс-метода для решения задач - C++
Напишите программку для решения этой задачи ,можно решить её также желательно решить её математически)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.11.2010, 14:53
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru