Советы по Delphi. Версия 1.4.3 от 1.1.2001 - страница 6
>
> 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);