Массивы могут иметь большой объем (включать десятки, сотни и даже тысячи значений). Эти значения требуют для своего размещения существенного объема памяти. Поэтому управляющая программа языка Бейсик требует, чтобы объем массива был указан заранее. Это делается с помощью оператора DIM (от английского “dimension” – размер). Например DIM A (41), В(5, 4) означает что в программе будут присутствовать два массива. Массив А одномерный и состоит из 41 члена ( А(1), А(2), А(3), …, А(41) ), а массив В – двумерный: ( В (1, 1), …, В(1,4, В(2,1),…,В(2,4) и т. д. до В(5,4), т. е данный двумерный массив состоит из 20 членов: 5*4 = 20
Обычно оператор DIM размещается в начале программы. Если размеры массивов в этот момент точно не установлены, то в операторе DIM допускается указывать размеры массивов с завышением. Так, вместо оператора, упомянутого в примере, допустимо написать DIM A(50), B(10,10). Это возможно, ввиду весьма обширного объема оперативной памяти современных компьютеров.
В операторе DIM должны учитываться как вводимые массивы, так и те, которые образуются при работе программы
Ввод индексных переменных можно осуществлять с помощью оператора цикла. Для упомянутого одномерного массива А ввод будет иметь вид:
FOR I=1 TO 41
INPUT “A”, A(I)
NEXT I
Т. е. на экране 41 раз будет появляться имя индексной переменной А, и каждый раз после этого имени надо будет ввести следующее по порядку значение и нажать ENTER.
Ввод двумерного массива требует двух “вложенных” циклов, когда внутренний цикл, т. е цикл по второму индексу (ниже в примере это индекс J) находится внутри наружного цикла (по I). Для каждого значения наружного цикла вводятся все указанные значения внутреннего цикла, и только после этого программа переходит к следующему значению наружного цикла, для которого также вводятся все значения внутреннего цикла и т. д. пока все значения наружного цикла не будут отработаны (см. ниже пример)
FOR I=1 TO 5
FOR J=1 TO 4
INPUT “B”, B(I, J)
NEXT J
NEXT I
Ввод будет осуществляться в следущем порядке: В (1, 1), В(1,2), В(1, 3), В(1, 4); В(2.1), …, В (2, 4); … В(5,1),… В(5, 4 ).
Для ввода индексных переменных удобно использовать оператор DATA, в котором значения переменных записываются через запятую. Оператор DATA обычно помещается в начале программы, например, после операторов DIM. Ниже в определенной части программы располагается оператор READ (“прочитать”) с указанием имен переменных. Оператор READ осуществляет ввод данных, записанных в DATA.
Для примера рассмотрим ввод двумерного массива C(3,2). В приведенной ниже программе ввода переменным будут присвоены значения: В(1, 1) = 12; В(1, 2) = 34; В(2, 1) = 8; В(2, 2) = 6; В(3, 1) = 25; В(3, 2) = 17.
DATA 12, 34, 8, 6, 25, 17
FOR I=1 TO 3
FOR J=1 TO 2
READ B(I, J)
NEXT J
NEXT I
В порядке, аналогичном вводу будет осуществляться и вывод (также в цикле)
FOR I=1 TO 3
FOR J=1 TO 2
PRINT I, J B(I, J)
NEXT J
NEXT I
Выведенные данные расположатся столбиком.
Рассмотрим пример. Используем еще раз формулу расчета веса 1 м бурильных труб в промывочной жидкости.
Выше эта формула обрабатывалась в программе Q1M. Результаты были приведены в таблице 11.3. Отметим, что каждый результат, касающийся веса дюралевых и стальных труб при различной плотности жидкости, получен путем отдельного прогона программы. Всего потребовалось 14 прогонов. Кроме того, вручную подсчитывались значения строк “Потеря веса в % по сравнению с воздушной средой” . Это еще 12 значений. Применив циклы, определим все это за единственный прогон программы, которая будет иметь вид:
Программа Q1MCA (вес 1м стальных и алюминиевых труб)
10 CLS
15 PRINT “ВЕС СТАЛЬНЫХ И ДЮРАЛЕВЫХ ТРУБ В ЖИДКОСТИ”
20 DIM QC (10), QA(10), QC%(10), QA%(10), N
30 DH = 0.054: DB = 0.044: DR =200
40 F = 3.14/4*(DH^2-DB^2)
50 PRINT “F”;: PRINT USING”##.######”; F
60 QC(0) = 1.06*7850*9.81*F: QA(0)= 1.06*2800*9.81*F: N(0)= QC(0)/QA(0)
70 PRINT “QC(0), QA(0), N(0)”; : PRINT USING”####”; QC(0),QA(0), N(0)
80 PRINT “I DR RG QC QC% QA QA% N ”
90 FOR I = 1 TO 6
100 IF I >3 THEN DR=300
110 RG(I) = RG(I-1) + DR
120 RG(1) = 1000
130 QC(I)= QC(0)* (1-RG(I)/7850)
140 QC%(I)= (QC(0)-QC(I))/QC(0)*100
150 QA(I)= QA(0)* (1-RG(I)/7850)
160 QA%(I)= (QA(0)-QA(I))/QA(0)*100
170 N(I)= QC(I)/QA(I)
180 PRINT I; : PRINT USING “######.#”;DR, RG(I),QC(I),QC%(I),QA(I), QA%(I), N(I)
190 NEXT I
В программе DH и DB – наружный и внутренний диаметры бурильной трубы (в м); F – площадь ее сечения (м
); DR – шаг изменения плотности промывочной жидкости (кг/м
); QC(0), QA(0) – вес 1 м бурильной трубы (стальной и дюралевой) в воздухе; QC(I), QA(I), то же в промывочной жидкости при I-м шаге изменения ее плотности RG(I).
Кроме того выводятся значения QС%(I) и QА%(I) снижения веса в процентах, а также значения N(I) – отношений веса в воздухе к весу в промывочной жидкости.
Для ввода DH, DB и DR. используется оператор присваивания. Для экономии места все операторы присваивания расположены в строке 30 и разделены двоеточием
После расчета и вывода на печать площади поперечного сечения бурильных труб F в строке 60 вычисляются значения QC(0), QA(0). При выводе QC(0) и QA(0) используется один и тот же формат чисел (оператор PRINT USING”####”)
В строке 80 выводится заголовок таблицы, под символами которого будут располагаться выводимые в ходе цикла данные ( I, DR, RG, QC, QC%, QA, QA%, N)
Сложность заключается в том, что шаг изменения плотности жидкости DR непостоянен. Положение “в воздушной среде”, соответствует 0-му значению параметра цикла I. Следующее положение при I = 1 соответствует использованию воды. Оба положения отделяет шаг DR = 1000 кг/м
. Далее от RG = 1000 до RG = 1400 (т. е. до цикла номер 3 включительно) плотность жидкости растет с шагом DR = 200 кг/м
. После третьего цикла шаг возрастает до 300 кг/м![]()
В заголовке цикла (строка 90) предусмотрено проведение 6 циклов: от 1-го до 6-го. В следующей строке 100 ставится условие, что после третьего цикла (т. е. при I >3) DR = 300. До этого момента сохраняется значение DR = 200, заданное в строке 30.
В строке 110 указано, что плотность RG(I) для каждого I –го цикла на шаг DR больше плотности RG(I-1) предшествующего цикла.
В ходе первого цикла (I=1) согласно оператору 110 должно быть:
RG(1) = RG(0) + 200. Значение RG(0) в программе не указано, поэтому программа принимает его за нуль (RG(0)=0). Следовательно, RG(1) = 200. Однако в следующем операторе 120 это значение заменяется на RG(1) = 1000 (для воды). Далее это значение участвует в операторах 130 – 170 при нахождении QC(1), QC%(1), QA(1), QA%(1) и N(1). Все полученные значения выводятся в строке 180 (для I = 1). После этого оператор конца цикла NEXT I переводит программу опять на начало (“к следующему I “)
В ходе второго цикла (I=2) согласно оператору 110 RG(2) = RG(1) + DR = 1000+200=1200. По этому значению находятся и печатаются QC(2), QC%(2), QA(2), QA%(2), N(2). Аналогично проходит третий цикл (где RG(3)=1400).
В ходе четвертого цикла I = 4, т. е. I >3. Согласно этому условию шаг становится равным 300 кг/м
. Теперь RG(4) = RG(3) + DR, т. е. 1400 + 300 = 1700. Аналогично выполняются 5-й и 6-й (последний) циклы.
Результаты выполнения программы выглядят, как показано ниже. Вначале на печать выведено название программы (согласно строке 15), после чего представлено значение F, рассчитанное вне цикла. В строке 80 дается заголовок таблицы результатов цикловых расчетов. Сами эти результаты выведены по пронумерованным с помощью параметра цикла I строкам :
ВЕС СТАЛЬНЫХ И ДЮРАЛЕВЫХ ТРУБ В ЖИДКОСТИ
F 0.000769
QC(0), QA(0), N(0) 62.8 23.2 2.7
I DR RG QC QC% QA QA% N
1 200 1000.0 54.8 13.0 14.9 36.0 3.7
2 200 1200.0 53.2 15.0 13.3 43.0 4.0
3 200 1400.0 51.6 18.0 11.6 50.0 4.4
4 300 1700.0 49.2 22.0 9.1 61.0 5.4
5 300 2000.0 46.8 25.0 6.6 71.0 7.0
6 300 2300.0 44.4 29.0 4.2 82.0 10.7
Видно, что если в воздушной среде соотношение N весов стальных и дюралевых труб равнялось 3.7, то в утяжеленном растворе оно превышает 10.
Рекомендуемая литература: Осн. 1 с. 47-57
Контрольные вопросы
1 Оператор цикла: оформление и смысл
2 Индексные переменные: обозначение и сущность. Разновидности
3 Понятие о массивах. Виды массивов
4 Оператор DIM: оформление и сущность
5 Способы ввода и вывода одномерных массивов. Оператор DATA.
6 Ввод и вывод двумерных массивов. Вложенные циклы и их
выполнение
7 Как вывести результаты циклов в виде таблицы
8 Преимущества программ включающих циклы
ЛЕКЦИЯ 13. Некоторые приемы программирования
Суммирование ряда чисел. На практике часто возникает необходимость суммировать ряд чисел. Так, при бурении каждый бурильщик записывает в журнал пройденный им метраж за рейс. Глубина же скважины составляет сумму рейсовых проходок. Для решения задачи суммирования каждая рейсовая проходка представляется, как часть H(I) некоторого одномерного массива H. Суммирование проводят с помощью оператора цикла. Например:
Программа SUM (суммирование)
10 DIM H(20)
15 PRINT “СУММИРОВАНИЕ ЧИСЛОВОГО РЯДА”
20 DATA 11,6,71,45,2,73,40,9,10, 13,4,7,33,19,57,25
30 C = 0
40 FOR I = 1 TO 16
50 READ H(I)
60 C = C + H(I)
70 NEXT I
80 PRINT “C”; C
В операторе DIM (строка 10), указывается, что программа будет работать с одномерным массивом Н, объемом не более 20 членов. В операторе DATA (20) приводится ряд из 16 - ти чисел. В следующей 30-й строке искомой сумме первоначально присваивается значение 0. В заголовке цикла (40), указано, что будет осуществлено всего 16 циклов, начиная с первого. Оператор READ воспринимает ряд чисел оператора DATA, как ряд значений H(I) рейсовой проходки.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |


