Лабораторная работа 6.
Управляющие конструкции языка. Оператор безусловного перехода.
В языке программирования Паскаль, и следовательно в системе программирования TurboPascal 7.0 поддерживаются современные методологии проектирования программ (нисходящее, модульное проектирование, структурное программирование).
Концепция структурного программирования пришла в своё время на смену линейному программированию, реализованному в таких языках программирования как Бейсик. 3 настоящее время наиболее применяемой является структурная концепция программирования. 3 структурном программировании принят естественный порядок выполнения программы: все операторы выполняются последовательно один за другим в том порядке, как они записаны. Для структурированных программ характерны легкость отладки и корректировка, низкая частота ошибок.
Описанный в данной лабораторной работе безусловный оператор, строго говоря, просто "запрещён" структурной концепцией как грубо нарушающий её основные принципы, и является "атавизмом" оставшимся как воспоминание о более примитивном линейном программировании. Система программирования TurboPascal 7.0 обладает достаточно мощными средствами, позволяющими полностью отказаться от применения этого оператора.
Учитывая все описанные выше причины, настоятельно рекомендуется вообще отказаться от использования оператора безусловного перехода, или свести его применение к минимуму. Если же вы всё-таки решили применить его в своей программе, то вы должны помнить, что использовать этот оператор следует крайне осторожно. Широкое его применение без особых на то оснований ухудшает понимание логики работы программы. 5е-зусловный переход можно осуществлять далеко не из каждого места программы. Так, нельзя с помощью этого оператора перейти из основной программы в подпрограмму, или выйти из подпрограммы, не рекомендуется осуществлять переход внутрь структурированного (составного) оператора, т.к. он может дать неправильный результат, с помощью оператора перехода, расположенного вне условного оператора или оператора цикла, нельзя перейти внутрь этого условного оператора или оператора цикла и т.д.
Оператор безусловного перехода.
Оператор безусловного (быстрого) перехода GOTO позволяет изменить стандартный последовательный порядок выполнения операторов и перейти к выполнению программы, начиная с заданного оператора.
Форма записи оператора.
GOTO<метка>
Он указывает, что дальнейшая работа программы должна продолжатся с оператора, на котором стоит <метка>. Оператор, на который происходит переход, должен быть помечен меткой. Эта же метка должна быть указана в операторе GOTO, и описана в разделе описания меток.
Описание меток.
Метки используемые в TP, могут быть двух типов:
целым числом в диапазоне от 0 до 9999;
обычным идентификатором.
Все перечисленные метки должны быть перечислены в разделе объявления меток, начинающимся зарезервированным словом label, например:
label 1, 2, MetJca;
Одной меткой можно пометить только один оператор. Метка от помеченного оператора отделяется двоеточием. Метка может устанавливаться перед любым оператором, в том числе и перед пустым оператором. Например:
1: Write(‘Привет’);
Пустой оператор.
Пустой оператор не предписывает никаких действий. По определению он представляет собой пустую совокупность символов. Как и все операторы, пустой оператор может быть помечен меткой.
Примеры программ.
Пример 1.
Найти частное от деления целых чисел.
PROGRAM Ех_1;
LabelOut; {описаниеметки}
Var X,Y,Res: Integer;{описание переменных}
Begin
Write(‘Введите делимое: ‘); {вывод сообщения на экран}
Readln(X); {ввод числа}
Write( ‘Введите делитель: ‘);
Redln(Y);
if Y = 0 then {ветвление}
begin {составной оператор}
Writeln(‘деление на ноль’);
GOTO Out; {использование GOTO}
end;
Res := X div Y; Write (‘Частное = ‘,Res);
Out: {метка на "пустой" оператор}
End.
ПРИМЕР2
Программа определения частного действительных чисел, исключающая деление на ноль, и производящая запрос об окончании работы программы.
PROGRAMM Ех_2 ;
Label1, 2;
Varх,у,res: real; s: byte;
Begin
1: Write(‘Введитеделимое:’); Readln(x); Write(‘Введитеделитель:’); Readln(у);
if Y = 0 then beginWriteln(‘делениенаноль’); GOTO 2; end;
res := x/y; Writeln(‘Частное =’ ,res);
2: Write(‘Продолжитьвычисления? 1-да, 2-нет. :’); Readln(s);
if s = 1 then GOTO 1;
End.
Контрольные вопросы.
1 Назовите причины нежелательного использования оператора безусловного перехода.
2 Что такое метка? Как она описывается и используется?
3 Что такое пустой оператор?
Задания для самостоятельного выполнения лабораторной работы 6:
1 Напишите программу "калькулятор", позволяющую вычислять по выбору одну из четырёх основных арифметических операций. Снабдите программу запросом об окончании работы.
2 Напишите программу выбора наибольшего из трёх, введённых с клавиатуры действительных чисел, и производящую запрос об окончании работы.
3 Напишите программу вычисления квадратного корня из числа введённого с клавиатуры. Исключите вычисление корня из отрицательных чисел и нуля. Снабдите программу запросом об окончании работы.
4 Напишите программу, которая выводит название дня недели по номеру дня введённому с клавиатуры. Исключите несуществующие номера дней недели и снабдите программу запросом об окончании работы.
5 Напишите программу, которая возводит действительное число, введённое с клавиатуры, в степень, введённую с клавиатуры в диапазоне от 2 до 9. Исключите несуществующие (меньше 2 и больше 9) степени, и снабдите программу запросом об окончании работы.
6 Напишите программу, которая выводит на экран квадраты целых чисел от числа а до числа b.
7 Напишите программу вычисления значения функции у=х2-16х+32 для х от 1 до 10 с шагом 0,25.
8 Напишите программу вычисления функции
y=х3, при х>0
у =х2, при -2>=х>=0
y=х, в остальных случаях для х в диапазоне от -5 до 5 с шагом 0,5.
9 Напишите программу вычисления функцииf(х) =4х2+16(х+2) для х от а до b с шагом d введённым с клавиатуры.
10 Напишите программу определения времени года по порядковому номеру недели. Снабдите программу запросом об окончании работы.
Do'stlaringiz bilan baham: |