Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_2_изд_испр.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

7.1.1. Распределение скаляров

C(C++)

Basic

Объем в байтах

char, bool

Byte, string (1 символ)

1

short

integer, boolean

2

int, long, float

long, single

4

double

double

8

Для некоторых трансляторов языка C, в том числе для Borland 3.1, длина значения типа int равна 2 байта.

7.1.2. Распределение массивов

О бъем памяти, занимаемый массивом, равен:

где S – длина одного элемента данного типа,

m – число измерений (размерность массива),

di – число элементов массива в i-м измерении (длина измерения),

hi – максимальное значение индекса в i-м измерении (верхняя граница),

li – минимальное значение индекса в i-м измерении (нижняя граница).

Пример.

dim aMatr(1 to 10, 1 to 10) as double V=(10-1+1)*(10-1+1)*8=800 байтов.

И ногда (особенно при отладке программы) требуется определить номер по порядку следования в памяти элемента многомерного массива по известным индексам (развернуть в одномерный). Он определяется по формуле:

где ni – значение i-го индекса.

Пример. Описание массива имеет вид: float array[10][6][5];

Адрес элемента массива array[2][3][1] равен: N=6*5*2+5*3+1+1=77

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

7.1.3. Статическое и динамическое распределение памяти

Различают 2 механизма распределения памяти.

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

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

7.2. Блоки

Конструкция присутствует только в языке C.

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

Формат:

{ <описания и определения> <выполняемые инструкции>}

Пример.

{int i, j; //Определения локальных данных

for(i=0; i<l; i++){

s[ i ]=0;

for(j=0; j<k; j++){

s[ i ] += p[ i ][ j ]*q[ j ];

}

}

}

Как видно из синтаксиса и примера, блок – это составная инструкция, дополненная описаниями и определениями объектов программы.

Блок – это минимальная структурная единица программы на языке C.

7.3. Процедуры

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

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

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

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

C

Формально в языке нет понятия подпрограмма, опредено лишь понятие функция. Однако последняя легко преобразуется в подпрограмму и для ее вызова применяется инструкция вида:

<имя_процедуры>([список_аргументов]);

Пример. Подпрограмма умножения матриц.

MultMatrix(a, b, c, m, l, n);

Здесь:

a – левая матрица,

b – правая матрица,

c – матрица-результат,

m – число строк левой матрицы и результата,

i – число столбцов левой=числу строк правой,

n – число столбцов правой и результата.

Basic

Имеется 2 инструкции вызова:

call <имя_подпрограммы>([список_аргументов]) или

<имя_подпрограммы> [список_аргументов]

Пример. Подпрограмма умножения матриц.

call MultMatrix(a, b, c, m, l, n ) или MultMatrix a, b, c, m,l, n

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

Пример вызова.

Basic: y=sqr(x*x+z*z)+abs(x-z)

C: y=sqrt(x*x+z*z)+fabs(x-z);

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

Пример. Функция printf(<управляющая_строка>[, <список_аргументов>);

<управляющая строка> является первым обязательным параметром.