Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизПочему окно вылезает два и более раз? Найти похожие ветки
← →
tort (2006-04-01 11:19) [0]День добрый! Мастера, скажите в чем ошибка?
Начинаю разбирать элементарную вещь - не доходит.
Диалоговое окно запускается столько раз, сколько букв в Edit...
var s, st: string;
i: integer;
begin
s:= Edit1.Text;
for i:=0 to length(s) do
if (s<>"") and (s="C")or(s="D")then
st:=s+":\"else
showmessage("Íåäîïóñòèìû& #233; ââîä");
edit1.Text:=st;
end;
← →
Vasiliy (2006-04-01 11:30) [1]Может быть лучше так:
var s, st: string;
i: integer;
begin
s:= Edit1.Text;
for i:=0 to length(s) do
if (s[i]<>"") and ((s[i]="C") or (s[i]="D")) then st:=s+":\"
else showmessage("Íåäîïóñòèìû& #233; ââîä");
edit1.Text:=st;
end;
Задача то какая?
← →
tort (2006-04-01 11:42) [2]Задача то какая?
Задача простая :)
Пользователь вводит символы (C или D). И если символы правильные, то выполняется "действие". Если символы не правильные, то показываем сообщение, что неправильно.
← →
Virgo_Style © (2006-04-01 11:45) [3]if
(S="C") or (S="D")
, то уж автоматомS<>""
:-)
ну это так, мелочь. Гораздо интереснее, зачем это в цикле делается))
← →
tort (2006-04-01 17:23) [4]т.е. просто вынести?
← →
EvS © (2006-04-01 20:31) [5]>т.е. просто вынести?
Непонятно зачем вообще цикл нужен.
← →
Kolan © (2006-04-01 21:16) [6]
if (S="C") or (S="D") then
DoAction
else
ShowMessage("ВВодить можно только C или D");
← →
Asail (2006-04-02 00:00) [7]
> for i:=0 to length(s) do
Так писать, ИМХО, не есть хорошо!!!
Лучше:
k:=length(S);
for i:=0 to k do ...
Иначе одна и таже функция length будет зазря вызываться повтрно много раз, в зависимости от длины S (а функция эта тоже время занимает).
Ну, это так - замечание по-ходу...
← →
Palladin © (2006-04-02 00:03) [8]начинать нужно с 1
← →
Zeqfreed © (2006-04-02 00:12) [9]
> Иначе одна и таже функция length будет зазря вызываться
> повтрно много раз, в зависимости от длины S
Не будет…
← →
Virgo_Style © (2006-04-02 00:13) [10]Asail (02.04.06 0:00) [7]
afaik, нет.
← →
Asail (2006-04-02 01:43) [11]
> Palladin © (02.04.06 00:03) [8]
> начинать нужно с 1
Верно.
> Zeqfreed © (02.04.06 00:12) [9]
> Не будет…
Будет. См. статью: http://www.delphimaster.ru/articles/optimization.html
Цитата:
Выносите инвариантный код за тело цикла. Наиболее частая ошибка – for i:=1 to length(str) do... Дело в том, что при каждой итерации будет вызываться функция length, что пагубно скажется на производительности.
← →
sniknik © (2006-04-02 01:53) [12]в статье ошибка. именно for и не будет, в нем 1 раз расчитывается, вот в while /repeat пересчитывает на каждой итерации.
напиши проверку... или так поверь.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c