Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Dilon А что там не так?
Код:
function Power(const Base, Exponent: Extended): Extended; begin if Exponent = 0.0 then Result := 1.0 { n**0 = 1 } else if (Base = 0.0) and (Exponent > 0.0) then Result := 0.0 { 0**n = 0, n > 0 } else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then Result := IntPower(Base, Integer(Trunc(Exponent))) else Result := Exp(Exponent * Ln(Base)) end;
Если глянуть в полученный асм, то увидим что там на полную используется FPU.
Member
Статус: Не в сети Регистрация: 30.04.2004 Откуда: [Omsk Team]
Ray Adams ну насколько мне известно в FPU не входит ни, exp ни log
формула x**n = exp(ln(x**n)) = exp(n*ln(x)) не очень подходит для большого объема вычислений,
сейчас я не помню точно алгоритм из VS, однако, если интересно, то можно посмотреть статью на rsdn.ru
на эту тему
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
Помогите написать процедуру, которая показывает названия папок в каталоге. Положим имеется папка C:\Temp\ и в ней находятся папки 1,2,3 и до 100. Так вот как вывести в листбоксе названия этих папок.
И как будет выглядеть процедура но уже с выводом подпапок 1,2,3.
Member
Статус: Не в сети Регистрация: 06.02.2004 Откуда: Москва
Помогите пожалуйста. Даны 2 edit'a, нужно чтобы при нажатии стрелки вверх, когда курсор установлен на edit2, курсор перекидывался вверх на edit1...
Моя процедура:
{ procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: char);
begin
if Key = #38 then
begin
Edit1.SetFocus;
end;
end; }
или так
{procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_UP then
begin
Edit1.SetFocus;
end;
end;}
Они обе игнорируются программой. Похоже в delphi стандартно прописано, что при нажатии клавиши UP курсор перемещается влево по edit'у... Как это обойти! ОЧЕНЬ надо! У меня 9 конкурс по работе... Помогите пожалуйста!
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
vor Не, они не подходят. Мне просто в Листбоксе нужны НАЗВАНИЯ поддиректорий. С файлами разобрался а как с директориями работать(ну т.е. перелистывать вперёд-назад) - ХЗ...
Advanced member
Статус: Не в сети Регистрация: 23.10.2003 Откуда: Иркутск/Майкоп
Halfback Тогда через FindFirst/FindNext с атрибутом faDirectory
(из справки по FindFirst)
Цитата:
The Attr parameter specifies the special files to include in addition to all normal files. Choose from these file attribute constants when specifying the Attr parameter:
Constant Value Description faReadOnly $00000001 Read-only files faHidden $00000002 Hidden files faSysFile $00000004 System files faVolumeID $00000008 Volume ID files faDirectory $00000010 Directory files faArchive $00000020 Archive files faAnyFile $0000003F Any file
файлы выбросить по ходу дела, проверяя значение атрибутов у того, что нашлось.
(не проверял)
_________________ Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
vor Вот что я нашёл:
Код:
Функции и процедуры для работы с каталогами
ChDir Устанавливает текущий каталог. CreateDir Создает новый каталог. DirectoryExists Определяет, существует ли указанный каталог. ForceDirectories Создает все недостающие каталоги по заданному пути. GetCurrentDir Возвращает полное имя текущего каталога. GetDir Возвращает имя текущего каталога на указанном диске. MkDir Создает подкаталог. RemoveDir Удаляет заданный каталог. RmDir Удаляет заданный каталог. SetCurrentDir Устанавливает текущий каталог.
Advanced member
Статус: Не в сети Регистрация: 23.10.2003 Откуда: Иркутск/Майкоп
Halfback Можно так:
Код:
procedure TForm1.Button1Click(Sender: TObject); var r:TSearchRec; begin ComboBox1.Items.Clear; if FindFirst('C:\*.*',faDirectory,r)=0 then begin repeat if r.Attr and faDirectory <> 0 then ComboBox1.Items.Add(r.Name); until FindNext(r) <> 0; FindClose(r); end; end;
Ray Adams Мне кажется, или в примере из справки косяк?
Код:
... if CheckBox7.Checked then FileAttrs := FileAttrs + faAnyFile; ...
- почему "+"? faAnyFile - это и есть сумма всех предыдущих.
_________________ Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.
Member
Статус: Не в сети Регистрация: 04.01.2004 Откуда: Владивосток
1)Кто что подскажет. Есть огромная таблица.(порядка 2000 тыс различн. записей)
Как лучше осущ. поиск? (работаю через ADO) Квери? Или что нить побыстрее есть?
2)Как в мемо поставить курсор именно на 345 символ(если не по символам, то по строкам.)
Т.е. такая проблема. В мемо порядка нескольких страниц текста. Мне нужно в другом поле начать поиск и у меня в мемо должно прокрутиться до нужной записи. Надеюсь понятно обяснил.
3)Как правильно ввыполнять поиск? Ну человек вводит в поиск: курица. Программа должна искать не "курица" а "куриц" т.е без окончания, что б побольше нашлось . А если например слово "напиток", будет искать "напито" . Но в тексте может встретиться "напитКа" или че нить вроде. Тогда это слово не найдется. Т.е надо убирать уже 2 буквы с конца слова. Но бывает что приходится и 3 буквы убирать(пример не могу придумать, но сталкивался точно) Тогда что? Как все это реализовать правильно? Типа если нашлось больше 10, то оставить . А если меньше 10, то убрать еще одну букву. Потом если опять мало найдется даже уже без 2 букв, то искать без 3? Не, это слишком тормознуто получится. Как правильно сделать поиск.
К этому же пункту. Будет слово суп искаться. Найдется 9 раз. До 10 не дотягивает. Тогда уберётся одна буква и получится "су" А вот это уже найдется тысячи раз(СУши,заСУшить,коСУля, хотя искалась не она, а СУП). Вообщем геморрой.
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
У меня вот тоже вопросик: есть такой исходник исходник
Код:
procedure TForm1.DeCompress(First: string); var i,j: integer; BufCount: string; BufSymvol: string; count: integer; begin Edit2.Clear; SetLength(BufCount,0); SetLength(BufSymvol,0); i:=1; while i<>Length(First)+1 do begin case First[i] of '0'..'9': begin BufCount:= BufCount + copy(First,i,1); SetLength(BufSymvol,0); end; 'A'..'Z': begin if Length(BufCount)=0 then count:=1 else count:= StrToInt(BufCount); for j:=1 to count do Edit2.Text:= Edit2.Text + copy(First,i,1); SetLength(BufCount,0); end; end; {case} inc(i); end; {begin}
Так вот вопросик по этой строке в коде:
Код:
case First[i] of
Почему вместо First[i] не получается скажем вtcnb copy(First,i,1) ??? Если я так делаю то вот такая ошибка выплывает:
Код:
while i<>Length(First)+1 do begin case copy(First,i,1) of // [Error] Unit1.pas(93): Ordinal type required '0'..'9': begin // [Error] Unit1.pas(94): Incompatible types: 'Integer' and 'Char' BufCount:= BufCount + copy(First,i,1); SetLength(BufSymvol,0); end; 'A'..'Z': begin // [Error] Unit1.pas(98): Incompatible types: 'Integer' and 'Char' if Length(BufCount)=0 then count:=1 else count:= StrToInt(BufCount); for j:=1 to count do Edit2.Text:= Edit2.Text + copy(First,i,1); SetLength(BufCount,0); end; end; {case}
Или если даже пропишу строковую переменную buf:= copy(First,i,1) и вставлю в условие case то выйдет та же еруеда.
Помогите разобраться а то мне никак не понять.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
попробуй так
Код:
case copy(First,i,1)[1] of
А английский надо знать, а также еще нажимать на F1 иногда .
[quote]
[Error] Unit1.pas(93): Ordinal type required
[/quoe]
Все описано в сообщении об ошибке.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения