Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебник Информатики

.pdf
Скачиваний:
54
Добавлен:
23.02.2015
Размер:
560.16 Кб
Скачать

Пример 1. Составить схему алгоритма и программу вычисления площади треугольника s со сторонами a, b и c по формуле Герона s = p( p a)( p b)( p c) , где полупериметр p = (a + b + c) / 2.

Схема алгоритма и программа вычисления площади треугольника показаны на рис. 6.

1

Начало

2a, b, c

3

p = (a + b + c) / 2

4

s = p(p - a)(p - b)(p - c)

5 s

6

Конец

INPUT "Введите стороны треугольника a, b, c "; a, b, c p = (a + b + c) / 2

s = SQR(p * (p - a) * (p - b) * (p - c)) PRINT "Площадь треугольника"; s END

Рис. 6. Схема алгоритма и программа вычисления площади треугольника по формуле Герона

Программирование алгоритмов разветвляющейся структуры

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

Оператор безусловного перехода. Этот оператор позволяет изменить естественный порядок выполнения действий и перейти к выполнению программы, начиная с некоторой указанной строки или помеченного оператора. Существует две его формы:

1) GOTO n,

31

2) GOTO метка,

где n – номер строки (число), метка – метка оператора (метка – это идентификатор, который ставится перед требуемым оператором и отделяется от него двоеточием).

Современная технология программирования основана на принципе «программирования без goto», поэтому использование операторов безусловного перехода должно быть сведено к минимуму.

Условный оператор. Условный оператор реализует алгоритмическую конструкцию «ветвление» и изменяет порядок выполнения действий в программе в зависимости от истинности или ложности некоторого условия. Он имеет следующие формы записи:

1) IF условие 1 THEN

[блок операторов 1] [ELSEIF условие 2 THEN [блок операторов 2]]

…………………………

[ELSE

[блок операторов n]] END IF,

2) IF условие THEN операторы 1 [ELSE операторы 2],

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

Условный оператор позволяет организовать выполнение блока операто-

ров 1 или операторов 1, если условие 1 (условие) истинно, и выполнение бло-

ка операторов n или операторов 2 в противном случае. После этого выполняется оператор, стоящий в программе за условным. Допускается внутри условно-

32

го оператора использовать другие (вложенные) условные операторы (см. первую форму записи). Таких вложений может быть несколько.

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

1, если x < 0 sign = 0, если x = 0 .

1, если x > 0

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

1

 

 

 

Начало

 

 

2

x

 

 

3

x < 0

нет

INPUT "Введите число "; x

 

 

 

4

да

 

IF x < 0 THEN

sign = -1

 

sign = -1

 

 

 

ELSEIF x = 0 THEN

5

 

нет

sign = 0

x = 0

ELSE

 

 

 

6

да

 

sign = 1

sign = 0

 

END IF

 

 

 

PRINT "sign = "; sign

7

 

 

END

sign = 1

 

 

8 sign

9

Конец

Рис. 7. Схема алгоритма и программа вычисления функции знака числа

33

Оператор выбора. Этот оператор используется для организации нескольких разветвлений в зависимости от выполнения некоторого условия. Структура его такова:

SELECT CASE главное выражение CASE тестовые условия 1

[блок операторов 1] [CASE тестовые условия 2 [блок операторов 2]]

……………………………

[CASE ELSE

[блок операторов n]] END SELECT,

где главное выражение – любое числовое или символьное выражение; тестовые условия 1, тестовые условия 2, … – одно или несколько выражений для сравнения с главным выражением; блок операторов 1, блок операторов 2, …,

блок операторов n – один или несколько операторов в одной или нескольких строках.

Значение главного выражения используется для сравнения с тестовыми условиями, начинающимися с ключевого слова CASE. Ключевых слов CASE может быть сколь угодно много, но не менее одного. Если сравнение главного выражения с одним из тестовых условий даёт в результате значение «истина», то выполняется соответствующий блок операторов, и работа программы продолжается с оператора, следующего за ключевыми словами END SELECT. Если все тестовые условия оказались ложными, то выполняется блок операторов, расположенный после ключевых слов CASE ELSE. При его отсутствии ни один из блоков оператора выбора выполнен не будет.

Тестовые условия записываются в одной из трёх следующих форм:

список выражений через запятую (CASE 1, 2, 5, 30, x% + 2);

выражение 1 TO выражение 2 (CASE 5 TO 25);

IS знак отношения выражение (CASE IS < 100).

34

Программирование алгоритмов циклической структуры

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

Оператор цикла for – next. Этот оператор служит для организации циклов с известным заранее числом повторений. Он имеет следующий вид:

FOR i = m1 TO m2 [STEP m3] [блок операторов]

NEXT [i],

где i – переменная-счётчик (параметр цикла); m1 и m2 – соответственно, начальное и конечное значения параметра цикла i (могут быть константами или выражениями числового типа); m3 – шаг изменения параметра цикла; блок операторов – тело цикла.

Работа оператора цикла for – next начинается с вычисления и запоминания начального и конечного значений параметра цикла. Затем параметру цикла присваивается значение m1, которое сравнивается со значением m2. При положительном шаге пока параметр цикла меньше или равен (при отрицательном – больше или равен) m2, выполняется очередное повторение цикла. В противном случае происходит выход из цикла. Если изначально при положительном шаге m1 > m2 (при отрицательном – m1 < m2), оператор цикла не выполнится ни разу. После выхода из цикла его параметр i становится неопределённым, за исключением случаев, когда выход был осуществлён с помощью оператора GOTO или стандартной процедуры EXIT FOR. В этих случаях параметр цикла сохраняет своё последнее значение. Если ключевое слово STEP в операторе цикла for – next отсутствует, то величина шага считается равной +1.

Оператор цикла while – wend. Этот оператор обладает свойствами условного оператора и оператора цикла и позволяет организовать цикл с неизвест-

35

3). DO
[блок операторов] LOOP [WHILE условие],
4). DO
[блок операторов] LOOP [UNTIL условие].

ным заранее числом повторений. Общий вид записи оператора цикла while – wend таков:

WHILE условие [блок операторов] WEND,

где условие – числовое выражение, которое QBasic оценивает как истинное (не ноль) или ложное (ноль), блок операторов – тело цикла.

Данный оператор цикла работает следующим образом:

проверяется условие, записанное после ключевого слова WHILE, если оно истинно, то выполняется блок операторов, составляющих тело цикла;

как только условие становится ложным, цикл завершается, и програм-

ма переходит к оператору, следующему за ключевым словом WEND. Если условие с самого начала имеет значение «ложь», то операторы тела цикла не выполнятся ни разу. Значения переменных, входящих в условие, должны изменяться в теле цикла, иначе оператор цикла никогда не будет за-

вершён.

Оператор цикла do – loop. Оператор цикла do – loop также организует выполнение цикла с неизвестным заранее числом повторений. Этот оператор имеет четыре различные формы написания:

1). DO [WHILE условие]

[блок операторов] LOOP,

2). DO [UNTIL условие]

[блок операторов] LOOP,

Организация работы указанных форм оператора do – loop следующая:

36

если в операторе используется ключевое слово WHILE, блок операторов, составляющих тело цикла, будет выполняться, пока условие имеет значение «истина»;

если в операторе используется ключевое слово UNTIL, операторы те-

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

личным результатам:

при проверке условия в начале (1 и 2 формы написания) возможен вариант, при котором цикл вообще ни разу не будет выполнен,

при проверке условия в конце оператора цикла (3 и 4 формы написания), операторы, составляющие его тело, будут выполнены хотя бы один раз.

Выход из цикла do – loop может быть осуществлён с помощью оператора GOTO или стандартной процедуры EXIT DO, поэтому, в общем случае, ключевые слова WHILE и UNTIL с условием в любой из четырёх форм написания данного оператора не обязательны.

Пример 3. Составить схему алгоритма и программу последовательного выявления в целочисленном массиве N, состоящем из 100 элементов, тех элементов, значения которых кратны семи. Если таких элементов нет, то программа должна сообщить об этом.

Схема алгоритма и программа выявления в целочисленном массиве элементов, кратных семи, показаны на рис. 8. Предписание блока 5 организует цикл, в котором изменяется параметр i. Блок 6 производит проверку кратности семи элементов массива. По предписанию блока 7 осуществляется вывод кратных семи элементов. Для того чтобы алгоритм обладал свойством результативности, в схему включены блоки 4 и 8, 9 и 10. Блок 4 задаёт начальное значение, а блок 8 подсчитывает число кратных семи элементов. Блок 9 сравнивает число кратных семи элементов в массиве с нулём, а блок 10 выводит сообщение, если элементы, кратные семи, отсутствуют.

37

 

1

Начало

 

 

 

 

 

2

i = 1, nm

 

 

 

 

 

3

Ni

 

 

 

 

 

 

 

4

k = 0

 

 

 

 

 

 

5

i = 1, nm

 

 

 

 

6

Ni

MOD 7 = 0

 

нет

 

 

да

 

 

 

7

 

 

 

 

Ni

 

 

 

8

 

 

 

 

k = k + 1

 

 

9

 

k = 0

нет

 

 

 

 

 

10

 

да

 

 

 

 

 

Элементов нет

 

 

11

 

 

 

 

Конец

 

CONST nm = 100

DIM N(1 TO nm) AS INTEGER

PRINT "Введите элементы массива" FOR i = 1 TO nm

INPUT N(i) NEXT i

k = 0

FOR i = 1 TO nm

IF N(i) MOD 7 = 0 THEN PRINT N(i)

k = k + 1 END IF NEXT i

IF k = 0 THEN PRINT "Элементов нет" END

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

38

Программирование типовых алгоритмов вычислений

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

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

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

Пример 4. Составить схему алгоритма и программу выявления положи-

тельных элементов матрицы A, размерами 10 × 15 (10 строк, 15 столбцов). Считать, что хотя бы один положительный элемент в матрице A есть.

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

Цикл с несколькими одновременно изменяющимися параметрами

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

39

1

 

Начало

2

 

i = 1, nm

3

 

j = 1, mm

4

Aij

5

 

i = 1, nm

6

 

j = 1, mm

7

Aij > 0

нет

да

8

Aij

 

9

 

Конец

CONST nm = 10, mm = 15 OPTION BASE 1

DIM A(nm, mm)

PRINT "Введите элементы матрицы" FOR i = 1 TO nm

FOR j = 1 TO mm INPUT A(i, j) NEXT j

NEXT i

FOR i = 1 TO nm FOR j = 1 TO mm

IF A(i, j) > 0 THEN PRINT A(i, j) NEXT j

NEXT i END

Рис. 9. Схема алгоритма и программа выявления положительных элементов матрицы

Программы, реализующие данный алгоритм, не следует путать с программами, реализующими алгоритм с вложенными циклами. В первых – имеется лишь один оператор цикла (for – next, while – wend, do – loop), во вторых – несколько вложенных друг в друга таких операторов.

Пример 5. Составить программу вычисления z = (a + 2b + 3xi) / 6, где a изменяется от 0 с шагом 0,2; b изменяется от b0 с шагом h; а значения xi заданы массивом из 20 элементов; a, b, xi изменяются одновременно.

Программа вычисления функции z = (a + 2b + 3xi) / 6 показана на рис. 10.

40