HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 25.04.2010, 19:25
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
С нами: 9152955

Репутация: 84
По умолчанию

залей куда нибудь свой код, и модуль с формой тоже!
 
Ответить с цитированием

  #32  
Старый 25.04.2010, 19:44
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами: 9980798

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

PHP код:
procedure tnew.getln;
var
 
i,t:integer;
begin
t
:=form1.memo1.lines.count-1;
 for 
i:=0 to t do
 
form1.memo2.lines.add(form1.idhttp1.get(form1.memo1.lines[i]));
end
так компактнее и побыстрее, хотя по факту маловажно.

Последний раз редактировалось Flame of Soul; 25.04.2010 в 19:46..
 
Ответить с цитированием

  #33  
Старый 25.04.2010, 20:12
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
С нами: 9365528

Репутация: 425
По умолчанию

Цитата:
Сообщение от Flame of Soul  
PHP код:
procedure tnew.getln;
var
 
i,t:integer;
begin
t
:=form1.memo1.lines.count-1;
 for 
i:=0 to t do
 
form1.memo2.lines.add(form1.idhttp1.get(form1.memo1.lines[i]));
end
так компактнее и побыстрее, хотя по факту маловажно.
чем объясняется ввод новой переменной t?
 
Ответить с цитированием

  #34  
Старый 25.04.2010, 21:55
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами: 9980798

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

Цитата:
Сообщение от AlexTheC0d3r  
чем объясняется ввод новой переменной t?
Delphi не производит разворачивания циклов, как и вынесение инвариантного кода за пределы цикла. То есть в компиляторе нет как такового оптимизатора, вот я и посчтитала что более рационально будет именно так, потому что метод:

PHP код:
for i:=0 to memo1.lines.count – 1 do 
будет вызываться в каждой итерации, то есть каждый раз будет подсчитывать количество элементов, а если у нас там элементов несколько тысяч, допустим 2000 строк, собственно не так уж и много, как и посчитать количество их элементов, но так как тип используемый там идет как string а не char и заблогонамеренно неизвестна длина строк, пересчет происходить будет в каждой итерации. Даже если взять что memo1.lines.count было бы постоянным и пересчета не производилось, то в условии у нас стоит математическое выражение memo1.lines.count -1

ну соответственно чтобы не заставлять вести лишние подсчеты и желательно вынести количество элементов в отдельную переменную, если конечно оно у нас постоянно и не меняется в теле цикла на произвольное, допустим код вида:
PHP код:
var i:integer;
begin
  
for i:=0 to Memo1.Lines.Count-do
    if (
i mod 2 0then begin memo1.Lines.Add('a'end;
end
во первых доказывает нам что VCL вызывает подсчет в каждой итерации, а во вторых указывает на то что количество элементов в теле цикла при его воздействии на Memo меняется и учитывается, что тоже иногда необходимо. (i mod 2 = 0) использовано только чтобы избежать зацикливания.

Ну и банально даже то что при инкрементации переменной цикла i на более высокое значение компилятор не использует Флаг нуля (ZF) а просто сравнивает значение с 0. Семантически это не верно, но я не вижу в этом особого греха.

Последний раз редактировалось Flame of Soul; 25.04.2010 в 22:00..
 
Ответить с цитированием

  #35  
Старый 25.04.2010, 22:06
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
С нами: 9365528

Репутация: 425
По умолчанию

То, использовать второй пример в цикле for не имеет смысла это понятно, но вот насчет введения новой переменной для хранения неизменяемого математического выражения спорно...

Кстати у компилятора delphi достаточно хороший встроенный оптимизатор
 
Ответить с цитированием

  #36  
Старый 25.04.2010, 22:26
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами: 9980798

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

Прошу прощения у модераторов за отход от основной темы.
Цитата:
но вот насчет введения новой переменной для хранения неизменяемого математического выражения спорно...
ну во первых оно изменяемо, тут я с вами не согласна, можно рассмотреть ситуации когда количество строк велико и у нас автоперенос по ширене строк, тогда при изменении размеров формы количество строк изменится и цикл закончится в тот момент когда первый раз условие будет нарушено, однако при выносе в переменную - этот фактор не повлияет и количество строк уже не будет совпадать с тем что в переменно, что собственно и может вызвать сбой в программе.

Во вторых, программа не застрахована от посылке сообщений из вне, так как Memo тоже имеет handle что означает что количество строк в ней может измениться если у нас есть пересылка данных с другого потока во время выполнения цикла, а если данных много то и цикл выполняется дискретно,соответственно - порциями которыми выделяет ОС под процесс, ну и что я Вам рассказываю, вы ведь я думаю тоже хороший программист и Сами понимаете это, то есть фактор из вне у нас не повлияет на структуру если count будет считаться в каждой итерации.

Однако если вынести за переменную то мы можем схлопотать 2 эксепшена на основании чего можно заключить то что есть возможность внедрения эксплойта в систему, однако для посылке сообщения у нас естественно должны быть соответствующие права. Не могу так сказать на вскидку насколько серьезная это погрешность но факт того что она есть радует.

Ну и IDA Pro Free совершенно бесплатна как и Оленька, так что отладчик и проверяйте))). А по поводу того что в дельфинчике довольна хороший оптимизатор, не спорю так и есть, но люблю я эту IDE и компилятор не за это)
 
Ответить с цитированием

  #37  
Старый 25.04.2010, 23:41
1n0y
Участник форума
Регистрация: 09.05.2009
Сообщений: 186
С нами: 8951426

Репутация: 102
По умолчанию

Цитата:
Сообщение от Flame of Soul  
ну во первых оно изменяемо
нет, у меня по условию в мемо во время проверки нечего не дописывается\удаляется. но за внимание - спасибо
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка Indy 10.5.6 НTL С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 10 20.12.2009 09:15
Indy 10 - проблема mailbrush С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 9 25.07.2009 16:56
[Delphi] Threads (проблема) Flenov С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 11 17.03.2009 08:45



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.