Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 18:05   #11
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
А что, до 20 000 он 3 минуты сокращал
Да! Может это из-за слабости компьютера, может из-за конфигурации системы, может вообще из-за вспышек на Солнце, но считало ровно 3 минуты 10 с чем-то секунд.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 14.10.2009, 19:35   #12
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Если не жалко, выкладывай исходник =)
Уж больно прямо и красиво сделан интерфейс=) Хотелось бы увидеть, как сделаны такие кнопки с подсветкой )

считать будет быстрее, если внизу не выводить "сокращено из ***" - на это тратится большая часть времени.

Не понятно, почему так долго считает...
Сначала надо сокращать дроби, а потом умножать/делить (видно по числу 200048 на скрине)
Прога ведь работает в потоках?
TwiX вне форума Ответить с цитированием
Старый 14.10.2009, 19:58   #13
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Не-не, слишком ты высокого обо мне мнения . Скины - это компонент-пак DynamicSkinForm. С потоками я никогда не работал, тут просто вызывается Application.ProcessMessages. А вот исходники (но если запускать как проект, нужен DynamicSkinForm и TAdvReflectionLabel от TMS):
Вложения
Тип файла: rar ZMath.rar (3.36 Мб, 6 просмотров)
k1r1ch вне форума Ответить с цитированием
Старый 14.10.2009, 20:02   #14
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Попробуй убрать ProcessMessages и надпись, сколько осталось - ускорит вычисления раз в 10.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 14.10.2009 в 20:06.
Alex Cones вне форума Ответить с цитированием
Старый 14.10.2009, 20:33   #15
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Вот - моментально (по крайней мере у меня =) ) работающее умножение (тестил по предыдущему скрину):
Код:
type
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure simp(var a:integer; var b:integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}
procedure tform3.simp(var a: Integer; var b: Integer);
var
  i,min:integer;
begin
  if a>b then min:=a else min:=b;
  for i := 1 to min do
    if (a mod i = 0) and (b mod i = 0) then
    begin
      a:=a div i;
      b:=b div i;
    end;
end;


procedure TForm3.Button1Click(Sender: TObject);
var
  au,ad,bu,bd,resu,resd:integer;
begin
  au:=14;
  ad:=324;
  bu:=1432;
  bd:=1234;

  simp(au,ad);
  simp(bu,bd);

  resu:=au*bu;
  resd:=ad*bd;

  simp(resu,resd);

  ShowMessage(inttostr(resu)+'/'+inttostr(resd));
end;
TwiX вне форума Ответить с цитированием
Старый 14.10.2009, 21:08   #16
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

По сути, в моем коде происходит то же самое, только введена доп. проверка на то, что число может быть 4/8 (2х2), а ваш алгоритм его не сократит.

Вот, убрал я все лишнее:
Код:
procedure TMainForm.Reducing(var N1, N2: Int64);
var MinN: Int64; I: integer;
begin
  InReducing := true;
  MinN := Min(Abs(N1), Abs(N2));
  if MinN > High(Integer) then MinN := High(Integer);
  for I := 2 to MinN do
    begin
      if (N1 mod I = 0) and (N2 mod I = 0) then
        while (N1 mod I = 0) and (N2 mod I = 0) do
          begin
            N1 := N1 div I;
            N2 := N2 div I;
          end;
    end;
  InReducing := false;
end;
Теперь реально быстрее работает, только есть две проблемы:
1) Если очень большое число, то он подвисает и прогресса не видно. Наверное надо ввести условие, что обработка сообщений проводится только если число больше чего-то. Какое число взять за границу? 1 000 000?
2) У меня есть строчка:
Код:
if MinN > High(Integer) then MinN := High(Integer);
Просто я подумал, что если число больше диапазона Integer'а, то I не сможет принять значение и будет глюк. Я правильно подумал?)
k1r1ch вне форума Ответить с цитированием
Старый 14.10.2009, 21:10   #17
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Можете выводить старое "Обработка 10203 из 200048", только обновляйте примерно так:
(показываю сам способ):
Код:
For I:=0 to 1000000 do
 Begin
  If I mod 100 = 0 Then 
   Begin
    Edit1.Text:=IntToStr(I);
    Edit1.Refresh;
   End;
 End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 15.10.2009, 00:22   #18
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

k1r1ch
Ну что уж Вы, Алгоритм Евклида не знаете В школе это на обычной математике классе в 8ом проходят
Почитайте. Там внизу есть ссылка на примеры реализации
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 15.10.2009, 00:25   #19
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Что именно мой алгоритм не сократит?) 4/8 и 2/2 сокращает )
TwiX вне форума Ответить с цитированием
Старый 15.10.2009, 07:48   #20
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

А чё Int64 ве6чно используешь? Ты знаешь какое это число?


Тебе и smallInt подойдёт. Ну можешь integer юзать.

Считает и правда долго. Попробуй smallInt с теми-же числами.

//Чё, у AIPM иконку стибрил?
Altera вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Протестируйте программы Umen Софт 13 15.12.2010 00:13
протестируйте пож прогу NSvirus Паскаль, Turbo Pascal, PascalABC.NET 15 12.05.2009 21:04
Протестируйте программку, пожалуйста Air Софт 7 25.07.2008 16:37
Протестируйте пожалуйста terminadoor Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 24.07.2008 14:56
протестируйте программу Gambler Софт 13 04.02.2007 02:48