Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Статическое и динамическое распределение памяти
Различают 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; Просмотров: 534; Нарушение авторского права страницы