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


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



ЗНАЕТЕ ЛИ ВЫ?

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



 

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

Краткие теоретические сведения

На практике редко встречаются задачи, алгоритм решения которых является линейным. Часто оказывается, что алгоритм решения даже элементарной задачи не является линейным, и выбор очередного шага решения задачи осуществляется в зависимости от выполнения некоторого условия.

Например, пусть надо вычислить по формуле ток в электрической цепи. Если предположить, что пользователь всегда будет вводить верные данные, то алгоритм решения этой задачи действительно является линейным. Однако полагаться на то, что пользователь будет вести себя так, как надо программе, не следует. Формула расчета предполагает, что величина сопротивления не равна нулю. А что будет, если пользователь введет 0? Ответ простой: возникнет ошибка "Деление на ноль", и программа аварийно завершит работу. Можно, конечно, возложить ответственность за это на пользователя, но лучше внести изменения в алгоритм решения, чтобы расчет выполнялся только в том случае, если введены верные данные.

 

Условие

 

В повседневной жизни условие обычно формулируется в виде вопроса, на который можно ответить Да или Нет. Например:

· Величина сопротивления равна нулю?

· Ответ правильный?

· Сумма покупки больше 300 рублей?

В программе условие — это выражение логического типа (Boolean), которое может принимать одно из двух значений: True (истина) или False (ложь).

Простое условие состоит из двух операндов и оператора сравнения. В общем виде условие записывается следующим образом:

Операнд1 Оператор Операнд2

где:

Операнд1 и Операнд2 — операнды условия, в качестве которых может выступать переменная, константа, функция или выражение;

Оператор — оператор сравнения.

В языке Delphi есть шесть операторов сравнения, которые приведены в табл. 2.1

 

Таблица 2.1. Операторы сравнения

Оператор Описание Результат сравнения  
> Больше True, если первый операнд больше второго, иначе False
< Меньше True, если первый операнд меньше второго, иначе False
= Равно True, если первый операнд равен второму, иначе False
<> Не равно True, если первый операнд не равен второму, иначе False
>= Больше или равно True, если первый операнд больше или равен второму, иначе False
<= Меньше или равно True, если первый операнд меньше или равен второму, иначе False

 

Ниже приведены примеры условий:

Summa < 1000

Score >= H

Sim = Chr(13)

В первом примере операндами условия является переменная и константа. Значение этого условия зависит от значения переменной Summa. Условие будет верным и, следовательно, иметь значение True, если значение переменной Summa меньше, чем 1000. Если значение переменной Summa больше или равно 1000, то значение этого условия будет False.

Во втором примере в качестве операндов используются переменные. Значение этого условия будет True, если значение переменной Score больше или равно значению переменной H.

В третьем примере в качестве второго операнда используется функция. Значение этого условия будет True, если в переменной Sim находится символьный код клавиши <Enter>, числовой код которой равен 13

При записи условий следует обратить особое внимание на то, что операнды условия должны быть одного типа или, если тип операндов разный, то тип одного из операндов может быть приведен к типу другого операнда. Например, если переменная Key объявлена как integer, то условие

Key = Chr(13)

синтаксически неверное, т. к. значение, возвращаемое функцией Chr, имеет тип char (символьный).

Из простых условий при помощи логических операторов: and — "логическое И", or -- "логическое ИЛИ" и not - "отрицание" можно строить сложные условия.

В общем виде сложное условие записывается следующим образом:

условие1 оператор условие2

где:

условие1 и условие2 — простые условия (выражения логического типа);

оператор — оператор and или or.

Например:

(ch >= '0') and (ch <= '9')

(day = 7) or (day = 6)

(Forml.Editl.Text <> ' ') or (Forml.Edit2.Text <> '')

Forml.CheckBoxl.Checked and (Forml.Editl.Text <> '')

Результат выполнения логических операторов and, or и not представлен в табл. 2.2.

 

Таблица 2.2. Выполнение логических операций

Оператор1 Оператор 2 Oператор1 and Oператор2 Oператор1 or Oператор2 Not Оператор1
False False False False True
False True False True True
True False False True False
True True True True False

 

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

Например, пусть условие предоставления скидки сформулировано следующим образом: "Скидка предоставляется, если сумма покупки превышает 100 руб. и день покупки — воскресенье", Если день недели обозначен как переменная Day целого типа, и равенство ее значения семи соответствует воскресенью, то условие предоставления скидки можно записать:

(Summa > 100) and (Day = 7).

Если условие предоставления скидки дополнить тем, что скидка предоставляется в любой день, если сумма покупки превышает 500 руб., то условие можно записать:

((Summa > 100) and (Day =7)) or (Summa > 500).

Структура ветвления

Структура ветвления алгоритма может быть реализована с помощью условного оператора и оператора выбора (варианта).

Условный оператор может иметь следующие формы записи:

1) IF <Логическое выражение> THEN <Оператор>;

Логическое выражение представляет собой условие. Данная структура ветвления изображена на рис. 2.1. Эта структура используется, если какое-либо действие должно быть выполнено только при выполнении определенного условия и пропущено, если это условие не выполняется.

 

Рис. 2.1. Структура ветвления.

Если <Логическое выражение> принимает значение – "ИСТИНА", то выполняется <Оператор>, стоящий за THEN, в противном случае выполняется оператор, стоящий после точки с запятой, т.е. следующий за условным оператором.

Пример:

if n=m

then c:=c+l;

Значение переменной с увеличивается на 1 только в том случае, если переменные n и m равны. Если они не равны, то выполняются операторы, расположенные после точки с запятой.

Формально в условном операторе после слова THEN может стоять один оператор. Если необходимо выполнение нескольких операторов, то используется составной оператор:

IF <Логическое выражение> THEN

BEGIN

<Оператор1>;

<Оператор2>

<ОператорN>

END;

Пример:

if a<>0

then begin

d:=d*2;

b:=b+3;

end;

2) IF <Логическое выражение> THEN <Оператор1> ELSE <Оператор2>;

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

 

Рис. 2.2. Структура ветвления.

 

Если <Логическое выражение> принимает значение "ИСТИНА", то выполняется <Оператор1>, иначе <Оператор2>.

Пример:

if otv=3 then

prav:=prav+l

else

ShowMessage('Ошибка!');

Условные операторы можно вкладывать друг в друга, например:

IF <Логическое выражение1>

THEN <Оператор1>

ELSE IF <Логическое выражение2>

THEN <Оператор2>

ELSE <Оператор3>;

Эта структура изображена на рис. 2.3.

 

Рис. 2.3. Вложенное условие.

Else всегда относится к ближайшему if.

IF <Логическое выражение1>

THEN BEGIN <Оператор1>

IF <Логическое выражение2>

THEN <Оператор2>

END;

ELSE <Оператор3>;

Else в данном случае относится к первому if, но если убрать begin и end, будет относиться ко второму.

 

Компонент Memo

 

Компонент Memo находится на вкладке Standard и выглядит так: . Он позволяет вводить и выводить текст, состоящий из достаточно большого количества строк. Добавляется на форму как все остальные компоненты. В таблице 2.1 перечислены свойства компонента Memo.

 

Таблица 5.3. Свойства компонента Memo

 

Свойство Определяет
Name Имя компонента. Используется в программе для доступа к свойствам компонента
Text Текст, находящийся в поле Memo. Рассматривается как единое целое
Lines Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру
Lines.Count Количество строк текста в поле Memo
Left Расстояние от левой границы поля до левой границы формы
Top Расстояние от верхней границы поля до верхней границы формы
Height Высоту поля
Width Ширину поля
Font Шрифт, используемый для отображения вводимого текста
ParentFont Признак наследования свойств шрифта родительской формы

 

Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с нуля).

Чтобы добавить в поле Memo новую строку текста, используется метод Add.

Например:

Memo1.Lines.Add(‘x1=’+FloatToStr(x1));

Чтобы очистить Memo, используется метод Clear.

Например:

Memo1.Clear;

 

Задание к выполнению лабораторной работы

Задание А

Выполнить пример, приведенный в описании порядка выполнения данной лабораторной работы.

Задание Б

Для функции y=y(x), заданной графически, построить аналитическую зависимость. Составить блок-схему и программу вычисления величины y при заданном значении аргумента.

Задание В

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

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

 

Пример. Решение квадратного уравнения.

Общий вид квадратного уравнения: ax2+bx+c=0

Прежде всего находят дискриминант по формуле: D=b2-4ac.

Если дискриминант меньше нуля, то уравнение не имеет вещественных корней.

Если дискриминант больше нуля или равен нулю, то существуют 2 корня, которые вычисляются по формулам:

1. Открыть новое приложение с помощью команды File| New Application.

2. Сохранить проект.

3. На форме Form1 разместить компоненты Label1, Label2, Label3, Label4; Memo1; Edit1, Edit2, Edit3, Button1, Button2 как показано на рис. 2.4.

4. Свойству Caption метки Label1 задать значение

‘Введите коэффициенты квадратного уравнения

A * X ^ 2 + B * X + C = 0’

Разместить этот текст в двух строках и выровнять его по центру, установив следующие значения свойств:

AutoSize – False

WordWrap – True

Alignment – taCenter

Размеры метки и ее местоположение отрегулировать вручную. Размер и тип шрифта установить с помощью свойства Font.

5. Для меток Label2, Label3, Label4 установить свойство Caption равным ‘A=’, ’B=’, ’C=’ соответственно.

6. Для компонентов Edit1, Edit2, Edit3 установить свойство Text равным пустой строке.

7. Для компонента Memo1 выбрать свойство Lines и открыть окно String list editor. Удалить в нем строку ‘Memo1’.

8. Для кнопок Button1, Button2 установить свойство Caption равным ‘Решение’ и ’Очистить’ соответственно.

9. Выполнить двойной щелчок на кнопке ‘Решение’ и определить следующий обработчик события OnClick:

procedure TForm1.Button1Click(Sender:TObject);

var a,b,c,d,x1,x2:double;

begin

if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or (Edit1.Text='0')

then showmessage(' Неверно введены данные ')

else begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

c:=StrToFloat(Edit3.Text);

d:=b*b-4*a*c;

if d>=0 then

begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

Memo1.Lines.Add('Результат');

Memo1.Lines.Add('x1='+FloatToStr(x1));

Memo1.Lines.Add('x2='+FloatToStr(x2));

end;

if d<0 then Memo1.Lines.Add('Решений нет');

end;

end;

 

 

Рис. 2.4. Вид приложения

 

10. Вернуться в форму с помощью клавиши F12, выполнить двойной щелчок на кнопке ‘Очистить’ и определить следующий обработчик события OnClick:

procedure TForm1.Button2Click(Sender:TObject);

begin

Memo1.Clear;

end;

11. Откомпилировать и выполнить программу.

 

Содержание отчета

1. Тема, цель лабораторной работы и постановка задания в соответствии с вариантом.

2. Схематичное изображение главной формы приложения для заданий Б и В.

3. Блок-схемы.

4. Тексты программ.

5. Ответы на контрольные вопросы.

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

Задание Б

 

 

 

Задание В

 

1. Если три данных числа являются длинами сторон прямоугольного треугольника, то вычислить его площадь и периметр.

2. Определить, попадает ли точка (х, у) в круг радиуса R с центром в точке (а; b).

3. Найти наименьшее расстояние между точками A(x1,y1), B(x2,y2), C(x3,y3).

4. Если три данных числа могут являться сторонами равностороннего треугольника, то найти его площадь по формуле Герона , где p = (a + b + c)/2.

5. Зная значения длин сторон треугольника, определить его вид (разносторонний, равнобедренный, равносторонний).

6. Некоторая величина принимает одно их трех значений x, y, z. Найти ее максимальное отклонение от среднего значения.

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

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

9. Найти стоимость покупки с учетом скидки. Величина скидки в y % предоставляется в случае, когда x – сумма покупки больше z рублей.

10. Даны координаты вершин треугольника, определить, является ли он прямоугольным, и вывести длину наибольшей стороны.

11. Вычислить расстояние |AB|, |AC|, |BC| между точками A(x1,y1), B(x2,y2), C(x3,y3). Если |AB| > |BC|, то найти |AB| + |AC| + |BC|, иначе вывести значение |AC|.

12. Решить систему уравнений по формуле Крамера:

13. Дано натуральное трехзначное число. Определить количество одинаковых цифр в записи этого числа.

14. Установить, будет ли треугольник с вершинами в точках A(x1,y1), B(x2,y2), C(x3,y3) равносторонним.

15. Даны три целых отрицательных числа. Перемножить их попарно и полученные три положительных числа вывести в порядке возрастания.

16. Установить, будут ли прямые, проходящие через точки A, B и B, С, взаимно перпендикулярны.

17. Установить, будет ли треугольник с вершинами в точках A(x1,y1), B(x2,y2), C(x3,y3) равнобедренным.

18. Установить, будут ли точки A, B симметричными относительно одной из координатных осей.

19. Дано натуральное трехзначное число. Определить является ли оно числом- палиндромом, т.е. одинаково читается при записи справа налево и наоборот.

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

21. Вычислить значение выражения при заданных значениях x, y, z:

.

22. Установить, будут ли точки A, B симметричными относительно начала координат.

23. Установить, является ли четырехугольник с вершинами в точках A(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4) прямоугольником.

24. Вычислить значение выражения при заданных значениях x, y, z:

.

25. Дано натуральное трехзначное число. В записи этого числа найти максимальную цифру и записать ее в старший разряд числа.

26. Даны координаты вершин треугольника. Если треугольник прямоугольный, вычислить его площадь, в противном случае вычислите его периметр.

27. Задано натуральное трехзначное число. Если в записи этого числа все цифры четные, то найти их сумму, и вычислить их произведение, если это не так.

28. Дано целое четырехзначное число. Проверить, что все четыре цифры числа различны.

29. Известны координаты четырех точек. Выяснить, образуют ли они равнобедренную трапецию.

30. Дана кривая, заданная уравнением y=x2+c и известна длина отрезка. Определить, можно ли данным отрезком соединить точки, координаты которых являются корнями кривой.

 

 

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

  1. Какие алгоритмы называются нелинейными?
  2. Что представляет собой условие?
  3. Какие два значения может принимать выражение логического типа?\
  4. Перечислите известные вам операторы сравнения.
  5. Какие логические операторы вы знаете? Что они означают и для чего используются?
  6. Приведите пример сложного условия.
  7. Какие два вида условного оператора вы знаете? Приведите примеры.
  8. Как в блок-схеме изображается условие?
  9. Когда используется составной оператор?
  10. Можно ли вкладывать друг в друга условные операторы?
  11. Для чего используется компонент Memo?
  12. Что определяет свойство компонента Lines компонента Memo?
  13. Как добавить в поле Memo новую строку? Как очистить поле Memo?
  14. Как разместить текст свойства Caption в нескольких строках?

 

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



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 694; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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