Задачи для самостоятельного выполнения




Принятие решений

Методические указания к практической работе № 3
по дисциплине «Основы алгоритмизации и программирования»

 

Ростов-на-Дону


Составитель: С.В.Шинакова

 

 

Методические указания и задания к выполнению практической работы по теме "Принятие решений" / ДГТУ, Ростов-на-Дону, 2011. ** с.

 

 


Цель работы

Цель работы сводится к освоению так называемых структур принятия решений, которые применяются для сравнения двух или большего количества выражений. Рассматриваются операторы сравнения, булевы операторы, и изучаются два вида структур: 1) условный оператор if2) и оператор выбора case.

Сравнение

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

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

Для любых двух выражений А и В одного и того же типа всегда справедливо одно из трех следующих условий: А<В, А=В или А>В. Формально выражение определяется как любая правильная последовательность операторов и операндов, результатом которой является строка, переменная или объект. Для сравнения выражений используются операторы сравнения. Как и в математике, в программировании операторы <, = и > можно объединять в операторы <, > и ¹. В таблице 1 перечислены операторы сравнения Pascal и их математические аналоги. Эти операторы сравнения используются в большинстве языков высокого уровня

Результатом операции сравнения является булево выражение, которое может принимать значение True или False (истина (1) или ложь(0)). Результат булева выражения, содержащего числовые выражения, очевиден. Например, булево выражение 5 < 2 имеет значение False, а выражение 5 > 2 – True, при сравнении строковых выражений фактически сравниваются числовые значения ASCII их символов. Например, значение ASCII символа А равно 65, а символа а – 97, поэтому значение булева выражения 'America' < 'america' равно True.

Еще один пример: значение булева выражения 'America' < 'AMERICA' равно False. Можете ли вы сказать, почему?

 

Таблица 1 - Операторы сравнения языка Pascal

Операция сравнения Оператор сравнения Математический аналог
Меньше или равно <= £
Больше > >
Больше или равно >= ³
Равно = =
Не равно <> ¹
Меньше < <

Булевы операторы

Операндами булевых операторов являются булевы (логические) выражения. Три первичных булевых оператора – and, or и not. Все другие булевы операторы выводятся из первичных, т.е. могут быть заменены комбинацией первичных операторов. Результаты булевых операций принято отображать в таблицах истинности (см. табл. 2).

Таблица 2 – Таблица истинности булевых операторов and, or и not

А В A and В A or B not A not В
False False False False True True
False True False True True False
True False False True False True
True True True True False False

Как видно из таблицы 2, оператор and выполняет логическую конъюнкцию двух выражений. Это значит, что результат имеет значение True, только если оба операнда равны True. Оператор or выполняет логическую дизъюнкцию двух выражений: результат равен True, если хотя бы один из операндов равен True. Оператор not выполняет логическое отрицание: значение результата операции противоположно значению операнда.

Условные операторы

В Pascal есть два способа принятия решения: условный оператор if и оператор выбора case.

Оператор if

Условный оператор if (если) очень похож на сослагательное наклонение в естественном языке. Рассмотрим следующее предложение с ключевым словом "если":

В Pascal, как и в большинстве других языков высокого уровня, оператор if составляет основу структур принятия решений. Синтаксис простой формы оператора if, называемой if-then, имеет вид

if выражение then операторы;

 

Все оператор после слова then выполняется, только если значение выражения равно True. Выражение -условие должно иметь булев тип. На рис. 1 показана блок-схема оператора if-then.

Рисунок 1 - Блок-схема оператора if-then

Оператор if-then, не содержащий операторов, выполняющихся при истинности условия, называется пустым оператором if. Такие операторы бесполезны и должны быть удалены из кода.

Если оператор if-then содержит более одного выполняемого оператора, то необходимо заключить его в блок с помощью ключевых слов begin и end.

В некоторых случаях необходима более сложная структура принятия решения if-then-else, синтаксис которого имеет вид.

if выражение then begin

[ операторы 1;]

end

else begin

[ операторы 2;]

end;

На рис. 2 показана блок-схема простой формы оператора if-then-else. Группа операторов операторы 1 выполняется, только когда выражение условие имеет значение True. Операторы операторы 2 выполняются, только если выражение условие имеет значение False.

Рисунок 2 - Блок-схема простой формы оператора if-then-else

 

Перед ключевым словом else точка с запятой (;) не ставится. В операторе if между предложением then и ключевым словом if точки с запятой не должно быть никогда. Точка с запятой ставится после всего оператора if, чтобы отделить его от следующего оператора, а между предложениями then и else ставятся только пробелы или символ перехода на следующую строку. Внутри составного оператора, ограниченного ключевыми словами begin и end и входящего в состав оператора if, точки с запятой ставятся, естественно, после каждого оператора.

Операторы if, содержащие предложения else-if, могут быть записаны как последовательные операторы вида if-then. В этом случае последовательность условий не менее важна и тоже должна быть записана логически правильно. Применение конструкций проиллюстрировано следующими примерами. Программа, которая по введенному значению аргумента вычисляет значение функции, заданной в виде:

.

Конструкция else-if:

program calc_function_1;

var х, у: real;

Begin

writeln(' Введите значение аргумента'); readln(x);

if x < -2 then у:= 0 else

if x < -1 then у:= -x - 2 else

if x < 1 then у:= x else

if x < 2 then у:= -x + 2 else

у:= 0;

writeln(' Для х= ', x:6:2, ' значение функции у = ', y:6:2);

end.

Конструкция if-then:

program calc_function_2;

var х, y: real;

Begin

writeln(' Введите значение аргумента'); readln(x);

if x < -2 then у:= 0;

if (x >= -2) and (x < -1) then у:= -x - 2;

if (x >= -1) and (x < 1) then у:= x;

if (x >= 1) and (x < 2) then у:= -x + 2;

if x >= 2 then у:= 0;

writeln(' Для х= ', x:6:2, ' значение функции у = ', y:6:2);

end.

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

if выражение 1 then begin

if выражение 2 then begin

[ операторы 1;]

end

else begin

[ операторы 2;]

end;

end;

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

if выражение 1 then begin

if выражение 2 then begin

[ операторы 1;]

end;

end

else begin

[ операторы 2;]

end;

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

Оператор case

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

case выражение of

список_значений_ 1: оператор1;

список_значений_ 2: о ператор2;

.

.

.

список_значений_ N: оператор N;

else о ператор X;

end;

В этом синтаксисе выражение сравнивается с выражениями каждого списка. Оно должно быть выражением порядкового типа, т.е. типа Integer, Char, Boolean или других подобных типов. Кроме того, каждое выражение в списках должно быть порядковым и вычисляемым во время компиляции. Например, в списках допустимы выражения 12, True, 4 - 9 * 5 или Integer('Z')

Переменные и вызовы большинства функций в списках значений недопустимы. С писок_значений может также содержать поддиапазон, имеющий форму первое_значени.. последнее_значение, оба из которых должны быть порядковыми, причем первое_значение £ последнее_значение. И наконец, список_значений может быть представлен в форме значение 1, значение 2,..., значениеN в которой каждое значение является порядковым значение или поддиапазоном порядковых значений.

Оператор case может содержать любое количество списоков_значений и только одно предложение else. Выполнение оператора case аналогично выполнению структуры if-then-else. Если значение управляющего выражения совпадает с любым значением из какого-либо списка, то выполняются операторы этого списка. Затем управление передается на оператор, следующий за оператором case (происходит выход из оператора case). Если управляющее выражение совпадает с значением, присутствующими в нескольких списках, то выполняются операторы самого верхнего из этих списков. Если управляющее выражение не совпадает ни с одним из значений в списках, то выполняются операторы Х предложения else. Включение предложения else в оператор case не обязательно, однако оно гарантирует, что код обработает любое непредвиденное значение управляющего выражения. Если управляющее выражение не совпадает ни с одним из значений в списках и предложение else отсутствует, то не выполняется ни один оператор и происходит выход из оператора case.

Операторы case можно вкладывать друг в друга аналогично вложенным операторам if. Каждый вложенный оператор case должен иметь ассоциированное с ним ключевое слово end.

Рассмотрим использования оператора case на примере приведенном ниже.

program prog_case;

var chChar: Char;

Begin

writeln("Enter a symbol ');

readln(chChar);

case сhChar of

'A'..'Z': writeln(chChar,' uppercase letter.')

'a'..'z': writeln(chChar,' lowercase letter.')

'0'..'9': writeln(chChar,' number.')

' ': writeln(chChar,' space.')

else writeln(chChar,' other symbol.')

readln;

end.

Задания

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

2. Создайте программу, приглашающую пользователя ввести число и определяющую, является ли это число положительным, отрицательным или равным нулю.

3. Даны вещественные положительные числа a, b, c, x, y. Выяснить, пройдет ли кирпич с ребрами a, b, c в прямоугольное отверстие со сторонами x и y. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия.

4. Дано целое число k (1<=k<=365). Определить каким днем недели (понедельник, …, воскресенье) является k-ый день невисокосного года, в котором 1 января – понедельник.

5. Используемый нами григорианский календарь был введен в 1582 году. Разработайте программу, определяющую день недели каждого задаваемого дня после 1582 года. Программа должна выполнить следующие действия.

а) Пригласить пользователя ввести месяц и год.

б) Определить количество дней в месяце и пригласить пользователя ввести номер дня. Проверить, допустим ли введенный пользователем номер дня в месяце. Все годы, делящиеся на 4, являются високосными, кроме делящихся на 100, но не на 400. Например, годы 1600 и 2000 високосные, а 1700, 1800 и 1900 – невисокосные. Если вам удастся, то вы сможете проверить это условие в одном операторе if.

в) Определить день недели с помощью следующего алгоритма.

• Предполагается, что январь и февраль – это тринадцатый и четырнадцатый месяцы предыдущего года. Например, 1/10/1998 (в американской системе обозначений месяц/день/год) заменяется на 13/10/1997, а 2/10/1998 – на 14/10/1997.

• Пусть m, d и у обозначают месяц, день и год. Необходимо вычислить величину w как

w:= d + 2*m + Int((3/5)*(m +1)) + у + Int(y/4)– Int(у/100) + Int(y/400)+2;

• Остаток деления w на 7 равен номеру дня в неделе. Предполагается, что 0 – это суббота, 1 — воскресенье, 2 — понедельник и т.д.

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

1. Назовите три оператора сравнения и приведите примеры их использования.

2. Назовите три первичных булевых оператора.

3. Чем отличаются режимы полного и неполного вычисления булевых выражений?

4. Что такое приоритеты операций и почему они так важны?

5. Приведите синтаксис и опишите действия, выполняемые операторами if и case в самом общем виде.

6. Можно ли заменить любой оператор if эквивалентным ему оператором case наоборот?

7. Что такое вложенные структуры принятия решений?

Задачи для самостоятельного выполнения

Задача № 1

1. Разработайте программу, определяющую количество монет каждого типа в сдаче, величина которой вводится пользователем. Например, если пользователь вводит $5.88, то программа должна вывести 3 монеты по 25 центов, 1 монета по 10 центов, 3 монеты по 1 центу (не беспокойтесь о количестве долларов и падеже существительных). Программа должна учитывать только монеты по 1, 5, 10 и 25 центов. Результат должен состоять из минимально возможного количества монет.

2. Определить, имеется ли среди заданных целых чисел A, B, C хотя бы одно чётное.

3. Даны три числа. Вывести на экран те из них, которые принадлежат заданному отрезку [e, f].

4. Определить число, полученное выписыванием в обратном порядке цифр заданного целого трёхзначного числа.

5. Определить, есть ли среди цифр заданного целого трёхзначного числа одинаковые.

6. Выбрать наибольшее из трёх чисел, которые вводятся с клавиатуры.

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

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

9. Определить, лежит ли точка A (a; b) внутри квадрата

 

10. Напишите программу, в результате выполнения которой выводится значение true, если pe > ep.Возможны следующие варианты:

а) числа p и e описать как константы с точностью 10-5

б) числа p и e представить с машинной точностью.

, если 10 < x < 17,   в остальных случаях.

11. Вычислить функцию

12. Дано число х. Напечатать в порядке возрастания числа cos(x), и .

13. Написать программу, вычисляющую стоимость междугороднего разговора в соответствии с таблицей:

Город Код Цена руб/мин
Владивосток   9,20
Москва   4,10
Краснодар   2,05
Волгоград   2,50

Входными данными должны являться код города и число минут.

На выходе мы должны иметь сообщение о стоимости минуты и сумме за разговор.

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

 

 

Задача № 2

 

1. Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года. В случае ввода недопустимого числа должно выдаваться сообщение «Ошибка ввода!».

2. Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: «Увы – рабочий день!», «Ура! Суббота!», «Ура! Воскресенье!».

3. Написать программу, которая после ввода с клавиатуры числа (в диапазоне от 1 до 999), обозначает денежную единицу, дописывая слово «рубль» в правильной форме. Например, 12 рублей, 21 рубль и т. д.

4. Написать программу-фильтр, которая при нажатии любых клавиш выводит на экран только буквы и цифры, при этом указывая, что именно выводится: буква или цифра.

5. Написать программу, которая по паролю будет определять степень доступа к секретной информации в базе данных. Доступ к базе имеют только шесть человек, разбитых на 3 группы по степени доступа. Они имеют следующие пароли: 9876, 1234 – доступны модули базы А, Б, В; 3333, 2222 - доступны модули базы Б, В; 4680, 9753 - доступны модули базы А, Б

6. Создайте программу, которая по введенному k – числу грибов – печатает фразу «Мы нашли в лесу k грибов», причем согласовывает окончание слова «гриб» с числом k.

7. Создайте программу для вычисления числа дней в месяце, если даны: номер месяца, целое число А, равное 1, если год – високосный и 0 в противном случае.

8. Создайте программу, которая для введенного целого числа k (от 1 до 99) печатает фразу «Мне k лет», причем в нужных случаях заменяет слово «лет» на слово «год» или «года».

9. Дан номер месяца (1 – январь, 2 – февраль,...). Вывести название соответствующего времени года («зима», «весна» и т. д.).

10. Дано целое число в диапазоне от 0 до 9. Вывести строку – название соответствующей цифры на русском языке (0 – «ноль», 1 – «один», 2 – «два»,...).

11. Дано целое число в диапазоне от 1 до 5. Вывести строку – словесное описание соответствующей оценки (1 – «плохо», 2 – «неудовлетворительно», 3 – «удовлетворительно», 4 – «хорошо», 5 – отлично»).

12. Арифметические действия над числами пронумерованы следующим образом: 1 – сложение, 2 – вычитание, 3 – умножение, 4 – деление. Дан номер действия и два числа A и B (В не равно нулю). Выполнить над числами указанное действие и вывести результат.

13. Единицы длины пронумерованы следующим образом: 1 – дециметр, 2 – километр, 3 – метр, 4 – миллиметр, 5 – сантиметр. Дан номер единицы длины и длина отрезка L в этих единицах вещественное число). Вывести длину данного отрезка в метрах.

14. Составить программу, которая по возрасту человека (вводится с клавиатуры как целое число) определяет его принадлежность к возрастной группе: от 0 до 13 – мальчик; от 14 до 20 – юноша; от 21 до 70 – мужчина; более 70 – старец.

15. Локатор ориентирован на одну из сторон света («С» – север, «З» – запад, «Ю» – юг, «В» – восток) и может принимать одну из трех цифровых команд: -1 – поворот налево, 1 – поворот направо, 2 – поворот на 180 градусов. Дан символ C – исходная ориентация локатора и число N – посланная ему команда. Вывести ориентацию локатора после выполнения команды.

16. Элементы окружности пронумерованы следующим образом: 1 – радиус (R), 2 – диаметр (D), 3 – длина (L), 4 – площадь круга (S). Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке). В качестве значения π использовать стандартную константу Pi.

17. Элементы равнобедренного прямоугольного треугольника пронумерованы следующим образом: 1 – катет (a), 2 – гипотенуза (c), 3 – высота, опущенная на гипотенузу (h), 4 – площадь (S). Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данного треугольника (в том же порядке).

18. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты, предшествующей указанной (например, дано D=1 M=1, надо вывести D=31 M=12; дано D=1 M=3 надо вывести D=28 M=2; дано D=15 M=12 надо вывести D=14 M=12)

19. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты, следующей за указанной (например, дано D=1 M=1, надо вывести D=2 M=1; дано D=31M=12 надо вывести D=1 M=1; дано D=28 M=2 надо вывести D=1 M=3)

20. Дано целое число в диапазоне 20 – 69, определяющее возраст (в годах). Вывести строку – словесное описание указанного возраста, обеспечив правильное согласование числа со словом «год», например: 20 – «двадцать лет», 32 – «тридцать два года», 41 – «сорок один год».

21. Дано целое число в диапазоне от 100 до 999. Вывести строку – словесное описание данного числа, например: 256 – «двести пятьдесят шесть», 814 – «восемьсот четырнадцать».

22. Составить программу, вычисляющую площадь геометрической фигуры. Тип фигуры определяется символом (с): О – окружность, T – равнобедренный прямоугольный треугольник и K – квадрат. Целое число, вводимое вслед за символом определяет соответствующий элемент для вычисления площади (для окружности это радиус, для треугольника – длина катета, для квадрата – длина стороны).

23. Составьте программу, которая определяет к какой группе относится введенный символ (с) – к цифрам, заглавным или прописным буквам. На экран должна выводиться фраза «Символ с – это …», где вместо … пишется соответствующая группа (например, «Символ R – это заглавная буква»).

24. Составить программу, которая по номеру дня в месяце печатает день недели. Считаем, что 1–е число месяца – понедельник.

25. Составить программу, которая по порядковому номеру месяца определяет, к какому времени года он принадлежит.

26. Составить программу, которая по номеру семестра печатает курс, к которому относится введенный семестр (1 и 2 семестр – 1 курс, 3 и 4 семестр – 2 курс и т. д.).

27. Дано целое число n, соответствующее количеству углов геометрической фигуры. Составить программу, которая по введенному числу n печатает название фигуры (например, при n=3 программа напечатает «треугольник», при n=5 – «пятиугольник», при n>8 – «многоугольник»). В случае если вводится число меньше 2, выводится сообщение об ошибке.

28. С клавиатуры вводится два целых числа, обозначающих возраст человека и его пол (1 – мужской, 2 –женский). Составить программу, которая в зависимости от введенных данных определяет принадлежность человека к определенной группе: от 0 до 13 – мальчик (девочка); от 14 до 20 – юноша (девушка); от 21 до 70 – мужчина (женщина); более 70 – старец (старушка).

29. Составить программу, которая печатает номера дней в месяце, если вводится день недели. Считаем, что 1–е число месяца – понедельник, в месяце 31 день. Выводить на экран словесное описание дня недели и соответствующие числа месяца (например, вводится число 2, на экране появляется: «Вторник – 2, 9, 16, 23, 30»).

 

 

Список используемой литературы

  1. Абрамов С.А. и др. Задачи по программированию. М.: Наука, 1988. 224 с.
  2. Галисеев Г.В. Программирование в среде Delphi 8 for.NET. М.: Издательский дом «Вильямс», 2004. 304 с.
  3. Златопольский Д.М. Сборник задач по программированию. СПБ.: БХВ-Петербург, 2007. 240 с.
  4. Павловска Т.А. Паскаль. Программирование на языке высокого уровня. СПб.: Питер, 2003. 393 с.
  5. Фаронов В.В. Delphi 3. Учебный курс. М.: «Нолидж», 1998. 400 с.

 

 



Поделиться:




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

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-29 Нарушение авторских прав и Нарушение персональных данных


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