Советы по 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

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


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


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

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


MFC и OpenGL

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


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

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


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

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