- •1.Интегрированная среда разработки Delphi
- •2.Структура программы и типы в языке Delphi
- •3.Линейные структуры
- •4.Структуры с ветвлениями
- •5.Циклы с неизвестным числом повторений
- •6.Циклы с заданным числом повторений
- •Задание к работе
- •7.Массивы
- •8.Файлы
- •9.Подпрограммы
- •10.Динамическая память Подготовка к работе
- •Контрольные вопросы
- •Задание к работе
- •Задание 1
- •Задание 2
- •11.Исключения
4.Структуры с ветвлениями
Подготовка к работе
1. Изучить возможности языка программирования для реализации:
условной и безусловной передачи управления;
вычислительного процесса с разветвляющейся структурой.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программы решения задач.
Контрольные вопросы
Какие структуры вычислительных процессов Вы знаете?
Как организовать разветвление вычислений?
Условный оператор if...then...else.
Условный оператор if...then.
Вложенные условные операторы.
Оператор выбора case …of.
Задания к работе
Вычислить значения функции по варианту задания из табл. 4 .3. Вывести значения исходных данных и полученные результаты, сопровождая их именами переменных. Значения аргумента взять из указанного диапазона так, чтобы протестировать все ветви программы. Проект – консольное приложение.
Вывести сообщения для дней недели с использованием оператора выбора. Проект – консольное приложение.
табл. 4.3. Варианты заданий
№ |
Функции и условия |
Данные |
Диапазон |
1 |
|
a = -0.5 b = 2 |
t = [0 .. 3] шаг 0.25 |
2 |
|
a = 1.5 |
x= [0.8 .. 2.8] шаг 0.25 |
3 |
|
a = 2.8 b = -0.3 c = 4 |
x = [1 .. 2] шаг 0.25 |
4 |
|
a = 1.65 b = 1.1
|
x = [0.5 .. 2] шаг 0.25 |
5 |
|
a = 2.3 |
x = [0.2 .. 3] шаг 0.4 |
6 |
|
a = 2.5 |
x =[1 .. 2.5] шаг 0.25 |
7 |
|
b = 1.5 |
x = [0.5 .. 3] шаг 0.25 |
8 |
|
|
x = [2 .. 5] шаг 0.25 |
9 |
|
a = 20.3 |
x = [0.5 .. 2] шаг 0.25 |
10 |
|
a = 0.9 |
x = [0.5 .. 2] шаг 0.5 |
11 |
|
t = 2.2 |
x = [0 .. 2] шаг 0.25 |
12 |
|
a = 2.6 b = - 0.4 |
x = [0 .. 6] шаг 1 |
13 |
|
a = 2.1 b = 1.8 c = -20.5 |
i = [0 .. 8] шаг 1 |
14 |
|
a = 2.5 n = 10 |
i = [1 .. 2.5] шаг 0.25 |
15 |
|
a = 2.5 b = 0.4 |
t = [-1 .. 1] шаг 0.2 |
Пример выполнения
Задание 1
Вычислить при y=1.3, x=[0.. 2.1] с шагом 0.3 значения функции a. Результат вывести в виде таблицы. Проект – консольное приложение.
Блок-схема алгоритма представлена на рис. 4 .6. Для организации цикла введены следующие переменные: xs - начальное значение, xk - конечное значение dx - шаг изменения аргумента x. Окно работающего приложения показано на рис. 4 .7.
Листинг программы:
program Prg_4_1;
{$APPTYPE CONSOLE}
uses
SysUtils,RusTrans;
var
a,y,x,xs,xk,dx: real;
label
20;
begin
writeln(Rus('Введите y,xs,xk,dx')); // Приглашение
readln(y,xs,xk,dx); // Ввод данных
writeln;
writeln(Rus('Таблица a(x)')); // Заголовок
x:=xs; // Начало цикла
20: if y*x<1 then a:=exp(-y*x)*cos(y*x)
else if y*x=1 then a:=cos(y*x)
else a:=y*x+1;
writeln('x=',x:5:1,' a=',a:6:3);
x:=x+dx;
if x<=xk then goto 20; // Конец цикла
readln
end.
рис. 4.6. Блок-схема алгоритма задания 1
рис. 4.7. Окно работающего приложения задания 1
Задание 2
Вывести сообщения для дней недели с использованием оператора множественного ветвления. Проект – консольное приложение. В программе в разделе объявления типов type определен тип WeekDay из 7 строк. В разделе переменных var объявлена переменная MyWeek этого типа, значениям которой в исполняемой части программы присвоены русскоязычные имена дней недели. Программа содержит цикл запроса у пользователя номера дня недели в пределах 1..7. После ввода номера в этом интервале с помощью оператора выбора case..of формируется текстовое сообщение о дне недели. Если пользователь вводит номер 0, работа приложения завершается. Ввод чисел, отличных от 0..7, программа рассматривает, как ошибку, и просит повторить ввод, Окно работающего приложения показано на рис. 4 .8.
Листинг программы:
program Prg_4_2;
{$APPTYPE CONSOLE}
uses
SysUtils,RusTrans;
label
10;
type
WeekDay=array[1..7] of string;
var
s:string;
MyWeek:WeekDay;
x:integer;
begin
MyWeek[1]:='Понедельник';
MyWeek[2]:='Вторник';
MyWeek[3]:='Среда';
MyWeek[4]:='Четверг';
MyWeek[5]:='Пятница';
MyWeek[6]:='Суббота';
MyWeek[7]:='Воскресенье';
writeln(Rus('Введите номер дня 1..7, или 0'));
writeln;
10:readln(x);
case x of
0: s:=Rus('Спасибо, до свидания');
1: s:=Rus(MyWeek[x])+Rus(' - день бездельник');
2,3,4: s:=Rus(MyWeek[x])+Rus(' - рабочий день');
5: s:=Rus(MyWeek[x])+Rus('. Уф, завтра отдыхаем!');
6: s:=Rus(MyWeek[x])+Rus(' - выходной');
7: s:=Rus(MyWeek[x])+Rus(' - выходной, а завтра..');
else
begin
writeln(Rus('Вы ошиблись, повторите'));
goto 10;
end;
end;
writeln(s);
if x<>0 then goto 10;
readln;
end.
рис. 4.8. Окно работающего приложения задания 2
Выводы
Для безусловной передачи управления применяется оператор goto <Метка>.
Для ветвлений используется оператор If <условие> then <оператор1> else <оператор2>.
Возможен сокращенный оператор ветвлений if <условие> then <оператор>.
Для множественного ветвления можно применить оператор выбора case…of. Селектор этого оператора должен быть порядкового типа (чаще всего целочисленного, например integer).
Если в ветвях then или else нужно выполнить несколько операторов, то их нужно объединить в один составной оператор с помощью операторных скобок begin…end.
Оператор ветвления может применяться для создания циклов.