![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
Структура сложной программы Любая программная единица включает следующие разделы: < Объявление программной единицы> {Раздел описаний} BEGIN { Раздел исполняемых операторов } END. {символ конца программной единицы} < Объявление программной единицы> - заголовок программы, процедуры или функции. Заголовок программы можно опускать, для процедур и функций наличие заголовка обязательно. < Cимвол конца программной единицы> - это символ точки для программы или символ "; " для процедуры или функции. В разделе описаний объявляются идентификаторы типов, объектов, констант, переменных, а также метки, процедуры и функции. Каждый блок определяется своим ключевым словом. Тогда структура программы будет иметь вид PROGRAM < имя программы>; USES < список библиотечных модулей>; LABEL < список меток в основном блоке>; CONST < определение констант>; TYPE < определение типов>; VAR < определение глобальных переменных>; < определение процедур> < определение функций>; BEGIN < основной блок программы> END. Директива USES выполняет подключение стандартных или написанных программистом модулей. Она должна обязательно стоять первой, если присутствует в программе. Например, строкой USES CRT; производится подключение модуля CRT. Модуль CRT содержит процедуры и функции для управления выводом текста на дисплей, звуковым генератором и чтением с клавиатуры. Блоки TYPE, CONST, VAR, LABEL в Паскале АВС могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз. В блоке LABEL перечисляются через запятую метки, используемые в программной единице. Метка может содержать числовое значение либо являться идентификатором. Например: LABEL 1, 400, M1, EPS; Если метка описана в этом блоке, но в программе не встретилась, то выдается сообщение об ошибке. Метки не должны повторяться. Блок меток может находиться в любом месте, их может быть несколько, но все метки должны быть определены до начала основной программы. При отсутствии меток блок исключается. Блок CONST описывает константы двух видов: CONST < имя1> = < константа1>; < имя2> = < константа2>; ... или CONST < имяК>: < тип> = < константаK>; < имяR>: < тип> = < константаR>; ... Например: CONST NI = 100; f = -NI; d: real = 7.65432; Блок TYPE содержит определения вводимых программистом нестандартных типов в следующих формах: TYPE < идентификатор> = (< список_компонентов> ); или TYPE < идентификатор> = < описание_типа>; Пример: TYPE FAMILY = (FATHER, MOTHER); Когда в Паскале используются только стандартные типы (например: INTEGER, REAL), этот блок опускается. Блок VAR описывает имена переменных, а также имена массивов: VAR A1, A2, ..., An: < тип1>; B1, B2, ..., Bn: < типК>; ... < имя массива>: ARRAY[диапазон] OF < тип>;
где буквами Ai, Bj указаны имена переменных, а < тип1>, < типК> – типы соответствующих переменных, [диапазон] указывает начальное и конечное значения индексов массива, < тип> задает тип элементов массива. Пример: VAR A, B, C: INTEGER; {объявлены три переменные целого типа} D, M: REAL; {объявлены две вещественные переменные} MASS1: ARRAY[1..10] OF REAL; {массив из 10 чисел} MASS2: ARRAY[-2..2] OF CHAR; {массив из пяти символов} В качестве значений диапазона могут использоваться идентификаторы любого порядкового типа, если их значения определены выше в разделе CONST. Подпрограммы. Процедуры и функции Относительно самостоятельные фрагменты программы, оформленные определенным образом и снабженные заголовком, называются подпрограммами. С помощью подпрограмм любая программа может быть разбита на ряд формально независимых друг от друга частей. Подпрограммы делятся на два вида: процедуры и функции. Результатом исполнения операторов, образующих тело функции, всегда является единственное значение, поэтому ее имя может быть использовано в выражениях наряду с переменными и константами. Если в программе используются процедуры или функции, то их описание должно предшествовать основному блоку программы. Описание состоит из заголовка и тела процедуры (функции), которое обычно следует за заголовком. Заголовок процедуры с параметрами описывается строкой PROCEDURE < имя > (< список формальных параметров > ); Список формальных параметров записывается в скобках и содержит перечень параметров с указанием их типов. Перед выходными параметрами, которые возвращают результат в основную программу, указывается ключевое слово VAR, например: PROCEDURE SUMMA(A1, A2: REAL; B1, B2: INTEGER; VAR S1, S2: REAL); Допускаются также процедуры без параметров: PROCEDURE < имя >; Они предполагают использование в подпрограмме только глобальных переменных, определенных в разделе описаний основной программы. За заголовком процедуры следует раздел описаний подпрограммы (меток, констант, типов, переменных, а также описаний вложенных процедур и функций) и блок операторов. Структура описания заголовка подпрограммы-функции имеет вид: FUNCTION < имя > (< список формальных параметров > ): < тип >; Формальные параметры записываются с указанием их типа, кроме того, указывается тип самой функции. За заголовком функции следует раздел описаний и блок выполняемых операторов. Пример FUNCTION STEP(x, y: REAL): REAL; VAR a, b: real; BEGIN ...... END; После описания блока процедуры или функции следует оператор END, за которым ставится точка с запятой. Отличие функции от процедуры состоит в том, что функция может возвращать одно значение в основную программу через свое имя, а процедура возвращает несколько значений через список параметров. Поэтому в разделе операторов функции должен быть оператор, который имени функции присваивает значение вида < имя функции> : = < выражение>; например: STEP: = < выражение вещественного типа>. Вызов подпрограмм производится указанием имени или имени со списком фактических параметров. Фактические параметры не указываются, если в подпрограмме используются только глобальные переменные и в заголовке программы отсутствует список формальных параметров. Если заголовок подпрограммы содержит формальные параметры, то при обращении к подпрограмме должен обязательно присутствовать список фактических параметров, которые записываются через запятую. Количество, тип и порядок перечисления фактических параметров должен обязательно соответствовать количеству, типу и порядку перечисления формальных параметров в описании подпрограммы. Структура подпрограммы-функции Описание блока подпрограммы-функции в общем виде имеет следующую структуру: FUNCTION < имя> ( < формальные параметры> ): < тип>; { раздел описаний: переменные, типы, метки} BEGIN { операторы функции } < имя> : = < выражение> {имени функции присваивается значение} END; Функция передает в вызывающую программу единственное значение, которое хранится под ее именем. В качестве переменных могут использоваться параметры-переменные и параметры-значения. < Тип > функции должен соответствовать значению, которое вычисляется в данной подпрограмме (типу результата). В вызывающую подпрограмму передается значение функции данного типа. Вызов функции в программе производится не обособленно, как в процедуре, а в выражении указывается имя функции со списком параметров.
7.4. Примеры и задания с подпрограммой-функцией Пример 1. Вычислить вторую и N-ю степени числа Х. PROGRAM FUNC; VAR X: REAL; N: INTEGER; FUNCTION STEPEN(M: INTEGER; A: REAL): REAL; VAR P: REAL; I: INTEGER; BEGIN P: = 1; FOR I: =1 TO M DO P: = P*A; STEPEN: = P; END; BEGIN READ(X, N); WRITELN(' X=', X, ' квадрат', STEPEN(2, X)); WRITELN(' X=', X, ' степень', STEPEN(N, X)); END. Пример 2. Даны три массива A (5), B (5), C (5). Найти среднее арифметическое значение наименьших элементов массивов. До написания программы разрабатывается СА главной программы (рис. 14, а) и СА для подпрограммы нахождения наименьшего элемента в любом массиве (рис. 14, б). Отлаженная программа решения задачи имеет следующий вид: Program lr8; type mass = array[1..5] of integer; const a: mass = ( 5, 2, 7, 1, 8 ); {заданы массивы констант} b: mass = ( 3, 4, 5, 6, 6 ); c: mass = ( 3, 8, 5, 2, 6 ); var n: integer; sr: real; FUNCTION minim(d: mass): integer; {заголовок функции} var i, min: integer; begin {начало блока операторов функции} min: =d[1]; for i: =2 to 5 do if d[i]< min then min: =d[i]; writeln('минимальный элемент равен ', min); minim: = min {имени функции присваивается значение} end; {конец блока функции} BEGIN {блок основной программы} sr: = (minim(a) + minim(b) + minim(c)) /3; {три обращения к функции} writeln(' sr = ', sr: 5: 2); END.
Задание 1 Написать и отладить программы для задач из пп. 3.7 и 6.4 с применением подпрограммы-функции с параметрами. Вычисление функции (или обработку массива) выполнить в подпрограмме, а ввод исходных данных и вывод результатов - в основной программе. Предусмотреть, по крайней мере, два обращения к функции с различными фактическими параметрами. Для отладки программ использовать средства системы Pascal ABC: пошаговое исполнение программы (трассировку) с контролем значений переменных в окне отладчика. Задание 2 1. По заданным вещественным массивам A [1..6], B [1..6] и C [1..6] вычислить
max(B+C) + max C в противном случае. 2. Даны два двумерных массива целых чисел А [1…5], B [1…5]. Напечатать квадрат того из них, в котором наименьший след (сумма диагональных элементов), считая, что такой массив один. 3. Определить координаты центра тяжести трех материальных точек с массами m1, m2, m3 и координатами (x1, y1), (x2, y2), (x3, y3) по формулам xc = (m1x1+m2x2+m3x3)/(m1+m2+m3), yc = (m1y1+m2y2+m3y3)/(m1+m2+m3). Вычисление координаты оформить функцией с параметрами. 4. Вычислить все медианы для каждого из трех треугольников по заданным в массивах A, B, C сторонам: ma = 0.5 5. Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и С [1..7]. Найти общую сумму положительных элементов в массивах. Нахождение суммы элементов в массиве оформить функцией. 6. Даны два двумерных массива целых чисел с размерами (4х5) элементов. Подсчитать количество отрицательных элементов в каждом из них. 7. Даны два одномерных массива целых чисел A [1..8] и B [1..8]. Найти сумму их максимальных элементов. Для нахождения максимального элемента в массиве использовать функцию. 8. Даны два двумерных массива целых чисел по (5х5) элементов каждый. Подсчитать произведение элементов главных диагоналей в каждом из них. 9. Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и С [1..7]. Найти среднее геометрическое значение положительных элементов для каждого. 10. Даны две матрицы целых чисел M [1..3, 0..1], К [1..3, 0..2]. Найти среднее арифметическое значение для каждой из них. 11. Даны три одномерных массива целых чисел A [1..6], B [1..8] и С [1..7]. Подсчитать количество неотрицательных элементов в каждом. 12. Даны две матрицы целых чисел S [1..3, 0..2], К [1..3, 0..2], в каждой из которых имеется по два одинаковых числа. Распечатать их значения. 13. Даны два одномерных массива целых чисел A [1..6] и B [1..8]. Вычислить значение Z = (min A[i] + min B[j]) / min (A[i]+B[j]). i j i, j 14. По заданным целым массивам X[0..7] и Y[8..15] вычислить
15. Дана матрица целых чисел D [1..6, 1..5]. Найти наименьшую из сумм неотрицательных элементов строк матрицы. Для вычисления суммы использовать подпрограмму (функцию). 16. Дана матрица целых чисел E [1..3, 1..5]. Используя функцию, найти среднее геометрическое значение для каждого столбца матрицы. 17. Дана матрица целых чисел F [1..4, 1..5]. Найти наименьшие значения элементов в каждой из строк матрицы с помощью функции.
19. Сформировать двумерный массив: 1 2 3 4 5 1 4 9 16 25 1 8 27 64 125 ... … Найти правило и оформить функцией вычисление любой строки. 20. Даны две матрицы целых чисел V [1..2, 1..3], W [1..3, 1..2]. Найти суммы элементов строк и столбцов в этих матрицах. |
Последнее изменение этой страницы: 2017-03-16; Просмотров: 489; Нарушение авторского права страницы