русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Параметры-переменные.


Дата добавления: 2014-11-28; просмотров: 609; Нарушение авторских прав


При вызове по ссылке в подпрограмме память под передаваемые переменные не отводится. В подпрограмму передается не значение переменной, а ссылка на место в памяти соответствующего фактического параметра. Подпрограмма, выполняющая некоторые действия с этой переменной, в действительности производит действия с соответствующим фактическим параметром, поэтому после выполнения процедуры , изменения, выполненные над этой переменной, сохраняются. Перед записью параметров-переменных в списке формальных параметров указывается ключевое слово VAR (действует до " ; "). Для вычисляемых результатов могут быть использованы только параметры-переменные. Формальным параметрам-переменным не могут соответствовать в качестве фактических значений константы или выражения ,так как они не имеют адреса для передачи.

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

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

FUNCTION SUM (VAR A: ARRAY OF INTEGER):INTEGER;

VAR S,I : INTEGER; BEGIN

 

S:=0; FOR I:=0 TO HIGH(A) DO S:=S+A[I]; SUM:=S;

 

END;

В основной программе такой массив может быть описан даже как Var A: array [ -2 .. 3] of integer; Фактические границы массива здесь значения не имеют. Важно только то, что количество элементов массива в данном случае равно 6.



Открытая строка может задаваться с помощью стандартного типа OPENSTRING и стандартного типа STRING с использованием дирек-тивы компилятора {$P+}.

Например,

PROCEDURE ZAP ( VAR ST : OPENSTRING; R: INTEGER );
или

{$P+}

PROCEDURE ZAP ( VAR ST : STRING; R: INTEGER );

В языке Турбо Паскаль можно устанавливать режим компиляции, при котором отключается контроль за совпадением длины формального и фактического параметра строки {$V- }. При передаче строки меньшего размера формальный параметр будет иметь ту же длину, что и параметр обращения; при передаче строки большего размера происходит усечение до максимального размера формального параметра. Контроль включает-ся только при передаче параметров-переменных , для параметров - значений длина не контролируется.

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

USES CRT; TYPE TMAS=ARRAY[1..100,1..100] OF WORD;
TVECT=ARRAY[1..100] OF WORD;

VAR A:TMAS;

V:TVECT; N,M,K:BYTE; I,J:BYTE; PROCEDURE FORM(VAR X:TMAS;) {матрица}
N,M:BYTE; {количество строк и столбцов} VAR R:TVECT; {результат - вектор} VAR K:BYTE); {длина полученного вектора}


VAR I,J,Z,S:BYTE;

F:BOOLEAN;


FUNCTION PROS(B:WORD):BOOLEAN;
{функция проверки простого числа}
VAR I:WORD;
BEGIN

IF B<>1 THEN PROS:=TRUE
ELSE PROS:=FALSE;

FOR I:=2 TO B DIV 2 DO

IF B MOD I = 0 THEN PROS:=FALSE;


END;
BEGIN

K:=0; FOR J:=1 TO M DO BEGIN
Z:=0; S:=0; F:=TRUE; FOR I:=1 TO N-1 DO BEGIN
IF X[I,J]>X[I+1,J] THEN Z:=Z+1; IF X[I,J]< X[I+1,J] THEN S:=S+1

END;
IF (Z = N-1) OR (S = N-1) THEN
BEGIN

FOR I:=1 TO N DO
IF NOT(PROS(X[I,J])) THEN F:=FALSE;

IF F THEN
BEGIN

K:=K+1; R[K]:=J

END;

END;

END;
END;
BEGIN

WRITELN('Введите N и M:'); READLN(N,M); WRITELN('Введите матрицу:'); FOR I:=1 TO N DO
FOR J:=1 TO M DO
READLN(A[I,J]);

FORM(A,N,M,V,K);
WRITELN('Результат:');
FOR I:=1 TO K DO

WRITE(V[I],' ');


<== предыдущая лекция | следующая лекция ==>
Формальные и фактические параметры. | Область действия имен.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.219 сек.