gamecreator
11 Mar 2008, 00:10
по-моему я понял алгоритм Дьякона
sergroj
17 Mar 2008, 12:19
Цитата(Д'якон @ 11 Mar 2008, 03:55)
Почему?
Ну ведь у тебя на картинках везде присутствует только часть внешней области. Они меньше внутенности. Но когда сама внешняя область при этом может быть больше.
izrukvruki
22 Apr 2008, 09:45
Можете написать алгоритм (код на Паскале и Бейсик) генерации случайной строки (пароля) заданной длины...
Guevara-chan
22 Apr 2008, 10:27
Ну, допустим, вот (навскидку):
Код
Procedure.S GeneratePass(Len)
Define I, Pass.S
For I = 1 To Len
Pass + Chr(Random(122 - 97) + 97)
Next I
ProcedureReturn Pass
EndProcedure
izrukvruki
22 Apr 2008, 13:16
Это на чем?
пароль желательно чтоб содержал как цифры (большие и маленькие), как и цифры.
а почему такая формула Chr(Random(122 - 97) + 97)???
Большие и маленькие цифры ?

Может буквы большые и маленькие, а? А то большие цифры страшно...
P.S. Если просто рандом брали - могли бы выпадать коды 0, 1, итд - для которых нет символов. Потом Хрона и сделала чтобы все коды были в нужных пределах - чтобы коду соответствовала буква...
Guevara-chan
22 Apr 2008, 13:59
Цитата
Это на чем?
PureBASIC v4.0
Цитата
пароль желательно чтоб содержал как цифры (большие и маленькие), как и цифры.
А другие символы допустимы ?
Цитата
а почему такая формула Chr(Random(122 - 97) + 97)???
Подборка по ASCII.
P.S. Так пойдет ?
Код
Procedure.S GeneratePass(Len)
#PassChars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Define I, Pass.S
Define PassCharsCount = Len(#PassChars) - 1
For I = 1 To Len
Pass + Mid(#PassChars, Random(PassCharsCount) + 1, 1)
Next I
ProcedureReturn Pass
EndProcedure
izrukvruki
22 Apr 2008, 15:05
а на Бейсик нельзя никак? нет у меня этого PureBASIC v4.0, да и качать неохото
Я вот так переоформили
Private Sub CommandButton10_Click()
Dim i, pass, n
n = 128
Randomize
For i = 1 To n
pass = pass + Chr(Rnd(255) + 97)
Next i
MsgBox (pass)
End Sub
но у меня пароль получается состоит только из а и b
Guevara-chan
22 Apr 2008, 15:12
Цитата
а на Бейсик нельзя никак? нет у меня этого PureBASIC v4.0
Раскрой мне, плиз, смысл этой фразы.
Цитата
но у меня пароль получается состоит только из а и b
facepalm.jpgДа, такое бывает, когда лепишь абы что. Можешь теперь попробовать с моей формулой.
Diplomat
22 Apr 2008, 15:59
2 izrukvruki :1. pass - должна быть строковой переменной.
2. Буквы, цифры, знаки препинания и классические спецсимволы в ASC- это символы с 33-го по 126-й. А ты пытаешься использовать символы с номерами 97-352. При том, что их всего 255. Не лучший вариант, не так ли? )
Используй алгоритм, предложенный Хроно. Там используется не таблица кодов, а переменная-банк символов, что удобнее. Это хрестоматийный вариант- гибок и проверен временем.
Вот код для Блиц-Бейсиков, оформленный более понятно и получивший отключаемую фичу: разбиение пароля на блоки-группы символов.
Код
SeedRnd MilliSecs();рандомизатор.
Global Symbols$="ABCDEFGHIJKLMOPQRSTUVWXYZ0123456789";переменная-набор символов, из которых будет строиться пароль
Local NGroups = 5;Кол-во групп символов, на которые будет разбит пароль
Local NSymbols=5;Кол-во символов в каждой группе
Global Separator$="-";Символ-разделитель для групп символов
Global Password$; строковая переменная для хранения пароля
For Group = 1 To NGroups
For Symbol=1 To NSymbols
;строим группу символов, произвольно выбирая их по одному из переменной-набора
NSymbol=Rnd(Len(Symbols)-1)+1
Password = Password + Mid( Symbols,NSymbol,1)
Next
;вставляем разделительный символ в конце каждой группы, если после нее будут другие группы
If Group<NGroups Then Password = Password + Separator
Next
;Выводим сгенерированный пароль на экран и завершаем программу
Print Password
WaitKey()
End
izrukvruki
22 Apr 2008, 16:51
Цитата(Diplomat @ 22 Apr 2008, 15:59)
2 izrukvruki :1. pass - должна быть строковой переменной.
2. Буквы, цифры, знаки препинания и классические спецсимволы в ASC- это символы с 33-го по 126-й. А ты пытаешься использовать символы с номерами 97-352. При том, что их всего 255. Не лучший вариант, не так ли? )
Используй алгоритм, предложенный Хроно. Там используется не таблица кодов, а переменная-банк символов, что удобнее. Это хрестоматийный вариант- гибок и проверен временем.
Вот код для Блиц-Бейсиков, оформленный более понятно и получивший отключаемую фичу: разбиение пароля на блоки-группы символов.
Код
SeedRnd MilliSecs();рандомизатор.
Global Symbols$="ABCDEFGHIJKLMOPQRSTUVWXYZ0123456789";переменная-набор символов, из которых будет строиться пароль
Local NGroups = 5;Кол-во групп символов, на которые будет разбит пароль
Local NSymbols=5;Кол-во символов в каждой группе
Global Separator$="-";Символ-разделитель для групп символов
Global Password$; строковая переменная для хранения пароля
For Group = 1 To NGroups
For Symbol=1 To [COLOR=red]NSymbols[/COLOR]
;строим группу символов, произвольно выбирая их по одному из переменной-набора
[COLOR=red]NSymbol[/COLOR]=Rnd(Len(Symbols)-1)+1
Password = Password + Mid( Symbols,[COLOR=red]NSymbol[/COLOR],1)
Next
;вставляем разделительный символ в конце каждой группы, если после нее будут другие группы
If Group<NGroups Then Password = Password + Separator
Next
;Выводим сгенерированный пароль на экран и завершаем программу
Print Password
WaitKey()
End
а вот где я красным отметил - одна и таже переменная используется??? ошибки нету? В целом я алгоритм понял - но все равно пароль получается только из первых двух символов набора (AB), если набор поменятть (напрмер на "587") то пароль будет из символов 58
Ладно, спасибище. дальше разбирусь...
Guevara-chan
22 Apr 2008, 17:19
А у меня тут еще вот какой вариант родился:
Код
Procedure.S GeneratePass(Len)
#PassChars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
#CharSize = SizeOf(Character)
Define I, Pass.S = Space(Len)
Define PassCharsCount = Len(#PassChars) - 1
Len - #CharSize
For I = 0 To Len Step #CharSize
PokeC(@Pass + I, Asc(Mid(#PassChars, Random(PassCharsCount) + 1, 1)))
Next I
ProcedureReturn Pass
EndProcedure
Так побыстрее, но не уверена, что удастся успешно перевести на VB.
Цитата
а вот где я красным отметил - одна и таже переменная используется???
Нет.
Diplomat
22 Apr 2008, 17:23
Цитата
...ошибки нету?... ...все равно пароль получается только из первых двух символов набора...
Я не выкладываю код с явными ошибками. Данный код работает и генерирует корректные пароли.
Полагаю, ты неверно портируешь его на Варсик (ты ведь VB используешь, не так ли?). Поскольку Варсик я уже лет пять в глаза не видел- его особенности успел напрочь позабыть и помочь с корректным портированием не смогу.
Ищи свою ошибку. Успехов.
izrukvruki
14 Jul 2008, 10:50
а есть алгоритм случайного распределения натуральных чисел не больше N....?
Ну например N=5
1
5
4
3
2
hippocamus
15 Jul 2008, 22:57
Наверное так: для каждого числа случайная позиция. Если занята - ищем вверх или вниз (случайно).
izrukvruki
16 Jul 2008, 10:44
Цитата(Azure @ 14 Jul 2008, 16:36)
распределения в чем ?
между собой
hippocamus
16 Jul 2008, 12:56
Ну, а чем тебе мой не подходит?
gamecreator
16 Jul 2008, 16:29
всмысле чтобы каждое число встречалось 1 раз?
тогда так:
1. забиваем логический массив нулями (длина - количество чисел)
2. генерим число.
3. если это число уже встречалось (т.е. элемент массива, что ему соответствует - истина), то переходим к п.2
4. отмечаем число в массиве и выводим/сохраняем
5. если нужное количество чисел не достигнуто, идем к п.2
6. получаем некоторое количество неповторяющихся чисел из заданного диапазона.
izrukvruki
16 Jul 2008, 16:45
какой-то у тебя не очень рациональный алгоритм...
организовать цикл по А от 1 до N, может брать первое число А=1 , и генерировать число I - место А в масcиве, если это место уже занято, то I=I+1, если I больше N, то I=I-N
hippocamus
16 Jul 2008, 16:58
Всегда так делал. Если у тебя порядка 10000 элем. - и не заметишь.
Добавлено ([mergetime]1216216686[/mergetime]):
По другому:
организовать список из А эл.
Для эл. Массива по rnd эл. Из списка. Затем эл. Списка исключать.
izrukvruki
19 Jan 2009, 12:33
Прошу помощи!
Пишу на VisualBasic.
Есть число следующего вида
Z=ddmmnnnn или ddmmnnn (7 или 8 цифр в числе, но начало всегда стабильно ddmm)
как проверить, что:
1) Z это число (что внутри нет "плохих" символов (пробелы, буквы, пр. знаки))
2) mm - это месяц в двоичном формате (т.е. 01..12 допустимо, 1..9, 13... недопустимо)
3) dd - это день от 01..31 допустимо
4) существует файл "C:\ddmmnnnn"
особо проблемы с 1 и 4 пунктом
а как пробовал?
Добавлено ([mergetime]1232359350[/mergetime]):
1. десятичное число? засовываешь в строку, вырезаешь символ проверяешь цифра или нет, второй вариант - пытаешься сконвертить в число, если ловишь exception, значит не число.
Добавлено ([mergetime]1232359389[/mergetime]):
4. api функция fileexists ну или как то так
izrukvruki
19 Jan 2009, 13:12
а как проверять цифра или нет? Так понимаю нужно проверить принадлежность символа к множеству ("0", "1",...,"9") Но не знаю как работать с множествами.
4. ага. PathFileExists
gamecreator
19 Jan 2009, 13:25
Цитата(izrukvruki @ 19 Jan 2009, 13:12)
а как проверять цифра или нет? Так понимаю нужно проверить принадлежность символа к множеству ("0", "1",...,"9") Но не знаю как работать с множествами.
вот вам все какие-то множества... по аски-коду проверь
izrukvruki
19 Jan 2009, 13:26
это как?
gamecreator
19 Jan 2009, 13:27
if (z[i]<='0' && z[i]>='9') тогда десятичная цифра.
Shaidar Haran
19 Jan 2009, 13:53
А регулярные выражения заюзать религия не позволяет? )
izrukvruki
19 Jan 2009, 14:51
а это как?
gamecreator
19 Jan 2009, 15:14
Цитата(Shaidar Haran @ 19 Jan 2009, 13:53)
А регулярные выражения заюзать религия не позволяет? )
а в бейсике они есть?
Shaidar Haran
19 Jan 2009, 15:18
В самом бейсике нет, но я же так понял, вы под Виндой?
Цитата
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "abc"
TempStr = "abc 123 abc"
MsgBox TempStr 'исходная строка
Result = objRegExp.Replace(TempStr, "def")
MsgBox Result
objRegExp.Global = True
Result = objRegExp.Replace(TempStr, "def")
MsgBox Result
например.
самый простой (но сам бы я так не делал) попробовать сконвертить и поймать и обработать исключение, если конечно бейсик умеет.
а так, вырезаешь символ, и смотришь как геймкриэйтор сказал. Только условие другое. В ASCII символы цифр идут подряд, от 0 до 9, этого достаточно.
Вам таварищъ Шаидаръ пора бы примеры индийского кода на iбашорг постить, в топ точно попадёте.
Добавлено ([mergetime]1232370913[/mergetime]):
И исключения в этом случает - горе от ума.
Shaidar Haran
19 Jan 2009, 17:02
Цитата(Gloin @ 19 Jan 2009, 18:15)
Вам таварищъ Шаидаръ пора бы примеры индийского кода на iбашорг постить, в топ точно попадёте.
Не индийского, а индусского.
Алсо, пример взят мною из гугла, и в нем видно, что бейсик умеет работать с регулярками. Конкретное применение в данном случае - на совести разработчика.
Алл хайль гугур!
Guevara-chan
19 Jan 2009, 17:37
Цитата
самый простой (но сам бы я так не делал) попробовать сконвертить и поймать и обработать исключение, если конечно бейсик умеет.
А что, было бы весело: с любой ошибки при Val() - выброс исключения).
izrukvruki
22 Jan 2009, 17:31
Как можно сделать обновление файла (название файла и директории указаны примерные...):
т.е. у нас на работе сеть, на сервере лежит файл G:\temp\files.gsm, который я иногда меняю, и тогда его нужно всем сотрудникам обновить (этот файл нужен для работы программы, и должен лежать в папке где стоит программа).
У каждого на компе тоже есть этот файл, но в разных папках (у кого-то C:\apps\gsm\files.gsm, у кого-то C:\ops\gsm\files.gsm, у кого-то еще где. Причем сами пользователи не знают где у них этот файл лежит - так бы я 7zip сделал инсталятор и его по почте всем разослал...
Поэтому нужно сначало НАЙТИ, где лежит старый файл, а потом заменить его на обновленный.
Мне кажется, что это можно реализовать в виде BAT файла...
gamecreator
22 Jan 2009, 20:22
реализовать функцию обновления в проге нельзя?
а вообще может они это сделают вручную? им же самим польза будет - может с компом научатся работать
Guevara-chan
22 Jan 2009, 20:45
Гм... Имя файл всегдла одно и то же ?
ДА ДА, я хочу поиск по всему диску.
Управлять обновлением можно так: написать спец программу - стартер.
Вместо запуска программы, которой нужен files.gsm запускать стартер, этот стартер лезет на сервер - и проверяет обновление, при необходимости копирует новые файлы, после запускает саму программу.
У нас устроено именно так, плюс стартер может делать еще некоторые вещи.
Shaidar Haran
22 Jan 2009, 21:20
Цитата(Монца @ 22 Jan 2009, 23:11)
У нас устроено именно так, плюс стартер может делать еще некоторые вещи.
Вообще-то да, почему инициировать обновление должен именно сервер? Пущай клиенты сами заботятся о своем состоянии таки.
izrukvruki
22 Jan 2009, 21:27
А что организовать поиск файла на диске сложно (не возможно)? с занесением полученного пути в некую переменную, а потом скопировать из одного каталога в другой...
программе особо не нужен файл files.gsm для работы, просто если он есть она его подцепляет, нет - без него будет работать...
Хрона, Да имя файла всегда одно и тоже - Pereregisr.gms
Причем нужный мне файл - скорей всего единственный на диске, и лежит в подпапке GMS/Pereregisr.gms
Игродел:Цитата
а вообще может они это сделают вручную? им же самим польза будет - может с компом научатся работать
Им за эту процедуру НЕ ПЛАТЯТ, а мне платят - я должен заботиться чтоб на всех компах был свежий файл...
Монца, а можно подробнее?
gamecreator
22 Jan 2009, 21:33
Цитата(izrukvruki @ 22 Jan 2009, 21:27)
А что организовать поиск файла на диске сложно?
да
Цитата(izrukvruki @ 22 Jan 2009, 21:27)
а можно подробнее?
вместо нужной проги запускается сторонняя, которая сверяет файл на диске с файлом на сервере, производит обновление, а потом запускает то что надо.
кстати, диск сетевой чтоли? файл много весит?
izrukvruki
22 Jan 2009, 21:34
Файл весит по-разному -130-150 кб. Да диск сетевой. Но на всех компах он одинаково называется (G:\)
gamecreator
22 Jan 2009, 21:41
попробуй батник с содержанием:
Код
copy /Y /Z /B "G:\temp\files.gms" "files.gms"
program.exe
Добавлено ([mergetime]1232649674[/mergetime]):
запускать вместо проги. он должен лежать в папке с прогой
izrukvruki
22 Jan 2009, 21:54
Все!!! Доперло!!!
Просто в папку где лежит файл, который нуно заменить - кинуть батник, который написал Игродел, токо без строки program.exe, и на рабочий стол кинуть ярлык... Пусть просто щелкают по нему.
У тебя экзешник далеко от файла лежит? Можно ведь и относительный путь прописать.
gamecreator
22 Jan 2009, 23:14
просто если прога и файл лежат в определенных до какого-то места путях, то можно сделать чтобы батник еще и прогу запускал
izrukvruki
23 Jan 2009, 17:33
А что в батнике написать, чтоб черный экран (типо ДОС) закрылся?
Вообще, где моно почитать какие команды в батник можно писать?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.