Разработка программ с разветвленной структурой 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Разработка программ с разветвленной структурой



Цель работы

Приобретение навыков в составлении и отладке программ на языке Turbo Pascal с использованием операторов: условного перехода if, разветвления case, безусловного перехода goto.

Задание на лабораторную работу

1. Освоить функции системы Turbo Pascal по отладке программы (п. 2.5).

2. Составить программу, работающую в диалоговом режиме (диалог организовать с помощью оператора Case).

Требования к программе

Программа должна выполнять следующие действия:

– вывод меню;

– вывод сообщения о назначении программы;

– ввод данных;

– вычисления и вывод результатов.

Результаты работы выводятся в отформатированном виде.

Порядок выполнения работы

1. Получить вариант задания (п. 2.8).

2. Изучить функции Turbo Pascal по отладке программы (п. 2.5).

3. Подготовить текст программы и отладить её с использованием интегрированной среды программирования Turbo Pascal (п. 2.5, 2.6, 2.7).

4. Во время отладки использовать не менее двух контрольных точек останова (п. 2.5). Проверить работу программы при различных значениях исходных данных, требующих использования разветвленного алгоритма.

5. Устно ответить на контрольные вопросы (п. 2.10).

6. Оформить отчёт (см. п. 1.10)

Технология отладки программы в интегрированной среде программирования Turbo Pascal

При выполнении лабораторной работы описание этапов подготовки текста программы, компиляции и запуска на выполнение смотрите в лабораторной работе №1 (п. 1.5, 1.7, 1.8).

Если программа успешно откомпилирована и выполнена, но результаты работы не будут правильными, это значит, что программа содержит одну или несколько логических ошибок, то есть полученные после выполнения программы результаты не совпали с ожидаемыми.

Возможно, неправильно обрабатывается ввод данных или допущена ошибка в вычислениях, или допущена ошибка при программировании вывода данных.

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

С этой целью в Turbo Pascal обеспечивается возможность трассировки, то есть выполнение программы «по шагам».

Чтобы начать сеанс отладки, выберете команду Run/Trace Info или нажмите F7. Первое утверждение begin в теле исполняемой программы будет выделено на экране подсвеченной строкой зеленого цвета. С этого момента мы будем называть эту полосу полосой запуска. Первое нажатие F7 запускает сеанс отладки. Отладчик выполнит невидимый код запуска. Следующая выполняемая строка программы – первый оператор из блока программы. Каждое нажатие F7 вызывает выполнение подсвеченного оператора.

Примечание. Для выполнения оператора Readln необходимо ввести запрашиваемые данные в соответствии с их объявлением.

Использование окна Watch (окна наблюдения). Чтобы посмотреть значение переменных, необходимо выполнить следующие действия:

– нажать Ctrl-F7 или выбрать пункт меню Debug/Add watch;

– ввести имя просматриваемой переменной.

В окне Watch заданная переменная появится со своим текущим значением.

Добавление других переменных или выражений выполняется аналогично.

Для выполнения следующего шага программы нажмите F7 или выберите Run/Trace Info.

Прервать пошаговое выполнение программы можно нажатием Ctrl-F2 или выбором команды Run/Program reset.

Контрольные точки останова. Для отладки больших программ, чтобы не просматривать весь текст в поиске нужного места, можно установить контрольную точку – точку останова. Она похожа на сигнал «стоп» для программы. Для задания точки останова нужно выполнить следующие действия:

– установить курсор в нужной строке,

– нажать Ctrl-F8 или выбрать пункт меню Debug\Add breakpoint. После этого выбранная строка становится красной – в ней устанавливается точка останова. Если там уже имеется точка останова, то она отменяется.

После того как вы установите все контрольные точки останова, запустите программу на выполнение. Программа будет выполняться до первой точки останова. После останова программы вы можете просмотреть текущие значения переменных и продолжить выполнение программы нажатием F7 или F8.

По окончании отладки необходимо удалить все точки останова. Для этого нужно выбрать Debug\Breakpoints. На экране будет выведено окно списка точек останова. Для удаления всех точек нужно выбрать Clear All.

Часто просмотр значений переменных в конкретном месте программы осуществляется следующим образом:

– установить курсор в нужную строку,

– нажать F4 или выбрать команду Run\Go to.

Произойдет запуск программы на выполнение с остановом в строке, на которой установлен курсор.

Чтобы закрыть окно просмотра, необходимо сделать его текущим (переход из одного окна в другое выполняется при помощи F6) и нажать Alt-F3.

Справки по операторам

2.6.1. Оператор IF

Основным средством разработки разветвленных структур алгоритмов в Turbo Pascal являются условные операторы if и case. С их помощью можно влиять на последовательность выполнения операторов программы.

Оператор if предназначен для выполнения одного из двух возможных действий (операторов) в зависимости от некоторого условия (при этом одно из действий может быть пустым, то есть отсутствовать).

В качестве условия выбора должно быть логическое выражение; Например, A>B; (A+X)<>N; (A>B) and (B>C).

Оператор if может принимать одну из следующих форм:

1. if <условие> then <оператор 1> else <оператор 2>;

{если <условие> то <оператор 1> иначе <оператор 2>;}

2. if <условие> then <оператор 1>;

{если <условие> то <оператор 1>;}

Оператор if выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значение булевского типа. В первом случае, если значение есть true (истина), то выполняется <оператор 1>, указанный после ключевого слова then, иначе выполняется <оператор 2>, указанный после ключевого слова else. Во втором случае, если результат вычисления выражения есть false (ложь), то выполняется оператор, следующий за оператором if.

Например:

·····························

if x>y then max:=x else max:=y;

·····························

При x>y выполняется оператор max:=x, при x£y выполняется оператор max:=y

Пример оператора if без else:

·····························

if x>y then writeln(x);

·····························

При x>y выполняется оператор writeln(x), иначе выполняется оператор, следующий за оператором if.

Часто возникает необходимость выполнять в одной из ветвей (или в обеих ветвях) условного оператора несколько команд. В этом случае используется составной оператор.

Составной оператор – группа операторов, помещенных между ключевыми словами begin и end.

Например:

if x>y then

begin { начало составного оператора }

max:=x;

writeln(‘max=’, max);

end { конец составного оператора }

else

x:=x+1;

В качестве оператора в одной ветви или в обеих ветвях могут быть использованы условные операторы. Такие операторы называются вложенными.

Например:

if x< -3 then y:=x+1 else

if x>3 then y:=x*x else y:=y*y;

Примечание. Служебное слово else всегда ассоциируется с ближайшим по тексту if.

2.6.2. Оператор выбора CASE

Оператор case позволяет сделать выбор из произвольного числа имеющихся вариантов. С его помощью можно сопоставить различным значениям некоторого выражения, называемого селектором (от selection – выбор), соответствующие им операторы.

Оператор case имеет следующий формат:

case <выражение-селектор> of

константа или список констант №1: <оператор 1>;

константа или список констант №2: <оператор 2>;

·····························

константа №N: <оператор N>

else <альтернативный оператор>

end;

Оператор case работает следующим образом. Сначала вычисляется значение выражения селектора, затем выполняется тот оператор, константа выбора которого равна текущему значению селектора. Если ни одна константа не равна значению селектора, то выполняется альтернативный оператор, стоящий за словом else. Альтернативный оператор можно не писать.

Например:

write(‘Введите значение n =’);

readln(n);

case n of

1: y:=x;

2: y:=x*x;

3: y:=x*x*x

else y:=0

end;

writeln(‘y=’, y);

При n=1 выполняется оператор y:=x.

При n=2 выполняется оператор y:=x*x.

При n=3 выполняется оператор y:=x*x*x.

При любых других значениях n выполняется оператор y:=0.

После завершения оператора case выполняется оператор writeln(‘y=’, y). Кроме одиночных констант могут быть заданы списки и/или диапазоны значений.

Например:

case n of

0,1..4: y:=x;

2,5: y:=x*x;

3: y:=x*x*x

end;

При использовании оператора case должны выполняться следующие правила:

– значение селектора должно принадлежать дискретному типу; для целого типа integer оно должно лежать в диапазоне -32768..32767;

– все константы, предшествующие операторам альтернатив, должны иметь тип, совместимый с типом селектора;

– все константы в альтернативах должны быть уникальны в пределах оператора case;

– диапазоны не должны пересекаться и не должны содержать констант, указанных в данной альтернативе или в других альтернативах.

2.6.3. Оператор GOTO

Оператор безусловного перехода goto означает «перейти к» и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий оператор, а какой-нибудь другой. Метка объявляется в разделе описания меток и может содержать как цифровые, так и буквенные символы. Метка отделяется от помеченного оператора двоеточием.

Например:

·····························

label M1;

var

n: integer;

x,y: real;

begin

readln(n,x);

·····························

goto M1;

·····························

M1:

y:=x*2-3/x;

writeln(‘y=’, y);.

Пример программы с разветвленной структурой

Составить программу вычисления функции

Program Lab1;

Uses CRT; { Раздел объявления внешних модулей }

Label M1,M2;

var

n: integer;

x,y: real;

p: byte; {Признак выполнения пунктаN1}

begin

clrscr; { Очистка экрана }

writeln(‘Программа вычисления функции...’);

{ Вывод на экран меню }

writeln(‘+--------------------------------------------+’);

writeln(‘| 1. Ввод данных |’);

writeln(‘| 2. Вычисление функции и вывод результатов |’);

writeln(‘| 3. Завершение работы программы |’);

writeln(‘+--------------------------------------------+’);

p:=0;

M1: writeln(‘введите пункт меню’);

readln(n); { Ввод номера пункта меню}

case n of

1: begin { Ввод данных }

M2: write(‘Введите значение аргумента x=’);

readln(x)

{ Проверка допустимого значения аргумента }

if x=0 then

begin

writeln(‘x не может быть равным 0 по условию’);

goto m2;

p:=1; {Пункт N1 выполнен}

end; end;

2: { Вычисление значения функции }

begin

If p<>0 then

Writeln (‘Данные не введены, выполните пункт N1’);

else

begin

{ Операторы вычисления и вывода значения функции }

if x>0 then y:=1/x else y:=x*x;

writeln(‘при х=’, x:7:2, ‘ y=’, y:7:2)

end

end;

3: Exit { Выход из программы }

end; { end case }

goto M1;

end. { Конец программы}

Варианты заданий

1. Вычислить объем тела со сторонами A, B, C и определить, является ли данное геометрическое тело кубом.

2. Вычислить площадь треугольника со сторонами А, В, С. Перед вычислением площади проверить условие существования треугольника с заданными сторонами.

3. Вычислить площадь треугольника со сторонами A, B, C. Определить, является ли треугольник равнобедренным.

4. Вычислить площадь прямоугольника со сторонами A и B и определить, является ли данная фигура квадратом.

5. Составить программу нахождения корней квадратного уравнения у=ах2+bх+с.

6. Определить, можно ли сделать круглую заготовку с заданным радиусом R из квадратного листа фанеры с заданной стороной A.

7. Определить, хватит ли имеющейся суммы S на покупку N-го количества товара (при известной цене товара).

8. Определить, можно ли сделать две квадратных заготовки со стороной А из листа железа прямоугольной формы со сторонами В и С.

9. Определить, достаточно ли имеющейся ткани для изготовления изделий двух видов, если известны: расход ткани на каждое изделие, количество изделий каждого вида, количество имеющейся ткани.

10. Рассчитать сумму оплаты за потребленную энергию, если известны: стоимость 1 квт\час, расход энергии, коэффициент льгот (льготы могут отсутствовать).

11. Определить, достаточно ли бензина для поездки, если известны: длина пути, количество бензина в баке и расход бензина на 1 км.

12. Определить, будет ли начислена студенту стипендия по результатам экзаменов (стипендия начисляется, если все экзамены сданы на «хорошо» и «отлично»).

13. Определить, будет ли зачислен абитуриент в студенты по результатам вступительных экзаменов, если известны: проходной балл; количество баллов, набранных абитуриентом по каждому экзамену.

14. Определить, изделия какой из двух групп товаров выгоднее сшить из одного рулона ткани, если известны: расход ткани на каждое изделие и цена готового изделия, количество метров в рулоне.

15. Определить выполнен ли план по продаже товара за день, если известны: план продажи (в рублях), количество проданного товара и цена товара.

16. Определить, продажа какой из двух валют составила большую прибыль, если известны: курс покупки, курс продажи, количество продаж по каждой валюте.

17. Определить наибольшую выручку от продажи трех видов товаров, если известны: цена товара; количество проданных товаров каждого вида.

18. Определить сколько корней имеет уравнение y= ах2+вх+с.

19. Определить, является ли число А четным или нечетным.

20. Вычислить площадь треугольника со сторонами A, B, C и определить, является ли данный треугольник равносторонним.

Содержание отчета (см. пункт 1.10)

2.10. Контрольные вопросы

1. Назначение, формы записи и порядок выполнения оператора условия if.

2. Особенности использования вложенных условных операторов.

3. Каковы отличия оператора выбора case от оператора условия if?

4. Какие правила должны выполняться при использовании оператора выбора case?

5. Назначение и особенности оператора безусловного перехода.

6. Для чего нужна отладка программы?

7. Как выполнять программу в пошаговом режиме?

8. Как поставить точку останова?

9. Как отменить точки останова?

10. Как открыть окно Watch?

11. Как внести переменную в окно Watch?

 

Лабораторная работа №3



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 445; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.190.156.80 (0.061 с.)