Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 13:51   #1
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию Пароль

Ввод пароля на основе осмысленной фразы длиной не менее 20 символов, которая обязательно хранится на диске D. Компьютер случайным образом выбирает последовательность 4-х символов из фразы и выводит их номера, пользователю в ответ надо ввести символы в обратном порядке. Допускается не более двух ошибок, после чего программу невозможно запустить в течении 5 минут

P.S. Сразу говорю, я не прошу решить мне задачу полностью, хотя бы подскажите пару строк кода, а дальше я сам попытаюсь. Если есть у кого-то исходник с подобной программой, пожалуйста скиньте. Заранее благодарен!
StudentMarat вне форума Ответить с цитированием
Старый 16.03.2010, 14:20   #2
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Неплохая задумка пароля. Могу помочь за небольшое финансовое вознаграждение icq 482-612-193
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 17.03.2010, 12:43   #3
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Да думал уже об этом! Денег нет! С работы недовно сократили
StudentMarat вне форума Ответить с цитированием
Старый 17.03.2010, 15:32   #4
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Попробуем помочь. По порядку:
1. Создаете на диске D текстовый файл с ключевой фразой - Осмысленнаяфразабезпробелов (суть именно без пробелов - всего здесь 27 символов).Желательно поменьше повторяющихся символов.
2. Считываете строку из файла в Edit1 (свойство Visible:= false).
Код:
var str1: string; // строка содержит ключевую фразу
     str1:= Edit1.Text;
3. Создаем случайные четыре номера символов из ключевой фразы
Код:
//  глобально
  var  _count: byte; // количество символов для пароля ( у нас четыре)
       _simb: byte; //  номер символа в строке ( от 1  до  27)
       mas1: array[0..3] of byte; // массив, где хранятся номера символов 
       _index: byte // индекс номера символа в массиве mas1

procedure CreateNumber;
var i: byte;
label _new;
begin
  Randomize;
          While _count < 4 do
          begin
 _new:     _simb:= Random(26) + 1;
            Application.ProcessMessages;
            for i:= 0 to 26 do
            begin
               if _simb = mas1[i] then GOTO  _new; // что бы не было повторов
            end;
            mas1[_index]:= _simb;
            Inc(_index);
            Inc(_count);
         end;
end;
Получим в mas1 четыре случайных номера символов.
4. Выводим эти номера в обратном порядке в Edit2
Код:
var  mas2: array[0..3] of byte; // массив обратных номеров
                i: byte;
begin
   mas2[0]:= mas1[3];
   mas2[1]:= mas1[2];
   mas2[2]:= mas1[1];
   mas2[3]:= mas1[0];
  for i:= 0 to 3 do
  begin
    Edit2.Text:= Edit2.Text + IntToStr(mas2[i]) + ' '; //  номера символов через пробел
  //  сами символы сохраняем в строке   str2: string;
 str2:= str2 + str1[mas2[i]];
  end;
end;
5. Далее вводим в Edit3 пароль в виде 4-х символов и сравниваем со значением str2
Код:
if Edit3.Text = str2 then < программа открывается>
         else < повторить попытку>
Повтор попыток, их количество - это уже другая песня. Важно перед повтором вернуть переменным начальные значения, запомнить количество попыток и т. д.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 17.03.2010 в 16:26.
DeKot вне форума Ответить с цитированием
Старый 17.03.2010, 15:50   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Да думал уже об этом! Денег нет!
да тут могут помочь. Но, ключевое слово как раз - ПОМОЧЬ! т.е. что Вы самостоятельно сделали?
На каком языке будете писать программу?
Что именно непонятно в алогоритме?
Цитата:
фразы ... которая обязательно хранится на диске D
фраза не может храниться на диске D! Имеется в виду файл, находящийся в корню диска D:\ ?!

далее. Выдать номера случайных символов, ввести слово отзыв и проверить совпадение - не сложно.
но дальше -
Цитата:
после чего программу невозможно запустить в течении 5 минут
это практически (по простому, без написания системных программок) невозможно реализовать. Можно сделать так, чтобы программа в случае неверного ответа взводила "флажок".
А при запуске сравнивала время, прошедшее с последнего неудачного запуска, если это время менее 5 минут, программа молча закрывалась, иначе - работала...
Тогда надо решить, где этот "флажок" хранить (реестр, в файлике, ещё где-то)..

и последнее, объяните практический смысл этой задачи.
Если Вам надо просто сдать лабу/курсовую/практическую работу в учебном заведении это одно, а если попытаться сделать реально работающую систему парольного доступа, то это совсем другое!

___________________________________ ___
добавлено
пока я писал, уже и помогли...

Последний раз редактировалось Serge_Bliznykov; 17.03.2010 в 16:04.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.03.2010, 17:37   #6
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Язык - Delphi. Имеется в виду файл, находящийся в корню диска D в зашифрованном виде. Далее выдается номера случайных символов. К примеру, есть ключевая фраза: "Я люблю футбол" Компьютер случайно выбирает номера символов например и выдает их пользователю 1389 (т.е. 1-это буква Я, 3 - это буква Л, 8 - пробел, 9 - это буква Ф). В ответ пользователю надо ввести пароль Ф ЛЯ. (пустое место - это пробел)
StudentMarat вне форума Ответить с цитированием
Старый 18.03.2010, 18:55   #7
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Как из строки например "Я дурак"
выбрать букву "Д" поместив ее в переменную
причем номер буквы ввожу с клавы
StudentMarat вне форума Ответить с цитированием
Старый 18.03.2010, 19:22   #8
Vova8888
 
Регистрация: 18.03.2010
Сообщений: 9
По умолчанию Попробуй так

function GetToken(aString, SepChar: string; TokenNum: Byte): string;
{
параметры: aString : полная строка

SepChar : единственный символ, служащий
разделителем между словами (подстроками)
TokenNum: номер требуемого слова (подстроки))
result : искомое слово или пустая строка, если количество слов

меньше значения 'TokenNum'
}
var
Token: string;
StrLen: Byte;
TNum: Byte;
TEnd: Byte;
begin
StrLen := Length(aString);
TNum := 1;
TEnd := StrLen;
while ((TNum <= TokenNum) and (TEnd <> 0)) do
begin
TEnd := Pos(SepChar, aString);
if TEnd <> 0 then
begin
Token := Copy(aString, 1, TEnd - 1);
Delete(aString, 1, TEnd);
Inc(TNum);
end
else
begin
Token := aString;
end;
end;
if TNum >= TokenNum then
begin
GetToken1 := Token;
end
else
begin
GetToken1 := '';
end;
end;

function NumToken(aString, SepChar: string): Byte;
{
parameters: aString : полная строка

SepChar : единственный символ, служащий
разделителем между словами (подстроками)
result : количество найденных слов (подстрок)
}
var
RChar: Char;
StrLen: Byte;
TNum: Byte;
TEnd: Byte;
begin
if SepChar = '#' then
begin
RChar := '*'
end
else
begin
RChar := '#'
end;
StrLen := Length(aString);
TNum := 0;
TEnd := StrLen;
while TEnd <> 0 do
begin
Inc(TNum);
TEnd := Pos(SepChar, aString);
if TEnd <> 0 then
begin
aString[TEnd] := RChar;
end;
end;
Result := TNum;
end;

Или другое решение:


function CopyColumn(const s_string: string; c_fence: char; i_index: integer):
string;
var
i, i_left: integer;
begin
result := EmptyStr;
if i_index = 0 then
begin
exit;
end;
i_left := 0;
for i := 1 to Length(s_string) do
begin
if s_string[i] = c_fence then
begin
Dec(i_index);
if i_index = 0 then
begin
result := Copy(s_string, i_left + 1, i - i_left - 1);
exit;
end
else
begin
i_left := i;
end;
end;
end;
Dec(i_index);
if i_index = 0 then
begin
result := Copy(s_string, i_left + 1, Length(s_string));
end;
end;
Vova8888 вне форума Ответить с цитированием
Старый 18.03.2010, 19:30   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пусть строчка находится в Edit1
номер буквы Вы вводите в Edit2

результат (нужную букву) помещаем в переменную V так:
Код:
var k: integer;
   V : string;
begin
  k :=  StrToInt(Edit2.Text);
  if (k>Length(Edit1.Text))  or (k<1)  then 
  Application.MessageBox('Вы ввели номер буквы больше длины строки или меньше единицы!','Ошибка',MB_OK)
else
  V := Edit1.Text[k];
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2010, 20:04   #10
Vova8888
 
Регистрация: 18.03.2010
Сообщений: 9
Счастье

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пусть строчка находится в Edit1
номер буквы Вы вводите в Edit2

результат (нужную букву) помещаем в переменную V так:
Код:
var k: integer;
   V : string;
begin
  k :=  StrToInt(Edit2.Text);
  if (k>Length(Edit1.Text))  or (k<1)  then 
  Application.MessageBox('Вы ввели номер буквы больше длины строки или меньше единицы!','Ошибка',MB_OK)
else
  V := Edit1.Text[k];

Он наверное имел ввиду "Как Выбрать слово из строки по номеру который задает сам" корява вывозился просто
пример: есть слово "пример" я ввожу цифру 3 и программа должна мне в переменную занести букву "И"
я правильно понял
Vova8888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пароль Алексей11111111 Microsoft Office Word 2 26.10.2009 02:51
пароль ruavia3 Microsoft Office Excel 10 29.07.2009 10:36
Пароль ИринаLil Помощь студентам 12 25.03.2009 08:35
Пароль) Teen4jump Свободное общение 2 05.11.2008 21:11
Пароль Михаил Юрьевич Общие вопросы Delphi 3 06.02.2008 16:44