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

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

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

> Предавать-ли в процедуру параметры при помощи класса?, Предавать-ли в процедуру параметры при помощи класса???
Nolik
сообщение 26.01.2006 15:20
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 26.01.2006 18:30
Сообщение #2


Гость






Под какими компилерами будет твоя программа компилироваться? (Кроме твоего "www.wld3.com", который очень странно обрабатывает стандартные конструкции языка... wacko.gif )
 К началу страницы 
+ Ответить 
Nolik
сообщение 26.01.2006 21:26
Сообщение #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 
 К началу страницы 
+ Ответить 
hardcase
сообщение 26.01.2006 21:41
Сообщение #4


code warrior
****

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

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


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

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

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


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Nolik
сообщение 27.01.2006 4:51
Сообщение #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 - 27.01.2006 6:53
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 22.07.2025 12:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"