Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Почему окно вылезает два и более раз?   Найти похожие ветки 

 
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("&#205;&#229;&#228;&#238;&#239;&#243;&#241;&#242;&#232;&#236;&#251;& #233; &#226;&#226;&#238;&#228;");
 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("&#205;&#229;&#228;&#238;&#239;&#243;&#241;&#242;&#232;&#236;&#251;&  #233; &#226;&#226;&#238;&#228;");
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
4-1138272737
cyrs
2006-01-26 13:52
2006.04.16
консольное приложение


4-1137259089
Guest386x
2006-01-14 20:18
2006.04.16
Блокирование клавиатуры


15-1143366250
Megabyte
2006-03-26 13:44
2006.04.16
Модель сети с сервером БД. Квант времени


8-1131982179
WondeRu
2005-11-14 18:29
2006.04.16
Окно для FFT


2-1143743880
qqpp
2006-03-30 22:38
2006.04.16
Как лудше изменить внешний вид кнопок