Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



Различают 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 ];

}

}

}

Как видно из синтаксиса и примера, блок – это составная инструкция, дополненная описаниями и определениями объектов программы. Следовательно, если содержимое {…} не включает описания и определения, то имеем составную инструкцию, если включает, то это блок.

Замечание. В языке С++ объявления могут находиться в произвольном месте блока. Единственное условие: объявление должно располагаться до 1-го использования перечисленных в нем объектов программы.


Basic

Здесь границы блока определяются началом и концом сложных инструкций таких, как: Sub Function Do While For If Select Case.

Процедуры

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

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

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

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

C

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

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

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

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

Здесь:

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

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

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

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

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

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

Basic

Вызов аналогичен языку C:

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

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

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

Употребление ключевого слова Call необязательно.

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

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

Basic: y=Math.Sqrt(x*x+z*z)+Math.Abs(x-z)

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

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

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

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

Определения процедур

C

Формат функции:

[< тип> ] < имя> ([< описания_параметров> ])< блок>

В блоке обязательно присутствие инструкции вида return < выражение>, значение которого возвращается в точку вызова. Его обычно называют возвращаемым значением функции. < тип> в заголовке функции указывает тип возвращаемого значения.Если тип значения в инструкции return не совпадает с типом в заголовке, то производится автоматическое преобразование его к типу заголовка. Если < тип> отсутствует, то транслятор подставляет int.

Примеры.

float MinFun( in t n, floa t x[ ]){

int i, j;

float MinValue;

................

return 2*MinValue+5;

}

Определение функции: Вызов:

double Max( double a, double b){ y=Max(cos(x), sin(x));

double y;

if (a> b){

y=a;

} else {

y=b;

}

return y;

}

Basic

Формат функции:

Function < имя_функции> ([< описания_параметров> ]) As < тип>

блок

End Function

Возвращаемое значение непосредственно присваивается имени функции, т.е. в блоке должна присутствовать хотя бы 1 инструкция вида < имя_функции> = < выражение> либо возвращается с помощью инструкции Return < выражение> .

Примеры.

Function Minfun(n As Integer, x( ) As Single ) As Single

Dim i, j As Integer, MinValue, y As Single

................................................................................

MinValue=2*y+5 | Return 2*y+5

End Function

Определение функции Вызов

Function Max(a As Double, b As Double ) As Double y=Max(Cos(x), Sin(x));

Dim y As Double

If a> b Then

y=a

Else

y=b

End If

Max=y

End Function

C

По понятиям языка Cподпрограмма – это функция, не возвращающая значения. Для указания типа возвращаемого значения в этом случае используется ключевое слово void (пустой, не возвращающий значение).


 

Пример.

void fun( ){

………….

[ return ; ]

........……

}

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

Пример(подпрограмма). Вызов:

/* Умножение матрицы на вектор */ Matrix(m, n, a, b, c);

void Matrix ( int l, // Число строк

int k, // Число столбцов

double p[ ][10], // Исходная матрица

double q[ ], // Исходный вектор

double s[ ] ){ // Вектор-результат

int i, j;

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

for (s[ i ]=j=0; j< k; j++){

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

}

}

} // End Matrix

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

int main([< параметры> ])< блок>

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

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

int main( ){

............

}

Basic

Формат подпрограммы:

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

..................................

Exit Sub|Return

..................................

End Sub

Для возвращения в точку вызова используются инструкции Exit Sub | Return. Если этопроизводится в конце процедуры, то их употреблять не нужно.

Пример (подпрограмма). Вызов:

' Умножение матрицы на вектор [ Call ] Matrix(m, n, a, b, c);

Sub Matrix( l As Integer, _

k As Integer, _

p(, ) As Double, _

q( ) As Double, _

s( ) As Double )

Dim i, j As Integer

For i=0 To l-1

s( i )=0

For j=0 To k-1

s( i )+=p( i, j )*q( j )

Next j

Next i

End Sub

В языке Basic операционная система передает управление либо объекту программы, называемому формой, либо главной процедуре Sub Main.


Поделиться:



Последнее изменение этой страницы: 2017-04-12; Просмотров: 443; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.048 с.)
Главная | Случайная страница | Обратная связь