Внешние переменные: Внешние переменные. Язык Си — руководство для начинающих

Автор: | 09.05.2021
Внешние переменные. Язык Си — руководство для начинающих

Внешние переменные

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

int errupt;   /* Три переменные, описанные вне функции */

char coal;

double up;

main( )

{

extern int errupt;  /* объявлено, что 3 переменные */

extern char coal; /* являются внешними */

extern double up;

Группу extern-описаний можно совсем опустить, если исходные определения переменных появляются в том же файле и перед функцией, которая их использует. Включение ключевого слова extern

позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле. (Оба файла, конечно, должны быть скомпилированы, связаны или собраны в одно и то же время.)

     Если слово extern не включено в описание внутри функции, то под этим именем создается новая автоматическая переменная. Вы можете пометить вторую переменную как «автоматическую» с помощью слова auto и тем самым показать, что это ваше намерение, а не оплошность. Три примера демонстрируют четыре возможных комбинация описаний:

/* Пример1 */

int hocus;

main( ) {

extern int hocus; /* hocus описана внешней */

}

magic( ) {

extern int hocus;

}

Здесь есть одна внешняя переменная hocus, и она известна обеим функциям main( ) и magic( ).

/* Пример2 */

int hocus ;

main( )

{

extern int hocus;   /* hocus описана внешней */

}

magic( )

{

/* hocus не описана совсем */

}

Снова есть одна внешняя переменная hocus, известная обеим функциям. На этот раз она известна функцииmagic( ) по умолчанию.

/* Пример3 */

int hocus;

main( )

{

int hocus;   /* hocus описана и

        является автоматической по умолчанию */

}

magic( )

 {

auto int hocus; /* hocus описана автоматической */

}

В этом примере созданы три разные переменные с одинаковым именем. Переменная hocusв функции main( )является автоматической по умолчанию и локальной для main( ), в функции magic( )она явно описана автоматической и известна только для magic( ). Внешняя переменная

hocus неизвестна ни main( ), ни magic( ), но обычно известна любой другой функции в файле, которая не имеет своей собственной локальной переменной hocus.

     Эти примеры иллюстрируют область действия внешних переменных. Они существуют, пока работает программа, и так как эти переменные доступны любой функции, они не исчезнут, если какая-нибудь одна функция закончит свою работу.

Поделитесь на страничке

Следующая глава >

Содержание

4.5.5 Определение внешней переменной

4.5.5 Определение внешней переменной

Диаграмма последовательности шагов в процессе контроля пере­менных [МакГиган, 1993] (рис. 4.14).

Рассмотрим последовательно различные способы контроля внешних пере­менных.

1. Элиминация. Наиболее простой по сути, но не по возможностям осуществле­ния «радикальный» способ контроля. Экспериментальную ситуацию конструируют таким образом, чтобы исключить какое-либо присутствие в ней внешней перемен­ной. Например, в психофизических лабораториях часто создаются экспериментальные камеры, изолирующие испытуемого от внешних звуков, шумов, вибрационного воздействия и электромагнитных полей. Но зачастую элиминировать влияние внеш­них переменных невозможно. Например, трудно представить себе, как можно ис­ключить влияние таких переменных, как пол, возраст или интеллект.

2. Создание константных условий. Если внешние переменные не удается ис­ключить из экспериментальной ситуации, то исследователю приходится делать их неизменными. При этом влияние внешней переменной остается неизменным на всех испытуемых, при всех значениях независимой переменной и на протяжении всего эксперимента. Однако эта стратегия не позволяет полностью избежать эффекта смешения: данные, полученные при константных значениях внешних пе­ременных, можно переносить только на те реальные ситуации, в которых значения внешних переменных такие же, какими они были при исследова­нии. Исследователь стремится сде­лать неизменными внешние про­странственно-временные   условия проведения эксперимента. В частно­сти, экспериментальные пробы или наблюдение за поведением проводят­ся со всеми испытуемыми в одно и то же время суток и в один и тот же день недели, например в понедельник в 9 часов утра. Однако это не гарантиру­ет избавления от эффекта смешения. Допустим, мы тестируем уровень достижений школьников при решении простых арифметических задач. Школьники-«совы», у которых уро­вень работоспособности приходится на вторую половину дня, будут в менее благоприятном состоянии, чем школьники-«жаворонки». Если они преобладают в группе, то их результаты будут смещены по сравнению с результатами, которые могли бы получиться на генеральной совокуп­ности.

Следует стандартизировать технику проведения исследования и оборудование экспериментальных помещений (звуки, ароматы, окраску стен, вид фурнитуры, рас­положение мебели и т.д.).

Исследователь стремится сделать константными дополнительные перемен­ные — уравнять группы испытуемых по основным значимым для исследования ин­дивидуальным характеристикам (уровню образования, полу, возрасту).

Экспериментатор должен предъявлять инструкцию одинаково всем испытуемым (разумеется, исключая те случаи, когда она изменяется в соответствии с планом эксперимента). Он должен стремиться сохранять неизменными интонацию и силу голоса. Рекомендуется записывать инструкцию на магнитофон и предъявлять запись (кроме особых случаев).

3. Балансировка. В тех случаях, когда отсутствует возможность создать константные условия проведения эксперимента или константности условий недо­статочно, применяют технику балансировки эффекта от действия внешних перемен­ных. Балансировка применяется в двух ситуациях: 1) в том случае, если невозмож­но идентифицировать внешнюю переменную; 2) в том случае, если можно ее иден­тифицировать и использовать специальный алгоритм для контроля этой переменной.

Рассмотрим способ балансировки влияния неспецифических внешних перемен­ных. Он состоит в том, что в дополнение к экспериментальной группе в план экспе­римента включается контрольная группа. Экспериментальное исследование конт­рольной группы проводится в тех же условиях, что и исследование эксперименталь­ной. Отличие в том, что экспериментальное воздействие осуществляется только на испытуемых, включенных в экспериментальную группу. Тем самым изменение за­висимой переменной в контрольной группе обусловлено лишь внешними перемен­ными, а в экспериментальной — совместным действием внешних и независимой пе­ременных.

Разумеется, при этом нельзя выделить специфическое влияние каждой внешней переменной и особенности такого влияния независимой переменной из-за эффекта взаимодействия переменных.

1. Способ балансировки с применением контрольной группы (рис. 4.16).

2. Способ балансировки с выделением эффекта внешней переменной (рис 4.17)

Для того чтобы определить, как влияет на зависимую переменную та или иная внешняя переменная, используют план, включающий более чем одну контрольную группу. В общем случае число контрольных групп в экспериментальном плане долж­но быть N = п + 1, где п — число внешних («прочих») переменных. Вторая конт­рольная группа помещается в экспериментальные условия, где исключено действие одной из внешних переменных, влияющих на зависимую переменную эксперимен­тальной и первой контрольной групп. Различие в результатах 1-й и 2-й контрольных групп позволяет выделить специфическое влияние одной из внешних переменных.

Несколько отличается процедура балансировки при контроле известных внеш­них переменных. Типичный пример учета такой переменной — выявление уровня влияния принадлежности испытуемых к тому или иному полу на результаты экспе­римента, поскольку известно, что многие данные, полученные на выборке мужчин, невозможно перенести на женскую выборку. Пол — это дополнительная перемен­ная, поэтому планирование эксперимента сводится к выявлению эффекта действия независимой переменной на зависимую в каждой из двух экспериментальных групп.

Аналогично строится эксперимент по сравнению эффекта от различных аппара­турных методик в зависимости от возраста испытуемых и др.

В более сложных экспериментах применяется балансировка нескольких пере­менных одновременно. Примером может служить учет влияния пола эксперимента­тора на поведение испытуемых при тестировании интеллекта. У нас две группы ис­пытуемых, мужчин и женщин, и два экспериментатора (мужчина и женщина). План эксперимента может выглядеть следующим образом:

     Группа I (эксперимент)                               Группа II(контроль)

1. Мужчины — экспериментатор             Мужчины — экспериментатор

   мужчина                                                   мужчина

2. Мужчины — экспериментатор             Мужчины — экспериментатор

    женщина                                                  женщина

3. Женщины — экспериментатор             Женщины — экспериментатор

    мужчина                                                  мужчина

4. Женщины — экспериментатор             Женщины — экспериментатор

    женщина                                                   женщина

4. Контрбалансировка. Этот прием контроля дополнительной переменной чаще всего применяют тогда, когда эксперимент включает в себя несколько серий. Испы­туемый оказывается в разных условиях последовательно, и предыдущие условия могут изменять эффект воздействия последующих условий. К примеру, при иссле­довании дифференциальной слуховой чувствительности не безразлично, какой звук, громкий или более тихий, предъявлялся испытуемому первым, а какой — вторым. Также при выполнении тестов на интеллект важен порядок предъявления испытуе­мому задач: от простой к сложной или от сложной к простой. В первом случае более интеллектуально развитые испытуемые больше утомляются и теряют мотивацию, так как вынуждены решать большее количество задач, чем остальные. При втором варианте предъявления заданий менее интеллектуально развитые испытуемые ис­пытывают стресс неуспеха и вынуждены решать больше задач, чем их более интел­лектуальные коллеги. В этих случаях для ликвидации эффектов последовательнос­ти и эффекта последствия используют контрбалансировку. Смысл ее состоит в том, что порядок предъявления разных задач, стимулов, воздействий в одной из групп компенсируется иным порядком предъявления заданий в другой группе.

Приведем пример плана контроля за внешней переменной для 2 условий (табл. 4.2).

Таблица 4.2

Группа

Экспериментальная серия(порядок)

1 я                                                         2-я

1-я

Громкий звук

Тихий звук

Тихий звук

Громкий звук

Таблица 4.3

Группа

Экспериментальная серия(порядок)

1-я

2-я

3-я

1-я

Кр.

Ж

3

2-я

Кр.

3

Ж

3-я

Ж

Кр.

3

4-я

Ж

3

Кр.

5-я

3

Кр.

ж

6-я

3

ж

Кр.

Для 3 независимых переменных применяется такой план контрбалансировки, например для предъявления 3-х цветов — красного, желтого, зеленого: (табл. 4.3).

Контрбалансировка применяется в тех случаях, когда есть возможность провес­ти несколько серий. Следует лишь учитывать, что большое число попыток может вызвать утомление у испытуемого. Но этот план позволяет контролировать эф­фект последовательности. Упрощение      же плана контрбалансировки приводит к появлению эффекта последовательнос­ти. Однако контрбалансировка не позволяет полностью исключить еще один эффект, а именно — влияние изменения порядка предъявления заданий на значение зависимой переменной. Он называется дифференцированным переносом: переход от ситуации 1 (когда она создается первой) к ситуации 2 отличается от перехода от ситуации 2 (когда она идет первой) к ситуации 1. Этот эффект приводит к тому, что реальные различия между двумя разными экспериментальными ситуациями при регистрации преувеличиваются.

Итак, техника контрбалансировки заключается в том, что каждый испытуемый получает более чем один вариант воздействия (АВ или ВА) и эффект последовательности целенаправленно распределяется на все экспериментальные условия.

При балансировке каждый испытуемый получает лишь одно экспериментальное воздействие — внешняя переменная балансируется за счет выявле­ния эффекта ее действия на членов экспериментальной группы по сравнению с эффектом, полученным при исследовании контрольной группы. Испытуемый может оказаться только в экспериментальной или же только в контрольной группе и полу­чить воздействие какой-нибудь внешней переменной в обеих группах. Балансиров­ка используется при исследовании независимых групп, тогда как контрбалансиров­ка применяется в исследованиях с повторяющимися воздействиями.

5. Рандомизация. О ней мы уже говорили (раздел 4.4). Рандомизацией называ­ется процедура, которая гарантирует равную возможность каждому члену популя­ции стать участником эксперимента. Каждому представителю выборки присваива­ется порядковый номер, а выбор испытуемых в экспериментальную и контрольную группы проводится с помощью таблицы «случайных» чисел. Рандомизация являет­ся способом, позволяющим исключить влияние индивидуальных особенностей ис­пытуемых на результат эксперимента.

Рандомизация применяется в двух случаях: 1) когда известно, как управлять внешними переменными в экспериментальной ситуации, однако у нас нет возможности использовать одну из предшествующих техник контроля; 2) когда мы предпо­лагаем оперировать какой-либо внешней переменной в экспериментальной ситуа­ции, однако не можем ее специфицировать и применить другие техники.

Если предположить, что значение дополнительной переменной (переменных) подчиняется вероятностным законам (например, описывается нормальным распре­делением), то в состав экспериментальной и контрольных групп войдет выборка, которая имеет те же уровни дополнительных переменных, что и генеральная сово­купность.

По мнению многих специалистов, в том числе Кэмпбелла, уравнивание групп по­средством процедуры рандомизации является единственно надежным способом эли­минации влияния внешних (дополнительных) переменных на зависимую. Кэмпбелл определяет рандомизацию как универсальный способ уравнивания групп перед экс­периментальным воздействием. Другие способы, например метод попарного срав­нения, характеризуются им как малонадежные и ведущие к невалидным выводам.

И в заключение: обратите особое внимание на таблицу, в которой отображен предложенный МакГиганом алгоритм пошагового контроля влияния внешних пере­менных на зависимую переменную.

Вопросы

1. Зачем применяется контрольная группа?

2. Для чего нужны процедуры балансировки и контрбалансировки?

3. В чем отличие дополнительной переменной от независимой переменной?

4. Какие факторы нарушают внутреннюю валидность эксперимента, а какие —

внешнюю?

5. Какие методы отбора и распределения испытуемых по группам применяются при организации эксперимента?

4.5.5 Определение внешней переменной

4.5.5 Определение внешней переменной

Диаграмма последовательности шагов в процессе контроля пере­менных [МакГиган, 1993] (рис. 4.14).

Рассмотрим последовательно различные способы контроля внешних пере­менных.

1. Элиминация. Наиболее простой по сути, но не по возможностям осуществле­ния «радикальный» способ контроля. Экспериментальную ситуацию конструируют таким образом, чтобы исключить какое-либо присутствие в ней внешней перемен­ной. Например, в психофизических лабораториях часто создаются экспериментальные камеры, изолирующие испытуемого от внешних звуков, шумов, вибрационного воздействия и электромагнитных полей. Но зачастую элиминировать влияние внеш­них переменных невозможно. Например, трудно представить себе, как можно ис­ключить влияние таких переменных, как пол, возраст или интеллект.

2. Создание константных условий. Если внешние переменные не удается ис­ключить из экспериментальной ситуации, то исследователю приходится делать их неизменными. При этом влияние внешней переменной остается неизменным на всех испытуемых, при всех значениях независимой переменной и на протяжении всего эксперимента. Однако эта стратегия не позволяет полностью избежать эффекта смешения: данные, полученные при константных значениях внешних пе­ременных, можно переносить только на те реальные ситуации, в которых значения внешних переменных такие же, какими они были при исследова­нии. Исследователь стремится сде­лать неизменными внешние про­странственно-временные   условия проведения эксперимента. В частно­сти, экспериментальные пробы или наблюдение за поведением проводят­ся со всеми испытуемыми в одно и то же время суток и в один и тот же день недели, например в понедельник в 9 часов утра. Однако это не гарантиру­ет избавления от эффекта смешения. Допустим, мы тестируем уровень достижений школьников при решении простых арифметических задач. Школьники-«совы», у которых уро­вень работоспособности приходится на вторую половину дня, будут в менее благоприятном состоянии, чем школьники-«жаворонки». Если они преобладают в группе, то их результаты будут смещены по сравнению с результатами, которые могли бы получиться на генеральной совокуп­ности.

Следует стандартизировать технику проведения исследования и оборудование экспериментальных помещений (звуки, ароматы, окраску стен, вид фурнитуры, рас­положение мебели и т.д.).

Исследователь стремится сделать константными дополнительные перемен­ные — уравнять группы испытуемых по основным значимым для исследования ин­дивидуальным характеристикам (уровню образования, полу, возрасту).

Экспериментатор должен предъявлять инструкцию одинаково всем испытуемым (разумеется, исключая те случаи, когда она изменяется в соответствии с планом эксперимента). Он должен стремиться сохранять неизменными интонацию и силу голоса. Рекомендуется записывать инструкцию на магнитофон и предъявлять запись (кроме особых случаев).

3. Балансировка. В тех случаях, когда отсутствует возможность создать константные условия проведения эксперимента или константности условий недо­статочно, применяют технику балансировки эффекта от действия внешних перемен­ных. Балансировка применяется в двух ситуациях: 1) в том случае, если невозмож­но идентифицировать внешнюю переменную; 2) в том случае, если можно ее иден­тифицировать и использовать специальный алгоритм для контроля этой переменной.

Рассмотрим способ балансировки влияния неспецифических внешних перемен­ных. Он состоит в том, что в дополнение к экспериментальной группе в план экспе­римента включается контрольная группа. Экспериментальное исследование конт­рольной группы проводится в тех же условиях, что и исследование эксперименталь­ной. Отличие в том, что экспериментальное воздействие осуществляется только на испытуемых, включенных в экспериментальную группу. Тем самым изменение за­висимой переменной в контрольной группе обусловлено лишь внешними перемен­ными, а в экспериментальной — совместным действием внешних и независимой пе­ременных.

Разумеется, при этом нельзя выделить специфическое влияние каждой внешней переменной и особенности такого влияния независимой переменной из-за эффекта взаимодействия переменных.

1. Способ балансировки с применением контрольной группы (рис. 4.16).

2. Способ балансировки с выделением эффекта внешней переменной (рис 4.17)

Для того чтобы определить, как влияет на зависимую переменную та или иная внешняя переменная, используют план, включающий более чем одну контрольную группу. В общем случае число контрольных групп в экспериментальном плане долж­но быть N = п + 1, где п — число внешних («прочих») переменных. Вторая конт­рольная группа помещается в экспериментальные условия, где исключено действие одной из внешних переменных, влияющих на зависимую переменную эксперимен­тальной и первой контрольной групп. Различие в результатах 1-й и 2-й контрольных групп позволяет выделить специфическое влияние одной из внешних переменных.

Несколько отличается процедура балансировки при контроле известных внеш­них переменных. Типичный пример учета такой переменной — выявление уровня влияния принадлежности испытуемых к тому или иному полу на результаты экспе­римента, поскольку известно, что многие данные, полученные на выборке мужчин, невозможно перенести на женскую выборку. Пол — это дополнительная перемен­ная, поэтому планирование эксперимента сводится к выявлению эффекта действия независимой переменной на зависимую в каждой из двух экспериментальных групп.

Аналогично строится эксперимент по сравнению эффекта от различных аппара­турных методик в зависимости от возраста испытуемых и др.

В более сложных экспериментах применяется балансировка нескольких пере­менных одновременно. Примером может служить учет влияния пола эксперимента­тора на поведение испытуемых при тестировании интеллекта. У нас две группы ис­пытуемых, мужчин и женщин, и два экспериментатора (мужчина и женщина). План эксперимента может выглядеть следующим образом:

     Группа I (эксперимент)                               Группа II(контроль)

1. Мужчины — экспериментатор             Мужчины — экспериментатор

   мужчина                                                   мужчина

2. Мужчины — экспериментатор             Мужчины — экспериментатор

    женщина                                                  женщина

3. Женщины — экспериментатор             Женщины — экспериментатор

    мужчина                                                  мужчина

4. Женщины — экспериментатор             Женщины — экспериментатор

    женщина                                                   женщина

4. Контрбалансировка. Этот прием контроля дополнительной переменной чаще всего применяют тогда, когда эксперимент включает в себя несколько серий. Испы­туемый оказывается в разных условиях последовательно, и предыдущие условия могут изменять эффект воздействия последующих условий. К примеру, при иссле­довании дифференциальной слуховой чувствительности не безразлично, какой звук, громкий или более тихий, предъявлялся испытуемому первым, а какой — вторым. Также при выполнении тестов на интеллект важен порядок предъявления испытуе­мому задач: от простой к сложной или от сложной к простой. В первом случае более интеллектуально развитые испытуемые больше утомляются и теряют мотивацию, так как вынуждены решать большее количество задач, чем остальные. При втором варианте предъявления заданий менее интеллектуально развитые испытуемые ис­пытывают стресс неуспеха и вынуждены решать больше задач, чем их более интел­лектуальные коллеги. В этих случаях для ликвидации эффектов последовательнос­ти и эффекта последствия используют контрбалансировку. Смысл ее состоит в том, что порядок предъявления разных задач, стимулов, воздействий в одной из групп компенсируется иным порядком предъявления заданий в другой группе.

Приведем пример плана контроля за внешней переменной для 2 условий (табл. 4.2).

Таблица 4.2

Группа

Экспериментальная серия(порядок)

1 я                                                         2-я

1-я

Громкий звук

Тихий звук

Тихий звук

Громкий звук

Таблица 4.3

Группа

Экспериментальная серия(порядок)

1-я

2-я

3-я

1-я

Кр.

Ж

3

2-я

Кр.

3

Ж

3-я

Ж

Кр.

3

4-я

Ж

3

Кр.

5-я

3

Кр.

ж

6-я

3

ж

Кр.

Для 3 независимых переменных применяется такой план контрбалансировки, например для предъявления 3-х цветов — красного, желтого, зеленого: (табл. 4.3).

Контрбалансировка применяется в тех случаях, когда есть возможность провес­ти несколько серий. Следует лишь учитывать, что большое число попыток может вызвать утомление у испытуемого. Но этот план позволяет контролировать эф­фект последовательности. Упрощение      же плана контрбалансировки приводит к появлению эффекта последовательнос­ти. Однако контрбалансировка не позволяет полностью исключить еще один эффект, а именно — влияние изменения порядка предъявления заданий на значение зависимой переменной. Он называется дифференцированным переносом: переход от ситуации 1 (когда она создается первой) к ситуации 2 отличается от перехода от ситуации 2 (когда она идет первой) к ситуации 1. Этот эффект приводит к тому, что реальные различия между двумя разными экспериментальными ситуациями при регистрации преувеличиваются.

Итак, техника контрбалансировки заключается в том, что каждый испытуемый получает более чем один вариант воздействия (АВ или ВА) и эффект последовательности целенаправленно распределяется на все экспериментальные условия.

При балансировке каждый испытуемый получает лишь одно экспериментальное воздействие — внешняя переменная балансируется за счет выявле­ния эффекта ее действия на членов экспериментальной группы по сравнению с эффектом, полученным при исследовании контрольной группы. Испытуемый может оказаться только в экспериментальной или же только в контрольной группе и полу­чить воздействие какой-нибудь внешней переменной в обеих группах. Балансиров­ка используется при исследовании независимых групп, тогда как контрбалансиров­ка применяется в исследованиях с повторяющимися воздействиями.

5. Рандомизация. О ней мы уже говорили (раздел 4.4). Рандомизацией называ­ется процедура, которая гарантирует равную возможность каждому члену популя­ции стать участником эксперимента. Каждому представителю выборки присваива­ется порядковый номер, а выбор испытуемых в экспериментальную и контрольную группы проводится с помощью таблицы «случайных» чисел. Рандомизация являет­ся способом, позволяющим исключить влияние индивидуальных особенностей ис­пытуемых на результат эксперимента.

Рандомизация применяется в двух случаях: 1) когда известно, как управлять внешними переменными в экспериментальной ситуации, однако у нас нет возможности использовать одну из предшествующих техник контроля; 2) когда мы предпо­лагаем оперировать какой-либо внешней переменной в экспериментальной ситуа­ции, однако не можем ее специфицировать и применить другие техники.

Если предположить, что значение дополнительной переменной (переменных) подчиняется вероятностным законам (например, описывается нормальным распре­делением), то в состав экспериментальной и контрольных групп войдет выборка, которая имеет те же уровни дополнительных переменных, что и генеральная сово­купность.

По мнению многих специалистов, в том числе Кэмпбелла, уравнивание групп по­средством процедуры рандомизации является единственно надежным способом эли­минации влияния внешних (дополнительных) переменных на зависимую. Кэмпбелл определяет рандомизацию как универсальный способ уравнивания групп перед экс­периментальным воздействием. Другие способы, например метод попарного срав­нения, характеризуются им как малонадежные и ведущие к невалидным выводам.

И в заключение: обратите особое внимание на таблицу, в которой отображен предложенный МакГиганом алгоритм пошагового контроля влияния внешних пере­менных на зависимую переменную.

Вопросы

1. Зачем применяется контрольная группа?

2. Для чего нужны процедуры балансировки и контрбалансировки?

3. В чем отличие дополнительной переменной от независимой переменной?

4. Какие факторы нарушают внутреннюю валидность эксперимента, а какие —

внешнюю?

5. Какие методы отбора и распределения испытуемых по группам применяются при организации эксперимента?

Оглавление

Понравилась статья? Поделись ею с друзьями и поддержи автора!

  • Facebook
  • Twitter
  • Мой мир
  • Google+
  • LiveJournal
  • Вконтакте

Хочешь узнавать больше? Получай новые статьи в час публикации

ВНЕШНИЕ ПЕРЕМЕННЫЕ. СПОСОБЫ КОНТРОЛЯ ПЕРЕМЕННЫХ — МегаЛекции

Способы контроля внешних переменных.

1. Элиминация. Наиболее простой по сути, но не по возможностям осуществления «радикальный» способ контроля. Экспериментальную ситуацию конструируют таким образом, чтобы исключить какое-либо присутствие в ней внешней переменной. Например, в психофизических лабораториях часто создаются экспериментальные камеры, изолирующие испытуемого от внешних звуков, шумов, вибрационного воздействия и электромагнитных полей. Но зачастую элиминировать влияние внешних переменных невозможно. Например, трудно представить себе, как можно исключить влияние таких переменных, как пол, возраст или интеллект.

2. Создание константных условий. Если внешние переменные не удается исключить из экспериментальной ситуации, то исследователю приходится делать их неизменными. При этом влияние внешней переменной остается неизменным на всех испытуемых, при всех значениях независимой переменной и на протяжении всего эксперимента. Однако эта стратегия не позволяет полностью избежать эффекта смешения: данные, полученные при константных значениях внешних переменных, можно переносить только на те реальные ситуации, в которых значения внешних переменных такие же, какими они были при исследовании. Исследователь стремится сделать неизменными внешние пространственно-временные условия проведения эксперимента. В частности, экспериментальные пробы или наблюдение за поведением проводятся со всеми испытуемыми в одно и то же время суток и в один и тот же день недели, например в понедельник в 9 часов утра. Однако это не гарантирует избавления от эффекта смешения. Допустим, мы тестируем уровень достижений школьников при решении простых арифметических задач. Школьники-«совы», у которых уровень работоспособности приходится на вторую половину дня, будут в менее благоприятном состоянии, чем школьники-«жаворонки». Если они преобладают в группе, то их результаты будут смещены по сравнению с результатами, которые могли бы получиться на генеральной совокупности.



Следует стандартизировать технику проведения исследования и оборудование экспериментальных помещений (звуки, ароматы, окраску стен, вид фурнитуры, расположение мебели и т.д.).

Исследователь стремится сделать константными дополнительные переменные — уравнять группы испытуемых по основным значимым для исследования индивидуальным характеристикам (уровню образования, полу, возрасту).

Экспериментатор должен предъявлять инструкцию одинаково всем испытуемым (разумеется, исключая те случаи, когда она изменяется в соответствии с планом эксперимента). Он должен стремиться сохранять неизменными интонацию и силу голоса. Рекомендуется записывать инструкцию на магнитофон и предъявлять запись (кроме особых случаев).

3. Балансировка. В тех случаях, когда отсутствует возможность создать константные условия проведения эксперимента или константности условий недостаточно, применяют технику балансировки эффекта от действия внешних переменных. Балансировка применяется в двух ситуациях: 1) в том случае, если невозможно идентифицировать внешнюю переменную; 2) в том случае, если можно ее идентифицировать и использовать специальный алгоритм для контроля этой переменной.

Рассмотрим способ балансировки влияния неспецифических внешних переменных. Он состоит в том, что в дополнение к экспериментальной группе в план эксперимента включается контрольная группа. Экспериментальное исследование контрольной группы проводится в тех же условиях, что и исследование экспериментальной. Отличие в том, что экспериментальное воздействие осуществляется только на испытуемых, включенных в экспериментальную группу. Тем самым изменение зависимой переменной в контрольной группе обусловлено лишь внешними переменными, а в экспериментальной — совместным действием внешних и независимой переменных.

Разумеется, при этом нельзя выделить специфическое влияние каждой внешней переменной и особенности такого влияния независимой переменной из-за эффекта взаимодействия переменных.

1. Способ балансировки с применением контрольной группы

2. Способ балансировки с выделением эффекта внешней переменной

Для того чтобы определить, как влияет на зависимую переменную та или иная внешняя переменная, используют план, включающий более чем одну контрольную группу. В общем случае число контрольных групп в экспериментальном плане должно быть N = п + 1, где п — число внешних («прочих») переменных. Вторая контрольная группа помещается в экспериментальные условия, где исключено действие одной из внешних переменных, влияющих на зависимую переменную экспериментальной и первой контрольной групп. Различие в результатах 1-й и 2-й контрольных групп позволяет выделить специфическое влияние одной из внешних переменных.

Несколько отличается процедура балансировки при контроле известных внешних переменных. Типичный пример учета такой переменной — выявление уровня влияния принадлежности испытуемых к тому или иному полу на результаты эксперимента, поскольку известно, что многие данные, полученные на выборке мужчин, невозможно перенести на женскую выборку. Пол — это дополнительная переменная, поэтому планирование эксперимента сводится к выявлению эффекта действия независимой переменной на зависимую в каждой из двух экспериментальных групп.

Аналогично строится эксперимент по сравнению эффекта от различных аппаратурных методик в зависимости от возраста испытуемых и др.

4. Контрбалансировка. Этот прием контроля дополнительной переменной чаще всего применяют тогда, когда эксперимент включает в себя несколько серий. Испытуемый оказывается в разных условиях последовательно, и предыдущие условия могут изменять эффект воздействия последующих условий. К примеру, при исследовании дифференциальной слуховой чувствительности не безразлично, какой звук, громкий или более тихий, предъявлялся испытуемому первым, а какой — вторым. Также при выполнении тестов на интеллект важен порядок предъявления испытуемому задач: от простой к сложной или от сложной к простой. В первом случае более интеллектуально развитые испытуемые больше утомляются и теряют мотивацию, так как вынуждены решать большее количество задач, чем остальные. При втором варианте предъявления заданий менее интеллектуально развитые испытуемые испытывают стресс неуспеха и вынуждены решать больше задач, чем их более интеллектуальные коллеги. В этих случаях для ликвидации эффектов последовательности и эффекта последствия используют контрбалансировку. Смысл ее состоит в том, что порядок предъявления разных задач, стимулов, воздействий в одной из групп компенсируется иным порядком предъявления заданий в другой группе.

5. Рандомизация. О ней мы уже говорили (раздел 4.4). Рандомизацией называется процедура, которая гарантирует равную возможность каждому члену популяции стать участником эксперимента. Каждому представителю выборки присваивается порядковый номер, а выбор испытуемых в экспериментальную и контрольную группы проводится с помощью таблицы «случайных» чисел. Рандомизация является способом, позволяющим исключить влияние индивидуальных особенностей испытуемых на результат эксперимента.

Рандомизация применяется в двух случаях: 1) когда известно, как управлять внешними переменными в экспериментальной ситуации, однако у нас нет возможности использовать одну из предшествующих техник контроля; 2) когда мы предполагаем оперировать какой-либо внешней переменной в экспериментальной ситуации, однако не можем ее специфицировать и применить другие техники.

ВИДЫ ЭКСПЕРИМЕНТАЛЬНЫХ ПЛАНОВ

План «истинного» экспериментального исследования отличается от других следующими важнейшими признаками:

1) применением одной из стратегий создания эквивалентных групп, чаще всего — рандомизации;

2) наличием экспериментальной и, как минимум, одной контрольной группы;

3) завершением эксперимента тестированием и сравнением поведения группы, получившей экспериментальное воздействие (X1), с группой, не получившей воздействия Х0.

Классическим вариантом плана является план для 2 независимых групп. В психологии планирование эксперимента начинает применяться с первых десятилетий XXв.

1) План для двух рандомизированных групп с тестированием после воздействия. Его автор — известный биолог и статистик Р. А. Фишер [Fisher R. A., 1935]. Структура плана показана в табл. 5.1.

Равенство экспериментальной и контрольной групп является совершенно необходимым условием применения этого плана. Чаще всего для достижения эквивалентности групп применяют процедуру рандомизации (см. гл. 4). Этот план рекомендуют использовать в том случае, когда нет возможности или необходимости проводить предварительное тестирование испытуемых. Если рандомизация проведена качественно, то этот план является наилучшим, позволяет контролировать большинство источников артефактов; кроме того, для него применимы различные варианты дисперсионного анализа.

После проведения рандомизации или иной процедуры уравнивания групп осуществляется экспериментальное воздействие. В простейшем варианте используется лишь две градации независимой переменной: есть воздействие, нет воздействия.

Если необходимо использовать не 1 уровень воздействия, то применяются планы с несколькими экспериментальными группами (по числу уровней воздействия) и одной контрольной.

Если же нужно контролировать влияние одной из дополнительных переменных, то применяют план с 2 контрольными группами и 1-й экспериментальной. Измерение поведения дает материал для сравнения 2 групп. Обработка данных сводится к применению традиционных для математической статистики оценок. Рассмотрим случай, когда измерение проводится интервальной шкалой. Для оценки различия в средних показателях групп используют t-критерий Стьюдента. Оценивание различий в вариации измеряемого параметра между экспериментальной и контрольной группами проводится с помощью критерия F. Соответствующие процедуры подробно рассмотрены в учебниках математической статистики для психологов.

Применение плана для 2 рандомизированных групп с тестированием после воздействия позволяет контролировать основные источники внутренней невалидности (как их определяет Кэмпбелл). Поскольку предварительное тестирование отсутствует, исключен эффект взаимодействия процедуры тестирования и содержания экспериментального воздействия и сам эффект тестирования. План позволяет контролировать влияние состава групп, стихийного выбывания, влияние фона и естественного развития, взаимодействие состава группы с другими факторами, позволяет также исключить эффект регрессии за счет рандомизации и сравнения данных экспериментальной и контрольной групп. Однако при проведении большинства педагогических и социально-психологических экспериментов необходимо жестко контролировать исходный уровень зависимой переменной, будь то интеллект, тревожность, знания или статус личности в группе. Рандомизация — лучшая процедура из возможных, но она не дает абсолютной гарантии правильности выбора. Когда существуют сомнения в результатах рандомизации, применяют план с предварительным тестированием.

2) План для двух рандомизированных групп с предварительным и итоговым тестированием.

План с предварительным тестированием пользуется популярностью у психологов. Биологи больше доверяют процедуре рандомизации. Психолог прекрасно знает, что каждый человек своеобразен и отличен от других, и подсознательно стремится уловить эти различия с помощью тестов, не доверяя механической процедуре рандомизации. Однако гипотеза большинства психологических исследований, особенно в области психологии развития («формирующий эксперимент»), содержит прогноз определенного изменения свойства индивида под влиянием внешнего фактора. Поэтому план «тест—воздействие—ретест» с применением рандомизации и контрольной группой очень распространен.

Главный источник артефактов, нарушающий внешнюю валидность процедуры, — взаимодействие тестирования с экспериментальным воздействием. Например, тестирование уровня знаний по определенному предмету перед проведением эксперимента по заучиванию материала может привести к актуализации исходных знаний и к общему повышению продуктивности запоминания. Достигается это за счет актуализации мнемонических способностей и создания установки на запоминание.

Однако с помощью этого плана можно контролировать другие внешние переменные. Контролируется фактор «истории» («фона»), так как в промежутке между первым и вторым тестированием обе группы подвергаются одинаковым («фоновым») воздействиям. Вместе с тем Кэмпбелл отмечает необходимость контроля «внутригрупповых событий», а также эффекта неодновременности тестирования в обеих группах. В реальности невозможно добиться, чтобы тест и ретест проводились в них одновременно. План превращается в квазиэкспериментальный, например:

Обычно контроль неодновременности тестирования осуществляют два экспериментатора, проводящие тестирование двух групп одновременно. Оптимальной считается процедура рандомизации порядка тестирования: тестирование членов экспериментальной и контрольной групп производится в случайном порядке. То же самое делается и с предъявлением — не предъявлением экспериментального воздействия. Разумеется, такая процедура требует наличия значительного числа испытуемых в экспериментальной и контрольной выборках (не менее 30-35 человек в каждой).

Иногда сравнения двух групп недостаточно для подтверждения или опровержения экспериментальной гипотезы. Такая проблема возникает в двух случаях: а) при необходимости контроля внешних переменных; б) при необходимости выявления количественных зависимостей между двумя переменными.

Для контроля внешних переменных используются различные варианты факторного экспериментального плана. Что касается выявления количественной зависимости между двумя переменными, то необходимость ее установления возникает при проверке «точной» экспериментальной гипотезы. В эксперименте с участием двух групп в лучшем случае можно установить факт причинной связи между независимой и зависимой переменными. Но между двумя точками можно провести бесконечное множество кривых. Для того чтобы убедиться в наличии линейной зависимости между двумя переменными, следует иметь хотя бы три точки, соответствующие трем уровням независимой переменной. Следовательно, экспериментатор должен выделить несколько рандомизированных групп и поставить их в различные экспериментальные условия. Простейшим вариантом является план для трех групп и трех уровней независимой переменной:

При реализации этого плана каждой группе предъявляется лишь один уровень независимой переменной. Возможно и увеличение числа экспериментальных групп соответственно числу уровней независимой переменной. Для обработки данных, полученных с помощью такого плана, применяются те же статистические методы, что были перечислены выше.

Простые «системные экспериментальные планы», как ни удивительно, очень редко используются в современных экспериментальных исследованиях. Может быть, исследователи «стесняются» выдвигать простые гипотезы, помня о «сложности и многомерности» психической реальности? Тяготение к использованию планов с многими независимыми переменными, более того — к проведению многомерных экспериментов, не обязательно способствует лучшему объяснению причин человеческого поведения. Как известно, «умный поражает глубиной идеи, а дурак — размахом строительства». Лучше предпочесть простое объяснение любому сложному, хотя регрессионные уравнения, где все всему равняется, и запутанные корреляционные графы могут произвести впечатление на некоторые диссертационные советы.

Факторные эксперименты применяются тогда, когда необходимо проверить сложные гипотезы о взаимосвязях между переменными. Общий вид подобной гипотезы: «Если А1, А2,…, Аn, то В». Такие гипотезы называются комплексными, комбинированными и др. При этом между независимыми переменными могут быть различные отношения: конъюнкции, дизъюнкции, линейной независимости, аддитивные или мультипликативные и др. Факторные эксперименты являются частным случаем многомерного исследования, в ходе проведения которого пытаются установить отношения между несколькими независимыми и несколькими зависимыми переменными. В факторном эксперименте проверяются одновременно, как правило, два типа гипотез:

1) гипотезы о раздельном влиянии каждой из независимых переменных;

2) гипотезы о взаимодействии переменных, а именно — как присутствие одной из независимых переменных влияет на эффект воздействия на другой.

Факторный эксперимент строится по факторному плану. Факторное планирование эксперимента заключается в том, чтобы все уровни независимых переменных сочетались друг с другом. Число экспериментальных групп равно числу сочетаний уровней всех независимых переменных.

Сегодня факторные планы наиболее распространены в психологии, поскольку простые зависимости между двумя переменными в ней практически не встречаются.

Существует множество вариантов факторных планов, но на практике применяются далеко не все. Чаще всего используются факторные планы для двух независимых переменных и двух уровней типа 2х2. Для составления плана применяется принцип балансировки. План 2х2 используется для выявления эффекта воздействия двух независимых переменных на одну зависимую. Экспериментатор манипулирует возможными сочетаниями переменных и уровней. Реже используются четыре независимые рандомизированные группы. Для обработки результатов применяется дисперсионный анализ по Фишеру.

Ротационные планы строятся по методу «латинского квадрата», но, в отличие от рассмотренного выше примера, по строкам обозначены группы испытуемых, а не уровни переменной, по столбцам — уровни воздействия первой независимой переменной (или переменных), в клеточках таблицы — уровни воздействия второй независимой переменной.

Эксперименты на выборках с контролем переменных — ситуация, которую широкого стали использовать в психологии с 1910-1920-х гг. Особое распространение экспериментальные исследования на уравненных группах получили после создания выдающимся биологом и математиком Р. А. Фишером теории планирования экспериментов и обработки их результатов (дисперсионный и ковариационный анализы). Но психологи применяли эксперимент задолго до появления теории планирования исследования выборок. Первые экспериментальные исследования проводились с участием одного испытуемого — им являлся сам экспериментатор либо его ассистент. Начиная с Г. Фехнера (1860), в психологию пришла техника экспериментирования для проверки теоретических количественных гипотез.

Классическим экспериментальным исследованием одного испытуемого стала работа Г. Эббингауза, которая была проведена в 1913 г. Эббингауз исследовал явление забывания с помощью заучивания бессмысленных слогов (изобретенных им же). Он заучивал серию слогов, а затем пытался их воспроизвести через определенное время. В итоге была получена классическая кривая забывания: зависимость объема сохраненного материала от времени, прошедшего с момента заучивания (рис. 5.5).

В эмпирической научной психологии взаимодействуют и борются три исследовательские парадигмы. Представители одной из них, традиционно идущей от естественнонаучного эксперимента, считают единственно достоверным знанием только то, которое добывается в экспериментах на эквивалентных и репрезентативных выборках. Основной аргумент сторонников этой позиции — необходимость контроля внешних переменных и нивелирования индивидуальных различий для нахождения общих закономерностей.

Представители методологии «экспериментального анализа поведения» критикуют сторонников статистического анализа и планирования экспериментов на выборках. По их мнению, нужно проводить исследования с участием одного испытуемого и с применением определенных стратегий, которые позволят в ходе эксперимента редуцировать источники артефактов. Сторонниками этой методологии являются такие известные исследователи, как Б. Ф. Скиннер, Г. А. Мюррейидр.

Наконец, классическое идиографическое исследование противопоставляется как экспериментам с участием одного испытуемого, так и планам, изучающим поведение в репрезентативных выборках. Идиографическое исследование предусматривает изучение индивидуальных случаев: биографий или особенностей поведения отдельных людей. Примером являются замечательные работы Лурии «Потерянный и возвращенный мир» и «Маленькая книжка о большой памяти».

Во многих случаях исследования, проводимые с участием одного испытуемого, являются единственно возможным вариантом. Методология исследования одного испытуемого разрабатывалась в 1970—1980-е гг. многими авторами: А. Кезданом, Т. Кратохвиллом, Б. Ф. Скиннером, Ф.-Дж. МакГиганом и др.

В ходе эксперимента выявляются два источника артефактов: а) ошибки в стратегии планирования и в проведении исследования; б) индивидуальные различия.

Если создать «правильную» стратегию проведения эксперимента с одним испытуемым, то вся проблема сведется лишь к учету индивидуальных различий. Эксперимент с одним испытуемым возможен тогда, когда: а) индивидуальными различиями можно пренебречь в отношении переменных, изучаемых в эксперименте, все испытуемые признаются эквивалентными, поэтому возможен перенос данных на каждого члена популяции; б) испытуемый уникален, и проблема прямого переноса данных неактуальна.

Стратегия экспериментирования с одним испытуемым разработана Скиннером для исследования процесса обучения. Данные в ходе исследования представляются в форме «кривых обучения» в системе координат «время» — «общее число ответов» (кумулятивная кривая). Кривая обучения первоначально анализируется визуально; рассматриваются ее изменения во времени. Если функция, описывающая кривую, изменяется при изменении воздействия А на В, то это может свидетельствовать о наличии причинной зависимости поведения от внешних воздействий или В).

Исследование по схеме «один испытуемый» (single-subject research) называется также планированием временных серий. Основным показателем влияния независимой переменной на зависимую при реализации такого плана является изменение характера ответов испытуемого от воздействия на него изменения условий эксперимента во времени. Существует ряд основных схем применения этой парадигмы. Простейшая стратегия — схема А—В. Испытуемый первоначально выполняет деятельность в условиях А, а затем — в условиях В (см. рис. 5.8).

При использовании этого плана возникает закономерный вопрос: а сохранила бы кривая ответов прежний вид, если бы не было воздействия? Проще говоря, эта схема не контролирует эффект плацебо. Кроме того, неясно, что привело к эффекту: может быть, воздействие оказала не переменная В, а какая-либо иная переменная, не учтенная в эксперименте.

Поэтому чаще применяется другая схема: А—В—А. Первоначально регистрируется поведение испытуемого в условиях А, затем условия изменяются (В), а на третьем этапе происходит возвращение прежних условий (А). Изучается изменение функциональной связи между независимой и зависимой переменными. Если при изменении условий на третьем этапе восстанавливается прежний вид функциональной зависимости между зависимой и зависимой переменными, то независимая переменная считается причиной, которая может модифицировать поведение испытуемого (рис. 5.9).

Однако и первый, и второй варианты планирования временных серий не позволяют учесть фактор кумуляции воздействий. Возможно, к эффекту приводит сочетание — последовательность условий и В). Неочевидно и то, что после возврата к ситуации В кривая примет тот же вид, каким он был при первом предъявлении условий В.

Примером плана, который дважды воспроизводит один и тот же экспериментальный эффект, является схема А—В—А—В. Если при 2-м переходе от условий А к условиям В будет воспроизведено изменение функциональной зависимости ответов испытуемого от времени, то это станет доказательством экспериментальной гипотезы: независимая переменная (А, В) влияет на поведение испытуемого.

Рассмотрим простейший случай. В качестве зависимой переменной выберем общий объем знаний студента. В качестве независимой — занятия физкультурой по утрам (например, гимнастикой у-шу). Предположим, что комплекс у-шу благоприятно влияет на общее психическое состояние студента и способствует лучшему запоминанию (рис. 5.10).

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

Существуют различные варианты планирования по методу временных серий. Различают схемы регулярного чередования серий (АВ-АВ), серии стохастических последовательностей и схемы позиционного уравнивания (пример: АВВА). Модификациями схемы А—В—А—В являются схема А—В—А—В—А или более длительная: А— В— А— В— А— В— А.

Применение более «длинных» временных планов увеличивает гарантию обнаружения эффекта, но приводит к утомлению испытуемого и другим кумулятивным эффектам.

Кроме того, план А—В—А—В и его различные модификации не снимают три важнейшие проблемы:

1. Что было бы с испытуемым, если бы никакого воздействия не было (эффект плацебо)?

2. Не является ли последовательность воздействий А—В сама по себе еще одним воздействием (побочной переменной)?

3. Какая причина привела к эффекту: если на месте В не было бы воздействия, повторился бы эффект?

Для контроля эффекта плацебо в серию А—В—А—В включают условия, «имитирующие» либо воздействие А, либо воздействие В. Рассмотрим решение последней проблемы. Но сначала проанализируем такой случай: допустим, студент постоянно занимается у-шу. Но периодически на стадионе или в спортивном зале появляется симпатичная девушка (просто зритель) — воздействие В. План А— В— А— В выявил повышение эффективности учебных занятий студента в периоды появления переменной В. Что является причиной: присутствие зрителя как такового или конкретной симпатичной девушки? Для проверки гипотезы о наличии конкретной причины эксперимент строится по следующей схеме: А—В—А—С—А. Например, в четвертый временной период на стадион приходит другая девушка или скучающий пенсионер. Если эффективность занятий значительно снизится (не та мотивация), то это будет свидетельствовать о конкретной причине ухудшения обучаемости. Возможен и вариант проверки воздействия условия А (занятия у-шу без зрителей). Для этого надо применить план А—В—С—В. Пусть студент какое-то время в отсутствие девушки прекратит занятия. Если же повторное появление ее на стадионе приведет к тому же эффекту, что и в первый раз, то причина повышения успеваемости — в ней, а не только в занятиях у-шу (рис. 5.11).

Прошу не принимать пример всерьез. В действительности происходит как раз все наоборот: увлечение девушками резко снижает успеваемость студентов.

Существует множество приемов проведения исследований с участием одного испытуемого. Примером развития плана АВ является «план альтернативных воздействий». Воздействия А и В рандомизированно распределяются во времени, например по дням недели, если речь идет о разных способах избавления от курения. Затем определяются все моменты, когда было воздействие А; строится кривая, соединяющая соответствующие последовательные точки. Выделяются все моменты времени, когда было «альтернативное» воздействие В, и в порядке следования во времени также соединяются; строится вторая кривая. Затем сравниваются обе кривые и выявляется, какое воздействие более эффективно. Эффективность определяется по величине роста или падения кривой (рис. 5.12).

Синонимами термина «план альтернативных воздействий» являются: «план сравнения серий», «план синхронизированных воздействий», «план множественных расписаний» и т.д.

Другой вариант — реверсивный план. Он применяется для исследования двух альтернативных форм поведения. Первоначально регистрируется базовый уровень проявления обеих форм поведения. Первое поведение может актуализироваться с помощью специфического воздействия, а второе, несовместимое с ним, провоцируется одновременно другим типом воздействия. Эффект двух воздействий оценивается. Через определенное время сочетание воздействий реверсируется так, что первая форма поведения получает воздействие, которое инициировало вторую форму поведения, а вторая — воздействие, релевантное первой форме поведения. Такой план используется, например, при исследовании поведения маленьких детей (рис.5.13).

В психологии обучения применяют метод смены критериев, или «план возрастания критериев». Суть его состоит в том, что регистрируется изменение поведения испытуемого в ответ на прирост (фазы) воздействия. Увеличение регистрируемого параметра поведения фиксируется, и следующее воздействие осуществляется лишь после выхода испытуемого на заданный уровень критерия. После стабилизации уровня исполнения испытуемому предъявляют следующую градацию воздействия. Кривая успешного эксперимента (подтверждающего гипотезу) напоминает сбитую каблуками лестницу, где начало ступени совпадает с началом уровня воздействия, а конец ее — с выходом испытуемого на очередной критерий.

Способом, позволяющим нивелировать «эффект последовательности», является инверсия последовательности воздействий — план А—В—В—А. Эффекты последовательности связаны с влиянием предшествующего воздействия на последующее (иное название — эффекты порядка, или эффекты переноса). Перенос может быть положительным или отрицательным, симметричным или асимметричным. Последовательность А—В—В—А называется позиционно уравненной схемой. Как отмечает Готтсданкер, воздействие переменных А и В обусловлено эффектами раннего или позднего переноса. Воздействие А связано с поздним переносом, а В — с ранним. Кроме того, если присутствует кумулятивный эффект, то два идущих подряд воздействия В могут влиять на субъекта как единое суммарное воздействие. Эксперимент может быть удачным лишь в том случае, если эти эффекты незначительны. Рассмотренные выше варианты планов с регулярным чередованием или со случайными последовательностями чаще всего очень длинны, поэтому их трудно реализовать.

Если подвести краткий итог, можно сказать, что схемы предъявления воздействия применяются в зависимости от возможностей, которые есть у экспериментатора.

Случайная последовательность воздействий получается путем рандомизации заданий. Ее применяют в экспериментах, требующих большого числа проб. Случайное чередование воздействий гарантирует от проявления эффектов последовательности.

При малом числе проб рекомендуется схема регулярного чередования типа А— В—А—В. Следует обратить внимание на периодичность фоновых воздействий, которые могут совпадать с действием независимой переменной. Например, если давать один тест на интеллект утром, а второй — всегда вечером, то под влиянием утомления эффективность выполнения второго теста будет понижаться.

Позиционно уравненная последовательность может быть пригодна лишь тогда, когда число воздействий (заданий) мало и влияние раннего и позднего переноса несущественно.

Но ни одна из схем не исключает проявления дифференцированного асимметричного переноса, когда влияние предшествующего воздействия А на эффект от воздействия В больше, чем влияние предшествующего воздействия В на эффект от воздействия А (или же наоборот).

Основные артефакты в исследовании на одном испытуемом практически неустранимы. Трудно представить, как можно устранить эффекты, связанные с необратимостью событий. Если эффекты порядка или взаимодействия переменных в какой-то мере поддаются контролю, то уже упомянутый эффект асимметричности (дифференцированного переноса) неустраним.

Не меньше проблем возникает и при установлении изначального уровня интенсивности регистрируемого поведения (уровня зависимой переменной). Исходный уровень агрессивности, который мы зарегистрировали у ребенка в лабораторном эксперименте, может быть нетипичным для него, поскольку вызван недавними предшествующими событиями, например ссорой в семье, подавлением его активности сверстниками или воспитателями в детском саду.

Главная же проблема — возможности переноса результатов исследования одного испытуемого на каждого из представителей популяции. Речь идет об учете значимых для исследования индивидуальных различий. Теоретически возможен следующий ход: представление индивидуальных данных в «безразмерном» виде; при этом индивидуальные значения параметра нормируются на величину, равную разбросу значений в популяции.


Рекомендуемые страницы:


Воспользуйтесь поиском по сайту:

Внешние переменные — Студопедия

Переменная, описанная вне функции, является внешней.

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

Пример:

int global_flag;

Внешнюю переменную можно описать и в функции, которая использует ее, при помощи ключевого слова extern. Группу extern -описаний можно совсем опустить, если исходные определения переменных появляются в том же файле и перед функцией, которая их использует. Включение ключевого слова extern позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле. Оба файла должны быть скомпилированы, связаны или собраны в одно и то же время.

Если слово extern не включено в описание внутри функции, то под этим именем создается новая автоматическая переменная. Мы можем пометить вторую переменную как автоматическую с помощью слова auto.

Статические переменные

Статические здесь означает, что переменные остаются в работе. Они имеют такую же область действия, как автоматические переменные, но они не исчезают, когда содержащая их функция закончит свою работу. Компилятор хранит их значения от одного вызова функции до другого.


Пример:

/* Статическая переменная */main( ){ int count; for(count = 1;count

Функция man_woman увеличивает каждую переменную после печати ее значения. Работа этой программы дает следующие результаты:

Подсчет студентов 1:юношей = 1 и девушек = 1Подсчет студентов 2:юношей = 1 и девушек = 2Подсчет студентов 3:юношей = 1 и девушек = 3

Статическая переменная woman помнит, что ее значение было увеличено на 1, в то время как для переменной man начальное значение устанавливается каждый раз заново. Это указывает на разницу в инициализации: man инициализируется каждый раз, когда вызывается man_woman ( ), в то время как woman инициализируется только один раз при компиляции функции man_woman ( ).

Внешние статические переменные. Язык Си

Внешние статические переменные

     Вы можете также описать статические переменные вне любой функции. Это создаст «внешнюю статическую» переменную. Разница между внешней переменной и внешней статической переменной заключается в области их действия. Обычная внешняя переменная может использоваться функциями в любом файле, в то время как внешняя статическая переменная может использоваться только функциями того же самого файла, причем после определения переменной. Вы описываете внешнюю статическую переменную, располагая ее определение вне любой функции.

static randx = 1;

rand( )

{

Немного позже мы приведем пример, в котором будет необходим этот тип переменной.

 

РИС. 10.1. Внешние и внешние статические переменные.

Поделитесь на страничке

Следующая глава >

как их объявлять и использовать?

Переменные являются одной из важнейших основ программирования. Без них не может быть создано ни одной программы. Убедитесь, что вы понимаете переменные в MQL4 и как их можно использовать, потому что вы будете постоянно с ними работать.

Переменные – это контейнеры с информацией. Вы можете присвоить им определенное значение, изменить его, объединить значения и снова его использовать.

Переменные должны быть определенного типа данных. При этом переменная может содержать только значения, разрешенные ее типом данных. Например, если переменная целого типа, она не может содержать букв алфавита.

Переменные имеют жизненный цикл. Они создаются, им присваиваются значения, значения меняются в зависимости от их назначения, а затем они уничтожаются.

MQL4 – это язык, чувствительный к регистру, поэтому во всех операциях, выполняемых с переменными и функциями, нужно быть осторожным с регистром. К примеру, a отличается от A, а функция OpenTrade отличается от opentrade.

Объявление переменных в MQL4

Чтобы использовать переменную, вы должны сначала объявить ее. Это действие говорит программе, что создается переменная с определенным типом данных. Чтобы объявить переменную, напишите тип данных, затем пробел и имя переменной, закройте строку с помощью точки с запятой.

Вот несколько примеров объявления переменных:

int i; // i - целая переменная
string s; // s - строковая переменная
bool enabled; // логическая переменная

Инициализация переменных

Как только переменная объявлена, вы можете присвоить ей значение. Инициализация – это присвоение значения переменной.

Если вы попытаетесь присвоить значение переменной, которая не была объявлена, компилятор выдаст ошибку.

Чтобы инициализировать переменную, напишите имя переменной, далее знак равенства и значение, которое вы хотите ей присвоить, закройте все с помощью точки с запятой.

Вот несколько примеров:

i=1; //переменной i присвоено значение 1
s="Привет"; //переменной s присвоена строка "Привет"
enabled=true; //переменной enabled присвоено значение true

Объявления и инициализация

В зависимости от программы и вашего стиля написания кода вы можете сразу же инициализировать переменную при ее объявлении. Чтобы объявить и инициализировать переменную одновременно, напишите тип данных, затем пробел, имя переменной, знак равенства, закройте все с помощью точки с запятой.

int i=1; //объявлена целая переменная i и ей присвоено значение 1
string s="Привет"; //объявлена строковая переменная s и ей присвоено значение "Привет"
bool enabled=true; //объявлена логическая переменная enabled и ей присвоено значение true

Использование переменных

Чтобы использовать переменную, вам просто нужно вызвать имя переменной в какой-либо функции или любой другой операции.

//+------------------------------------------------------------------+
//|                                                        Test1.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
      string s="Привет"; // объявлена переменная строкового типа s и ей присвоено значение "Привет"
      Print(s); // Значение переменной s будет выведено в окне сообщений в терминале
 
  }
//+------------------------------------------------------------------+

переменные в mql4 в работе

Область действия переменных

Область действия переменной определяет, для каких функций она доступна и как долго она остается в памяти. В MQL4 область действия может быть локальной или глобальной. Локальная переменная также может быть статической.

Локальная переменная – это переменная, объявленная внутри функции. Локальные переменные доступны только внутри функций, в которых они объявлены. Переменная инициализируется при каждом запуске функции. После выхода из функции переменная и ее данные удаляются из памяти.

Исключением является статическая локальная переменная. Статические переменные остаются в памяти даже после выхода из функции. Когда функция запускается снова, переменная не инициализируется повторно, а вместо этого сохраняет свое предыдущее значение.

Статическая переменная объявляется путем ввода static перед объявлением переменной. Вот пример объявления статической переменной:

    static int MyStaticVar;

Если статическая переменная должна быть доступна более чем в одной функции, используйте вместо нее глобальную переменную. В этом случае вам не нужно объявлять переменную как статическую.

Глобальная переменная – это переменная, которая доступна всем функциям в программе. Пока программа работает, значение глобальной переменной сохраняется. Глобальные переменные объявляются вне функций, обычно в верхней части исходного кода.

Обновление значений переменных

Значение переменной может измениться во время выполнения программы. Именно поэтому переменная называется переменной. Если бы нам была нужна переменная с фиксированным значением, вместо этого мы бы использовали константу. Для обновления значения переменных используется тот же код, что и для инициализации. Используйте имя переменной, далее знак равенства и новое значение.

int i=1; // объявлена целая переменная i и ей присвоено значение 1
i=2; // значение i изменяется на 2
i=10; // значение i меняется на 10

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

//+------------------------------------------------------------------+
//|                                                        Test1.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
 
   int i=10; //объявлена целая переменная i и ей присвоено значение 10
   int j=20; //объявлена целая переменная j и ей присвоено значение 20
   int k=i+j; //объявляется переменная k и ей присваивается сумма переменных i + j
 
   string greeting="Привет"; //объявлена строковая переменная greeting и ей присвоено значение Привет
   string name="Александр"; //объявлена строковая переменная name и ей присвоено значение Александр
   string welcome=greeting+" "+name; //объявлена строковая переменная welcome и ей присвоено значение переменных greeting и name
 
   Print("k=",k); //Значение k будет напечатано на вкладке «Терминал - Эксперты»
   Print(welcome); //Значение welcome будет напечатано на вкладке «Терминал - Эксперты»
 
  }
//+------------------------------------------------------------------+

переменные в mql4 еще один пример

Внешние переменные

Внешние переменные – это переменные, значение которых вы можете изменить при запуске советника (или индикатора).

Внешние переменные чрезвычайно важны, потому что:

  • Они позволяют настраивать ваш советник и изменять его параметры до запуска.
  • Они позволяют оптимизировать советник по результатам его тестирования на истории.

Предположим, у вас есть советник, и вы хотите иметь возможность изменять размер позиции, который будет использоваться при его запуске. Вы можете это сделать с помощью внешней переменной.

Или, предположим, у вас есть советник, который торгует с использованием скользящей средней. Вы хотите выбирать период скользящей средней перед запуском советника. Это также удобно делать с помощью внешней переменной.

Или у вас есть строгие правила риск-менеджмента, и вы не хотите открывать новые ордера, если определенный процент вашего депозита уже задействован. И здесь вы можете определить процент используемой маржи с помощью запуска советника с внешней переменной.

Внешние переменные могут быть инициализированы значениями по умолчанию. Кроме того, у внешних переменных может быть описание.

Чтобы определить переменную как внешнюю, вам нужно ее объявить с помощью extern.

Посмотрим на пример:

#property copyright "Александр Паркер"
#property link      "https://traderblog.net/"
#property version   "1.00"
#property strict
 
//Мы объявляем и инициализируем целую внешнюю переменную x.
extern int x=10; //Каждый x тик будет выводиться цена Ask.
//Объявим целую переменную i, которая будет выполнять роль счетчика.
int i=1;
 
int OnInit()
{
   return(INIT_SUCCEEDED);
}
 
void OnDeinit(const int reason)
{
 
}
 
void OnTick()
{
   //Если счетчик кратен х (то есть остаток от деления равняется 0), советник выводит цену Ask
   if(i%x==0)
   {
      Alert("Цена Ask равна ",Ask," значение i равно ",i);
   }
   //i++ увеличивает значение i на единицу.
   i++;
 
}

При запуске советника появится всплывающее окно с параметрами, в этом случае в окне также будет вкладка «Входные параметры». Здесь вы найдете внешние переменные, которые вы можете изменить.

Для нашего советника мы увидим:

настройка внешней переменной

Когда мы запустим советник, мы увидим:

запуск советника

Внешние переменные могут относиться к переменным разного типа. Например, если у нас есть советники, которые отправляют электронные письма, у нас может быть внешняя переменная EmailTo типа string для указания адреса, куда нужно отправлять электронные письма.

Если мы добавим строку

extern string EmailTo="[email protected]"; // Отправить письмо на [email protected],

результат будет следующим:

внешняя строковая перменная

Переменные как константы

В некоторых программах вы можете захотеть использовать переменные со значением, которое не может быть изменено во время работы программы. Именно в этом случае вам помогут константы.

Константа – это переменная со значением, которое нельзя изменить во время работы программы.

Есть несколько причин, которые могут побудить вас использовать константы в ваших программах. Это зависит от вашей программы и выполняемой ею задачи. Если вы хотите убедиться, что значение переменной не изменится, объявите ее как константу. Как только переменная объявляется константой, ее уже нельзя изменить.

Для того, чтобы объявить переменную как константу, нам нужно добавить const перед объявлением переменной:

//+------------------------------------------------------------------+
//|                                                        Test1.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
 
   const int i=10; //i объявлена как переменная-константа и ей присвоено значение 10
 
   Print(i); // Команда вывести значение i в журнал
 
  }
//+------------------------------------------------------------------+

Если мы попытаемся изменить значение константы в коде, а затем попробуем его скомпилировать, мы получим ошибку:

//+------------------------------------------------------------------+
//|                                                        Test1.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
 
   const int i=10; //i объявлена как переменная-константа и ей присвоено значение 10
 
   i=20; // мы пытаемя присвоить i новое значение
 
   Print(i); // Команда вывести значение i в журнал
 
  }
//+------------------------------------------------------------------+

переменные в mql как константы

внешних переменных — Справка разработчика

Переключить навигацию

  • Средства разработки
    • Какие инструменты мне нужны?
    • Программные средства
      • Начните здесь
      • MPLAB® X IDE
        • Начните здесь
        • Установка
        • Введение в среду разработки MPLAB X
        • Миграция в MPLAB X IDE
          • Миграция из MPLAB IDE v8
          • Миграция от Атмел Студио
        • Конфигурация
        • плагинов
        • Интерфейс пользователя
        • проектов
        • Файлов
        • редактор
          • редактор
          • Интерфейс и Ярлыки
          • Основные задачи
          • Внешний вид
          • Динамическая обратная связь
          • Навигация
          • Поиск, замена и рефакторинг
          • Инструменты для повышения производительности
            • Инструменты для повышения производительности
            • Автоматическое форматирование кода
            • Список задач
            • Сравнение файлов (diff)
            • Создать документацию
        • Управление окнами
        • сочетаний клавиш
        • Отладка
        • Контроль версий
        • Автоматизация
          • Язык управления стимулами (SCL)
          • Отладчик командной строки
          • (MDB)
          • IDE Сценарии с Groovy
        • Устранение неисправностей
        • Работа вне MPLAB X IDE
        • Другие ресурсы
      • MPLAB Xpress
      • MPLAB IPE
      • C Программирование
      • Компиляторы
      • MPLAB® XC
        • Начните здесь
        • Компилятор
        • MPLAB® XC8
        • Компилятор
        • MPLAB XC16
        • Компилятор
        • MPLAB XC32
        • Компилятор
        • MPLAB XC32 ++
        • MPLAB код покрытия
      • Компилятор
      • IAR C / C ++
      • MPLAB Code Configurator (MCC)
      • MPLAB Harmony v2
      • MPLAB Harmony v3
      • Atmel® Studio IDE
      • Atmel START (ASF4)
      • Advanced Software Framework v3 (ASF3)
        • Начните здесь
        • ASF3 Tutorials
          • ASF Audio Sine Tone Tutorial
          • Интерфейсный ЖК-дисплей с учебным пособием по SAM L22 MCU
      • блоков устройств MPLAB® для Simulink®
      • Утилиты
      • FPGA Средства разработки
      • MPLAB® Mindi ™ Аналоговый симулятор
    • Аппаратные средства
      • Начните здесь
      • Сравнение аппаратных средств
      • Инструменты отладки и память устройства
      • Debug Executive
      • Демо-платы и стартовые наборы
      • MPLAB® REAL ICE ™ внутрисхемный эмулятор
      • SAM-ICE JTAG Эмулятор
      • Atmel® ICE In-Circuit Emulator
      • Power Debugger
      • MPLAB® ICD 3 In-Circuit Debugger
      • MPLAB® ICD 4 внутрисхемный отладчик
      • PICkit ™ 3 In-Circuit Debugger
      • MPLAB® PICkit ™ 4 In-Circuit Debugger
      • MPLAB® Snap
      • Универсальный программатор MPLAB PM3
      • Аксессуары
          Заголовки эмуляции
        • и пакеты расширения эмуляции
        • Пакеты расширения процессора
        • и заголовки отладки
          • Начните здесь
          • Обзор PEP
          • и заголовков отладки
          • Обязательный список заголовков отладки
            • Обязательные заголовки отладки Таблица
            • AC162050, AC162058
            • AC162052, AC162055, AC162056, AC162057
            • AC162053, AC162054
            • AC162059, AC162070, AC162096
            • AC162060
            • AC162061
            • AC162066
            • AC162083
            • AC244023, AC244024
            • AC244028
            • AC244045
            • AC244051, AC244052, AC244061
            • AC244062
          • Дополнительный список заголовков отладки
            • дополнительный список заголовков отладки — устройства PIC12 / 16
            • дополнительный список заголовков отладки — устройства PIC18
            • дополнительный список заголовков отладки — устройства PIC24
          • Отладочные целевые следы заголовка
          • Отладочные Соединения Заголовка
      • SEGGER J-Link
      • K2L Сетевые инструменты
      • Советы по разработке инструментов разработки
      • Ограничения отладки — микроконтроллеры PIC
      • Технические замечания (ETNs)
      • [[li]] chipKIT ™ Встроенные платформы
  • проектов
    • Начните здесь
    • Преобразование мощности
      • AN2039 Четырехканальный секвенсор питания PIC16F1XXX
    • 8-битные микроконтроллеры PIC®
    • 8-битные микроконтроллеры AVR®
    • 16-битных микроконтроллеров PIC®
    • 32-разрядных микроконтроллеров SAM
    • 32-битные микропроцессоры SAM
      • Разработка приложений SAM MPU с MPLAB X IDE
      • SAM MPU Примеры программных пакетов
    • Дополнительный контент планируется…
  • Продукты
    • 8-битные микроконтроллеры PIC
    • 8-битных микроконтроллеров AVR
      • Начните здесь
      • 8-битная структура микроконтроллера AVR®
      • 8-битная периферия AVR®
        • Осциллятор
        • USART
        • прерываний
        • Аналоговый компаратор и эталон напряжения
        • Таймер / Счетчики
        • Датчик внутренней температуры
        • Операция с низким энергопотреблением
        • Сбросить источники
      • Начало работы с микроконтроллерами AVR®
      • Использование микроконтроллеров AVR® с Atmel START
      • Дополнительный контент планируется…
    • 16-битных микроконтроллеров PIC и DSC DSC
.

Основы языка / Переменные / Входные переменные

Входной класс хранения определяет внешнюю переменную. Модификатор ввода указывается перед типом данных. Переменная с модификатором ввода не может быть изменена внутри mql5-программ, такие переменные доступны только для чтения. Значения входных переменных могут быть изменены только пользователем из окна свойств программы. Внешние переменные всегда повторно инициализируются непосредственно перед вызовом OnInit ().

Пример:

// — входные параметры
входных данных int MA_Period = 13;
input int MA_Shift = 0;
вход ENUM_MA_METHOD MA_Method = MODE_SMMA;

Входные переменные определяют входные параметры программы.Они доступны из окна свойств программы.

Set a value for an input parameter

Есть другой способ установить, как ваш входной параметр будет выглядеть на вкладке Inputs. Для этого поместите строковый комментарий после описания входного параметра в той же строке. Таким образом, вы можете сделать имена входных параметров более понятными для пользователей.

Пример:

// — входные параметры
input int InpMAPeriod = 13; // Период Сглаживание
входной int InpMAShift = 0; // Строка горизонтальный сдвиг
вход ENUM_MA_METHOD InpMAMethod = MODE_SMMA; // Метод сглаживания

Reasonable method to display input parameters

Примечание. Массивы и переменные сложных типов не могут выступать в качестве входных переменных.

Примечание. Длина строкового комментария для входных переменных не может превышать 63 символа.

Передача параметров при вызове пользовательских индикаторов из программ MQL5 #

Пользовательские индикаторы вызываются с помощью функции iCustom (). После имени пользовательского индикатора параметры должны идти в строгом соответствии с объявлением входных переменных этого пользовательского индикатора. Если указанные параметры меньше входных переменных, объявленных в вызываемом пользовательском индикаторе, пропущенные параметры заполняются значениями, указанными при объявлении переменных.

Если пользовательский индикатор использует функцию OnCalculate первого типа (т. Е. Индикатор рассчитывается с использованием того же массива данных), то одно из значений ENUM_APPLIED_PRICE или дескриптор другого индикатора следует использовать в качестве последнего параметра при вызове такого пользовательского показатель. Все параметры, соответствующие входным переменным, должны быть четко указаны.

перечисления в качестве входных параметров

В качестве входных переменных могут использоваться не только встроенные перечисления, предоставляемые в MQL5, но и определяемые пользователем переменные (входные параметры для программ mql5).Например, мы можем создать перечисление dayOfWeek, описывающее дни недели, и использовать входную переменную, чтобы указать конкретный день недели не в виде числа, а в более общем виде.

Пример:

#property script_show_inputs
// — день недели
enum dayOfWeek
{
S = 0, // воскресенье
M = 1, // понедельник
T = 2, // вторник
W = 3, // среда
Th = 4, // четверг
Fr = 5, // пятница,
St = 6, // суббота
};
// — входные параметры
input dayOfWeek swapday = W;

Чтобы пользователь мог выбрать необходимое значение в окне свойств во время запуска скрипта, мы используем команду препроцессора #property script_show_inputs.Запускаем скрипт и можем выбрать одно из значений перечисления dayOfWeek из списка. Запускаем скрипт EnumInInput и переходим на вкладку Inputs. По умолчанию значение swapday (день тройного начисления свопа) — среда (W = 3), но мы можем указать любое другое значение и использовать это значение для изменения операции программы.

Example of a custom enumeration as an input parameter

Количество возможных значений перечисления ограничено. Для выбора входного значения используется раскрывающийся список. Мнемонические имена членов перечисления используются для значений, отображаемых в списке.Если комментарий связан с мнемоническим именем, как показано в этом примере, вместо мнемонического имени используется содержимое комментария.

Каждое значение перечисления dayOfWeek имеет свое значение от 0 до 6, но в списке параметров будут отображаться комментарии, указанные для каждого значения. Это обеспечивает дополнительную гибкость для написания программ с четким описанием входных параметров.

Переменные с модификатором sinput #

Переменные с модификатором ввода позволяют не только устанавливать значения внешних параметров при запуске программ, но также необходимы при оптимизации торговых стратегий в тестере стратегий.Каждая входная переменная, исключая переменную строкового типа, может использоваться в оптимизации.

Иногда необходимо исключить некоторые внешние параметры программы из области всех проходов в тестере. Для таких случаев был введен модификатор памяти sinput. sinput обозначает объявление статической внешней переменной (sinput = статический ввод). Это означает, что следующая декларация в эксперте код

sinput int layer = 6; // Количество слоев

будет эквивалентно полной декларации

статический ввод int layer = 6; // Количество слоев

Переменная, объявленная с модификатором sinput, является входным параметром программы MQL5.Значение этого параметра можно изменить при запуске программы. Однако эта переменная не используется при оптимизации входных параметров. Другими словами, его значения не перечисляются при поиске наилучшего набора параметров, соответствующих заданному условию.

sinput parameter in the Strategy Tester

Показанный выше советник имеет 5 внешних параметров. «Количество слоев» объявляется как sinput и равно 6. Этот параметр нельзя изменить во время оптимизации торговой стратегии. Мы можем указать необходимое значение для его дальнейшего использования.Поля Start, Step и Stop недоступны для такой переменной.

Поэтому пользователи не смогут оптимизировать этот параметр после того, как мы укажем модификатор sinput для переменной. Другими словами, пользователи терминала не смогут устанавливать начальные и конечные значения для него в тестере стратегий для автоматического перечисления в указанном диапазоне во время оптимизации.

Однако есть одно исключение из этого правила: переменные sinput можно изменять в задачах оптимизации с помощью функции ParameterSetRange ().Эта функция была введена специально для программного управления доступными наборами значений для любой входной переменной, в том числе объявленной как статический вход (sinput). Функция ParameterGetRange () позволяет получать значения входных переменных при запуске оптимизации (в обработчике OnTesterInit ()) и сбрасывать значение шага изменения и диапазон, в пределах которого будут перечислены оптимизированные значения параметров.

Таким образом, объединение модификатора sinput и двух функций, работающих с входными параметрами, позволяет создать гибкие правила для настройки интервалов оптимизации входных параметров, которые зависят от значений других входных параметров.

Организация входных параметров #

Для удобства работы с MQL5-программами входные параметры можно разделить на именованные блоки с помощью ключевого слова group. Это позволяет визуально отделить некоторые параметры от других на основе встроенной в них логики.

входная группа «Название группы»
ввод int переменная1 = …
входная двойная переменная2 = …
входная двоякая переменная3 =…

После такого объявления все входные параметры визуально объединяются в указанную группу, что упрощает настройку параметров для пользователей MQL5 при запуске на графике или в тестере стратегий. Спецификация каждой группы действительна до появления новой декларации группы:

входная группа «Название группы № 1»
ввод int group1_var1 = …
входной двойной group1_var2 =…
входной двойной group1_var3 = …

входная группа «Название группы № 2»
входной int group2_var1 = …
входной двойной group2_var2 = …
входной двойной group2_var3 = …

Пример советника с блоком входов, разделенных по назначению:

входная группа «Сигнал»
входной int ExtBBPeriod = 20; // период Боллинджера
входной двойной ExtBBDeviation = 2.0; // отклонение
вход ENUM_TIMEFRAMES ExtSignalTF = PERIOD_M15; // BB таймфрейм

входная группа «Тренд»
входной int ExtMAPeriod = 13; // скользящее среднее значение периода
вход ENUM_TIMEFRAMES ExtTrendTF = PERIOD_M15; // MA таймфрейм

входная группа «ExitRules»
input bool ExtUseSL = true; // Использование StopLoss
input int Ext_SL_Points = 50; // StopLoss в пунктах
input bool ExtUseTP = false; // использование TakeProfit
input int Ext_TP_Points = 100; // TakeProfit в пунктах
input bool ExtUseTS = true; // использование трейлинг-стоп
input int Ext_TS_Points = 30; // Скользящий стоп в пунктах

входная группа «MoneyManagement»
sinput double ExtInitialLot = 0.1; // начальная стоимость лота
input bool ExtUseAutoLot = true; // автоматический расчет много

входная группа «Вспомогательные»
sinput int ExtMagicNumber = 123456; // EA Magic Number
sinput bool ExtDebugMessage = true; // печатаем отладочные сообщения

При запуске такого советника в тестере стратегий вы можете дважды щелкнуть имя группы, чтобы свернуть / развернуть блок ввода, а также установить флажок группы, чтобы выбрать все его параметры для оптимизации.

Arranging EA input parameters in the strategy tester

См. Также

iCustom, Перечисления, Свойства Программ

,

6,7 — Внешняя связь | Изучите C ++

В предыдущем уроке (6.6 — Внутренняя связь) мы обсудили, как внутренняя связь ограничивает использование идентификатора одним файлом. В этом уроке мы рассмотрим концепцию внешней связи .

Идентификатор с внешней связью можно увидеть и использовать как из файла, в котором он определен, так и из других файлов кода (через предварительную декларацию). В этом смысле идентификаторы с внешними связями являются действительно «глобальными» в том смысле, что их можно использовать в любом месте вашей программы!

Функции имеют внешнюю связь по умолчанию

В уроке 2.8 — Программы с несколькими файлами кода, вы узнали, что вы можете вызвать функцию, определенную в одном файле из другого файла. Это потому, что функции имеют внешнюю связь по умолчанию.

Для вызова функции, определенной в другом файле, вы должны поместить предварительное объявление для этой функции в любые другие файлы, желающие использовать функцию. Предварительное объявление сообщает компилятору о существовании функции, а компоновщик связывает вызовы функции с фактическим определением функции.

Вот пример:

a.cpp:

#include

void sayHi () // эта функция имеет внешнюю связь и может быть видна другим файлам

{

std :: cout << "Hi!";

}

main.cpp:

void sayHi (); // предварительное объявление для функции sayHi, делает sayHi доступным в этом файле

int main ()

{

sayHi (); // вызов функции, определенной в другом файле, компоновщик соединит этот вызов с определением функции

return 0;

}

Количество отпечатков вышеуказанной программы:

Здравствуй!
 

В вышеприведенном примере прямое объявление функции sayHi () в main.cpp позволяет main.cpp получить доступ к функции sayHi () , определенной в a.cpp . Прямое объявление удовлетворяет компилятору, и компоновщик может связать вызов функции с определением функции.

Если бы функция sayHi () имела вместо этого внутреннюю связь, компоновщик не сможет подключить вызов функции к определению функции, и в результате возникнет ошибка компоновщика.

Глобальные переменные с внешней связью

Глобальные переменные с внешней связью иногда называют внешними переменными.Чтобы сделать глобальную переменную внешней (и, следовательно, доступной для других файлов), мы можем использовать для этого ключевое слово extern :

int g_x {2}; // непостоянные глобальные переменные являются внешними по умолчанию

extern const int g_y {3}; // глобальные переменные const могут быть определены как внешние, делая их внешними

extern constexpr int g_z {3}; // глобалы constexpr могут быть определены как внешние, что делает их внешними (но это бесполезно, см. примечание в следующем разделе)

int main ()

{

return 0;

}

Неконстантные глобальные переменные являются внешними по умолчанию (при их использовании ключевое слово extern будет игнорироваться).

Переменные форвардные объявления через ключевое слово extern

Чтобы фактически использовать внешнюю глобальную переменную, которая была определена в другом файле, вы также должны поместить предварительное объявление для глобальной переменной в любые другие файлы, желающие использовать эту переменную. Для переменных создание прямого объявления также выполняется с помощью ключевого слова extern (без значения инициализации).

Вот пример использования прямого объявления переменной:

а.CPP:

// определения глобальных переменных

int g_x {2}; // непостоянные глобалы имеют внешнюю связь по умолчанию

extern const int g_y {3}; // этот экстерн дает g_y внешнюю связь

main.cpp:

#include

extern int g_x; // этот extern является предварительным объявлением переменной с именем g_x, которая определена где-то еще

extern const int g_y; // этот extern является предварительным объявлением константной переменной с именем g_y, которая определена где-то еще

int main ()

{

std :: cout << g_x; // печатает 2

return 0;

}

В приведенном выше примере a.cpp и main.cpp ссылаются на одну и ту же глобальную переменную с именем g_x . Таким образом, даже если g_x определено и инициализировано в a.cpp , мы можем использовать его значение в main.cpp через предварительное объявление g_x .

Обратите внимание, что ключевое слово extern имеет разные значения в разных контекстах. В некоторых контекстах extern означает «дать эту переменную внешнюю связь». В других контекстах extern означает «это предварительное объявление для внешней переменной, которая определена где-то еще».Да, это сбивает с толку, поэтому мы суммируем все эти способы использования в уроке 6.11 - Сфера охвата, продолжительность и сводка связей.

Если вы хотите определить неинициализированную неконстантную глобальную переменную, не используйте ключевое слово extern, в противном случае C ++ подумает, что вы пытаетесь сделать предварительное объявление для переменной.

Хотя переменным constexpr можно дать внешнее связывание через ключевое слово extern , они не могут быть объявлены форвардом, поэтому не имеет смысла давать им внешнее связывание.

Обратите внимание, что для объявлений пересылки функций не требуется ключевое слово extern - компилятор может определить, определяете ли вы новую функцию или делаете форвардную декларацию в зависимости от того, предоставили ли вы тело функции или нет. Прямые объявления переменных и нуждаются в ключевом слове extern , чтобы помочь отличить определения переменных от предварительных объявлений переменных (в остальном они выглядят идентичными):

// непостоянный

int g_x; // определение переменной (при желании может иметь инициализатор)

extern int g_x; // прямое объявление (без инициализатора)

// константа

extern const int g_y {1}; // определение переменной (const требует инициализаторов)

extern const int g_y; // предварительное объявление (без инициализатора)

Объем файла противглобальный охват

Термины «область действия файла» и «глобальная область действия», как правило, вызывают путаницу, и это отчасти связано с тем, как они используются в неформальной среде. Технически, в C ++ все глобальные переменные имеют «область видимости файла», и свойство связывания определяет, могут ли они использоваться в других файлах или нет.

Рассмотрим следующую программу:

global.cpp:

int g_x {2}; // внешняя связь по умолчанию

// здесь g_x выходит за рамки

основной.CPP:

extern int g_x; // прямое объявление для g_x - g_x может быть использовано за пределами этой точки в этом файле

int main ()

{

std :: cout << g_x; // следует напечатать 2

return 0;

}

// предварительная декларация для g_x здесь выходит за рамки

Переменная g_x имеет область действия файла в пределах global.cpp - его можно использовать от точки определения до конца файла, но его нельзя увидеть непосредственно за пределами global.cpp .

Внутри main.cpp предварительное объявление g_x также имеет область видимости файла - ее можно использовать от точки объявления до конца файла.

Однако, неофициально, термин «область действия файла» чаще применяется к глобальным переменным с внутренней связью, а «глобальная область» - к глобальным переменным с внешней связью (поскольку они могут использоваться во всей программе с соответствующими предварительными декларациями) ,

Проблема порядка инициализации глобальных переменных

Инициализация глобальных переменных происходит как часть запуска программы, перед выполнением основной функции . Это происходит в два этапа.

Первый этап называется статической инициализации . На этапе статической инициализации глобальные переменные с инициализаторами constexpr (включая литералы) инициализируются этими значениями. Кроме того, глобальные переменные без инициализаторов инициализируются нулями.

Второй этап называется динамической инициализации . Этот этап более сложный и нюансированный, но суть в том, что глобальные переменные с инициализаторами не-constexpr инициализируются.

Вот пример инициализатора не-constexpr:

int init ()

{

return 5;

}

int g_something {init ()}; // инициализация non-constexpr

Внутри одного файла глобальные переменные обычно инициализируются в порядке определения (из этого правила есть несколько исключений).Учитывая это, вы должны быть осторожны, чтобы переменные не зависели от значения инициализации других переменных, которые не будут инициализированы до позднего времени. Например:

1

2

3

4

5

6

7

8

9

10

11

12

13

140007

140007

140007

160007

160007

160007

160007

160007

160007

00

18

19

20

21

22

#include

int initx (); // предварительное объявление

int inity (); // предварительное объявление

int g_x {initx ()}; // сначала инициализируется g_x

int g_y {inity ()};

int initx ()

{

return g_y; // g_y не инициализируется, когда это называется

}

int inity ()

{

return 5;

}

int main ()

{

std :: cout << g_x << '' << g_y << '\ n';

}

Отпечатки:

0 5
 

Гораздо больше проблем, порядок инициализации для разных файлов не определен.Учитывая два файла, a.cpp и b.cpp , любой из них мог бы сначала инициализировать свои глобальные переменные. Это означает, что если переменные в a.cpp зависят от значений в b.cpp , есть 50% -ная вероятность, что эти переменные еще не будут инициализированы.

Динамическая инициализация глобальных переменных вызывает много проблем в C ++. Избегайте этого, когда это возможно.

Краткое резюме

// Определения внешних глобальных переменных:

int g_x; // определяет неинициализированную внешнюю глобальную переменную (по умолчанию инициализируется нулем)

extern const int g_x {1}; // определяет инициализированную внешнюю глобальную переменную const

extern constexpr int g_x {2}; // определяет инициализированную внешнюю глобальную переменную constexpr

// Форвардные объявления

extern int g_y; // прямое объявление для непостоянной глобальной переменной

extern const int g_y; // прямое объявление для глобальной переменной const

extern constexpr int g_y; // недопустимо: переменные constexpr не могут быть объявлены вперед

Мы предоставляем исчерпывающее резюме в уроке 6.11 - Область применения, продолжительность и сводка по связям.

Время викторины


В чем разница между областью действия, продолжительностью и связью переменной? Какого рода область действия, продолжительность и связь имеют глобальные переменные?

Показать решение

Область действия определяет, где переменная доступна. Длительность определяет, где переменная создается и уничтожается. Связывание определяет, может ли переменная быть экспортирована в другой файл или нет.

Глобальные переменные имеют глобальную область действия (она же область файла), что означает, что к ним можно получить доступ от точки объявления до конца файла, в котором они объявлены.

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

Глобальные переменные могут иметь внутреннюю или внешнюю связь через статические и внешние ключевые слова соответственно.


,
цель c - Внешняя переменная в Swift Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Публичные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним технические возможности карьерного роста
  5. Талант Нанимать технический талант
  6. реклама Связаться с разработчиками по всему миру
,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *