![]() |
|
Модераторы: bsa |
![]()
|
|
| Phoenix13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 26.4.2009 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) Phoenix13 - 7.3.2010, 16:30 |
|||
|
||||
| Ozerich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
Это сообщение отредактировал(а) Ozerich - 7.3.2010, 16:42 --------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
|||
|
||||
| Phoenix13 |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 26.4.2009 Репутация: нет Всего: нет |
Большое спасибо за пример! Есть моменты которые я не знаю, поясните пожалуйста.
1) Можем ли мы:
заменить на простое:
2)Как написано у меня в книге опратор "%" - это деление по модулю. Как работает этот оператор здесь?
3)Для чего нужна функция?
|
||||||||
|
|||||||||
| Ozerich |
|
||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
Счас всё разъясню 1. Конечно можем. Но ALPHABET_SIZE я делал для удобства. Это константа, она используется не только в длине массива но и в строчке cout << alphabet[rand() % ALPHABET_SIZE];. Чтобы 2 раза не менять значение, я сделал константу и теперь чтобы изменить значение в 2 местах, мне достаточно только изменить в const int ALPHABET_SIZE = 27; 2.Правильно. % это деление по модулю и он тут так и работает. alphabet[4] этот код получает 4ый символ в alphabet alphabet[rand() % ALPHABET_SIZE] а вот этот код случайный символ. rand() генерирует случайное число которое может быть очень большое и чтобы нам получить случайное число между 0 и 26 нам надо просто получить остаток от деления на 27. 3. Это обеспечивает случайную рандомизацию. Если этого не написать, то при каждом запуске программы будут одни и теже пароли. Надеюсь, понятно объяснил --------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
||||||||||
|
|||||||||||
| Phoenix13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 26.4.2009 Репутация: нет Всего: нет |
А как задать постоянный размер ,скажем, в восемь символов для каждого нового пароля и исключить пробелы?
Это сообщение отредактировал(а) Phoenix13 - 7.3.2010, 17:46 |
|||
|
||||
| Ozerich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
|||
|
||||
| Phoenix13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 26.4.2009 Репутация: нет Всего: нет |
1) А как работает "-1" здесь? Как я понял это для того чтобы не было пробелов и здесь может быть любое число?
2) Как сделать чтобы при изменении длины алфавита результат был такой же? |
|||
|
||||
| Ozerich |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
1. Это я просто ошибся с подсчетами. Если -1 убрать то тогда может произойти обращение к alphabet[26],который равен \0. Это не пробел но в консоли он выглядит как пробел 2.ALPHABET_SIZE - длина алфавита alphabet - сам алфавит Меняя эти 2 константы ты получаешь то что хочешь Это сообщение отредактировал(а) Ozerich - 7.3.2010, 18:50 --------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
||||
|
|||||
| Phoenix13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 26.4.2009 Репутация: нет Всего: нет |
Правильно ли я понимаю что если функция rand() в случае если даст ,например, число 5, а ALPHABET_SIZE -1=26, то cout<< покажет нам первой букву "E" из нашего алфавита. Так? |
|||
|
||||
| Ozerich |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
Нет. Покажит маленькую букву "f" так как индексация в массиве начинается с нуля, тоесть alphabet[0] = 'a' и alphabet[5] = 'f' --------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
||||
|
|||||
| Phoenix13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 26.4.2009 Репутация: нет Всего: нет |
Я понял)) Просто ошибся на одну букву. Из головы вылетело что с "0" начинается, хотя всегда помню вроде.
Я в одном шаге от полного понимания Как в данном случае работает цикл?
Условие i=0 означает что цикл начнется с нулевой ячейки и закончится по другому условию i < LEN означает до каких пор будет генерироваться пароль. Если LEN=4 то начиная с нуля и до 4 получается 4-ех символьный пароль. i++ увеличение на 1. Только не пойму как он связан с массивом. Если я убираю эту строку то код генерируется длинною в один символ. |
|||
|
||||
| Ozerich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 2.8.2009 Где: Минск, Беларусь Репутация: 4 Всего: 5 |
Если убрать строчку то будет выводить один символ так как операция одна. А цикл даёт повторение операций LEN раз. --------------------
C++(STL) / DHTML(CSS) / Javascript / PHP Developer |
|||
|
||||
| Condemned27 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.3.2010 Репутация: нет Всего: нет |
Извиняюсь за вторжение)
Это цикл, который выводит тебе на экран рандомный эл-т из массива alphabet 8 раз, собственно так и получается пароль) Если убрать этот цикл, то цикл
при каждой интерации естественно будет давать тебе после password: по одной букве из массива alphabet. Ну в общем приглядись повнимательней) upd: хоо, запоздал с ответом) Это сообщение отредактировал(а) Condemned27 - 7.3.2010, 20:11 |
||||
|
|||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Это сообщение отредактировал(а) bsa - 8.3.2010, 23:39 |
||||
|
|||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Очипятка? OP2 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |