![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| RinOSpro |
|
||||
|
Unregistered |
Не понимаю!
Почему я не могу работать с переменными а с визуальными компонентами получается.
Таким образом почемуто не работает хотя понятно что этот вариант быстрее чем ниже следующий
Понятно что первый вариант быстрее т.к. там через переменную, а здесь через визуальный компанент. Почему не работает первый вариант? И как зделать чтобы работал? |
||||
|
|||||
| RinOSpro |
|
||||
|
Unregistered |
Не понимаю!
Почему я не могу работать с переменными а с визуальными компонентами получается.
Таким образом почемуто не работает хотя понятно что этот вариант быстрее чем ниже следующий
Понятно что первый вариант быстрее т.к. там через переменную, а здесь через визуальный компанент. Почему не работает первый вариант? И как зделать чтобы работал? |
||||
|
|||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Потому что компонент сам тебе выделяет память под новый символ. А чтобы переменная так могла, используй SetLength. В данном случае будет следующий код:
и всё будет работать. Это сообщение отредактировал(а) Guedda - 8.1.2007, 10:42 -------------------- Ll 2 |
|||
|
||||
| Visp |
|
|||
|
Программер Профиль Группа: Участник Сообщений: 19 Регистрация: 21.8.2006 Репутация: нет Всего: нет |
а может первый вариант сделать так
|
|||
|
||||
| marykone |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2722 Регистрация: 2.5.2006 Где: Краснодар Репутация: нет Всего: 67 |
что то утебя не понятно что ты хочешь сделать
поясни быстрей ответ получишь
а какие значения у тебя в str1 и str2 ты ничего не присваиваешь str1 в цикле если правильно понял тебя то
и навсякий случай очищай переменные перед работай str1:=''; str2:=''; Это сообщение отредактировал(а) marykone - 8.1.2007, 10:44 -------------------- получил ответ, пометь вопрос как решенный (правый верхний угол вашей темы). |
||||
|
|||||
| pankerstein |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 16.11.2006 Где: г. Белгород Репутация: нет Всего: нет |
если хочешь в caption i выводить то используй inttostr(i) str1 тебе и не нужна тогда
str2:=str2+' '+inttostr(i) и полюбому обнули str2:=''; И кстати если не ошибаюсь caption то у тебя бааальщой получится если ты 3000 раз к нему прибавишь его предыдущее да есчо и i. 2-й пример понятно что делает, а 1-й собссно ничего помоему полезного..... прибавляет к неинициализорованной str2 такуюже str1
Это сообщение отредактировал(а) pankerstein - 8.1.2007, 10:59 |
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
Кстати, а в чем смысл Chr(3000)? Я провел опыт, похоже, что символы циклически повторяются
Chr(X)=Chr(X mod 255) -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
А как он будет работать?
Что такое str1? Чему оно равно? А во втором примере - что за chr(3000)? Оба примера неправильные. Объясни, что ты хочешь получить? Добавлено @ 13:36 ЗЫ. И варнинги компилятора читай - тебе же пишут - str1 may be not initialized (ну или что-то в этом роде). |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Guedda,
Зачем вручную выделять память под string? насколько я помню, string - это динамически изменяемая строка длиной от 1 до 2 миллионов символов. Кажется выделять память нужно только под pchar.. Или как?
Да. Это так. Чтобы у программистам было легче. Это связано, как мне кажется, с возможность шифрования типа a:=chr(ord(b)*10) -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Извините в первом примере напутал
вот procedure TForm1.Button1Click(Sender: TObject); var str1 : string[1]; str2 : string; i : integer; begin for i := 1 to 3000 do begin str1 :=chr(i); str2 := str2+' '+str1; end; label1.Caption := str2; теперь объясню! Просто числовое значение i использую как код символа str1 :=chr(i) и присваиваю str1. На самом деле делаю лабу по предмету криптография. А это кусочек кода просто ради примера. Оригинальный примерно такой же только переменные другие, и исходный текст предшествующий большой. Вот на счет SetLength идея верная только что то пока не получается, хотя я и заранее устанавливал значение str2, ведь известно, что цикл до 3000 тогда SetLength(Str2, 3001); Подскажите, может, как ни будь еще можно резервировать память под переменную. Хотя вроде String позволят хранить строку до 2 гб. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
вообще-то chr это один байт - до 255.
Выше не бывает. Так что объясни, что ты хочешь от этого кода. |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Snowy, Бывает если на пример chr(257) то выведется символ с кодом #1. А хочу я чтобы все значения str1 в цикле присваивались str2
str2:= str2+str1; |
|||
|
||||
| Sansa |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 3 Всего: 6 |
RinOSpro, Chr(1) = Chr(257)...
Далее, в случае...
Необходимо
Т.е. от 1 до 3000 есть 3000 (3001 это если от 0) символов и столько же пробелов --------------------
- Здравствуйте, я Ваш патологоанатом |
||||
|
|||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
что-то я не очень понимаю, чего хочет добиться автор кода в итоге)
но я бы написал этот кусок кода так:
будет работать 100% быстрее, чем просто lStr2 := lStr2 + lChr; Это сообщение отредактировал(а) MetalFan - 9.1.2007, 19:00 -------------------- There are always someone smarter than you... |
|||
|
||||
| RinOSpro |
|
|||
|
Unregistered |
Ну ёклмн это же просто элементарно
str1 := chr(i) str2 := str2+str1 получится все значения записываются подряд в одну и туже переменную a б в г и так далее. Вопрос в том почему str2 := str2+str1 такая запись не работает хотя такая label1.caption := label1.caption + str1; работает. может память выделить надо! |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |