Советы по Delphi. Версия 1.4.3 от 1.1.2001 - [5]

Шрифт
Интервал

>   For i := 1 to kol_zn - 1 do snl := snl + '0';

>   snl := snl+'1';

>   n1 := StrToFloat(Copy(s,1,Pos(',',s)+kol_zn))+StrToFloat(snl);

>   s := FloatToStr(n1);

>   if Pos(',',s) > 0 then s1 := Copy(s,1,Pos(',',s)+kol_zn);

end else s1 := s0 + IntToStr(nn);

if s1[Length(s1)]=',' then s1 := s1 + '0';

>  Result := StrToFloat(s1);

end else Result := Zn;

>end;

Все-таки работа со строками здесь излишество -

>function RoundEx( X: Double; Precision : Integer ): Double;

> {Precision : 1 - до целых, 10 - до десятых, 100 - до сотых...}

>var

> ScaledFractPart, Temp : Double;

>begin

> ScaledFractPart := Frac(X)*Precision;

> Temp := Frac(ScaledFractPart);

> ScaledFractPart := Int(ScaledFractPart);

if Temp >= 0.5 then ScaledFractPart := ScaledFractPart + 1;

if Temp <= -0.5 then ScaledFractPart := ScaledFractPart - 1;

> RoundEx := Int(X) + ScaledFractPart/Precision;

>end;

Разное

Генерация еженедельных списков задач

Мне необходима программа, которая генерировала бы еженедельные списки задач. Программа должна просто показывать количество недель в списке задач и организовывать мероприятия, не совпадающие по времени. В моем текущем планировщике у меня имеется 12 групп и планы на 11 недель.

Мне нужен простой алгоритм, чтобы решить эту проблему. Какие идеи? 

Вот рабочий код (но вы должны просто понять алгоритм работы):  

>unit Unit1;


>interface


>uses Windows,  Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;


>type TForm1 = class(TForm)

> ListBox1: TListBox;

> Edit1: TEdit;

> Button1: TButton;

procedure Button1Click(Sender: TObject);

>private { Private declarations }

>public { Public declarations }

>end;


>var Form1: TForm1;


>implementation


>{$R *.DFM}


>const maxTeams = 100;

>var

>Teams: Array[1..maxTeams] of integer;

> nTeams, ix, week, savix: integer;


>function WriteBox(week: integer): string;

>var

>str: string;

> ix: integer;

>begin

>Result := Format('Неделя=%d ',[week]);

for ix := 1 to nTeams do begin

>  if odd(ix) then Result := Result+' '

else Result := Result+'v';

>  Result := Result+IntToStr(Teams[ix]);

end;

>end;


>procedure TForm1.Button1Click(Sender: TObject);

>begin

>nTeams := StrToInt(Edit1.Text);

if Odd(nTeams) then inc(nTeams); {должны иметь номера каждой группы}

> ListBox1.Clear;

for ix := 1 to nTeams do Teams[ix] := ix;

> ListBox1.Items.Add(WriteBox(1));


> for week := 2 to nTeams-1 do begin

>Teams[1] := Teams[nTeams-1]; {используем Teams[1] в качестве временного хранилища}

for ix := nTeams downto 2 do if not Odd(ix) then begin

>savix := Teams[ix];

>   Teams[ix] := Teams[1];

>   Teams[1] := savix;

end;

for ix := 3 to nTeams-1 do if Odd(ix) then begin

>savix := Teams[ix];

>   Teams[ix] := Teams[1];

>   Teams[1] := savix;

end;

>  Teams[1] := 1; {восстанавливаем известное значение}

>  ListBox1.Items.Add(WriteBox(week));

end;

>end;


>end.

Mike Orriss

Генерация случайного пароля

The_Sprite советует:

Вам понадобилось, чтобы Ваше приложение само создавало пароли ? Возможно данный способ Вам пригодится. Всё очень просто: пароль создаётся из символов, выбираемых случайным образом из таблицы.

Совместимость: Delphi 5.x (или выше)

Собственно сам исходничек: Пароль создаётся из символов, содержащихся в таблице.

Внимание: Длина пароля должна быть меньше, чем длина таблицы!

>// запускаем генератор случайных чисел (только при старте приложения).

>procedure TForm1.FormCreate(Sender: TObject);

>begin

> Randomize;

>end;


>function RandomPwd(PWLen: integer): string;

> // таблица символов, используемых в пароле

>const StrTable: string =

> '!#$%&/()=?@<>|{[]}\*~+#;:.-_' +

> 'ABCDEFGHIJKLMabcdefghijklm' +

> '0123456789' +

> 'ДЦЬдцьЯ' + 'NOPQRSTUVWXYZnopqrstuvwxyz';

>var

> N, K, X, Y: integer;

>begin

> // проверяем максимальную длину пароля

if (PWlen > Length(StrTable)) then K := Length(StrTable)-1

else K := PWLen;SetLength(result, K); // устанавливаем длину конечной строки

> Y := Length(StrTable); // Длина Таблицы для внутреннего цикла

> N := 0; // начальное значение цикла

while N < K do begin // цикл для создания K символов

>  X := Random(Y) + 1; // берём следующий случайный символ

>  // проверяем присутствие этого символа в конечной строке

if (pos(StrTable[X], result) = 0) then begin

>   inc(N); // символ не найден

>   Result[N] :=StrTable[X]; // теперь его сохраняем

end;

end;

>end;


>procedure TForm1.Button1Click(Sender: TObject);

>var

> cPwd: string;

>begin

> // вызываем функцию генерации пароля из 30 символов

> cPwd := RandomPwd(30);

> // ...

>end;

Проверка ISBN

Delphi 1

ISBN (или International Standard Book Numbers, международные стандартные номера книг) - мистические кодовые числа, однозначно идентифицирующие книги. Цель этой статьи заключается в том, чтобы убрать покров таинственности, окружающий структуру ISBN, и в качестве примера разработать приложение, проверяющее правильность создания кода-кандидата на ISBN.

ISBN имеет длину тринадцать символов, которые ограничиваются в использовании символами-цифрами от "0" до "9", дефисом, и буквой "X". Этот тринадцатисимвольный код состоит из четырех частей (между которыми располагается дефис): идентификатор группы, идентификатор издателя, идентификатор книги для издателя, и контрольная цифра. Первая часть (идентификатор группы) используется для обозначения страны, географического региона, языка и пр.. Вторая часть (идентификатор издателя) однозначно идентифицирует издателя. Третья часть (идентификатор книги) однозначно идентифицирует данную книгу среди коллекции книг, выпущенных данным издателем. Четвертая, заключительная часть (контрольная цифра), используется в коде алгоритме другими цифрами для получения поддающегося проверке ISBN. Количество цифр, содержащееся в первых трех частях, может быть различным, но контрольная цифра всегда содержит один символ (расположенный между "0" и "9" включительно, или "X" для величины 10), а само ISBN в целом имеет длину тринадцать символов (десять чисел плюс три дефиса, разделяющих три части ISBN).


Еще от автора Валентин Озеров
Советы по Delphi. Версия 1.0.6

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.