Основы программирования (947332), страница 27
Текст из файла (страница 27)
Затем реализуют эти подпрограммы, используя заглушки вместо подпрограмм следующего уровня и т.д.Задания для самопроверкиЗадание 1. Дана матрица B(n,m), п, m < 20, m > п. Разработайте программу, которая приведет матрицу к квадратному виду В(п,п) путем последовательного вычеркивания из каждой строки матрицы ее m-n неположительных элементов. Если таковых нет или их не хватает для выравнивания матрицы, то вычеркнуть из начала строки столько элементов, сколько необходимо для завершения процесса. Вывести на печать исходную и сформированную матрицы.Задание 2. Дана символьная матрица SIM(n,m), n,m£20). Разработайте программу, которая вводит значения элементов матрицы с клавиатуры и упорядочивает матрицу, разместив строки в алфавитном порядке в соответствии с символами первогостолбца.
Для каждой строки матрицы SIM определить, каких букв в ней больше:гласных или согласных. Вывести на печать исходную и отсортированную матрицы,а также информацию о соотношении букв в каждой строке.155Часть I. Основы алгоритмизации и процедурное программирование5.3. МодулиПри разработке больших программ целесообразно часть подпрограмм идругих ресурсов, таких, как переменные, константы, описания типов, собирать вместе и компилировать отдельно от основной программы в виде библиотек ресурсов или модулей.Модуль - это автономно компилируемая коллекция программных ресурсов, предназначенная для использования другими модулями и программами.Все ресурсы модуля делятся на две группы: внешние - предназначенныедля использования другими программными единицами, и внутренние - рабочие ресурсы данного модуля.Структура модуля выглядит следующим образом:Unit <имя модуля>;Interface<интерфейсная секция>Implementation<секция реализации>[Begin<секция инициализации>7End,Имя модуля долэюно совпадать с именем фагта, в котором он содержится.
Результат компиляции модуля помещается в файл с тем же именем и расширением .tpu.Примечание. Среда языка Borland Pascal предусматривает три режима компиляции программы, использующей модули:• Compile - компилируется только основная программа, все модули должны быть предварительно откомпилированы в файлы <имя модуля>.1ри и размещены либо в текущем каталоге, либо в одном из каталогов, указанных как источники файлов .tpu в настройках среды(Options/Directories);• Маке - модули, для которых не обнаружены файлы .tpu, компилируются из соответствующих файлов .pas, которые должны находиться в текущем каталоге или в каталогах, указанных в настройках среды в качестве источников исходных файлов модулей;• Build - все ранее откомпилированные модули .tpu игнорируются и все модули компилируются из своих исходных файлов заново.В процессе отладки модулей целесообразно использовать режим Build, а при отладкепрофаммы - режим Compile.Интерфейсная сещия содержит объявление ресурсов (в том числе заголовки подпрограмм), к которым возможны обращения извне.Секция реализации содержит описание подпрограмм, объявленных в интерфейсной секции, и описание внутренних ресурсов модуля (локальных пе1565.
Модульное программированиеременных, типов, подпрограмм). Обращение к этим ресурсам возможнотолько из подпрограмм, описанных в том же модуле.CeKifUH UHuifuanwaifuu содержит операторы, которые выполняют некоторые действия, необходимые для нормальной работы процедур модуля (например, открывают файлы, инициализируют некоторые переменные и т.п.).Операторы секции инициализации выполняются один раз (при подключениимодуля) до начала выполнения основной программы. Эта секция в модулеможет отсутствовать.Программа, которая использует ресурсы нескольких модулей, должна вобласти описаний содержать спецификацию используемых модулей:Uses <имя модуля!>, <имя модуля2>, ...;В спецификации uses необходимо указывать только те модули, ресурсыкоторых данная программная единица (программа или модуль) используетнепосредственно.
Если подключаемый модуль использует другие модули, тоих подключение уже описано в нем. Секции инициализации подсоединяемых модулей выполняются в порядке их подключения.Пример 5.4. Разработать модуль, содержащий подпрограмму суммирования элементов массива.Разбиваем текст программы примера 5.2 на две части: подпрограммуразмещаем в модуле, а тестирующую программу оставляем в качестве основной программы. Так как все структурные типы параметров должны бытьпредварительно объявлены, описываем тип массива в модуле.{Модуль должен размещаться в файле Summa.pas}Unit Summa;Interface{объявление внешних ресурсов}Туре mas=array[L.]OJ of integer;Function sunt(b:mas;n:integer).'integer;Implementation .Function sum; {описание функции}Vars: integer; i: integer;begin 8:^=0;for i:=J to n do s:^s+b[i];sum:=s;end;End.Программа использует из модуля два ресурса: описание типа mas дляобъявления массива А и функцию Sum.Program ex;Uses Summa; {указание используемого модуля}Var a:mas; {используем ресурс mas}i,n: integer;157Часть L Основы алгоритмизации и процедурное программированиеBeginreadln(n);for i:=l to n do re ad(a[i]);ReadLn;WriteLn('CyMMa= \sum(a,n));{используем ресурс sum}EndBee ресурсы, объявленные в интерфейсноЯ части модуля, доступны восновной программе.
В случаях перекрытия имен, когда основная программа и подключенный модуль содержат ресурсы с одинаковыми именами, приобращении к ресурсам модуля используют составные имена<имя модуля>.<имя ресурса>.Например, в модуле описана переменная X:Unit А;InterfaceVarX:real; ...EndА в основной программе, которая использует этот модуль, объявлена собственная переменная X:Program ex;Uses А;Var X:integer;BeginX:=10;{переменная программы}A.X:=0.45; ...
{переменная модуля A}В виде модулей в Borland Pascal реализованы библиотеки подпрограмм,использование которых существенно упрощает разработку программ.Вместе с системой программирования на Borland Pascal поставляютсяследующие библиотеки.System ~ основная библиотека - содержит описания всех стандартныхпроцедур и функций, таких, как математические функции, функции преобразований, процедуры и функции обработки строк и т.п. Ресурсы данной библиотеки доступны любой программе без специального указания.Crt - библиотека управления экраном в текстовом режиме - содержитописание переменных, констант и процедур и функций, обеспечивающих управление экраном, клавиатурой и динамиком.Graph - библиотека управления экраном в графическом режиме - содержит описание переменных, констант и процедур и функций, обеспечивающих управление экраном в графическом режиме.1585.
Модульное программированиеDos - библиотека организации взаимодействия с операционной системой MS DOS - содержит описание процедур и функций, обеспечивающихобращение к функциям операционной системы.Поставляемые вместе с описанными модули ТигЬоЗ, Printer, Graph3,Overlay устарели и практически не используются.Примечание. Следует иметь в виду, что модули System, Crt, Dos, Printer объединены вфайл Turbo.tpl, а модуль Graph поставляется отдельно в виде файла Graph.tpu.При разработке собственных библиотек программисты стремятся создавать подпрограммы, имеющие широкую область применения, для чего используют специальные средства объявления параметров: открытые массивыи строки, нетипизированные параметры и параметры процедурного типа.5.4.
Открытые массивы и строкиПо правилам Borland Pascal размерность любого массива, передаваемого в качестве параметра, должна быть определена. Следовательно, без использования специальных средств применимость процедур и функций, имеющих параметры-массивы, существенно ограничивается. Чтобы снять ограничение размерности для параметров - одномерных массивов, можно использовать открытые массивы.Открытый массив - это конструкция описания типа массива без указания типа индексов, например:array of real;array of integer;Такое определение возможно только при описании формальных параметров подпрограммы. Применяя открытые массивы, следует помнить, чтоиндексы параметров, описанных как открытые массивы, всегда начинаютсяс нуля.
Реальное количество элементов фактического параметра массиваможно определить двумя способами. Во-первых - передать через дополнительные параметры, во-вторых- использовать специальные функции.^У/^Л('<идентификатор массива>) - для обычного массив, возвращаетверхнюю границу индекса массива, для открытого - максимальное значениеиндекса./,(?н'('<идентификатор массива>) - для обычного массива возвращаетнижнюю границу индекса массива, для открытого - ноль.Проиллюстрируем оба способа.Пример 5.5.
Вернемся к примеру 5.4. Пусть по-прежнему т ебуется разработать модуль, содержащий подпрограмму суммирования элементов массива, но при условии отсутствия ограничения размерности массива.159Часть I. Основы алгоритмизации и процедурное программированиеВ решении, предложенном в примере 5.4, размерность массива ограничена: функция может работать только с массивами типа mas. Описание параметра как открытого массива позволит разработать функцию, которую можно использовать для любого массива целых чисел. Реальное количество элементов массива в этом случае следует передавать через дополнительный параметр п.Unit Summa2;InterfaceFunction sum(b:array of integer; n: integer): integer;Implementation function sum;Var s: integer; i: integer;begin s:=0;{при вычислении суммы учитываем,что индексы изменяются от О до п-1,всего п элементов}for i:=0 to П'1 do s:=s+bfij;sum:=s;end;End.Теперь основная программа уже может описывать массив любой размерности и использовать из модуля только функцию определения суммы.Program ex;Uses Summa2;Var a:array[l..
10] of integer;i,n: integer;Begin ReadLn (n);for i:=I to n do Re ad(a[i]);ReadLn;WriteLnCCyMMa=\sum(a,n));End.Пример 5.6. Разработать программу суммирования элементов матрицыпо строкам, считая, что матрица заполнена целиком.Функцию суммирования элементов строки матрицы поместим в модуль.Поскольку она суммирует все элементы строки, для получения верхнего значения индекса будем использовать функцию High.Unit ЗиттаЗ;InterfaceFunction sum(b:array of integer): integer;1605. Модульное программированиеImplementationFunction sum;Var s: integer; i: integer;begin s:=0;for i:=0 to High(b) do s:-=s+b[i];sum:=s;end;End.Тестирующая программа для работы с индексами также может использовать функции Low и High, которые вернут соответственно -5 и -3.Program ex;Uses SummaS;Const a:array['5..'3,3,.