Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Оператор множественного выбора SELECT CASE



Использование оператора SELECT CASE более предпочтительно, нежели использование GOTO и IF... THEN по причине больших его возможностей и лучшей наглядности программы. Общая форма записи оператора:

SELECT CASE выражение

1. CASE условие 1

2. блок операторов 1

CASE условие 2

3. блок операторов 1

…………….

4. CASE ELSE

END SELECT

Здесь: выражение – арифметическое или текстовое выражение;

условие - логическое выражение.

Блок SELECT CASE... END SELECT -логически законченная и практически независимая часть программы. Оператор CASE ELSE получает управление, если ни одно из условий не выполняется. Если одно из условий CASE -”истина”, то выполняется соответствующий блок операторов. В случае, когда CASE ELSE нет, то управление передается оператору, стоящему за END SELECT. Возможные способы записи выражения:

1). CASE выражение TO выражение;

2). CASE IS операция отношения выражение;

3). CASE константа 1, константа 2.

Пример.

REM Использование оператора SELECT CASE

INPUT V

SELECT CASE V

CASE

PRINT “ НУЛЬ”; V

CASE 1, 3, 5, 7, 9

PRINT “ НЕЧЕТНОЕ ЧИСЛО”; V

CASE 2, 4, 6, 8

PRINT “ ЧЕТНОЕ ЧИСЛО”; V

CASE IS < 0

PRINT “ ОТРИЦАТЕЛЬНОЕ ЧИСЛО”; V

CASE IS > 9

PRINT “ СЛИШКОМ БОЛЬШОЕ ЧИСЛО”; V

CASE ELSE

PRINT “ НЕЦЕЛОЕ ЧИСЛО”; V

END SELECT

'КОНЕЦ ПРОГРАММЫ

END

Операторы циклических алгоритмов

Циклическим называется алгоритм, в котором получение результата обеспечивается многократным выполнением одних и тех же операций. Возможны три способа организации алгоритма циклической структуры:

- цикл «повторять…до» (цикл с постусловием, рис. 7.4);

- цикл «пока» (цикл с предусловием, рис. 7.5);

- счетный цикл (с управляющей переменной, рис. 7.6).

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

 

 

Рис. 7.4. Цикл с постусловием Рис. 7.5. Цикл с предусловием

 
 


Рис. 7.6. Цикл с известным числом повторов

Операторы GOTO и IF

Совместное использование этих операторов позволяет организовать выполнение циклического процесса.

Пример. Найти сумму и произведение 5 чисел.

REM Объявление начальных значений переменных

SUM=0: P=1: N=1

NEXT.STEP:

PRINT “Введите “; N; “число”

INPUT NUM

REM Вычисление суммы

SUM=SUM+NUM

REM Вычисление произведения

P=P*NUM

N=N+1

IF N< =5 GOTO NEXT.STEP ‘ Переход на строку с меткой NEXT.STEP

PRINT “Сумма этих чисел = “; SUM; “Произведение = “; P

END

 

Оператор цикла с известным числом повторений

FOR …TO … NEXT

Этот оператор позволяет организовать выполнение блока операторов определенное число раз (организуют цикл по счетчику). Поэтому он может заменить операторы GOTO и IF. Общий вид оператора:

FOR U = A1 TO A2 [STEP A3]

тело цикла

NEXT U

где: U – управляющая переменная цикла; A1, A2 – начальное и конечное значение управляющей переменной; A3- шаг изменения управляющей переменной; тело цикла – набор операторов повторяющегося вычислительного процесса. Если А3=1, то конструкцию STEP A3 можно опустить. Программа в предыдущем примере эквивалентна следующей:

Пример 1. Найти сумму и произведение 5 чисел.

REM Объявление начальных значений переменных

SUM=0: P=1

REM Начало цикла

FOR U=1 TO 5

PRINT “Введите “; U; “ число”

INPUT NUM

REM Вычисление суммы

SUM=SUM+NUM

REM Вычисление произведения

P=P*NUM

NEXT U

PRINT “Сумма этих чисел = “; SUM; “Произведение = “; P

END

 


Пример 2.

FOR X=1 to 10 STEP 1

Y=X^2+ B*X- C

PRINT “ X=“; X, “ Y=“; Y

NEXT X

Пример 3. Ввод массива

REM ВВОД МАССИВА

INPUT “ВВЕСТИ L”; L

DIM P(L)

PRINT “ВВЕСТИ МАССИВ P”

FOR I= 1 to L

INPUT P(I)

NEXT I

END

Условные циклы

Для организации циклов с неизвестным числом повторений (итерационных) используются операторы условных циклов.

Оператор цикла с предусловием WHILE … WEND

Общий вид этого оператора:

WHILE условие

тело цикла

WEND

где: условие – логическое выражение; тело цикла – последовательность операторов.

Пока условие истинно, выполняются все операции тела цикла. Еcли условие - “ложь” - то управление передается на оператор, следующий за WEND. Особенности работы оператора:

- можно использовать при неизвестном заранее количестве повторений;

- можно использовать, если закон изменения параметров выражается формулой;

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

Пример 1. Найти количество первых n натуральных чисел, сумма которых не больше 20.

SUM=0: N=0

WHILE SUM< =20

N=N+1

SUM=SUM+N

WEND

PRINT N; SUM

END

Пример 2. Условный цикл

X= 4

WHILE X< = 12

Y=X^2 + B*X - C

PRINT “X=“; X, “Y=“; Y

X=X+2

WEND

Оператор условного цикла DO... LOOP

Данный оператор аналогичен оператору WHILE... WEND, однако отличается от него большей гибкостью. Управляющее условие может быть размещено как в начале цикла, так и в конце.

Проверка вверху:

DO WHILE условие DOUNTIL условие

тело цикла тело цикла

LOOPLOOP

Проверка внизу:

DODO

тело цикла тело цикла

LOOP WHILE условиеLOOP UNTIL условие

где: условие – логическое выражение; тело цикла – последовательность операторов.

Использование слова WHILE означает, что цикл будет выполняться до тех пор, пока условие будет иметь значение “истина“. При использовании слова UNTIL цикл выполняется только тогда, когда условие имеет значение “ложь”. При проверке вверху цикл может не выполниться ни разу. При проверке снизу цикл выполнится хотя бы один раз.

Пример 1. Найти сумму и произведение 5 чисел.

REM Использование формы «проверка-вверху» с условием WHILE

REM Объявление начальных значений переменных

SUM=0: P=1: N=1

DO WHILE N< =5

PRINT “Введите “; N; “ число”

INPUT NUM

REM Вычисление суммы

SUM=SUM+NUM

REM Вычисление произведения

P=P*NUM

N=N+1

LOOP

PRINT “Сумма этих чисел = “; SUM; “Произведение = “; P

END

Пример 2. Найти сумму и произведение 5 чисел.

REM Использование формы «проверка-внизу» с условием UNTIL

REM Объявление начальных значений переменных

SUM=0: P=1: N=1

DO

PRINT “Введите “; N; “ число”

INPUT NUM

REM Вычисление суммы

SUM=SUM+NUM

REM Вычисление произведения

P=P*NUM

N=N+1

LOOP UNTIL N> 5

PRINT “Сумма этих чисел = “; SUM; “Произведение = “; P

END

Вложенные циклы

Циклы могут быть вложенными друг в друга. Внутренние циклы должны целиком помещаться во внешних. Если вложены друг в друга два цикла FOR … NEXT, то они должны иметь различные управляющие переменные.

Пример. Рассчитать и вывести на экран таблицу Пифагора.

PRINT “Таблица Пифагора”

FOR x=1 TO 10

FOR y=1 TO 10

A=x*y

PRINT USING “###”; A

NEXT y

PRINT

NEXT x

Результат выполнения программы:

Таблица Пифагора

1 2 3 4 5 6 7 8 9 10

2 4 6 8 10 12 14 16 18 20

3 6 9 12 15 18 21 24 27 30

4 8 12 16 20 24 28 32 36 40

5 10 15 20 25 30 35 40 45 50

6 12 18 24 30 36 42 48 54 60

7 14 21 28 35 42 49 56 63 70

8 16 24 32 40 48 56 64 72 80

9 18 27 36 45 54 63 72 81 90

10 20 30 40 50 60 70 80 90 100

Операторы описания массивов

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

Имя массива может содержать до 40 символов (букв латинского алфавита, цифр, специальных знаков). Присваивать значения элементам массива можно различными способами:

- с помощью оператора присваивания;

- с помощью цикла при заполнении большого массива;

- путем ввода значений с клавиатуры;

- использованием операторов DATA и READ:

- использованием стандартных функций.

QBASIC не всегда требует объявления массива при использовании его в программе. Если массив содержит менее 11 элементов, достаточно одного упоминания имени переменной, чтобы QBASIC автоматически выделил ячейки в памяти для массива с 11 элементами и присвоил им нулевые значения. Первый элемент массива по умолчанию имеет номер ноль, а не 1, поэтому последний элемент будет иметь порядковый номер 10.

Для того, чтобы первый элемент массива имел номер 1, нужно воспользоваться специальным оператором:

OPTION BASEзначение,

где: значение - номер начального элемента массива. Этот параметр может принимать значения 0 или 1; по умолчанию 0.

Пример.

OPTION BASE 1

DIM NUM% (100)

Оператор OPTION BASE может использоваться в программе только один раз до описания всех массивов.

Для описания больших массивов используется оператор DIM. Общий вид оператора:

DIM имя1 (размер 1) [, имя2 (размер 2), ...]

где: имя1, имя2 - имена массивов переменных; размер 1, размер 2 - размерность массива, выражаемая следующим образом:

[нижний TO] верхний, [нижний TO] верхний, например:

DIM A (100 TO 200) - одномерный массив;

DIM D%(10 TO 50, 20 TO 30) - двухмерный массив.

Функции оператора описания массивов DIM:

- позволяет резервировать место в памяти сразу для нескольких массивов;

- определяется имя массива;

- задает тип элементов массива;

- резервирует ячейки памяти для элементов массива;

- присваивает нулевые значения ячейкам массива числового типа или пустые строки текстового массива;

- предоставляет возможность использовать в программах массивы с числом измерений до 60.

Пример. Заполнение двухмерного массива А(5, 3) по строкам.

DIM A(5, 3)

FOR I=1 TO 5

FOR J=1 TO 3

INPUT A(I, J)

NEXT J

NEXT I

Правила записи оператора DIM:

- в одном операторе можно объявлять любое число массивов;

- оператор DIM желательно помещать в начале программы;

- не использовать в программе простую переменную и массив с одним именем;

- границы массива могут быть переменными.

Размер одного массива не может превышать 64 Кбайт. Для получения объема памяти, занимаемой массивом, нужно умножить число элементов массива на размер одного элемента.

Таблица 7.3

Распределение памяти для переменных

Тип переменной Знак типа Число занимаемых байтов
1. Целый %
2. Длинный целый &
3. Одинарной точности !
4. Двойной точности #
5. Строковый произвольной длины $ 1 байт для 1 символа

Две стандартные функции LBOUND и UBOUND возвращают верхнее (UBOUND) и нижнее (LBOUND) значения границ определенного измерения массива. Общий вид функций:

LBOUND (массив[, размерность])

UBOUND (массив[, размерность])

где: массив - имя массива, размерность - номер измерения массива, для которого эти функции возвращают значения нижней и верхней границы. Для определения индекса первого измерения используется 1, для второго - 2 и т.д.

Пример. Объявление двухмерного массива.

CLS

‘объявление двухмерного массива

DIM M (-10 TO 5, 20 TO 30)

‘ вывод границ массива

PRINT

PRINT LBOUND (M, 1);

PRINT UBOULD (M, 1)

PRINT LBOUND (M, 2);

PRINT UBOULD (M, 2)

END

Результат на экране:

-10 5

20 30

Подпрограммы и функции

В QBASIC повторяющиеся вычислительные алгоритмы могут быть организованы в основном модуле в виде многострочных функций, задаваемых оператором DEF FN, оператором-функцией типа FUNCTION, подпрограммами GOSUB и SUB. Такой подход позволяет разбить программу на логические части, каждая из которых может быть отлажена отдельно.

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

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

Основные отличия используемых в QBASIC функций и подпрограмм представлены в таблицах 7.4 и 7.5. Функция FUNCTION и подпрограмма SUB являются более мощными альтернативами, их использование лучше соответствует принципам структурного программирования и поэтому наиболее предпочтительно.

Таблица 7.4

Отличия между FUNCTION и DEF FN

FUNCTION DEF FN
Все переменные по умолчанию локальные, ряд переменных можно объявить общими. Все переменные по умолчанию глобальные. Ряд переменных можно объявить локальными.
Переменные передаются в процедуру по ссылке или по значению. Значение переменной, переданной по ссылке, можно изменить в процедуре. Переменные передаются в функцию DEF FN по значению.
Может вызываться рекурсивно. Нельзя вызывать рекурсивно.
Процедуру FUNCTION можно объявить в одном модуле, а вызывать в других модулях. Функция DEF FN должна быть определена и вызвана в том же самом модуле.
Имя процедуры FUNCTION может быть любым, но не начинаться с FN. Имя функции DEF FN всегда начинается с FN.

 

Таблица 7.5

Отличия между подпрограммами SUB и GOSUB

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

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-04-09; Просмотров: 1216; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.054 с.)
Главная | Случайная страница | Обратная связь