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

Вниз

Циклы...   Найти похожие ветки 

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

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

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"

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


 
Iconka ©   (2004-07-01 18:54) [1]

А ты что хотел получить в результате?


 
Fay ©   (2004-07-01 18:54) [2]

А что не так? Кроме j:= 0 to 5 , конечно.


 
Agent[007] ©   (2004-07-01 18:56) [3]

GenStr должен давать 2 символа, а даёт 10 !!!


 
default ©   (2004-07-01 18:57) [4]

Result := "";
for i := 1 to Count do Result := Result + P;
это очень медленный способ)


 
Agent[007] ©   (2004-07-01 18:58) [5]

Thanks...


 
Ega23 ©   (2004-07-01 19:00) [6]

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

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

Перед for поставь Result:="";


 
GuAV ©   (2004-07-01 19:04) [7]


> Result := "";

Не обязательно.
string по умолчанию AnsiString, а эти инициализюруются компилятором в ""


 
Ega23 ©   (2004-07-01 19:06) [8]

Не обязательно.
string по умолчанию AnsiString, а эти инициализюруются компилятором в ""

А ты проверь, ради прикола. Я тоже так поначалу подумал, но потом усомнился. Result:=""; действительно помогло.


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


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

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


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

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


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


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

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

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


 
Ega23 ©   (2004-07-01 19:13) [12]

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


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


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

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


 
GuAV ©   (2004-07-01 19:22) [14]

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


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


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

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

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


 
Ega23 ©   (2004-07-01 19:33) [16]

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

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


 
default ©   (2004-07-01 19:34) [17]

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


 
MBo ©   (2004-07-02 06:14) [18]

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


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


> 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)


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


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

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


 
Ega23 ©   (2004-07-02 13:25) [21]

Amoeba ©   (02.07.04 13:20) [20]

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


 
Amoeba ©   (2004-07-02 13:29) [22]


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

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


 
default ©   (2004-07-02 13:32) [23]

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


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


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


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


 
Ega23 ©   (2004-07-02 15:15) [25]

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

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


 
GuAV ©   (2004-07-02 17:41) [26]

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


 
Amoeba ©   (2004-07-02 18:23) [27]

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


 
GuAV ©   (2004-07-03 01:53) [28]


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

FillChar и так на asm"е



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.046 c
3-1087491034
TUser
2004-06-17 20:50
2004.07.18
Ошибка в таблице


3-1088067905
Yurko
2004-06-24 13:05
2004.07.18
доступ к dBase IV через ADO


1-1089127155
alienserg
2004-07-06 19:19
2004.07.18
bpl дебаг


8-1083342147
Synaps
2004-04-30 20:22
2004.07.18
Как проигрывать QuickPlayer?


1-1088750818
Stas
2004-07-02 10:46
2004.07.18
Написание сервиса на Делфи-7