Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_бакалавры_информатика _вариант для печати.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.96 Mб
Скачать

Контрольные вопросы для самоподготовки студентов

  1. Что такое массив?

  2. Что понимается под размерностью массива?

  3. Что понимается под размером массива?

  4. Каким оператором выполняется объявление массива в программе?

  5. Как описать одномерный массив?

  6. Как описать двумерный массив?

  7. Объяснить назначение оператора OptionBase.

  8. Как обратиться к элементу одномерного массива?

  9. Как обратиться к элементу двумерного массива?

  10. Как организовать ввод/вывод одномерного массива?

  11. Как организовать ввод/вывод двумерного массива?

Ссылки на литературные источники, приведенные в рабочей программе дисциплины

  1. Информатика. Базовый курс. 2-е издание/Под. Ред. С.В. Симоновича. - СПб.:Питер, 2008.-640 с.

  2. Информатика. Моделирование.- Волгоград: НОУ ВПО ВНБ, 2009.- Саратов: Издательство «Вузовское образование», 2013.- 143 с. (электронный ресурс) режим доступа http://www.iprgookshop.ru/11320.html

  3. Практикум по курсу “Алгоритмизация и программирование”. Часть 1: Учебное пособие / А.А. Андрианова, Т.М. Мухтарова. - Казань: Казанский государственный университет, 2008. – 95 с. (электронный ресурс) режим доступа http://window.edu.ru/resource/951/79951/files/Programming1.pdf

  4. Основы алгоритмизации и программирования: учеб. пособие / Т.А. Жданова, Ю.С. Бузыкова. – Хабаровск: Изд-во Тихоокеан. гос.ун-та, 2011. – 56 с. (электронный ресурс) режим доступа http://window.edu.ru/resource/402/77402/files/alg_prog.pdf

  5. Аляев Ю.А., Козлов О.А. Алгоритмизация и языки программирования Pascal, C++, VisualBasic. – М.: Финансы и статистика, 2002. – 320 с.

  6. Работа с массивами в языке QBASIC: Методические указания для прак. занятий/Сост. Г.А. Фролова. - Егорьевск: - ЕТИ ФГБОУ ВПО МГТУ "СТАНКИН", 2013.-24 с.(электрон. библиотека ЕТИ)

Лекция № 9Тема «Создание процедур и функций на языке qbasic»

План лекции

  1. Понятие подпрограммы.

  2. Функции, определяемые программистом.

  3. Процедуры.

  4. Передача параметров по имени и по значению.

  5. Локальные переменные.

  6. Оператор Declare.

Понятие подпрограммы

При создании программы ее очень удобно разбивать на небольшие независимые модули, выполняющие законченное логическое действие, например, решающее квадратное уравнение или наибольший элемент в массиве, а по окончании работы передающие управление обратно в главную программу. Если структура модуля продумана хорошо, то его потом можно повторно использовать в других приложениях, используя готовые возможности.

Такие модули в QB можно организовать двумя способами – в виде функций или процедур (и те и другие имеют общее название: подпрограммы).Отличие функций от процедур только в том, что функция в результате своей работы возвращает программе некоторое значение допустимого типа, а процедура просто выполняет последовательность операторов.

Функции, определяемые программистом

В QB довольно много готовых (стандартных) функций, которые бывают нужны для решения часто встречающихся задач. Это всевозможные математические функции, функции обработки строк. Чтобы передать функции значения, которые она должна обработать, эти значения (они называются параметрами, или аргументами) перечисляются через запятую в круглых скобках сразу после названия функции. Любую функцию можно использовать в выражении наравне с переменными.

QB позволяет программисту определить новую (собственную, пользовательскую) функцию. Для определения функции служат операторы FUNCTION и ENDFUNCTION:

FUNCTION имя [(список_формальных_параметров)]

операторы

[EXITFUNCTION]

операторы

имя = выражение

END FUNCTION

где: FUNCTION–служебное слово, определяющее заголовок подпрограммы-функции;имя - допустимое имя переменной, которое может включать один из суффиксов явного объявления типа функции (тип возвращаемого функцией значения). При отсутствии такого суффикса тип функции определяется типом переменной имя, установленным оператором DEFтип или по умолчанию; список_формальных_параметров - перечень имен для обозначения аргументов функции с указанием их типа.Имеет следующий формат:

переменная [( )] [AS тип][, переменная [( )] [AS тип]]

Если параметр является массивом, то после имени соответствующей переменной ставятся пустые круглые скобки. Например, в следующем примере в функцию Fпередается переменная целого типа N и вещественный массив двойной точности B. Сама функция Fвозвращает результат вещественного типа, на что указывает суффикс, стоящий после имени функции #.Тип переменной может быть указан и явно.

FUNCTION F#(N%, B#())

или

FUNCTION F#(N as Integer, B() as Double)

Переменные, перечисленные в списке при описании функции, являются формальными параметрами и их имена никак не связаны с именами фактических параметров при вызове функции.

выражение - любое допустимое арифметическое, логическое или строковое выражение, соответствующее типу функции. Оно может содержать, как формальные параметры, так и любые другие переменные. Вычисленное значение выражения служит результатом, который возвращается функцией через ее имя.

Для досрочного выхода из функции может быть использован оператор

EXIT FUNCTION

EndFunction – служебные слова, ограничивающие содержательную часть функции.

Вызов функции из вызывающегомодуля осуществляется указанием ее имени и списка фактических параметров (аргументов), заключенных в круглые скобки в правой части некоторого оператора присваивания. Количество аргументов, порядок их следования и их типы должны соответствовать списку формальных параметров в операторе FUNCTION. Если фактическим параметром является массив, то после его имени ставятся пустые круглые скобки.

Пример 1.Требуется создать пользовательскую функцию f=x2+sin(x+z).

Решение. На рис.14 приведена схема алгоритма функции, а на рис. 15 – схема алгоритма вызывающего (основного) модуля.

Рис.14

Рис. 15

Function f (x as double, z as double)

f=x^2+sin(x+z)

End Function

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

Вычислить с помощью функции fвыражение s=f(a,b)+f(a,c)-f(c,b). Главная программа и вызов функцииf:

Cls

Dim a as double, b as double, c as double

Dim s as double

Input “введитеa,b,c ”, a,b,c

S=f(a,b)+f(a,c)-f(c,b) ‘ вызов_функции_f_в_главном_модуле

Print “s=”;s

Пример 2. Разработать функцию для поиска максимального элемента строки с номером Kв матрице B(M, N). Применить эту функцию для построения одномерного массива из максимальных элементов строк заданной матрицы A (10,5).

Решение. На рис.16 приведена схема алгоритма функции, а на рис. 17 – схема алгоритма вызывающего (основного) модуля.

Рис. 16

Рис. 17

‘ вызывающий_модуль

Cls

DimA(1 to 10, 1 to 5) assingle, C(1 to 10) assingle

Dim i as integer, j as integer

For i=1 to 10

For j=1 to 5

Print “A(;”i;”,”;j;”)=”;

Input A(i, j)

Next j

Next i

For i=1 to 10

C(i)=MaxArray(A(), 10, 5, i)

Next i

Cls

Print “МассивА”

For i=1 to 10

For j=1 to 5

Print A(i, j),

Next j

Print

Next i

Print

Print “МассивС”

For i=1 to 10

Print C(i);

Nexti

‘ функция по поиску максимального элемента

Function MaxArray (B(), M as integer, N as integer, K as integer)

Dim Max as single, i as integer

Max=B(K,1)

For i=2 to N

If B(K,i)>Max Then Max=B(K,i)

Next i

MaxArray=Max

End Function

Процедуры

Процедура – это основной вид программного модуля, который используется в тех случаях, когда результатом выполнения процедуры являются несколько скалярных величин или массивов.

Для определения процедуры служат операторы SUB и END SUB, имеющие следующий формат:

SUB имя [(список_формальных_параметров)]

операторы

[EXIT SUB]

операторы

END SUB

В отличие от функции, имя процедуры не имеет типа и используется лишь для вызова процедуры. Главное отличие втом, что результаты выполнения процедуры возвращаются через ее параметры - переменные или массивы. В остальном все, сказанное о функциях, в полной мере относится и к процедурам.

Вызов процедуры из некоторой программы (процедуры) производится одним из двух способов:

  • с помощью оператора CALL, имеющего следующий формат:

CALL имя_процедуры [(список_фактических_параметров)]

Например, CALL TestSub (3, K)

  • указанием имени процедуры в начале строки, за которым следует список параметров через запятую, но без охватывающих круглых скобок. Например,

TestSub 3, K

Количество фактических параметров, порядок их следования и тип в операторе CALL должны соответствовать списку формальных параметров в операторе SUB при описании процедуры. Если фактическим параметром является массив, то после его имени ставятся пустые круглые скобки.

В списке как формальных, так и фактических параметров исходные данные и результаты не различаются. Поэтому целесообразно исходные данные передавать по значению, а результаты возвращать по ссылке.

Передача параметров по ссылке (имени) и по значению

Передача аргументов по ссылке

По умолчанию простые переменные, массивы, элементы массивов передаются в процедуру по ссылке. Это означает следующее:

  • каждая переменная имеет адрес, по которому в памяти размещается ее значение;

  • при вызове процедуры и передаче переменной по ссылке передается адрес переменной, который становится адресом соответствующего параметра;

  • если процедура изменяет значение параметра, то одновременно изменяется и значение переданной переменной.

Например,

Dim A as integer, B as single

A=5: B=8

CALL PROC1 (A,B)

PRINT “A=”; A, ”B=”; B

END

SUB PROC1 (X, Y)

X=Y+1: Y=X*2

END SUB

Результат:

A=9 B=10

Передача аргументов по значению.

Это означает, что передается не адрес аргумента, а его значение. Все аргументы при вызове процедуры передаются по значению. Для передачи переменной в процедуру по значению ее превращают в выражение, заключая в скобки. В этом случае изменение значения параметра в процедуре не изменит значения соответствующей переменной.

Dim A as integer, B as single

A=5: B=8

CALL PROC1 (A,(B))

PRINT “A=”; A, ”B=”; B

END

SUB PROC1 (X, Y)

Y=Y*2: X=Y+1

END SUB

Результат:

A=17 B=8

Пример 3. Оформить в виде процедуры алгоритм вычисления степени y=xn с натуральным показателем.

Решение. Схема алгоритма процедуры приведена на рис.18.

Рис. 18

Sub Stepеn (nasinteger, xassingle, y as single)

Dim i as integer

y=1

for i=1 to n

y=y*x

next i

End Sub

В заголовке процедуры после ее имени Stepen в круглых скобках перечислены формальные параметры n, x, определяющие исходные данные процедуры, и параметр y, обозначающий результат ее выполнения. Указан тип формальных параметров. Тело процедуры состоит из объявления локальной переменной i, доступной только внутри данной процедуры и операторов, реализующих алгоритм вычисления xn–значения переменной y.

Пример 4.Оформить в виде процедуры алгоритм сортировки одномерного массива B(n) по убыванию. Применить эту процедуру для упорядочивания элементов массива A(k).

Решение:

DEFInt i, k

Input “k=”; k

Dim A(1 TO k) AS single

‘Заполнение_массива_значениями

Fori=1 tok

InputA(i)

Nexti

‘ вызов_процедуры_сортировки

CALLSort(A( ) , (k) )

Fori=1 tok

Print A(i);

Next i

END

Описание_процедуры

Sub Sort( B( ) AS single, n AS integer)

DEFInt j, l

For j=1 TO n-1

For l=j+1 TO n

IfB(j)<B(l) THENSwapB(j), B(l) ‘обменэлементовмассиваместами

NEXT l

NEXT j

END SUB

Локальные переменные

Для проведения вычислений функции/процедуре могут потребоваться свои собственные, временные (локальные) переменные, которые будут хранить результаты промежуточных расчетов и действий. Такие локальные переменные описываются внутри функции/процедуры с помощью уже известного оператора DIM. Когда выполнение функции/процедуры заканчивается, эти локальные переменные перестают существовать, а занятая ими память освобождается.

Если возникает необходимость хранить значения локальных переменных в промежутках между вызовами функции/процедуры, то в ее описании следует использовать ключевое слово STATIC. Например,

Declare Sub NUMBER ( )

Rem ИСПОЛЬЗОВАНИЕ_КЛЮЧЕВОГО_СЛОВА STATIC

For TIME%=1 to 4

CALL NUMBER

Next TIME%

End

Sub NUMBER STATIC

NUMBER% = NUMBER% + 1

Print NUMBER%

End Sub

Результат: (когда слово STATIC есть):

1

2

3

4

Результат: (когда слово STATIC опущено):

1

1

1

1

Оператор DECLARE

Оператор DECLAREописывает функцию FUNCTION или процедуру SUB и выполняет проверку аргументов на соответствие типу данных.

DECLARE {FUNCTION | SUB} имя [([параметры])]

где имя- имя функции/процедуры;

параметры- одна или несколько переменных, указывающих параметры, которые передаются в процедуру при ее вызове:

перемен[( )] [AS тип] [, перемен[( )] [AS тип]]...

где перемен- имя переменной QB;

тип- типданныхпеременной (INTEGER, LONG, SINGLE, DOUBLE, STRING).

DECLARE необходим при вызове процедур SUB без использования CALL. QB автоматически добавляет оператор DECLARE при сохранении программы на диск.