Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема у меня не большая!! 
V
    Опции темы
remax
  Дата 8.1.2008, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Ну вот, а как же истина?

все-все ухожу.....   smile 


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
source777
Дата 8.1.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: нет
Всего: 56



Цитата

да, забыл сказать, убери строку 27 - не спортивно по мелочам махлевать.

она необходима, чтобы на каждой итерации было что менять, так что всё спортивно...

Цитата

И чтобы окончательно закрыть тему, надо делать так:

Гы, это ты уже какую-то другую задачу решил, изначально все вхождения заменяли, так что нечего даже сравнивать решения двух разных задач...

А оптимизация всё же неумелая(так и быть докажу, чтоб не огульно было), ибо нижеследующий код, решая исходную задачу, работает на порядок быстрее и StringReplace, и твоей горе-оптимизации... 
Код

    sep:=\'.\';
    if (DecimalSeparator=sep) then sep:=\',\';
    for j:=1 to length(s0) do
      if (s0[j]=sep) then s[j]:=DecimalSeparator;

Однако, необходимо заметить, что если замену надо выполнить для менее чем тысячи строк подряд, то StringReplace предпочтительнее, ибо оптимизация подобного кода будет не нужна по практическим соображениям, а читабельность будет страдать... 
А вместо того, чтобы признать тот факт, что ты не знаешь стандартных функций, ты попытался свалить всё на мнимую оптимизацию... 

Цитата

source777, remax
Ребят идите… в аську. Или на крайняк в почту/PM. 
Ваши замеры совсем не по теме тут уже 

Почему же, пусть человек узнает несколько решений, и поймёт как надо, а как не надо программировать и почему именно так.

P.S. Кстати мериться начал remax, с неуместного наезда на разработчиков Delphi...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
remax
Дата 8.1.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Не согласен с твоими утверждениями, но, по просьбе Yanisа, дискуссию перенес в почту. Читай в личке...

Это сообщение отредактировал(а) remax - 8.1.2008, 19:30


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
New Neon
Дата 8.1.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.3.2004
Где: Хмельницкий, Укра ина

Репутация: нет
Всего: нет



А вот самый оптимальный помоему вариант:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
    e:integer;
    s:string;
    d:double;
begin
s:='12.32';
val(s,d,e);
if e>0 then s[e]:=DecimalSeparator;
try
  d:=StrToFloat(s);
except
  ShowMessage('Error !!! ');
end;
end;

и перевод и проверка smile.
PM MAIL ICQ   Вверх
remax
Дата 8.1.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Оригинально, только не всегда работает. Дело в том, что строка для VAL всегда! (если мне не изменяет память) в качестве разделителя использует точку. Рассмотрим следующий вариант

decimalseparator=',';
s:='12.32';

 в результате после VAL d=0 (нет ошибки)
и замена не происходит.

Поэтому d:=StrToFloat(s); завершается ошибкой.



--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
New Neon
Дата 8.1.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.3.2004
Где: Хмельницкий, Укра ина

Репутация: нет
Всего: нет



Правильно мыслишь, тогда и заменять то не надо - переведенное значение уже в d. smile

Сори за погрешность исправляю : 
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  e:integer;
  s:string;
  d:double;
begin
s:='12.32';
val(s,d,e);
if e>0 then 
begin
  s[e]:=DecimalSeparator;
  try
    d:=StrToFloat(s);
  except
    ShowMessage('Error !!! ');
  end;
end;
end;

PM MAIL ICQ   Вверх
remax
Дата 8.1.2008, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



Да, согласен. Так работает.


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 9.1.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(New Neon @  8.1.2008,  23:48 Найти цитируемый пост)
  try
    d:=StrToFloat(s);
  except
    ShowMessage('Error !!! ');
  end;

а чем TryStrToFloat не подходит?

Это сообщение отредактировал(а) MetalFan - 9.1.2008, 11:16


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
New Neon
Дата 9.1.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.3.2004
Где: Хмельницкий, Укра ина

Репутация: нет
Всего: нет



MetalFan, Согласен, твой вариант даже быстрее работать будет. smile
Как говориться "Век живи - век учись".
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.