IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Предавать-ли в процедуру параметры при помощи класса?, Предавать-ли в процедуру параметры при помощи класса???
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


С точки зрения скорости исполнения процедуры, как правильнее организовать корректную работу процедуры с большим количеством изменяемых переменных?

1. Сформировать Class, и содержать в нем все необходимые переменные. Передавать в процедуру в качестве параметра Class. Теперь процедура работает с переменными, содержащимися в Class:
Код

MyProcedure( Class:MyClass ); begin
   Class.var1 := Class.var2 + Class.var3;
End;

2. Определить переменные в начале программы НО НЕ передавать их в MyProcedure в качестве параметров, а позволить процедуре работать с внешними (для нее) переменным:
Код

var1; var2…….varN

MyProcedure(); begin
    var1:= var2 + var3;
End;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Под какими компилерами будет твоя программа компилироваться? (Кроме твоего "www.wld3.com", который очень странно обрабатывает стандартные конструкции языка... wacko.gif )
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Цитата(volvo @ 26.01.2006 18:30) *

очень странно обрабатывает стандартные конструкции языка... wacko.gif )



Проверил еще раз. Оба способа передачи объекта в подпрограмму
Код
procedure Test( Cont :Container )

и
Код
procedure Test( var Cont :Container )

Работают одинаково...

Код

Type Container = class( TObject )
private protected public
  str :string;
end;

procedure Test( Cont :Container ); begin
  Cont.str:='Test';
end;

var Cont :Container;
Cont:=Container.Create;

Print(Cont.str);
Test(Cont);
Print(Cont.str);


Все-таки у меня остается не решенным вопрос:
каким контейнером лучше воспользоваться в моем случае, с точки зрения скорости обращения к переменным, ну и корректности Pascal в целом…

Илья.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Nolik @ 26.01.2006 21:26) *

Все-таки у меня остается не решенным вопрос:
каким контейнером лучше воспользоваться в моем случае, с точки зрения скорости обращения к переменным, ну и корректности Pascal в целом

Как сказал Вольво зашей все данные в отдельный класс, а в нём определи методы - твои процедуры и функции.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


У меня программа состоит из ОДНОГО главного цикла, в котором находится длинный список подпрограмм:
Код
FOR i:=0 to Max do begin
  Procedure1();
  Procedure2();
......
……
  ProcedureN();
END;


И даже работа с файлами производится из процедур. Таким образом, абсолютно ВСЕ переменные, определенные (и заданные) в начале кода, оказываются внешними по отношению к процедурам good.gif

Вот и получается что варианта 2:
1. Позволить процедурам работать с внешними переменными: Все прозрачно + НЕ требуется выделение дополнительной оперативной памяти. Но возникает вопрос о корректности с точки зрения языка Pascal в целом.
2. Собрать мегазборку переменных Type=Record и передавать ее в процедуры. В этом случае с точки зрения Pascal все вроде как «тип-топ», но потребуется выделение дополнительной памяти, и возможно снизится общая скорость работы программы.

Оба варианта работают одинаково, в том смысле что вычислительный результат совпадает.
Во время процесса оптимизации стратегии, программа запускается несколько сот/тысяч раз в цикле, что требует оптимизации выделения памяти и сокращения общего времени работы программы. Поскольку вся наша жизнь есть сплошной компромисс, то вопрос к Гуру от Pascal такой:
Какой вариант предпочесть???

Низкий поклон за помощь.
Илья.

Сообщение отредактировано: Nolik -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Nolik   Предавать-ли в процедуру параметры при помощи класса?   26.01.2006 19:20
Altair   :blink: какой компилер ? class это зарезервирован…   26.01.2006 19:28
volvo   Я бы не рекомендовал так делать... Обращение к гло…   26.01.2006 19:47
hardcase   С точки зрения скорости исполнения процедуры, как…   26.01.2006 20:05
Nolik   Низкий поклон для volvo и hardcase, Теперь остает…   26.01.2006 21:15
hardcase   А разве просто перечислить не получается?   26.01.2006 21:17
Nolik   А разве просто перечислить не получается? Получ…   26.01.2006 22:27
volvo   Под какими компилерами будет твоя программа компил…   26.01.2006 22:30
Nolik   очень странно обрабатывает стандартные конструкц…   27.01.2006 1:26
hardcase   Все-таки у меня остается не решенным вопрос: как…   27.01.2006 1:41
Nolik   У меня программа состоит из ОДНОГО главного цикла,…   27.01.2006 8:51
volvo   Ага... Так у тебя все-таки 32-бита. Тогда ясно, Cl…   27.01.2006 1:33
Dark   помоему - удобнее всего использовть record... если…   27.01.2006 9:18
volvo   Nolik, Ты не хочешь читать предыдущие посты, а упо…   27.01.2006 15:39
hardcase   Оба варианта - разумные и удобные. Как а том анекд…   27.01.2006 15:43
Nolik   Как а том анекдоте про программера - "Всё р…   27.01.2006 18:22


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.09.2025 11:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name