Главная » Просмотр файлов » Visual Basic_учебник

Visual Basic_учебник (1108585), страница 13

Файл №1108585 Visual Basic_учебник (Учебник по Visual Basic) 13 страницаVisual Basic_учебник (1108585) страница 132019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 13)

Это предложение должно обязательноприсутствовать внутри функции и соответствовать синтаксическомуправилуReturn <выражение>Очевидно, что тип значения, вычисляемого выражением, должен соответствовать типу результата, указанному в предложении Function.Вызов подпрограмм и функцийСамо по себе описание подпрограммы или функции не вызывает исполнения составляющего их алгоритма 1 . Исполнение тела подпрограмм и функций происходит лишь при их вызове, когда указываютсяфактические аргументы.Для вызова подпрограммы предназначено отдельное предложение соследующим синтаксисом:[ Call ] <имя подпрограммы> ( [ <аргумент 1> _[ , <аргумент 2> ]… ] )Слово Call необязательно и обычно его не ставят.

Оно осталось в синтаксисе для совместимости с предыдущими версиями языка VB. Между аргументами, указанными при вызове, и параметрами, перечисленными в описании подпрограммы, должно быть взаимно однозначноесоответствие.1Исключением можно считать лишь «стартовую» подпрограмму. Все исполнение программы на VB состоит в вызове исполняющей системой подпрограммы или функции с именем Main.93Исполнение предложения вызова подпрограммы начинается с присвоения начальных значений параметрам.

Первый параметр подпрограммы получает значение, указанное в качестве первого аргумента,второй – второго и т.д. Только после этого запускается алгоритм, составляющий тело подпрограммы.Фактически, мы с вами уже много раз использовали предложение вызова подпрограммы, например, в строках Console.ReadLine() имяConsole.ReadLine обозначает имя подпрограммы, определенной висполняющей системе.Вызов функции является частью вычисляемого выражения. Записьимени функции и списка аргументов в скобках в составе выраженияприводит к вызову алгоритма функции в процессе вычисления выражения и использованию возвращенного функцией результата для выполнения дальнейших операций, составляющих выражение. Например, выражение Fa <> f(a) Or Fb <> f(b) в приведенной вышепрограмме, фактически, вычисляется следующим образом (следите потексту программы на стр.

89). Вначале производится сравнение, стоящее слева от оператора Or. Параметр x функции f получает значение,равное текущему значению переменной a, и вызывается алгоритм, составляющий функцию. Для возвращенного значения (в нашем примерепросто вычисленное значение выражения в предложении Return) будет выполнена операция сравнения на неравенство с текущим значением переменной Fa. Аналогично производится сравнение справа отOr.

Параметру x присваивается текущее значение b, вызывается функция и возвращенное значение сравнивается с Fb. В завершение вычислений, по правилам работы Or, если результатом двух сравнений оказалось значение False, то и результат всего выражения - False. Иначерезультатом является значение True.94Параметры и переменныеВ программах, включающих несколько подпрограмм и функций, важную роль играет область действия переменных1. Область действияпараметра – это всегда соответствующая подпрограмма или функция.Это означает, что имя параметра можно использовать в любом предложении внутри подпрограммы или функции, но оно недоступно вдругих подпрограммах и функциях. То же относится к обычным локальным переменным, то есть переменным, описанным внутри подпрограммы или функции.

Область действия переменной начинаетсяпредложением описания переменной и простирается до конца функции или подпрограммы. Например, в программе на странице 89 впредложениях внутри функции f можно использовать имя параметраx, но нельзя использовать имена переменных a, b, c. Наоборот, внутриподпрограммы Main будет ошибкой напрямую обратиться по имени xк параметру функции.Переменные могут иметь еще более узкую область действия, если ониописаны во вложенном блоке операторов.

Мы уже подробно обсуждали этот случай для оператора For … Next (см. стр. 38). Приведемтакой пример:If True ThenDim hidden As Integer = 1End IfConsole.WriteLine(hidden)Этот фрагмент содержит ошибку: имя hidden нельзя использовать вкачестве аргумента WriteLine, так как область действия этой переменной простирается лишь от If до End If.1Понятия области действия и области видимости становятся еще сложнее вслучае использования классов. Здесь же мы ограничимся лишь набором правил, достаточных для составления программы из нескольких модулей.95Таким образом, имена параметров и локальных переменных, определенных в разных подпрограммах и функциях, никак не связаны междусобой. Имена могут совпадать, но будут обозначать при этом разныеобъекты.

Иногда использование одних и тех же имен в несколькихфункциях помогает сделать текст даже более ясным. Например, вофрагментеFunction Sinh(ByVal x As Double) As DoubleReturn (Math.Exp(x) - Math.Exp(-x)) / 2End FunctionFunction Cosh(ByVal x As Double) As DoubleReturn (Math.Exp(x) + Math.Exp(-x)) / 2End Functionобозначение параметров функций одним и тем же именем никакойпутаницы не вызывает. Для контраста рассмотрите такой абсолютноправильный с формальной точки зрения фрагмент:Function Diff(ByVal a As Double, _ByVal b As Double) As DoubleReturn a - bEnd FunctionSub Main()Dim a As Double = 2Dim b As Double = 1Console.WriteLine(Diff(b, a))End SubЗдесь для того, чтобы понять, почему в результате вычисления a - bполучится минус один, а не плюс один, уже требуется немалое интеллектуальное усилие.Переменные, описанные вне подпрограммы или функции, становятсяпеременными модуля.

Переменные модуля доступны для использования в любой подпрограмме или функции модуля. Если, конечно, в96данной подпрограмме или функции имя переменной модуля не замаскировано локальной переменной. ПрограммаDim line As String = "переменная модуля"Sub Main()Dim line As String = "локальная переменная"Console.WriteLine(line)End Subнапечатает строку локальная переменная.Во всех случаях, когда это возможно, в программах на VB следует максимально использовать локальные переменные и передавать значенияиз одной подпрограммы в другую через параметры, аргументы и возвращаемые значения. Другим механизмом передачи значений является использование общих переменных модуля. К нему обычно прибегают лишь тогда, когда у значительного числа подпрограмм или функций оказывается большой набор одинаковых параметров.

Но существует еще и третий, в некотором смысле промежуточный механизм передачи информации – параметры, передаваемые по ссылке.Предположим, мы хотим оформить в виде подпрограммы, удобнойдля многократного применения, алгоритм поиска коэффициентов линейной регрессии и (подробная постановка задачи и пример программы, не использующей подпрограмм, приведены в главе 6). Здесьсложно воспользоваться функцией: необходимо вернуть не единственное значение, а сразу два.

Вот как мог бы выглядеть заголовок описания соответствующей подпрограммы и ее вызов с конкретными аргументами:97Sub LinEst(ByValByValByRefByRef'...End SubArgument() As Double, _Value() As Double, _Declination As Double, _Intersect As Double)Sub Main()Dim N As Integer' ... считывание NDim x(N) As DoubleDim y(N) As Double' ... считывание x и yDim a As DoubleDim b As DoubleLinEst(x, y, a, b)Console.WriteLine("{0} {1}", a, b)End SubПодпрограмма LinEst определена с четырьмя параметрами. Первыедва передают входную информацию для работы алгоритма – это двамассива чисел типа Double, содержащие значения абсцисс и ординатизмеренных значений.

А вот определение двух последних параметровнеобычно – оно начинается со слова ByRef. Это и есть параметры, передаваемые по ссылке.В качестве аргументов, соответствующих таким параметрам, необходимо указать именно переменную. Потому что в момент вызова подпрограммы параметр не просто получит начальное значение. Большетого, сама указанная в качестве аргумента переменная будет подставлена вместо параметра. Предложения подпрограммы, меняющие значения параметра будут, фактически, менять значение переменной.Проиллюстрируем сказанное схемой на рис.

10.98ByVal X3.1415ByRef XDim A3.1415Dim A3.1415Рис. 10 Инициализация параметра X по аргументу A в момент вызова подпрограммыили функции. Передача параметра по значению (слева) и по ссылке (справа)И переменная, и параметр представляют собой ячейку памяти, обозначаемую именем. Обычная передача параметра (называемая также передача параметра по значению) состоит в копировании значения аргумента в ячейку, соответствующую параметру. Передача параметра поссылке – это передача адреса ячейки памяти.РекурсияОбычная передача параметра по значению имеет еще одно существенное преимущество.

Она позволяет осуществлять рекурсивный вызов функции, когда функция в качестве одного из этапов вычислительного алгоритма обращается к себе самой.Прежде всего, отметим, что передаваемые по значению параметры илокальные переменные имеют не только ограниченную область действия, но и ограниченное «время жизни». Пока функция или подпрограмма не работает, память под эти ячейки не зарезервирована. Но вмомент вызова создается экземпляр контекста функции или подпрограммы, включающий, в частности и память для значений параметров99и локальных переменных. При выходе из подпрограммы или функцииэтот контекст уничтожается.

При повторном вызове создается снова.Теперь представьте себе, что в одном из выражений, вычисляющихзначение, функция обращается к себе самой. Разберем простой классический пример.Function Factorial(ByVal N As Integer) As IntegerIf N = 0 ThenReturn 1ElseReturn N * Factorial(N - 1)End IfEnd FunctionФункция Factorial имеет один параметр типа Integer и возвращает результат типа Integer.

Как же вычисляется этот результат? Алгоритм включает предложение If … End If. Если в качестве аргумента указан 0, то выполняется предложение Return 1, возвращающееединицу в качестве значения функции. А вот в ином случае функцияFactorial вызывает саму себя, но от значения аргумента, на единицуменьшего. Возвращенный при этом результат будет умножен на N ипроизведение вернется в качестве результата вычисления функции.Давайте подробнее проследим, что будет происходить при исполнении в программе строкиConsole.WriteLine(Factorial(3))Вначале будет создан контекст исполнения функции Factorial, в котором параметр получит значение 3. Обозначим этот контекст какFactorial(3). В процессе вычисления выяснится, что значение параметра не равно нулю, поэтому функция вызовет саму себя, указав3 − 1 = 2 в качестве параметра. В процессе этого вызова будет созданновый контекст исполнения, в котором значение параметра равно100двум: Factorial(2).

Характеристики

Тип файла
PDF-файл
Размер
1,35 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее