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

К лабораторной работе № 3

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

Структура создаваемой программы представляет собой 4 цикла: 1-й и 2-й циклы предназначены для ввода последовательностей значений x(i) и y(j), соответственно, а 3-й и 4-й – для вычисления сумм S1 и S2.

В начале программы следует оператором DIM объявить массивы с целью подготовки места в памяти для записи последовательностей x(i) и y(j)

Например:

10 INPUT "Задайте размер массива n =", n

10 DIM x(20) 20 DIM x(n)

Ввод значений x(i) и y(j) осуществляется с помощью операторов INPUT, поставленных в цикл.

Цикл реализуется посредством FOR…NEXT – управляющего оператора, повторяющего блок операторов указанное число раз.

Например:

10 FOR k = 2 TO 6 STEP 2 10 FOR k = 2 TO 6 STEP 2

20 x(k/2) = k 20 x(k/2) = k

30 S = S + 2 * x(k/2) 30 S = 2 * x(k/2)

40 NEXT k 40 NEXT k

Представленные варианты различаются строкой 30. В первом происходит суммирование, а во втором - нет. Действительно:

1-й вариант 2-й вариант

1-й шаг: x(1) = 2 S = 0 + 2 * 2 = 4 S = 2 * 2 = 4

2-й шаг: x(2) = 4 S = 4 + 2 * 4 = 12 S = 2 * 4 = 8

3-й шаг: x(3) = 6 S =12 + 2 * 6 = 24 S = 2 * 6 = 12

По умолчанию шаг равен 1. При таком шаге строка 10 будет выглядеть:

10 FOR k = 2 TO 6

Отметим, что строки 20 и 30 являются телом цикла или блоком операторов повторяющемся указанное число раз, то есть 3 раза.

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

10 FOR i =1 TO 5 'это внешний цикл

20 FOR j = 1 TO 5 'это вложенный цикл

30 S1 = S1 + a(i , j)

40 NEXT j 'сначала закрывается вложенный цикл

50 NEXT i 'последним закрывается внешний цикл

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

20 WHILE i < 7

30 i = i + 1

40 IF i <= 3 THEN 50 ELSE 70

50 PRINT "Введите х"; i: INPUT "х =", x

60 S1 = S1 + (x + 1) ^ 2

70 PRINT "Введите y"; i: INPUT "y =", y

80 S2 = S2 + (3 * y ^ 3 + 2 * y ^ 2 + y)

90 WEND

Границы суммирования для S2 (от 1 до 7) реализуют строка 30 и условие при WHILE (в строке 20), а для S1 (от 1 до 3) – строка 30 и условие при операторе IF…THEN (в строке 40).

В таблицах 0.3.1 и 0.3.2 приведены контрольные примеры для заданий из таблиц 3.1 и 3.2, соответственно.

Таблица 0.3.1.

Вариант

x1

x2

x3

x4

x5

S1

S1

0

1

0

0

-2

-2

1

1

0

0

0

4,86

5

2

1

0

2,96

3

3

-1

0

0

-9,96

-10

4

1,5

0

0

0

30,06

30

5

1,5

0

0

0

0

20,1

20

6

1

0

0

0

0

16,81

17

7

1

0

0

0

0

6,84

7

8

1,5

0

0

4,88

5

9

4

0

0

0

9,086

9

Таблица 0.3.2.

Вариант

y1

y2

y3

y4

y5

y6

y7

y8

S2

S2

0

2

2

1

1

0

0

0,2

0,2

1

1

1

0

0

0

0

14,17

14

2

-1

-1

0

0

0

0

0

2,82

3

3

1

1

1

1

1

-2

9,57

10

4

-1,5

0

0

0

0

0

0

1,99

2

5

1

0

0

0

0

0

0

14,72

15

6

1

1

0

0

0

0

0

0

9,01

9

7

1

1

1

1

1

6

28,65

29

8

2

2

2

-2

-2

-2

-28,82

-29

9

2

0

0

0

0

0

0

0

122,16

122

Логика цикла FOR…NEXT

при положительном значении шага

при отрицательном значении шага

Таблица 0.3.3.

Оператор и его описание

DIM m1(10), m2(1 TO 10, 5)

Оператор объявляет одномерный (m1) и двумерный (m2) массивы.

DIM m(10, 5) DIM m(0 TO 10, 5)

DIM m(10, 0 TO 5) DIM m(0 TO 10, 0 TO 5)

Операторы объявляют двумерный массив. При OPTION BASE 0 операторы эквивалентны. Ключевое слово TO позволяет указать и нижнюю и верхнюю границы массива.

REDIM m(5, 3) REDIM m(0 TO 5, 3)

REDIM m(5, 0 TO 3) REDIM m(0 TO 5, 0 TO 3)

Оператор объявления массивов, изменяет объем памяти, выделенной динамическим массивам.

OPTION BASE n

Оператор объявления нижней границы массивов. n = 0 или 1, по умолчанию равен 0. Не обязателен, может использоваться только раз в модуле для описания всех массивов.

ERASE m

Оператор управления памятью, обнуляет элементы статического массива m или уничтожает динамический массив m.

FOR i = 2 TO 100 STEP 2

S = S + a( i ): IF S > 100 THEN EXIT FOR

NEXT i

Оператор цикла, реализующий суммирование элементов массива а, при сумме больше 100 предусмотрен досрочный выход из цикла.

FOR i = 1 TO 1000: NEXT i

Пустой цикл, реализующий временную задержку.

WHILE S <= 100

i = i +1: S = S + a( i )

WEND

Оператор цикла, реализующий суммирование элементов массива а, цикл выполняется пока указанное условие истинно (в данном случае при S  100).

Примечание:

1. Возможные границы массивов находятся в приделах от – 32768 до 32767.

2. Допускается вкладывать как циклы FOR…NEXT, так и WHILE…WEND.

3. Обычно при использовании циклов FOR…NEXT первому счетчику цикла дается имя i, вложенному в него – j, затем k, l и далее по алфавиту.

Логика цикла WHILE…WEND