Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Формальные параметры-массивы без указания границСодержание книги
Поиск на нашем сайте В части II приводились примеры подпрограмм с параметрами-массивами. Тип массивов объявлялся до описания подпрограмм в разделе типов, причем размеры выбирались по максимальной длине фактических массивов, используемых в данной задаче. Такой подход, несомненно, имеет два недостатка: во-первых, теряется универсальность подпрограммы, а, во-вторых, память по фактические массивы объявляется с избытком. В рассматриваемых версиях Паскаля допускается в списке формальных параметров использовать конструкцию Array of тип без указания границ массивов. Такие массивы называются открытыми. Соответствующим фактическим параметром может быть как динамический, так и статический массив произвольного размера. Открытые массивы могут быть только одномерными, но их компоненты могут иметь сложный тип. Нумеруются элементы открытых массивов начиная с нуля. При работе с открытыми массивами, наряду с функциями High, Low, Length, может быть полезна функция Пример 1. Приведенная программа вычисляет максимальные значения элементов двух одномерных массивов. Подпрограммы ввода и обработки используют открытые массивы. program Project1; Var A:Array[1..5] of real; B:Array[1..8] of real; Procedure masin(c:char; Var A:array of real); Var i:integer; begin writeln('input vector',c,' size of ',Length(A)); for i:=Low(A) to High(a)do read(A[i]); readln; end{masin}; Function max(Var A:array of real):real; Var i:integer;mx:real; begin mx:=a[Low(A)]; for i:=Low(A)+1 to High(A) do if mx<A[i]then mx:=A[i]; max:=mx end{max}; begin masin('A',A); masin('B',B); writeln('maxa=',max(A),' maxb=',max(b)); readln end. Пример 2. В отличие от примера 1, приведенная программа позволяет обрабатывать не все элементы массивов (в соответствии с описанием), а только совокупность первых элементов массивов, число которых задается вводом. Эта возможность обеспечивается применением функции Slice. program Project2; Var A:Array[1..10] of real; B:Array[1..10] of real; nA,nB:integer; Procedure masin(c:char; Var A:array of real); Var i:integer; begin writeln('input vector',c,' size of ',Length(A)); for i:=Low(A) to High(a)do read(A[i]); readln; end{masin}; Function max(Var A:array of real):real; Var i:integer;mx:real; begin mx:=a[0]; for i:=Low(A)+1 to High(A) do if mx<A[i]then mx:=A[i]; max:=mx end{max}; begin writeln('Input number of components of array A'); readln(nA); masin('A',Slice(A,nA)); writeln('Input number of components of array B'); readln(nB); masin('B',Slice(B,nB)); writeln('maxa=',max(Slice(A,nA)),' maxb=',max(Slice(B,nB))); readln end. Пример 3. Этот пример показывает, как использовать подпрограммы с формальными параметрами, являющимися открытыми массивами, для обработки динамических матриц. Программа вычисляет и выводит сумму элементов каждой из двух матриц. Размеры матриц задаются вводом. На значения размеров не накладывается никаких ограничений. program Project3; Type str=array of real;{тип строки матрицы – динамический массив} Var nA,mA,nB,mb:integer; A,B:array of str; Function Sum(n,m:integer; Var a:array of str):real; Var s:real; i,j:integer; Begin s:=0; for i:=0 to n-1 do for j:=0 to m-1 do s:=s+a[i][j]; sum:=s End {Sum}; Procedure InMatr(n,m:integer; c:char;Var A:array of str); Var i,j:integer; Begin writeln('input matrix ', c, ' size of ', n, '*', m); for i:=0 to n-1 do begin SetLength(a[i],m); for j:=0 to m-1 do read(a[i][j]); end; readln; End; begin writeln ('Input sizes of matrix A'); readln (nA,mA); SetLength(A,nA); InMatr(nA,mA,'A',A); writeln ('Input sizes of matrix B'); readln (nB,mB); SetLength(B,nB); InMatr(nB,mB,'B',B); writeln('sumA=',Sum(nA,mA,A):6:1,' sumB=',Sum(nB,mB,B):6:1); readln; end. Приложение 1. Краткая инструкция по работе в среде · Вызов среды: bp (turbo) (или указать полное имя файла bp.exe (turbo.exe)); директория, из которой вызвали среду, будет считаться текущей, т. е. из нее будут браться (по умолчанию) и в ней сохраняться программы. · Изменение текущей директории: гл.меню/FILE/Change Dir. · · Создание нового файла: главное меню/FILE/NEW; после этого в окне среды можно набирать текст новой программы. · Сохранение файла: гл.меню/FILE/SAVE или SAVE AS (под другим именем) · Открытие ранее созданного файла: главное меню/FILE/OPEN · Трансляция программы: Compile/Compile Запуск программы на выполнение: Главное меню/RUN/RUN Просмотр результатов: ALT-F5 Переход в окно с нужным номером: ALT-№окна или с помощью пункта главное меню/ WINDOW или мышью. Просмотр каталога:File/Open, в качестве имени файла ввести имя_каталога\*.* Отладка программы: Организации трассировки программы: F8 - без захода в процедуры; F7 - с заходом в процедуры; F4 – запустить программу до места, указанного курсором. Просмотр значений переменных в ходе трассировки: Ctrl-F4 или Ctrl-F7. Работа с точками прерывания: главное меню/DEBUG. Выход из среды: File/EXIt или Alt-X. Внимание! Путь к файлам модулей должен быть указан в пункте меню OPTIONS/DIRECTORIES/UNIT DIRECTORIES
|
||
|
Последнее изменение этой страницы: 2017-02-07; просмотров: 273; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.006 с.) |