КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Разветвляющиеся программы
Туре END END. То же самое будет, если записать программу: Program Prim2a; Var k,L: integer, R,a,S:real; Begin writeln ('введите целые k,L'); readln (k,L); writeln ('введите вещественные r,S,a'); readln (R,S,a); writeln(l-l/(l+sqr(r*a/k))/(exp(2)/sqr(s)*sqr(l+r*a/l)), readln; END. Последний оператор writeln вначале вычислит арифметическое выражение, а затем выведет на экран его значение в виде числа. Если мы хотим, чтобы результат был в виде 'результат Y = число', то необходимо последний writeln написать в следующем виде: writeln ('результат Y =',1-l/(l+sqr(r*a/k))/exp(2)/sqr(s) *sqr(l+r*a/l)); тогда машина вначале выведет текст, взятый в апостроф, т.е. "результат Yi", а затем его значение.
2.7. Раздел описания типов
Помимо вышеперечисленных стандартных типов в Паскале могут быть применены типы, определенные пользователем, т.е. перечисляемые и интервальные типы. Перечисляемые типы задаются непосредственным перечислением всех значений, которые может принимать переменная данного типа. Описать типы, определенные пользователем, можно в разделе Var или предварительно в разделе Туре, а затем – в Var. рассмотрим оба варианта. Пусть нам нужна переменная с именем season (сезон года). она может принимать значения winter (зима), spring (весна), summer (лето), autumn (осень), другие значения она принимать не может. Тогда нужно сделать следующее описание: Var season: (winter, spring, summer, autumn). Здесь тип season задан перечислением всех констант, которые могут быть занесены в ячейку памяти season. Попытка занести в ячейку season любое другое значение приведет к ошибке – "несоответствие типа". Если переменных данного типа будет несколько, удобнее и нагляднее вначале определить тип в разделе Туре (описание типа), а затем в разделе Var сослаться на этот тип, и машина в Var выделит конкретные ячейки памяти для хранения данных указанного типа. Например, необходимо определить, что Gi, G2, G3, G4 будут ячейками памяти, в которых могут храниться наименования газов Со, О, N, F, а в ячейках памяти Metall1, Metall2, Metall3 – наименования металлов Fе, Со, Na, Cu, Zn, тогда можно применить описание: VAR GI, G2, G3, G4: (CO,O,N,F); Metall1, Metall2, Metall3: (Fe,Co,Na,Cu,Zn). Можно использовать и другое, более наглядное описание. вначале определить тип Gaz, Met, а затем на них сослаться: Туре Gaz=(Co, О, N, F); Met = (Fе, Со, Na, Cu, Zn); Var GI, G2, G3, G4: GAZ; Metall1, Metall2, Metall3, Met; Особенно удобно применение раздела Туре, если он находится во внешнем блоке, а ссылки на него идут во внутренних блоках (см. раздел "Блоки"). Тогда значительно экономится память, поскольку она может быть практически одной и той же в разных блоках. При описании переменных перечисляемого типа данные внутри скобок являются константами, которые может принимать описываемая переменная. Над данными такого типа допустимо выполнять операции отношения и логические операции (см. далее). Например, для приведенного выше описания данного season будет истинным высказывание: " winter < spring ". При работе с данными перечисляемого типа можно применять стандартные функции Succ, Рred, Ord. Succ (аргумент) возвращает значение, следующее за элементом, указанным как аргумент. Если следующего элемента нет (закончились), то это приводит к программному прерыванию (ошибке). Рred (аргумент) возвращает предыдущее значение из перечня констант, из которых состоит данный тип. Ord (аргумент) возвращает порядковый номер аргумента в списке констант, перечисленных в описании в виде целого числа. Элементы пронумерованы в порядке 0,1,2,..., т.е. первый элемент имеет номер 0. Пример: Туре month = ('jan','fab','mar','apr','may','jun','jul','aug','sep','ocf','nov','dec'); Var a,b,c,d,c,mes: month; f,h,g: integer; Begin mes: =jul; a: = Pred (mes); {в a находится 'jun'} b: = Succ (mes); {в b находится 'aug'} с: = Pred (pred(mes)); {в с находится 'mау'} d: = Succ (succ(mes)); {в d находится 'sep'} e: = Succ (pred(mes)); {в е находится 'jul'} f: = Ord (mes); {в f находится 6} h: = Ord (pred(mes)); {в h находится 5} g: = Ord (succ(mes)); {в g находится 7} Интервальный тип задается диапазоном изменения констант внутри какого-либо уже имеющегося перечисляемого или стандартного типа, кроме вещественного (integer, byte, booban, char). Значение первой константы должно быть меньше значения второй константы диапазона. Dni = 1...31; Litera = 'a',...,'z', Var Rabdni,bolndni, vuhod: dni; {могут принимать значения 1-31} im,ident: litera; {могут принимать значения 'A'-'Z'} Выход за пределы диапазона вызывает программное прерывание. Допускается задание диапазона именами констант: Const min = 1; max = 31; Туре Dni = min…max; Var rabdni,boldni,vuhoddni:dni; Для интервального типа также возможно применять функции Succ, Pred, Ord.
3.1. Общие положения
До сих пор мы рассматривали линейные программы, алгоритм которых можно было представить в виде блок-схемы (рис. 3.1)
Возможны случаи, когда программа ветвится в зависимости от какого-либо условия (см. рис. 3.2). Ветвление может быть двух направлений: по принципу условие верно – идти по одной ветви, условие ложно – по другой. В этом случае применяется оператор if. возможно ветвление сразу нескольких направлений: если k=l – идти по одной ветви, если k=2 – по другой, k=3 – по третьей и т.д. в этом случае удобнее применять оператор Case.
3.2. Оператор goto, раздел описания меток
Последовательное выполнение операторов в программе может быть нарушено оператором перехода. Общий вид оператора: goto метка; где метка – буква, либо цифра, либо набор букв и цифр, из которых первая – всегда буква, Например, М1, LI, NK. Метка, стоящая после goto, указывает, куда нужно пойти. Достигается это тем, что если в программе находится оператор goto метка; то в этой же программе обязательно имеется какой-либо оператор вида метка: оператор; который считается помеченным, и машина, встретив goto метка; не будет выполнять оператор, записанный после оператора goto метка; а перейдет к выполнению оператора метка: оператор;
Иллюстрация: а: = b+с; с: = sgrt (a+exp(b)); goto M1; z: = x+y; writeln (z); M1: S: = P; В случае, если бы не было оператора goto М1; все операторы выполнялись бы последовательно один за другим. здесь же после оператора с: =... стоит goto М1; следовательно, машина не будет выполнять z:=... и writeln..., а сразу после с: =... перейдет к выполнению оператора М: S: = Р; Метки, применяемые в программе, должны быть описаны в разделе описания меток, который желательно ставить первым среди описаний. Выглядит раздел так: Label М1, М2, L, NK; т.е. после слова Label перечисляются через запятую все метки, которые будут применяться в данном блоке (программе). Заканчивается описание символом ';'. Пример: составить программу, вычисляющую значения функции cos х, где начальное х = 0, следующее х = 0.01 и т.д. Program Prim3; Label M; Var x:real; BEGIN x:=0; M: writeln('x=',x,'cos x = ',cos(x)); x:=x+0.01; goto M; readln; END. Программа будет работать следующим образом: х присвоится значение 0; writeln выведет на экран текст, который указан в первых кавычках х =, далее извлечет из ячейки х значение и выведет его на экран; затем снова выведет текст cos х =, затем вычислит значение cos х и выдаст его на экран, т.е. машина выведет первую строку в виде x = 0.0000000000Е + 00 cos х = 9.9999999999Е - 01. После этого возьмется то х, которое было извлечено из ячейки памяти х (прежнее значение х), т.е. 0.0, к нему прибавляется величина 0.01 и результат снова занесется в ячейку памяти х так, что в х будет 0.01, после этого оператор goto m; передаст управление оператору, помеченному меткой м, т.е. оператору writeln, и машина выдаст новую строку: x = 1.0000000000Е - 02 cos х = 9.9995000041Е - 01; – выполнит оператор х: =x + 0.01, получит х = 0.02; – выведет строку x = 2.0000000000Е - 02 cos х = 9.9980000666Е – 01; – сделает х = 0.03 и т.д., до бесконечности, так как в данном алгоритме окончание работы не предусмотрено. Для завершения работы следует применить оператор if. 3.3. Оператор if Общий вид: If булевское выражение then оператор else оператор; Работа оператора: вначале вычисляется булевское выражение, значение которого в конечном итоге может быть только TRUE или FALSE. Если булевское выражение TRUE, то выполняется оператор, следующий за словом then, а затем происходит переход к оператору, следующему за if. Если булевское выражение false, то выполняется оператор, следующий за словом else, затем происходит переход к оператору, следующему за оператором if. Замечание: после оператора, следующего за then, перед else символ ';' не ставится, так как оператор if еще здесь не закончен, а ';' ставится после окончания оператора. Возможно применение сокращенного оператора if: If булевское выражение then оператор; Здесь, если булевское выражение true, выполняется оператор, следующий за словом then, и происходит переход к оператору, следующему за оператором if. Если булевское выражение false, то оператор if игнорируется (вообще не выполняется), а выполняется оператор, следующий за if. Переделаем "бесконечную" программу п. 3.2. в такую, которая остановится тогда, когда х станет равным 0.1. Program Prim4; Label M; Var x:real; BEGIN x:=0; M: writeln('x=',x,' cos x = ',cos(x)); x:=x+0.01; if x<=0.1 then goto M; readln;
Дата добавления: 2014-12-17; Просмотров: 462; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |