Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Открытые и закрытые процедуры

Логические операторы | Целые отрицательные числа. | Мантисса меньше единицы и первая значащая цифра — не ноль. | Работа с числами | Работа со строками | Преобразование строк в числа | Побитовые (поразрядные)операторы | Открытые параметры-массивы |


Читайте также:
  1. Quot;шат крии" - йоговские очистительные процедуры
  2. АДМИНИСТРАТИВНЫЕ ПРОЦЕДУРЫ
  3. Декларант (его права, обязанности и ответственность) Полномочия лиц выпускать в качестве декларанта при заявлении таможенной процедуры таможенного транзита
  4. Договоры и конституционные процедуры разрешения конфликтов между федерацией и ее субъектами
  5. Запуск процедуры слияния
  6. Значение электрокардиографии в современной медицине, основные принципы проведения процедуры снятия ЭКГ
  7. Зразы закрытые с хреном

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

 

Функция – это фрагмент исполняемого кода, который определен в JavaScript-программе или заранее предопределен в реализации JavaScript. Хотя функция определяется только один раз, JavaScript-программа может исполнять или вызывать ее сколько угодно. Функции могут передаваться аргументы, или параметры, определяющие значение или значения, для которых она должна выполнять вычисления; также функция может возвращать значение, представляющее собой результат этих вычислений. Реализации JavaScript предоставляют много предопределенных функций, таких как функция Math.sin(), возвращающая синус угла.

JavaScript-программы могут также определять собственные функции, содержащие, например, такой код:

 

function square(x) // Функция называется square. Она принимает один аргумент, x.

{ // Здесь начинается тело функции.

return x*x; // Функция возводит свой аргумент в квадрат и возвращает

// полученное значение.

} // Здесь функция заканчивается.

 

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

y = Math.sin(x);

y = square(x);

d = compute_distance(x1, y1, z1, x2, y2, z2);

move();

 

Формальные и фактические параметры

Чтобы отличать параметры подпрограммы, описанные в её заголовке и теле, от параметров, указываемых при вызове подпрограммы, первые принято называть формальными параметрами, вторые — фактическими параметрами. Так в приведенном выше примере функции x – это формальный параметр, а число 7, передаваемое в функцию square() – это фактический параметр.

y = square(7);

9. Массивы: одномерные и многомерные, статические и динамические – описание и внутреннее представление; параметры-массивы открытого типа в процедурах и функциях. Примеры.

Массив – это тип данных, содержащий (хранящий) пронумерованные значения.

Каждое пронумерованное значение называется элементом массива, а число, с ко_

торым связывается элемент, называется его индексом. Так как JavaScript – это

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

 

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

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

 

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

type
tarray = array [0..15] of integer;
var
a: tarray;

Динамические массивы появились с приходом delphi. Их основное удобство заключается в возможности изменения размера. Объявление динамического массива:

type
tdynarray = array of integer;
var
b: tdynarray;

 

Переменная динамического массива (в нашем примере b) представляет собой обычный указатель (4 байта). В отличие от статического массива, где переменная (в нашем примере А) является хранилищем данных массива и имеет размер, равный произведению количества элементов на их размер.
На что же указывает переменная динамического массива?
На некую область памяти, где лежат собственно данные массива. То есть фактически на первый элемент массива. Но самое интересное, что по отрицательному смещению (то есть перед данными) лежат еще 2 четырехбайтовых счетчика. По смещению -4 находится индикатор количества элементов в массиве, а по смещению -8 находится счетчик ссылок на массив. То есть размер динамического массива всегда на 8 байт больше того, что занимают его элементы. За исключением того случая, когда количество элементов равно 0. Тогда переменная динамического массива никуда не указывает и имеет значение nil.
Зачем нужен счетчик ссылок? Он позволяет иметь несколько переменных, ссылающихся на одни и те же данные в массиве и не заботиться об управлении памятью. Компилятор самостоятельно следит за доступом к данным и при уменьшении счетчика ссылок до 0 освобождает всю память массива. Пример:

 

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

 

 

(Примеры на языке С# (C sharp))

О работе с одномерными массивами нужно знать основные вещи. Это - объявление, инициализация, и доступ к элементам массива.

  1. объявление

<тип массива>[] <имя массива>;
int[] arr;
char[] ch;
double[] db1, db2;

Обратите внимание, что при объявлении массива в C sharp, квадратные скобки пишутся возле типа массива, а не его имени.

  1. инициализация

Существует несколько форм инициализации массива. Вот наглядная иллюстрация каждой из них:

int[] arr = new int[6]; // выделяем для массива область в 6 элементов

//сразу инициализировать элементы нам так же ни кто не запрещает
char[] ch = new int[6] {'a', 'b', 'c', 'd', 'e', 'f'};
char[] ch = new int[] {'a', 'b', 'c', 'd', 'e', 'f'};
char[] ch = {'a', 'b', 'c', 'd', 'e', 'f'};

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

  1. доступ к элементам

Доступ к элементам одномерного массива осуществляется по средствам индексатора. Причем вы можете, как получать значения элементов массива, так и задавать их:

int[] ob1 = new int[3] {8,9,3};
int zn1 = ob1[0];
int zn2 = ob1[1];
int zn3 = ob1[2];
ob1[0] = 22;

Не забывайте, что все элементы массива начинаются с индекса - 0. Его, к сожалению, ни как не поменять.


Дата добавления: 2015-08-20; просмотров: 111 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Побитовые операторы сдвига| Многомерные массивы

mybiblioteka.su - 2015-2024 год. (0.007 сек.)