Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с циклом 
V
    Опции темы
GoldFinch
Дата 10.7.2009, 00:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(mes @  10.7.2009,  00:56 Найти цитируемый пост)
такие операции в книжках разбираются как трюки.

ну их, такие книжки
PM MAIL ICQ   Вверх
zim22
Дата 10.7.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(GoldFinch @  9.7.2009,  23:26 Найти цитируемый пост)
zim22, ты написал бред

слушаю и повинуюсь. ваши слова для меня - истина в последней инстанции.
Цитата(GoldFinch @  10.7.2009,  00:21 Найти цитируемый пост)
ну их, такие книжки

ну почему же, хорошие книжки.
например эта: "Алгоритмические трюки для программистов".
это ж так просто, возьмём к примеру функцию подсчета единичных битов из этой книги: (стр.78)
Код

int pop(unsigned x) {
  unsigned n;

  n = (x >> 1) & 0x77777777;
  x = x - n;
  n = (n >> 1) & 0x77777777;
  x - x - n;
  n = (n >> 1) & 0x77777777;
  x = x - n;
  x = (x + (x >> 4)) & 0xF0F0F0F;
  x = x * 0x01010101;
  return x >> 24;
}

тру хакеры должны писать только так, я вас понял.  smile 



--------------------
PM MAIL   Вверх
GoldFinch
Дата 10.7.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



zim22, ниче что получить младший разряд числа, и посчитать число ненулевых разрядов в числе - это разные задачи?
PM MAIL ICQ   Вверх
zim22
Дата 10.7.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(GoldFinch @  10.7.2009,  14:24 Найти цитируемый пост)
ниче что получить младший разряд числа, и посчитать число ненулевых разрядов в числе - это разные задачи?

ниче. т.к. в обоих случаях существуют более наглядные варианты решений.


--------------------
PM MAIL   Вверх
mes
Дата 10.7.2009, 15:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(zim22 @  9.7.2009,  20:40 Найти цитируемый пост)

и не понятней для "непосвященных"


Цитата(zim22 @  10.7.2009,  14:17 Найти цитируемый пост)

ниче. т.к. в обоих случаях существуют более наглядные варианты решений. 


кстати вариант %2  тоже не очень наглядный, гораздо лучше, имхо, завести функцию типа bool isOdd() smile

P.S. (в частности  для GoldFinch) слово "наглядно" в моем употреблении значит, не чтоб было понятно другим программистам (для них можно и комментарий поставить если требуется), 
а то что код легко подается модификации и сопровождению. smile

P.S.S. естественно замечание насчет наглядности не относится к "100-строчным" программам. smile

Это сообщение отредактировал(а) mes - 10.7.2009, 15:27


--------------------
PM MAIL WWW   Вверх
DedMazai
Дата 10.7.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.7.2009
Где: Лобня

Репутация: нет
Всего: нет



Блин, ### вы тут развели smile)
Вопрос.
Почему в
Код
TStringList * Stri = new TStringList();
Stri->LoadFromFile("otvet.txt");
AnsiString word =(Stri->Strings[0]);
int i=0;i=Stri->Text.Length();i++;

у меня всегда насчитывает на 3 символа больше, чем у меня есть в файле?

Это сообщение отредактировал(а) DedMazai - 10.7.2009, 23:07
PM MAIL ICQ   Вверх
hsilgos
Дата 10.7.2009, 23:24 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 26.4.2009

Репутация: 1
Всего: 2



Цитата

и не понятней для "непосвященных"

Цитата

при условии, что это проходят (а не просто пробегают) по образовательной программе.

"Непосвященных" в проект не берем.
Цитата

ага, особенно питоновцам и тому подобным 

А что питоновцу делать в коде на С++ ? О_о

Цитата

Ну так я то же самое ведь написал. 

То же самое - по логике. Но не каждый оптимизатор оптимизирует это до "наложения маски".

Цитата

..... много кода
тру хакеры должны писать только так, я вас понял.

Это серъезная оптимизация, может применяться в особо чувствительных к производительности местах. 
К тому же её можно оформить как inline функцию и использовать в любом месте. И "тру хакеры" тут нипричем.
PM MAIL   Вверх
mes
Дата 10.7.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(hsilgos @  10.7.2009,  22:24 Найти цитируемый пост)
А что питоновцу делать в коде на С++ ? 

Этой фразой я хотел подчеркнуть что не каждому программисту нужно знание двоичной системы, а так как Cpp позволяет программить как и на Си-уровне, так и на более высоком уровне,
то есть очень большой ряд Cpp-программистов, сродных по целям задач к питоновцам, т.е тем кому низкоуровневые знания нужны лишь как общая теория, и не находят применения на практике.
smile

Добавлено через 3 минуты и 30 секунд
Цитата(hsilgos @  10.7.2009,  22:24 Найти цитируемый пост)
К тому же её можно оформить как inline функцию 

ага, и уже в ней спокойно, если вдруг компилятор не справится ( smile ), выбирать наиболее эффективное решение, чем просто писать &1.

Добавлено через 5 минут и 3 секунды
Цитата(DedMazai @  10.7.2009,  22:07 Найти цитируемый пост)
у меня всегда насчитывает на 3 символа больше, чем у меня есть в файле?

И что это за символы ? приведите пример что в файле, и что считывается.



--------------------
PM MAIL WWW   Вверх
DedMazai
Дата 10.7.2009, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.7.2009
Где: Лобня

Репутация: нет
Всего: нет



например "otvet" 
он выдаёт, что в файле не 5 символов, а 8...
PM MAIL ICQ   Вверх
mes
Дата 10.7.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Хотелось бы добавить, что именно операция &1 в принципе сама по себе не очень сложная и действительно трудно поверить, что программисту она может представлять трудность,
однако такой подход это шаг в сторону низко-уровнего программирования, и хотя этот шаг безболезненный, но как говорится "где шаг, там и два" - то легко переусердствовать на мнимой оптимизации, затруднив этим его поддержку. 

P.S. для ассемблерщиков использование &1 в крови, и ot %2 их естественно подташнивает поначалу, пока не поймут, что оптимизатор справится не хуже.
(говорю на собственном опыте хотя и не ассемблерщик - привычка пришла из прошлой жизни smile )
(ну а если опция оптимизации не включена, значит проект и не нуждается в оптимизации )

Вообщем вот такое имхо.

Добавлено @ 23:58
Цитата(DedMazai @  10.7.2009,  22:49 Найти цитируемый пост)
например "otvet" 
он выдаёт, что в файле не 5 символов, а 8..

перевод строки уже два символа ("\r\n") и вероятно есть пробел еще.
Для проверки выведите два раза считанную строку, все что будет между ними и есть Ваши символы.


Это сообщение отредактировал(а) mes - 11.7.2009, 00:01


--------------------
PM MAIL WWW   Вверх
hsilgos
Дата 11.7.2009, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 26.4.2009

Репутация: 1
Всего: 2



Цитата

Хотелось бы добавить, что именно операция &1 в принципе сама по себе не очень сложная и действительно трудно поверить, что программисту она может представлять трудность,
однако такой подход это шаг в сторону низко-уровнего программирования, и хотя этот шаг безболезненный, но как говорится "где шаг, там и два" - то легко переусердствовать на мнимой оптимизации, затруднив этим его поддержку. 

Ну, с этим я согласен. Низкоуровневую реализацию нужно оборачивать. Да и вообще, я сторонник того, чтобы на компилятор возлагать "рутинную" работу. Но и явную пессимизацию я не делаю.  smile

Добавлено через 1 минуту и 36 секунд
DedMazai, Случайно кодировка в файле не utf-8 ? 
PM MAIL   Вверх
DedMazai
Дата 11.7.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.7.2009
Где: Лобня

Репутация: нет
Всего: нет



Цитата(hsilgos @ 11.7.2009,  01:32)
Добавлено @ 01:34
DedMazai, Случайно кодировка в файле не utf-8 ?

Нет, не utf-8

Цитата(mes @  10.7.2009,  23:56 Найти цитируемый пост)
перевод строки уже два символа ("\r\n") и вероятно есть пробел еще.Для проверки выведите два раза считанную строку, все что будет между ними и есть Ваши символы.

Не совсем разобрался, что мне сделать надо  smile 
Код
int i=0;i=Stri->Strings[0].Length();i++;

Возможно ли записать чтение этой строки так?
При этом всёравно на 1 символ больше выводит.. 

PM MAIL ICQ   Вверх
GoldFinch
Дата 11.7.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



операция И - это не низкоуровневая реализация, а обычная математика =\
PM MAIL ICQ   Вверх
mes
Дата 11.7.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  11.7.2009,  11:18 Найти цитируемый пост)
операция И - это не низкоуровневая реализация, а обычная математика =\ 

не обычная, а  двоичная . Я считаю, что если операции проводятся над двоичными или шестандцатиричными числами, то вполне уместно использовать двоичные операции, так как они накладываются без изменения логики. А вот для десятиричной системы лучше использовать десятиричные операции. Как я уже говорил выше операция &1 "случайно"по логике подходит для 10ричной сс.
Но если чуть развернуть задание, например надо вначале вывести все четные числа, потом кратные трем, потом 4м - то сразу видно что &1 будет выглядеть обособлено.
А зачем лишний раз тратить свое внимание на то, что может сделать компилятор ?

Добавлено @ 13:49
Цитата(GoldFinch @  11.7.2009,  11:18 Найти цитируемый пост)
обычная математика 

тут тоже в 28 строке обычная математика:
http://forum.vingrad.ru/index.php?showtopi...t&p=1916322
ну как, с ходу понятно, какое условие зашифровано в этой строке ?  smile 

 однако мне совесть не позволила оставить такой подход и пришлось написать по нормальному :
http://forum.vingrad.ru/index.php?showtopi...t&p=1916495

логика работы примера стала более свободная и понятная, а операции деления в случае возможной замены на битовые операции компилятор сделает сам.

Я думаю этот пример как раз показывает преимущества второго подхода над первым.
smile




Это сообщение отредактировал(а) mes - 11.7.2009, 15:24


--------------------
PM MAIL WWW   Вверх
mes
Дата 11.7.2009, 15:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(DedMazai @  11.7.2009,  10:43 Найти цитируемый пост)
Не совсем разобрался, что мне сделать надо  smile 

Для начала проверить файл на отсутствие в нем лишних символов, таких как пробел или перевод строки.
можно  посмотреть его реальный размер и убедиться, что файл со строчкой otvet занимает 5 байт.

Цитата(DedMazai @  11.7.2009,  10:43 Найти цитируемый пост)
int i=0;i=Stri->Strings[0].Length();i++;

Вот тут Вы получили длину строки, а потом зачем то инкрементируете это значение. зачем ?
покажите полностью участок кода по подсчету длины считанной последовательности.




--------------------
PM MAIL WWW   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1318 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.