IPB

Здравствуйте, гость ( Вход | Регистрация )

9 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> Алгоритмы и формулы
izrukvruki
сообщение 22 Apr 2008, 16:51
Сообщение #61

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Цитата(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

Ладно, спасибище. дальше разбирусь...
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 22 Apr 2008, 17:19 (Сообщение отредактировал Chrono Syndrome - 22 Apr 2008, 17:22)
Сообщение #62

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




А у меня тут еще вот какой вариант родился:

Код
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.

Цитата
а вот где я красным отметил - одна и таже переменная используется???

Нет.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Diplomat
сообщение 22 Apr 2008, 17:23
Сообщение #63

Newbie
Сообщений: 21
Спасибо сказали: 0 раз




Цитата
...ошибки нету?... ...все равно пароль получается только из первых двух символов набора...

Я не выкладываю код с явными ошибками. Данный код работает и генерирует корректные пароли.
Полагаю, ты неверно портируешь его на Варсик (ты ведь VB используешь, не так ли?). Поскольку Варсик я уже лет пять в глаза не видел- его особенности успел напрочь позабыть и помочь с корректным портированием не смогу.
Ищи свою ошибку. Успехов.
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 14 Jul 2008, 10:50 (Сообщение отредактировал izrukvruki - 14 Jul 2008, 10:50)
Сообщение #64

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




а есть алгоритм случайного распределения натуральных чисел не больше N....?

Ну например N=5

1
5
4
3
2
Go to the top of the pageAdd Nick
 
+Quote Post
Azure
сообщение 14 Jul 2008, 16:36
Сообщение #65

status message not available
Сообщений: 224
Спасибо сказали: 1 раз




распределения в чем ?
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 15 Jul 2008, 22:57
Сообщение #66

допустим, мяў
Сообщений: 24 063
Спасибо сказали: 13374 раза




Наверное так: для каждого числа случайная позиция. Если занята - ищем вверх или вниз (случайно).


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 16 Jul 2008, 10:44
Сообщение #67

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Цитата(Azure @ 14 Jul 2008, 16:36)
распределения в чем ?


между собой
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 16 Jul 2008, 12:56
Сообщение #68

допустим, мяў
Сообщений: 24 063
Спасибо сказали: 13374 раза




Ну, а чем тебе мой не подходит?


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 16 Jul 2008, 16:29
Сообщение #69

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




всмысле чтобы каждое число встречалось 1 раз?
тогда так:
1. забиваем логический массив нулями (длина - количество чисел)
2. генерим число.
3. если это число уже встречалось (т.е. элемент массива, что ему соответствует - истина), то переходим к п.2
4. отмечаем число в массиве и выводим/сохраняем
5. если нужное количество чисел не достигнуто, идем к п.2
6. получаем некоторое количество неповторяющихся чисел из заданного диапазона.
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 16 Jul 2008, 16:45
Сообщение #70

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




какой-то у тебя не очень рациональный алгоритм...

организовать цикл по А от 1 до N, может брать первое число А=1 , и генерировать число I - место А в масcиве, если это место уже занято, то I=I+1, если I больше N, то I=I-N
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 16 Jul 2008, 16:58
Сообщение #71

допустим, мяў
Сообщений: 24 063
Спасибо сказали: 13374 раза




Всегда так делал. Если у тебя порядка 10000 элем. - и не заметишь.

Добавлено ([mergetime]1216216686[/mergetime]):
По другому:
организовать список из А эл.
Для эл. Массива по rnd эл. Из списка. Затем эл. Списка исключать.


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 19 Jan 2009, 12:33
Сообщение #72

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




Прошу помощи!
Пишу на 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 пунктом
Go to the top of the pageAdd Nick
 
+Quote Post
Монца
сообщение 19 Jan 2009, 13:03
Сообщение #73

good news, everyone!
Сообщений: 918
Спасибо сказали: 93 раза




а как пробовал?

Добавлено ([mergetime]1232359350[/mergetime]):
1. десятичное число? засовываешь в строку, вырезаешь символ проверяешь цифра или нет, второй вариант - пытаешься сконвертить в число, если ловишь exception, значит не число.

Добавлено ([mergetime]1232359389[/mergetime]):
4. api функция fileexists ну или как то так


--------------------
этъя опять


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 19 Jan 2009, 13:12
Сообщение #74

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




а как проверять цифра или нет? Так понимаю нужно проверить принадлежность символа к множеству ("0", "1",...,"9") Но не знаю как работать с множествами.

4. ага. PathFileExists
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 19 Jan 2009, 13:25
Сообщение #75

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(izrukvruki @ 19 Jan 2009, 13:12)
а как проверять цифра или нет? Так понимаю нужно проверить принадлежность символа к множеству ("0", "1",...,"9") Но не знаю как работать с множествами.

вот вам все какие-то множества... по аски-коду проверь
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 19 Jan 2009, 13:26
Сообщение #76

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




это как?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 19 Jan 2009, 13:27
Сообщение #77

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




if (z[i]<='0' && z[i]>='9') тогда десятичная цифра.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Shaidar Haran
сообщение 19 Jan 2009, 13:53
Сообщение #78

Оранжевый Канцлер Тьмы
Сообщений: 2 344
Спасибо сказали: 618 раз




А регулярные выражения заюзать религия не позволяет? )


--------------------
I am the fury in your eyes. I am reason, I am vice.
Careful what you say
You may regret it,
Careful what you wish
You just might get it.
Go to the top of the pageAdd Nick
 
+Quote Post
izrukvruki
сообщение 19 Jan 2009, 14:51
Сообщение #79

Князь Бореи
Сообщений: 5 171
Спасибо сказали: 1349 раз




а это как?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 19 Jan 2009, 15:14
Сообщение #80

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Shaidar Haran @ 19 Jan 2009, 13:53)
А регулярные выражения заюзать религия не позволяет? )

а в бейсике они есть?
Go to the top of the pageAdd Nick
 
+Quote Post

9 страниц V  « < 2 3 4 5 6 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 22 July 2025 - 06:55
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика