Шестаков В.С. Расчет на ЭВМ нефтегазового оборудования. Учебное пособие для МНГ-2015 (811778), страница 7
Текст из файла (страница 7)
Принято каждую самостоятельнуюфункцию программы оформлять отдельной подпрограммой, например, ввод данных, расчет суммы, поиск наименьшего значения и т. п.При делении на небольшие подпрограммы упрощается процесс отладки – при поиске ошибок необходимо будет просматривать только небольшой участок.Каждая процедура включает в себя:33 заголовок процедуры, состоящий из наименования и аргументов(иногда аргументы отсутствуют); раздел описания констант; раздел описания переменных; набор последовательных инструкций, обеспечивающих преобразование данных в соответствии с реализуемым алгоритмом.Разделы описания переменных и констант появляются, если впроцедуре дополнительно используются переменные и константы, которые не вынесены в раздел общих данных программы.
Необходимопомнить, что указание типа переменных в подпрограмме придает имстатус локальных. Через них никаким образом нельзя будет передавать значения в другие подпрограммы и получать значения из другихподпрограмм. Приоритет у локальных переменных выше по отношению к глобальным переменным, определенным в блоке общих данных.В Visual Basic можно применять процедуры двух типов Sub иFunction. Отличие их в том, что Function через свое имя возвращаетрезультат вычисления, а Sub - нет. Причем, чтобы функция возвращала значение, в ней должен быть оператор, который присваивает именифункции это значение.Передача параметров в процедуру.
Если для выполнения расчетов в процедуре необходимы какие-либо значения, то их можно передать двумя способами - через глобальные переменные и через аргументы. Последний способ предпочтительнее, так как улучшается отладка программ. При использовании передачи через аргументы в подпрограмме только один вход и выход, не требуется прослеживать передачу между процедурами через имена переменных.Аргументы указываются в скобках после имени процедуры ипредставляют собой имена переменных или массивов. После именипеременой можно указать ее тип после служебного слова As, например, Н As Single, М As Integer, или использовать тип по умолчаниюVariant.
Для массивов после имени вводятся пустые скобки ( ) и затемтип, например, XH( ) As Single. Допускается применение массивов варгументах без указания скобок и типа. В таком случае массив сформируется при вызове такой процедуры по типу передаваемого массивав строке вызова.По умолчанию аргументы передаются по ссылке. Это означает,что если происходит в процедуре изменение полученного через аргументы значения, то это изменение произойдет и в вызывающей про34цедуре. Для исключения передачи измененного значения перед соответствующим аргументом указывается ключевое слово ByRef.Примеры подпрограмм с передачей значений через аргументы(вызов этих подпрограмм приведен ниже).‘Функции вычисления площади‘ Процедура вычисления суммыFunction Pl(H,A)Pl=H*AEnd FunctionSub Sum(X,Sx)Sx=Sx+XEnd SubВыполнение процедур.
Запуск на выполнение процедуры: из окна редактора Visual Basic - поместить курсор внутрьпроцедуры и нажать <F5> или пунктом меню «Запуск» панели редактора (используется при отладке); воздействием мышью на кнопку управления, с которой связана процедура; вызовом из других процедур - указать имя процедуры и, если имеются, параметры.Вызов процедуры Sub из других подпрограмм.
Для вызова ее издругой процедуры можно использовать операторы двух типов безключевого слова Call и с этим словом: Call Sum(X,Sx) илиSum X, Sx.Вызов Function из других подпрограмм. Для вызова Function издругой процедуры можно использовать ее имя в выражениях или воператоре присваивания.Например, Sf=Pl(2,4)+Pl(x1,y1)-Pl(x2,y2) или S=Pl(x,y).Для реализации алгоритма решения задачи в процедурах применяются константы, переменные, массивы и управляющие конструкции - операторы. Типы данныхЯчейки памяти, отведенные под переменные и константы, могутсодержать данные различных типов (числовые, строковые, символьные и др.). Тип указывается с помощью служебных слов.Тип данныхByte (байт)Boolean (логический)Размер,байт1Диапазон значений2True или False35От 0 до 255.Integer (целое)2-32 768 до 32 767Long (длинное целое)4Single (с плавающей точкой)4-2 147 483 648 ..2 147 483 647-3,4 E38 до 3,40 E38Double (с плавающей точкой двойной точности)Currency (денежный)8-1,798 E3081,798 E3088Date (даты и время)8- 22 337 203 685 477,5808922 337 203 685 477,5807.От 1 января 100 г.
до31 декабря 9999 г.Любой указатель объектаОт 0 до 2 миллиардовObject (объект)String (строка)String(строка постоянной длины)Variant (числовые подтипы)Variant (строковые подтипы)410+длинастрокиДлинастрокиОт 1 до 6540016 байтАналогично Double22 байт +длинастрокиКак для строки (String) переменной длины Явное и неявное описание констант и переменных.Инструкция Option ExplicitРассмотрим, что же такое описание переменных и для чего ононужно. Все вычисления в ЭВМ выполняются в оперативной памяти.Память состоит из ячеек размером 1 байт.
Эта ячейка может хранитьодин символ (например, букву) или число от 0 до 256. Для хранениябольших значений необходимо объединить несколько начальных 1байтовых ячеек в одну. Для того чтобы ячейки памяти можно былоиспользовать в программе, им необходимо присвоить какое-либо наименование. Это наименование можно будет использовать в программе в выражениях. Такое формирование ячеек и снабжение их именамии происходит при описании переменных или констант. Размер объединенной ячейки будет определяться типом данных. Имя переменнойдолжно начинаться с буквы и может содержать до 64 символов (букви цифр, буквы русского алфавита также можно применять), в именахне допускаются пробелы.36В языке Visual Basic переменную можно описывать неявно, просто используя ее в инструкции присвоения.
Все неявно описанные переменные имеют тип Variant. Переменные типа Variant занимаютбольший объем памяти, чем переменные других типов. Программабудет более эффективной, если переменные явно описаны с определенным типом данных. Явное описание всех переменных уменьшаетвероятность конфликтов имен и ошибок, связанных с опечатками.
Необходимо помнить, что использование неявного описания не позволитпередать данные между подпрограммами через имена переменных,даже если в подпрограммах используется одно и то же имя переменной.Например, в программе имеются процедуры ввода и расчета. Прииспользовании неявного описания при вызове процедурыРасчет получим ошибку деления на нуль, так как в этом случае изпроцедуры Ввод не передадутся значения Nc и Mc.SUB Ввод()Nc=Workhseets("Лист1").Range("D4")Mc=Workhseets("Лист1").Range("D5")EndSub' Процедура ввода' ввод Nc' ввод McSUB Расчет() ' Процедура расчетаDs=Nc/Mc' ВычислениеЕndSubДля запрещения использования неявного описания первой строкойпрограммногомодулядолжнабытьинструкцияOption Explicit. В этом случае, при попытке использования неописанного или неверно используемого имени переменной, возникает ошибка во время компиляции.При явном описании константы или переменной перед именемуказывается область ее видимости, а после имени – тип. Области видимости переменных и константПод видимостью переменной понимается, может ли передаватьсячерез нее значение между процедурами, т.
е. будет ли переменная вточке ее использования иметь значение, если это значение введено впеременную в другой процедуре. Для указания области видимости используются ключевые слова Dim, Public, Private.Переменные и константы могут быть явно описаны в процедурахили в общем блоке описания, в зависимости от этого изменяется ихвидимость, как это показано в таблице.37КлючевоесловоDimDimPublicPrivateРасположение инструкцииописанияВ блоке общих данных модуляВнутри процедурыВ блоке общих данных модуляВ блоке общих данных модуляВидимостьВо всех процедурах данногомодуляТолько в данной процедуреВо всех процедурах всех модулейВо всех процедурах данногомодуля Ссылка на типы при явном описании переменныхи массивовПри описании переменных указывается один из приведенныхвыше типов данных.