Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
через 5 мин скину правельный пример вот правельный пример
Цитатаkop9000 ()
только странно что он всегда генерирует все 16 цифр. и редко 15 цифр
Самое занятное, что код в сообщении 24 был полностью правильным. И 16 разрядов получается и все остальное тоже.
Но...
ЦитатаPeter ()
нашлепал AND, а надо было OR.
И никто не обратил внимание на элементарное отсутствие логики в этом случае. А ведь я даже не проверял - плюхнул от балды (с умным видом), и....прокатило.
kop9000, уж сто раз говорил: пока ты будешь тупо копипастить чужой код, а не думать над ним, ничего хорошего не будет. Тебе дадена "заготовка", а дальше - сам! - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
И никто не обратил внимание на элементарное отсутствие логики в этом случае. А ведь я даже не проверял - плюхнул от балды (с умным видом), и....прокатило.
При OR случайное число в 99,9% случаев будет состоять из того же количества символов что и заданное... А на варианте AND можно легко построить пример бесконечного цикла:
Код
SetVar "[LenR]" "0" While "[LenR]" "<>" "2" SetVar "[InPut]" "99"
SetVar "[Result]" "0" SetVar "[R]" "0" StrLen "[InPut]" "[Len]" Random "[Len]" "[Len]" SetVar "[i]" "1" WhileEx "([R] <= [InPut]) AND ([i] <= [Len])" SetVar "[Result]" "[R]" Random "9" "[Num]" If "[R]" ">" "0" SetVar "[R]" "[R][Num]" Else If "[Num]" ">" "0" SetVar "[R]" "[Num]" EndIf EndIf Math "[i]+1" "0" "[i]" EndWhile ClearVariables "[i],[Len],[Num],[R]"
StrLen "[Result]" "[LenR]" EndWhile
"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Сообщение отредактировано anton - Пн, 17 Октября 2016, 09:02
При OR случайное число в 99,9% случаев будет состоять из того же количества символов что и заданное
А иначе и быть не может. Этому есть простое объяснение.
Цитатаanton ()
А на варианте AND можно легко построить пример бесконечного цикла:
А что мешает сделать это на OR ? А можно и вообще без них обойтись.
Цитатаkop9000 ()
вы такими мерами меня вообще скоро с ума сведёте
Если не начнешь думать над кодом, а продолжишь действовать "методом тыка", сам же себя и сведешь. kop9000, заруби себе на носу: КАЖДАЯ строка кода должна быть тебе понятна (что - зачем - почему - для чего и т.д.), и тогда твой код заработает.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
А что мешает сделать это на OR ? А можно и вообще без них обойтись.
Нечего не мешает, и на OR можно. Я с AND пример бесконечного цикла привел к тому, что если в [InPut] указать число из двух цифр, то случайное будет состоять всегда из одной цифры. Это я к тому, что вот это утверждение не совсем верно:
ЦитатаPeter ()
Самое занятное, что код в сообщении 24 был полностью правильным. И 16 разрядов получается и все остальное тоже.
Кстати kop9000, если ты все еще мой пример юзаешь, то знай что он тоже не без косяка... Его корректировать надо так что Петр прав.
ЦитатаPeter ()
КАЖДАЯ строка кода должна быть тебе понятна
"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Вообще команду While в какое то время я вообще исключил из применения. Для того чтобы ее использовать нужно тщательно продумать все возможные варианты. Несколько раз просто попадал на вечный цикл. По этому по мере возможности стараюсь обходится без нее. Не хочешь читать хелп?
Ошибка элементарная, не проще ли было указать на нее, чем пускать туман с бесконечными циклами? А пример будет рабочий после маленькой корректировки (всего один символ)
Цитатаmishem ()
Для того чтобы ее использовать нужно тщательно продумать все возможные варианты.
Возможные варианты нужно всегда продумывать. А команда полезная и нужна именно в тех случаях, когда невозможно предсказать заранее длину цикла и она зависит от результата внутри цикла. Но, в данном случае можно было и Loop применить, просто с While мне показалось короче.. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
А пример будет рабочий после маленькой корректировки (всего один символ)
Вот ща я не понял, какой такой символ заменить... Я увидел только то что вот эта команда не на своем месте: SetVar "[Result]" "[R]" Если изменить ее положение то код отрабатывает как задумано. Разве что вероятность получить 0 значительно выше чем другие значения, как вообщем и в оригинальном варианте. "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Таким как kop9000 завтра может понадобится вывести случайное число из отрицательного числа или дроби.
Не это все слишком просто... Надо чтонть поинтересней... "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Вот ща я не понял, какой такой символ заменить... Я увидел только то что вот эта команда не на своем месте: SetVar "[Result]" "[R]"
Эта команда находится именно на своем месте, и только тут ей быть! Поясню почему (и про ошибку тоже) после того, как прояснится вот это:
Цитатаanton ()
Если изменить ее положение то код отрабатывает как задумано
И в какое место ее надо поместить?
Может я чего-то не догоняю...
Цитатаanton ()
вероятность получить 0 значительно выше чем другие значения,
Вероятность получить ноль тем выше, чем меньше разрядность (количество циферок) предела диапазона.
Цитатаmishem ()
Нужно продумать ВСЕ возможные варианты. Что не всегда удается.
Тогда будет как с сусликом.
Цитатаmishem ()
Все команды важны, все команды нужны. Даже те которыми очень редко пользуются.
Но, главное - чтобы было!
А насчет While... Попробуй повторить мой код через Loop (честно говоря, мне лениво) Просто ради интереса - сравним длину скрипта.
Мне кажется, что через Loop будет длиннее.
Добавлено (17 Октября 2016, 20:07) ---------------------------------------------
Цитатаmishem ()
может понадобится вывести случайное число из отрицательного числа или дроби.
Насчет отрицательных чисел я уже приводил пример функции, все просто как в бане. С дробями не пробовал, но тоже думаю возможно. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
.Если InPut пустая или меньше или равно 0, нет смысла дальше продолжать IfEx "[InPut]=[#34][#34] OR [InPut]<=0" Return EndIf .Задаем количество чисел с учетом чтобы не выдало 0, так как в результате должен быть хотя бы один символ StrLen "[InPut]" "[StrLen]" Random "[StrLen]-1" "[Result]" SetVar "[Len]" "[Result]+1" .Копируем первый символ из InPut и на его основе генерируем первое число. SubStr "[InPut]" "1" "1" "[SubStr]" Random "[SubStr]" "[Result]" .Так как первое число уже есть, начинаем со второго. То что первый цикл сработает в любом случае не имеет значения. Loop "2" "[Len]" "[i]" Random "9" "[Str]" .Если у нас всего одно число, результат + сгенерированное второе число будет больше изначального, выходим из цикла. If "[Result][Str]" ">" "[InPut]" ExitLoop Else .Или присваиваем результату новое значение SetVar "[Result]" "[Result][Str]" .и удаляем предыдущие начальные нули если такие имеются. В итоге если все нули, то один останется SubStr "[Result]" "1" "1" "[SubStr]" If "[SubStr]" "=" "0" StrDel "[Result]" "1" "1" "[Result]" EndIf EndIf EndLoop
В общем-то понятно. Можно и так... Формально "длина" та же самая получается.
Цитатаmishem ()
.и удаляем предыдущие начальные нули если такие имеются. В итоге если все нули, то один останется
Только зачем специально удалять каждый раз первый ноль, если его можно было просто не записывать?
Впрочем, у каждого программера свой стиль, и главное в этом деле - чтобы суслик остался цел.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Только зачем специально удалять каждый раз первый ноль, если его можно было просто не записывать?
Можно подкорректировать. Но вопрос стоял в длине кода.
Если входное значение будет 1 или от 1 до 9, то 0 как бы нужен. Нужно просто условие добавить что если результат состоит больше чем один символ, то 0 удалить. Но и здесь тоже дальше опять же нужно смотреть. Результат может состоять и из 10 чисел, но где уверенность что все 10 не будут 0? По факту это вроде как самое простое решение. В принципе как не крути, выше эту проверку поставить, ниже, все равно она нужна. Только если выше ставить, больше строк кода может получится.
Можно конечно вообще в самом конце поставить и в цикле перебрать все начальные цифры пока значение не будет больше 0 удалять их. Короче вариантов море.... Кому надо, тот пускай и думает. Не хочешь читать хелп?
If "[R]" ">" "0" SetVar "[R]" "[R][Num]" Else If "[Num]" ">" "0" SetVar "[R]" "[Num]" EndIf EndIf
Хлтя, ты прав:
Цитатаmishem ()
Кому надо, тот пускай и думает.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
В этом случае в [Result] может оказаться "перебор". Помещать результат в Result можно только после проверки условия запуска цикла, для этого и существует переменная (буфер) [R], иначе можно было бы прямо в Result - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
В этом случае в [Result] может оказаться "перебор".
Блин, точно, проглядел... "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Это потому-что не проанализировал работу цикла. Но, я тут тоже "дал маху", начиная думать о Loop, а потом перключившись на While. Ошибка была в том, что первое присваивание значения результату "холостое" 0, т.е. без расчета случайного значения, которое анализируется только при последующем срабатывании цикла, и поэтому счетчик цикла (переменная [i]) должен"отставать" и начинаться не с 1, а с нуля:
Код
SetVar "[i]" "0"
Начальное присваивание (Result и R = 0) - "мера безопасности" и должно быть всегда, чтобы был вразумительный результат, иначе могут быть всякие сюрпризы в зависимости от того, как устроен последующий скрипт, обрабатывающий этот результат. В этой связи DefineVar - очень полезная штуковина! - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться