Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.038 c
6-1084810197
xman
2004-05-17 20:09
2004.07.18
Sockets


1-1088697879
ancara
2004-07-01 20:04
2004.07.18
Как бинарный файл в ресурсы засунуть?


1-1089051315
DeepProg
2004-07-05 22:15
2004.07.18
Определение длины видимого текста в Memo


1-1088709736
Hdd
2004-07-01 23:22
2004.07.18
А как вывести координаты на форму?


6-1084990346
T_M_P
2004-05-19 22:12
2004.07.18
отправить файл по почте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский