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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация ппрограмм под паскаль 
:(
    Опции темы
Remiznik
Дата 22.5.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не давно писал простейшуюю програму с массивамино надо было создать маленькое мень выбора задания масива программа простая а писанинны дофига
так вот вопрос в чём может кто видел сайты или сам что придумал по поводу оптимизации программ если не жалко поделитесь ))))
PM MAIL   Вверх
remax
  Дата 22.5.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


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

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



Цитата(Remiznik @ 22.5.2005, 09:32)
не давно писал простейшуюю програму с массивамино надо было создать маленькое мень выбора задания масива программа простая а писанинны дофига


???? А в чем проблема ????

Код

procedure Run
var
   nafig:boolean;
   Ch:char;
 begin
   nafig:=false;
   repeat
    View;
    Ch:=ReadKey;
    case Ch of
      #0:                                    { Function keys }
      begin
        Ch:=ReadKey;
        case Ch of
          #45: nafig:=True;                       { Alt-X }
          #63: PrintPages(5); {F5}
          #72: if page>1 then PrevPage; { Up }
          #73: if page>1 then PrevPage; { Page Up }
          #80: if not eof(t) then NextPage; { Down }
          #81: if not eof(t) then NextPages(10); { Page Down }
            end;
        end;
      end;
      #3: nafig:=True;                   { Ctrl-C }
      #27: nafig:=True;                  { Esc }
    end; {case}
   until nafig;
 end;






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


Опытный
**


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

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



я в обшем меню у меня написано просто проги какието громосткие и трудно читабильные ))) получаються
PM MAIL   Вверх
remax
Дата 29.5.2005, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


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

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



Используй модульный принцип - Преобразуй повторяющиеся и однотипные фрагменты программы в процедуры и функции. Группируй процедуры и функции по назначению и выноси в отдельные модули. Используй ООП.


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


Бывалый
*


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

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



Remiznik, можешь выложить свой неоптимизированный код - поможем его упростить.
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
Remiznik
Дата 31.5.2005, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я могу код выло жить но я в обшем смысле имел веду типа зачем писать sqr(x) когда можно x*x что то в этом роде

Код

program Project21;

{$APPTYPE CONSOLE}

uses
  SysUtils;

procedure myarctan(x,e:real ;var s:real);
 var
 n1,n:real;
 begin
  begin
   s:=0;
   n1:=x;
   n:=1;
   while abs(n1)>E*n do
   begin
    s:=s+n1/n;
    n1:=(n1*(-sqr(x)));
    n:=n+2;
   end;
  end;
 end;


function  myarctan1(x:real):real;
 var
 n1,n,s,e:real;
 begin
  s:=0;
  e:=0.000000000000001;
  n1:=x;
  n:=1;
  while abs(n1)>E*n do
  begin
   s:=s+n1/n;
   n1:=(n1*(-sqr(x)));
   n:=n+2;
  end;
  myarctan1:=s;
 end;

 var
 q,a,x,e,s,s1,s2,s3:real;
 z: byte;
 begin
  repeat
  repeat
  writeln ('1 - Procedure');
  writeln ('2 - Function');
  Writeln ('3 - Exit');
  readln (z)
  until  (z=1) or (z=2) or (z=3);
  if (z=1) or (z=2) then
   begin
    case z of
     1:  begin
       write ('vvedute x ');
       readln(x);
       writeln;
      if x<1 then
       begin
        e:=0.0000000000000001;
        myarctan(x,e,s);
        s1:=s;
        x:=2*x;
        myarctan(x,e,s);
        s2:=s;
        x:=(x/2)*3;
        myarctan(x,e,s);
        s3:=s;
        x:=x/3;
        a:=arctan(x)+arctan(2*x)+arctan(3*x);
        q:=s1+s2+s3;
        writeln ('standart arctan y= ',a);
        writeln ('   my arctan    y= ',q);
        writeln ;
       end
      else
       begin
        writeln('|x|<1');
        writeln('poprobui ehe raz');
        writeln;
       end;
  end;
2: begin
write ('vvedute x ');
  readln(x);
  writeln ;
  if x<1 then
  begin
    q:=myarctan1(x)+myarctan1(2*x)+myarctan1(3*x);
   a:=arctan(x)+arctan(2*x)+arctan(3*x);
    writeln ('standart arctan y= ',a);
    writeln ('   my arctan    y= ',q);
    writeln;
    end
     else
     begin
     writeln('|x|<1');
     writeln('poprobui ehe raz');
     writeln;
     end;
end;

3: exit;

 end;
   end;
until z=3;
  { TODO -oUser -cConsole Main : Insert code here }
end.


Это сообщение отредактировал(а) Fedor - 31.5.2005, 07:48
PM MAIL   Вверх
Romtek
Дата 2.6.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Sqr() оптимальнее в ассемлерном коде, чем x*x

Заменил бы
e:=0.000000000000001; на e:=1e-15;
until (z=1) or (z=2) or (z=3); на until z in [1..3]; {со множествами работа быстрее}
if (z=1) or (z=2) then на if (z<>3) then

Ну это мелочи. Главное - это алгоритм!


--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
Remiznik
Дата 29.7.2005, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну да алгоритм это вобше самое главное )))
PM MAIL   Вверх
Pakshin A. S.
Дата 31.7.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вышеизложенное можно превратить вот в это:
Код

program Project21;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
 e = 0.000000000000001;

procedure myarctan(x:real; var s:real);
var
 n1, n:real;
begin
 s:=0;
 n1:=x;
 n:=1;
 while abs(n1)>E*n do
  begin
   s:=s+n1/n;
   n1:=(n1*(-sqr(x)));
   n:=n+2
  end
end;

function  myarctan1(x:real):real;
var
 n1,n,s:real;
begin
 s:=0;
 n1:=x;
 n:=1;
 while abs(n1)>E*n do
  begin
   s:=s+n1/n;
   n1:=(n1*(-sqr(x)));
   n:=n+2
  end;
 Result:=s
end;

function InputX:real;
begin
 repeat
  write('Vvedite X -> ');
  readln(Result);
  if abs(Result)<1
   then
    writeln('Error input')
 until abs(Result) >= 1;
end;

procedure ShowResult(a, b:real);
begin
 writeln('standart arctan y= ', a);
 writeln('   my arctan    y= ', b);
 writeln
end;

procedure DoProcedure(x: real);
var
 r, s:real;
 i:integer;
begin
 r:=0;
 for i:=1 to 3 do
  begin
   myarctan(i*x,s);
   r:=r + s
  end;
 ShowResult(arctan(x/3)+arctan(2*x/3)+arctan(x), r)
end;

procedure DoFunction(x: real);
begin
 ShowResult(arctan(x/3)+arctan(2*x/3)+arctan(x), myarctan1(x)+myarctan1(2*x)+myarctan1(3*x))
end;

var
 z: byte;
begin
 repeat
  writeln ('1 - Procedure');
  writeln ('2 - Function');
  writeln ('3 - Exit');
  readln(z);
  case z of
   1: DoProcedure(InputX);
   2: DoFunction(InputX);
  end
 until z=3
end.


Это сообщение отредактировал(а) Pakshin A. S. - 31.7.2005, 10:19
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

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

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

2. Публиковать ссылки на варез

3. Оффтопить

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

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

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


 




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


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

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