АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ПОСТРОЕНИЕ ВЕТВЯЩИХСЯ АЛГОРИТМОВ

Читайте также:
  1. XII. ЭЛЕМЕНТЫ ТЕОРИИ АЛГОРИТМОВ
  2. Базовые конструкции алгоритмов
  3. Блок - схемы алгоритмов
  4. Вопрос 2. Построение доверительного интервала при неизвестном законе генерального распределения.
  5. Данные алгоритмов
  6. Диагностирование дискретных устройств с памятью. Построение диагностических и проверяющих тестов
  7. И ПОСТРОЕНИЕ РАЗБИВОЧНОЙ СЕТИ НА МОНТАЖНЫХ ГОРИЗОНТАХ.
  8. Количество алгоритмов AES
  9. Комбинирование блочных алгоритмов
  10. Логическая и синтаксическая структуры различных видов текста. Их построение
  11. Наглядно эффективность обмена можно представить с помощью «коробки Эджуорта», построение которой будет разбираться на практике.
  12. Наиболее распространенными формами представления алгоритмов являются таблицы и древовидные графы.

Условный оператор позволяет выбирать один вариант из двух. Но часто приходится решать задачи, где необходимо делать выбор их нескольких (более двух) вариантов. Алгоритмы, позволяющие решать такие задачи, называют ветвящимися.

Их можно реализовать, используя следующие конструкции:

* последовательные «if»;

* вложенные «if».

Поясним использование этих конструкций на следующем примере.

Пример. Зарплата служащих некоторого учреждения определяется следующим образом: при стаже работы менее 5 лет зарплата - 100 рублей, если стаж работы от 5 до 10 лет, то зарплата - 200 рублей, при стаже от 10 лет до 15 зарплата повышается на 10 рублей с каждым годом, а при стаже свыше 15 лет - на 20 рублей с каждым годом.

Решение. Исходные данные: стаж работы. Зарплата принимает разные значения в зависимости от того, в какой из четырех диапазонов попал стаж работы, т.е.

program task5;

{решение задачи с помощью последовательных if}

var st, zp: integer; {st - стаж; zp - зарплата}

begin

write (‘ стаж работы’); readln (st);

if st < 5 then zp:= 100;

if (st >= 5) and (st <= 10) then zp:= 200;

if (st > 10) and (st<=15) then zp:= 200 + (st - 10) * 10;

if st > 15) then zp:= 200 + 5 * 10 + (st - 15)*20;

writeln (‘ зарплата равна ’, zp)

end.

Это реализация предложенной задачи с помощью последовательных «if», т.е. каждый диапазон описывается отдельным оператором if, при этом приходится проверять верхнюю и нижнюю границу диапазона.

program task5а;

{решение задачи с помощью вложенных if}

var st, zp: integer; {st - стаж; zp - зарплата}

begin

write (‘ стаж работы’); readln (st);

if st < 5 then zp:= 100

else if st <= 10 then zp:= 200

else if st <= 15 then zp:= 200 + (st - 10) * 10

else zp:= 200 + 5*10 + (st - 15)* 20; {*}

writeln (‘ зарплата равна ’, zp)

end.

В данном варианте после служебного слова else опять записан if, но условие проверяет лишь верхнюю границу диапазона. Это естественно, поскольку оператор if работает таким образом, что на ветвь else можно попасть только в случае, если логическое выражение st < 5 не выполняется, т.е. not (st < 5) º st >= 5, т.е. проверка нижней границы диапазона осуществляется автоматически. По этой же причине отсутствует проверка условия в строке {*}.

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

Упражнения.

1. Может ли в программе быть служебных слов if больше, чем else? Возможна ли обратная ситуация: else больше, чем if?

2. Постройте график функции:

a) if x < -4 then y:= 4 else if abs(x) <= 2 then y:= sqr(x) else y:= -x + 6; б) if x < - 1 then y:= 1/(x * x) else if x < 2 then y:= x * x else y:= 4;

3. Напишите программу вычисления функции y по x, заданной графиком:

4. Напишите программу, определяющую попадает ли точка с координатами (X, Y) в заштрихованную область:

а) используя условный оператор;

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

 

Примечание: вспомните, что объединение реализуется с помощью оператора or, а пересечение - с помощью and.

Задача 1. Три толстяка поспорили, кто из них самый тяжелый. Напишите программу, которая бы разрешила их спор.

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

Вариант 1.

var a, b, c: integer;

begin

writeln (‘Уважаемые толстяки! Задайте свой вес’);

readln (a, b, c);

if (a > b) and (a >c) then writeln (‘Cамый тяжелый - первый с весом =’, a);

if (b > a) and (b >c) then writeln (‘Cамый тяжелый - второй с весом =’, b);

if (c > a) and (c >b) then writeln (‘Cамый тяжелый - третий с весом =’, с);

end.

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

Вариант 2.

if (a > b) and (a > c) then writeln (‘Cамый тяжелый - первый с весом =’, a)

else if b > c then writeln (‘Cамый тяжелый - второй с весом =’, b)

else writeln (‘Cамый тяжелый - третий с весом =’, c);

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

var a, b, c, max, imax: integer;

begin

writeln (‘Уважаемые толстяки! Задайте свой вес’);

readln (a, b, c);

if (a > b) then begin max:= a; imax:= 1 end

else begin max:= b; imax:= 2 end;

if max < c then begin max:= c; imax:= 3 end;

(‘Cамый тяжелый - ‘, imax, ‘ с весом =’, max);

end.

Упражнение. Внесите измения в программу для случая, когда толстяков - 5.

Задача 2. У каждого из трех толстяков есть свой трон. Необходимо написать программу, которая позволила бы так пересадить толстяков, чтобы на крайнем левом троне сидел самый тяжелый, а на крайнем правом - самый легкий.

Решение. Исходные данные - вес каждого толстяка a, b, c. Результат - a ³ b ³ c.

var a, b, c, r: integer; {r - вспомогательная переменная}

begin

writeln (‘Уважаемые толстяки! Задайте свой вес’);

readln (a, b, c);

if a < b then begin r:= a; a:= b; b:= r; {a >= b}

if a < c then begin r:= a; a:= c; c:= r; {a >= c}

if b < c then begin r:= b; b:= c; c:= r; {b >= c}

writeln (‘Толстяки должны сидеть в следующем порядке:’, a, ‘ ‘, b, ‘ ‘, c)

end.

Упражнения.

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

2. Напишите программу, которая определяет можно ли построить треугольник со сторонами a, b, c. Если - да, то какой это треугольник - равносторонний, разносторонний, равнобедренный.

3. Напишите программу размена любой суммы, большей 7 рублей, трешками и пятерками.

4. Напишите программу, проверяющую пройдет ли кирпич размерами a´b´c в окно размерами x´y.

5. Дано четырехзначное целое число. Напишите программу, проверяющую является ли сумма цифр этого числа полным квадратом.

6. Напишите программу, определяющую какое наименьшее количество почтовых марок по 10 руб., 4 руб. и 1 руб. надо наклеить на бандероль, если: за бандероль весом до 50 г взимается 10 руб., за каждые следующие полные или неполные 50 г - еще по 5 руб.

7. Плата за телефонные услуги осуществляется следующим образом:

10 руб./час - за первые 10 часов;

20 руб./час - за следующие 20 часов;

30 руб./час - за следующие 30 часов;

50 руб./час - за следующие 40 часов

и 60 руб./час - за каждый час свыше 100 часов. Напишите программу, определяющую плату за телефонные услуги для введенного времени переговоров.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)