Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Операторы обращения к функциямСодержание книги
Поиск на нашем сайте
Поскольку в языке BASIC отсутствуют стандартные обратные тригонометрические функции, ниже приведены некоторые математические формулы, которые могут оказаться полезными при выполнении лабораторных работ.
Графические операторы
Операторы присваивания Примеры операторов присваивания.
Операторы описания данных Операторы DEFINT, DEFLNG, DEFSNG, DEFDBL, DEFSTR объявляют тип идентификаторов переменных по умолчанию. Работа с файлами Файловая система Информация, вводимая с клавиатуры или обрабатываемая с помощью программных средств Бейсика размещается в оперативной памяти компьютера, которая является энергозависимой, и, как только мы выключим питание, вся наша информация погибнет. Чтобы избежать это и донести наши гениальные программы по крайней мере до преподавателя (чтобы он их достойно оценил), а лучше до далеких потомков, необходимо сохранять наши работы на диске в виде файлов. Имя файлу мы даем сами, но к нему есть некоторые требования:
У файла также есть расширение имени. Оно имеет длину не более трех символов, указывается через точку после имени и характеризует тип файла. Изучаемая нами версия Бейсика (как, впрочем, и практически все другие) автоматически при сохранении добавляет к имени файла расширение bas, что упрощает поиск написанных нами программ и работу с ними. Способы доступа к файлам В изучаемом нами Бейсике существуют два метода доступа к информации, хранящейся в файлах:
Файлы последовательного доступа наиболее просты как в организации, так и в работе с ними. Записи обрабатываются последовательно одна за другой. Информация в таких файлах хранится в виде текста в кодах ASCII. Подобные файлы легко просмотреть на экране, используя любой простейший редактор, или в самом Бейсике. Но, как всегда, у каждой медали две стороны. Простота — хорошо, а последовательность в данном случае — плохо. Если информация об интересующих меня объектах упорядочена в файле по алфавиту, то мне всякий раз придется перебирать практически весь файл, чтобы добраться до нужной записи. Отсюда, при большом информационном объеме файла обработка его резко замедляется. Операции над файлами Независимо от того, какие действия мы проделываем с информацией, хранящейся в файле, мы должны будем производить следующие обязательные операции:
Предупреждение Возможны следующие режимы:
|
Лекция 9. Управляющие конструкции языка BASIC
Операторы цикла
Циклы и табулирование
В лабораторной работе №2 требуется разработать программу табулирования (вычисления таблицы значений) функции для произвольного диапазона изменения независимого параметра или аргумента. В задании приведен, в частности, следующий пример табулирования функции
z=0,5·x3−lg|x−5|
x=tg(Θ+a)
Θ∈[2,2;3,2]
ΔΘ=0,25
a=1,12
Результаты расчетов должны быть представлены в табличном виде по примеру Табл. 9.1
Таблица 9.1.
С целью решения подобного рода задач можно использовать т.н. операторы цикла.
Цикл представляет собой фрагмент программы, который повторяется либо заданное количество раз, либо до тех пор, пока не будет удовлетворено некоторое условие. Чтобы выделить такой фрагмент, необходимо тем или иным способом задать его начало (заголовок цикла) и указать его конец. Программные строки, расположенные между этими двумя точками, принято называть телом цикла.
Как видно из приведенного примера, параметру Θ последовательно придается значение из интервала [2,2;3,2] с шагом 0,2 и по нему производятся вычисления аргумента x и значения функции z. Параметр Θ называют управляющим, его значение изменяется от начального Θн до конечного Θк с некоторым шагом ΔΘ.
В лекции 7 уже перечислялись виды циклов
Цикл "пока" (цикл с предусловием):
Цикл "до" (цикл с постусловием):
Цикл с параметром
Для реализации каждого из них могут быть использованы различные операторы. В лабораторной работе №2 предлагается использовать различные операторы цикла для реализации различных циклов.
Рассмотрим способы реализации циклов на следующем примере (ЛР№2).
Пример:
Вычислить значение функции
где x=lna при а, изменяющемся от ан до ак, с шагом Δа: aн=2, ак=3, Δа=0,2
Результаты ручного счета:
При а=ан=2 с помощью калькулятора находим, что x=ln(2)≈0,693; y≈0,861
При а=ак=3 с помощью калькулятора находим, что x=ln(3)≈1,099; y≈0,962
9.2.2. Цикл "пока" (цикл с предусловием) − операторы WHILE - WEND
Этот вид цикла может быть реализован с помощью операторов WHILE - WEND:
WHILE условие
тело цикла
WEND
Этот оператор позволяет сочетать свойства условного оператора и оператора цикла. С их помощью можно выполнять повторяющиеся действия с заранее неизвестным количеством повторений.
Работает он следующим образом. Сначала идет оператор while с условием, при котором цикл выполняется. Ключевое слово wend аналогично по своему назначению слову next, т. е. является последней строкой цикла. Всякий раз, доходя до wend, компьютер проверяет, выполняется ли условие, указанное оператором while. Если оно не выполняется, то программа переходит к исполнению операторов, следующих за wend. Если же выполняется, то цикл повторяется снова.
Работа такого цикла начинается с проверки условия, записанного в заголовке WHILE. Если условие истинно, то начинается выполнение тела цикла, после чего оператор WEND вновь возвращает нас на заголовок цикла WHILE. Если в теле цикла происходят какие-то изменения, влияющие на результат проверки условия, то может наступить момент, когда это условие становится ложным, и управление из WHILE будет передано на оператор, следующий за WEND. В противном случае цикл будет повторяться до тех пор, пока в его теле не сработает один из операторов перехода (GOTO, IF, ON) или досрочного выхода из цикла (EXIT).
Таблица 9.2. Пример организации цикла "пока" с помощью операторов | |
Блок-схема | Листинг программы и результаты расчетов |
Текст программы cls:rem Student Ivanov NDT-06 open "Ivanov1.dat" for input as#1 open "Ivanov2.dat" for output as#2 input #1, an,da,ak a=an while a<ak+da/2 x=log(a) y=(abs(sin(x)))^(1/3)? using "a=#.## x=##.### y=##.###";a,x,y? #2, using "a=#.## x=##.### y=##.###";a,x,y a=a+da wend close 1,2 end Результаты расчетов a=2.00 x= 0.693 y= 0.861 a=2.20 x= 0.788 y= 0.892 a=2.40 x= 0.875 y= 0.916 a=2.60 x= 0.956 y= 0.935 a=2.80 x= 1.030 y= 0.950 a=3.00 x= 1.099 y= 0.962 "Ivanov1.dat" - файл данных "Ivanov2.dat" - файл для записи результатов расчета |
В лабораторной работе №2 требуется считывать исходные данные из файла данных и заносить результаты расчетов в другой файл. Открытие файла для чтения производится в строке
open "Ivanov1.dat" for input as#1
Открытие файла для записи результатов расчета
open "Ivanov2.dat" for output as#2
Закрытие этих файлов производится так: close 1,2
Обратите внимание на строку while a<ak+da/2. Здесь увеличение значения ak на полшага сделано для того, чтобы включить в цикл последнее значение управляющей переменной а.
9.1.3. Цикл "до" (цикл с постусловием) − операторы DO - LOOP
Цикл "до" может быть создан операторами DO - LOOP:
DO [ WHILE условие | UNTIL условие ]
тело цикла
LOOP [ WHILE условие | UNTIL условие ]
Оператор do...loop чем-то похож на оператор while...wend, но возможности его применения несколько шире — проверяемое условие может быть использовано не только в начале оператора, но и в конце.
Поэтому возможны четыре различные формы написания оператора:
1. первая форма
DO UNTIL условие
тело цикла LOOP
2. вторая форма
DO WHILE условие
тело цикла LOOP
3. третья форма
DO
тело цикла LOOP UNTIL условие
4. четвертая форма
DO
тело цикла
LOOP WHILE условие
ВНИМАНИЕ
Если используется ключевое слово until, цикл будет выполняться, только когда условие имеет значение "ложь".
При указании ключевого слова while цикл будет выполняться до тех пор, пока условие будет иметь значение "истина".
Размещение условий в начале или конце цикла приводит к разным результатам: при проверке условия в конце оператора цикла, конструкции, составляющие его тело, будут исполняться хотя бы один раз, в то время как при проверке условия в начале возможен вариант, что цикл исполняться вообще не будет.
В таких циклах программист сам может выбрать вариант проверки условия повторения - в начале цикла (предусловие) или в конце (постусловие). А можно воспользоваться и двумя условиями сразу или организовать бесконечно повторяющийся цикл, который можно прервать либо с помощью оператора EXIT LOOP, либо при наступлении какого-либо события (прерывание от активного внешнего устройства, истечение заданного временного интервала и т.п.). Конструкция "WHILE условие" заставляет повторять тело цикла до тех пор, пока условие остается истинным. Сочетание "UNTIL условие" приводит к повтору цикла при ложности условия.
Для организации цикла с постусловием можно использовать конструкцию DO - LOOP UNTIL
Таблица 9.6. Пример организации цикла "до" с помощью операторов | |
Блок-схема | Листинг программы и результаты расчетов |
Текст программы cls:rem Student Ivanov BGB-06 open "Ivanov1.dat" for input as #1 open "Ivanov2.dat" for output as#2 input #1, an,da,ak Q$="#.## ##.### ##.###"? " a x y" a=an do x=log(a) y=(abs(sin(x)))^(1/3)? using Q$;a,x,y? #2,using Q$;a,x,y a=a+da loop UNTIL a>ak+da/2 close 1,2 end Результаты расчетов 2.00 0.693 0.861 2.20 0.788 0.892 2.40 0.875 0.916 2.60 0.956 0.935 2.80 1.030 0.950 3.00 1.099 0.962 "Ivanov1.dat" - файл данных "Ivanov2.dat" - файл для записи результатов расчета |
Цикл с параметром
К наиболее простым вариантам организации цикла относится повтор тела, при котором по правилу арифметической прогрессии осуществляется изменение значения управляющей переменной (счетчика цикла) V:
V = Vн, V = Vн + dV, V = Vн + 2*dV,...
Имя управляющей переменной (V), ее начальное (Vн) и конечное(Vк) значения, а также величина приращения (dV) задаются в заголовке цикла с помощью оператора FOR:
FOR V = Vн TO Vк STEP dV
В качестве управляющей переменной может выступать простая переменная любого из числовых типов. Элемент массива в роли счетчика циклов не допустим. Параметры цикла (Vн,Vк,dV) могут задаваться любыми арифметическими выражениями. Если шаг приращения управляющей переменной равен единице, то конструкцию "STEP 1" в заголовке цикла можно опустить.
Для организации цикла с параметров в TurboBASIC предназначены операторы FOR и NEXT
Назначение Операторы FOR и NEXT определяют автоматически приращающийся цикл (или отрицательно приращающийся)
Синтаксис FOR variable = x TO y [step z]
.
. statements
.
NEXT [variable]...]
Комментарий variable есть численная переменная, служащая счетчиком цикла, а x, y и z являются численными выражениями, определяющими начальные и конечные условия цикла, x - начальное значение, а y - конечное значение счетчика, z - необязательное значение шага приращения.
Выполнение операторов между FOR и NEXT повторяется. С каждым прохождением через цикл значение переменной увеличивается на величину шага приращения z. Если z опускается, пошаговое приращение по умолчанию становится равным 1. Цикл завершается, когда переменная счетчика будет больше или равна y (или, для отрицательного x, меньше или равна y).
Циклы FOR/NEXT выполняются быстрее всего с целочисленными переменными в качестве переменной счетчика и константами x,y и z.
Тело цикла полностью пропускается, если начальное значение x больше y или, если z - отрицательное значение, а x меньше y.
В операторе NEXT переменная счетчика может опускаться, но если вы включите ее, то это должна быть единственно верная переменная. Например:
FOR n = 1 TO 10
.
.
.
NEXT 'NEXT n будет тоже работать, но не NEXT m
Несмотря на то, что компилятору все это безразлично, расположите операторы между FOR и NEXT двумя или тремя пространствами для структурирования цикла.
Для выхода из цикла FOR/NEXT до его завершения используйте оператор EXIT FOR.
Если NEXT появился без предшевствовавшего ему FOR, происходит ошибка выполнения 1, NEXT Without FOR (NEXT без FOR).
Таблица 9.7. Пример организации цикла с параметром с помощью оператора | |
Блок-схема | Листинг программы и результаты расчетов |
Текст программы cls:rem Student Ivanov Gruppa BGB-06 open "Ivanov1.dat" for input as#1 open "Ivanov2.dat" for output as#2 input #1, an,da,ak Q$="##.## ##.#### ##.####"? " a x y" n=ceil((ak-an)/da)+1 a=an for i=1 to n x=log(a) y=(abs(sin(x)))^(1/3)? using Q$;a,x,y? #2, using Q$;a,x,y a=a+da next i close 1,2 end Результаты расчетов 2.00 0.6931 0.8613 2.20 0.7885 0.8918 2.40 0.8755 0.9157 2.60 0.9555 0.9347 2.80 1.0296 0.9499 3.00 1.0986 0.9621 "Ivanov1.dat" - файл данных "Ivanov2.dat" - файл для записи результатов расчета |
Внутренние циклы
Тело цикла может включать другие циклы, которые принято называть внутренними или вложенными по отношению к внешнему циклу. Это могут быть как однотипные циклы, организуемые парами FOR - NEXT, WHILE - WEND, DO - LOOP, так и смешанные конструкции с любым сочетанием типов циклов и количеством их вложений. Если вложенные циклы имеют одинаковую структуру FOR - NEXT, то допускается завершать два или более циклов одним оператором NEXT:
FOR K = 1 TO 10
FOR J = 1 TO 20
S(K,J) = A(K,J) + B(K,J)
NEXT J,K
Последовательность управляющих переменных при этом задается в порядке вложения циклов.
Циклы FOR/NEXT могут быть помещены в пределах других циклов FOR/NEXT (вложение циклов). При вло- жениях циклов необходимо следить, чтобы у каждого цикла была своя переменная счетчика и чтобы внутрен- ний цикл завершался оператрором NEXT до появления NEXT, завершающего внешний цикл.
Пример неправильной организации вложенного цикла:
FOR n = 1 TO 10 'внешний цикл по n
FOR m = 1 TO 20 ' внутренний цикл по m
.
.
.
NEXT n 'ОШИБКА внешний цикл завершен раньше внутреннего
NEXT m
Поскольку коды циклов пересекаются, данный цикл не будет компилироваться.
Если множественные циклы заканчиваются в одной точке, единственный оператор NEXT, содержащий каждую переменную счетчика, будет достаточным:
FOR n = 1 TO 10
FOR m = 1 TO 20
.
.
.
NEXT m,n
Условие повторения цикла может находиться как в заголовке цикла, так и в его конечном операторе. Досрочный выход из тела цикла на строку, следующую за конечным оператором цикла, осуществляется с помощью оператора EXIT. В ранних версиях Бейсика такого оператора не было и для досрочного завершения цикла использовались обычные переходы -условные или безусловные. Они могли передать управление не только на оператор, следующий за концом цикла, но и в любую точку программы. Такие возвраты не проходят бесследно, т.к. организация повтора цикла обычно связана со стеком, где хранятся параметры цикла - указатель на начало тела цикла, имя управляющей переменной, ее конечное значение и величина приращения при очередном повторе. Если цикл не завершается нормальным образом, то такого рода информация из стека не удаляется. Это может привести как к исчерпанию выделенного под стек участка памяти, так и к неправильному выполнению последующих циклов. Поэтому мы рекомендуем любой досрочный выход из цикла производить только с помощью оператора EXIT (EXIT FOR, EXIT DO, EXIT LOOP).
| Поделиться: |
Познавательные статьи:
Последнее изменение этой страницы: 2021-04-13; просмотров: 97; Нарушение авторского права страницы; Мы поможем в написании вашей работы!
infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.86.30 (0.01 с.)