Модераторы: THandle, bems

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация 
:(
    Опции темы
VICTAR
Дата 27.4.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

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



Akella, только черная всегда сменяется белой. Так что все будет хорошо  smile 
PM MAIL   Вверх
SneG0K
  Дата 30.4.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



Я смотрю тут один оффтопик
А оптимизируйте пожалуйсто 
Код

{$APPTYPE CONSOLE}
begin
 writeln('Hello World');
end;

PM WWW Skype   Вверх
Alexeis
Дата 2.5.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



SneG0K, это не алгоритм а вызов функции. Чего оптимизировать? Саму функцию или вывод текста?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SneG0K
Дата 4.5.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



Alexeis, да я просто прикалуюсь=) и все=) Не стоит воспринимать в серьез
PM WWW Skype   Вверх
Akella
Дата 16.5.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Оптимизируйте этот код.
на входе 75-85-239, например
на выходе должно быть: 7585239

Код

function TfmScanner.OnlyDec(Inp:string):string;
Var
 k:integer;
begin
  Result := '';
  for k := 1 to Length(Inp) do
   if Inp[k] in ['0'..'9'] then
     Result := Result + Inp[k];
end;

PM MAIL   Вверх
Alexeis
Дата 16.5.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Код

function OnlyDec(Inp : AnsiString) : AnsiString;
Var
 k1, k2 :integer;
begin
  k1 := 1; k2 := 1;
  SetLength(Result, length(Inp));
  Repeat
      while (k2 <> length(Inp)) and ((Inp[k2] < '0') or (Inp[k2] > '9'))
      do
        inc(k2);

      if k2 = length(Inp)
      then
        Begin
          SetLength(Result, k1);
          Break;
        End;

      Result[k1] := Inp[k2];
      inc(k1);
      inc(k2)
  until false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage(OnlyDec('75-85-239'));
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 16.5.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



а почему AnsiString?
PM MAIL   Вверх
Alexeis
Дата 16.5.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Хм... дизасемблировал и еще улучшил.

Код

function OnlyDec(Inp : AnsiString) : AnsiString;
Var
  k1, k2, l : integer;
  pInp, pDest : PAnsiChar;
begin
  k1 := 1;
  k2 := 1;
  l := length(Inp);
  SetLength(Result, l);
  pInp := @Inp[1];
  pDest := @Result[1];
  Repeat
      while (pInp[k2] < '0') or (pDest[k2] > '9')
      do
        Begin
          inc(k2);
          if k2 = l
          then
            Begin
              SetLength(Result, k1);
              exit
            End
        End;

      pDest[k1] := pInp[k2];
      inc(k1);
      inc(k2)
  until false;
end;


Цитата(Akella @  16.5.2008,  15:46 Найти цитируемый пост)
а почему AnsiString? 

Потому что на юникодной не тестил. В принципе, должно работать и для юникода.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 17.5.2008, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



в String это разве юникод?

Добавлено через 6 минут и 25 секунд
Alexeis, 
Цитата(Alexeis @  16.5.2008,  17:06 Найти цитируемый пост)
Хм... дизасемблировал и еще улучшил.

AV

Добавлено через 8 минут и 54 секунды
user posted image
PM MAIL   Вверх
Alexeis
Дата 17.5.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Akella @  17.5.2008,  07:02 Найти цитируемый пост)
в String это разве юникод?

  В 2008 это будет юникод, точно также как и PChar.

Упс, точно накосячил, PChar же с нуля индексируется. 

Код

function OnlyDec(Inp : AnsiString) : AnsiString;
Var
  k1, k2, l : integer;
  pInp, pDest : PAnsiChar;
begin
  k1 := 0;
  k2 := 0;
  l := length(Inp);
  SetLength(Result, l);
  pInp := @Inp[1];
  pDest := @Result[1];
  Repeat
      while (pInp[k2] < '0') or (pDest[k2] > '9')
      do
        Begin
          inc(k2);
          if k2 >= l
          then
            Begin
              SetLength(Result, k1 + 1);
              exit
            End
        End;
      pDest[k1] := pInp[k2];
      inc(k1);
      inc(k2)
  until k2 >= l;
end;




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 17.5.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



user posted image
Alexeis, откуда берётся MARK, в тексте его нигде нет? smile 
PM MAIL   Вверх
Alexeis
Дата 17.5.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Akella, что значат эти строчки?

Добавлено @ 16:49
Нашел еще 2 глюка smile       while (pInp[k2] < '0') or (pDest[k2] > '9') и   тут      SetLength(Result, k1 + 1);
Akella, протесть еще такой вариант
Код

function OnlyDec(Inp : AnsiString) : AnsiString;
Var
  k1, k2, l : integer;
  pInp, pDest : PAnsiChar;
begin
  k1 := 0;
  k2 := 0;
  l := length(Inp);
  SetLength(Result, l);
  pInp := @Inp[1];
  pDest := @Result[1];
  Repeat
      while (pInp[k2] < '0') or (pInp[k2] > '9')
      do
        Begin
          inc(k2);
          if k2 >= l
          then
            Begin
              SetLength(Result, k1);
              exit
            End
        End;
      pDest[k1] := pInp[k2];
      inc(k1);
      inc(k2)
  until k2 >= l;
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Akella
Дата 19.5.2008, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



да, вроде то, что надо, посмотрим
PM MAIL   Вверх
Akella
Дата 19.5.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Не правильно, в дебаггере видно, что из 560-741, получается '560-741'#0

Это сообщение отредактировал(а) Akella - 19.5.2008, 10:35
PM MAIL   Вверх
Alexeis
Дата 19.5.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Akella, 560-741 и 560-741'#0 это тоже самое smile . Все анси строки нультерминатные.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle

Добро пожаловать в форум группы "Delphi".

В разделе разрешается:

  • Флудить (в приемлемых величинах)
  • Обсуждать модерирование данного раздела (но не его модератора)
  • Добавлять свои правила если они не противоречат существующим
  • Делать наезды на пешеходов***

Строго запрещено:

  • Размещать рекламу
  • Совершать оскорбления личностей
  • Материться
  • *** Пешеходами не являются (ко)модераторы, админы, участники клуба.

Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle.

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


 




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


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

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