Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Циклы... [D6, Win95/98]


Страницы:   1 2

Agent[007] ©   (2004-07-01 18:52:00) 

Вот функция(самодельная) генерирует строку из одинаковых символов:

function GenStr(P: Char; Count: Integer): string;
 var
   i: Integer;

 begin
   for i := 1 to Count do Result := Result + P;
 end;

При её обычном использовании все нормально, но вот:

 for j:= 0 to 5 do Caption := 'a' +GenStr('0', 2)+ 'a';

Caption в данном слечае равен 'a' + '0'(10 штук(5 * 2)) + 'a'

ЧТО ДЕЛАТЬ???


GuAV   (2004-07-03 01:53:00) [1]


> то он наверняка будет вообще на asm'е.

FillChar и так на asm'е


Amoeba   (2004-07-02 18:23:00) [2]

А если посмотреть библиотеку QStrings, то, если там есть аналог, то он наверняка будет вообще на asm'е.


GuAV   (2004-07-02 17:41:00) [3]

А ведь через FillChar вс равно быстрее чем через эту ф-цию.


Ega23   (2004-07-02 15:15:00) [4]

Редкая функция. Мало кто про нее помнит.

Да я вообще не знал про такую! Теперь буду знать.
Всех функций не узнаешь...


КаПиБаРа   (2004-07-02 15:08:00) [5]


> Amoeba ©   (02.07.04 13:20) [20]
>
> > MBo ©   (02.07.04 06:14) [18]
>
> Удивляюсь, что никто из мастеров до этого поста не сказал,
> что автор вопроса упорно пытается создать велосипед с квадратными
> колесами, а все дружно кинулись помогать ему в этой мартышкиной
> работе.


Редкая функция. Мало кто про нее помнит.


default   (2004-07-02 13:32:00) [6]

Amoeba ©   (02.07.04 13:29) [22]
см. [4]
там сказано про тормознутость
он ничего не ответил, видимо пофиг


Amoeba   (2004-07-02 13:29:00) [7]


> Ega23 ©   (02.07.04 13:25) [21]

Надо было наставить на истинный путь, как это сделал MBo. Можно было и просто привести код StringOfChar и этим закрыть вопрос.


Ega23   (2004-07-02 13:25:00) [8]

Amoeba ©   (02.07.04 13:20) [20]

А вопрос был "ЧТО ДЕЛАТЬ?", а не "КАК ПРАВИЛЬНО?"


Amoeba   (2004-07-02 13:20:00) [9]


> MBo ©   (02.07.04 06:14) [18]

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


PUser = ^TUser   (2004-07-02 06:20:00) [10]


> for j:= 0 to 5 do Caption := 'a' +GenStr('0', 2)+ 'a';


Что это такое?
Это всё равно, что
for i := 1 to 100000 do
 for j := 1 to 1000000 do
for k := 1 to 1000000 do
 for l := 1 to 1000000 do
 for m := 1 to 10000000 do
    a := 0;

8)


MBo   (2004-07-02 06:14:00) [11]

1. Такую функцию делать бессмысленно, поскольку уже существует StringOfChar
2. ТАК функцию делать вредно ввиду ее тормознутости - нужно сразу задать длину строки, потом заполнить ее (в цикле или FillChar)


default   (2004-07-01 19:34:00) [12]

Ega23 ©   (01.07.04 19:33) [16]
100%


Ega23   (2004-07-01 19:33:00) [13]

если не ошибаюсь строки, дин массивы и интерфейсы, если они локальные в методе инициализировать не надо.

Возможно. Только всё-таки предпочитаю это делать. Исторически сложилось... :о)


Тимохов   (2004-07-01 19:24:00) [14]


> GuAV ©   (01.07.04 19:22) [14]

во-во.
именно для этого и должны быть инициализированы.

результаты типа ansistring идут как доп var параметр - не дело функции инициализировать переданные ей параметры.


GuAV   (2004-07-01 19:22:00) [15]

Проверил. Таки да.
> инициализируются компилятором в ''
только локальные переменные функции.
дело в том, что string'и для корректной работы reference-counting и copy-on-write должны быть инициализированны, а во что - не важно.


Тимохов   (2004-07-01 19:14:00) [16]


> Ega23 ©   (01.07.04 19:13) [12]

если не ошибаюсь строки, дин массивы и интерфейсы, если они локальные в методе инициализировать не надо.


Ega23   (2004-07-01 19:13:00) [17]

Лично я ВСЕГДА инициализирую начальные значения переменных, кроме тех случаев, когда идёт ЯВНОЕ присвоение (как счётчик цикла, например).


Тимохов   (2004-07-01 19:10:00) [18]


> GuAV ©   (01.07.04 19:04) [7]

мое имхо говорит о том, что по умолчанию инициализируются локальные строки.
результаты нет, т.е. строка-результат - это фактически var параметр.

это явно описано в programm control в хелпе


default   (2004-07-01 19:10:00) [19]

GuAV ©   (01.07.04 19:04) [7]
Result := '' исправляет ошибку


Плохиш   (2004-07-01 19:08:00) [20]


> GuAV ©   (01.07.04 19:04) [7]

Result не инициализируется, в связи с этим и получается [0]


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо