Министерство образования и науки Российской Федерации Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования «Ижевский государственный технический университет» Воткинский филиал Методические указания по выполнению лабораторной работы «Разработка алгоритмов для структурного программирования и их реализация. Алгоритмы ветвления и выбора» учебной дисциплины «Информатика» Воткинск, 2006 УДК 681.3.06(075) Составил: А.Ю. Уразбахтина Методические указания по выполнению лабораторной работы «Разработка алгоритмов для структурного программирования и их реализация. Алгоритмы ветвления и выбора» учебной дисциплины «Информатика»- Ижевск: Издательство ИжГТУ, 2006.- 20 с. Методические указания по выполнению лабораторной работы составлено для студентов Воткинского филиала ИжГТУ, обучающихся специальностям: 151001 – «Технология машиностроения», 160801 – «Ракетостроение», 270102– «Промышленное и гражданское строительство». В них изложены основы проектирования и реализации на языках программирования разветвляющихся алгоритмов для решения инженерных задач. Методические указания могут быть полезны при выполнении курсовых работ или проектов с применением компьютерной техники. Методические указания составлены на основе требований действующего образовательного стандарта высшего профессионального образования по специальностям: 151001 – «Технология машиностроения», 160801 – «Ракетостроение», 270102 – «Промышленное и гражданское строительство» ©А.Ю. Уразбахтина, 2006. ©Издательство ИжГТУ, 2006. 2 ВВЕДЕНИЕ Современным пользователям и профессиональным программистам приходится иметь дело с огромным количеством разнообразных языков программирования различных уровней и назначений. Но по-прежнему начинать изучение основ программирования целесообразно на базе алгоритмического языка Pascal, так как при использовании этого языка у будущего специалиста быстрее формируется четкое алгоритмическое мышление [1, 2]. Весомым аргументом в пользу изучения основ программирования именно на базе Pascal также является применение профессиональной среды программирования Delphi, которая использует в качестве базового языка именно Pascal (Паскаль) и переход к разработке программного обеспечения (ПО) в этой среде пройдет достаточно быстро, хотя и потребует дополнительных знаний. Язык программирования Pascal предназначен для обучения студентов как основам алгоритмизации и программирования, так и основам конструирования компиляторов. Язык отвечает принципам структурного программирования, имеет блочную структуру и развитое представление данных. В разные годы было разработано несколько вариантов компиляторов Паскаля для различных типов ПК. Наибольшее распространение получил Turbo Borland Pascal версии 7.0, доработанный фирмой Borland Internation (США). Цель выполнения лабораторной работы: студенты всех специальностей и форм обучения должны показать и закрепить свои знания по: базовым понятиям информатики; основным методам информатики; принципам работы программных средств; управлению техническими средствами. 1. ОСНОВНЫЕ ПОНЯТИЯ ТЕОРИИ АЛГОРИТМОВ Алгоритм – это последовательность элементарных шагов, выполнение которой позволяет получать однозначный результат (не зависящий от того, кто выполнял эти шаги) или за конечное число шагов прийти к выводу о том, что решения не существует. Задача называется алгоритмически неразрешимой, если не существует машины, модели или алгоритма, которые ее бы решали. Алгоритм может быть предназначен для выполнения его человеком или автоматическим устройством. Создание алгоритма, пусть самого простого, процесс творческий. Выполнение алгоритма в виде блок-схемы перед 3 программированием существенно облегчает процесс создания и отладки программы, определение форматов и перечня переменных, поиск ошибок, редактирование алгоритма в будущем. В теории программирования доказано [1, 2], что для записи любого сложного алгоритма достаточно трех базовых структур: следование – последовательное выполнение действий (рис. 1,а); ветвление – соответствует выбору одного из двух вариантов действий (рис. 1,б); цикл-пока – определяет повторение действий, пока не будет нарушено условие, выполнение которого проверяется в начале цикла (рис. 2). Действие 1 Действие 2 да нет Условие Действие 1 а Действие 2 б а Рис. 1. Базовые алгоритмические структуры: а) следование, б) ветвление Условие нет Действие Рис. 2. Базовая структура: цикл-пока На основе базовых структур строятся дополнительные структуры для изображения алгоритмов: выбор (рис. 3), цикл-до, счетный цикл. 4 Код Код1 Код3 Код2 Действие 1 Действие 2 иначе Действие 3 Рис. 3. Дополнительная структура «выбор» и реализация ее через базовые структуры Действие нет Условие да Рис. 4. Дополнительная структура: цикл – до I=n1,n2,h Действие Рис. 5. Дополнительная структура: цикл с заданным числом повторений (счетный цикл). На основе алгоритмов создается программное обеспечение (ПО) для решения прикладных задач. 5 2. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ ЯЗЫКА PASCAL Программы, содержащие в разделе операторов только операторы вводавывода и операторы присваивания, выполняются последовательно – оператор за оператором. Такие программы называются линейными, они реализуют линейный процесс вычислений. Для организации разветвленных и циклических процессов вычислений используют управляющие операторы языка, определяющие последовательность выполнения операторов программы. В данной лабораторной работе рассмотрим управляющие операторы языка PASCAL такие как «оператор условной передачи управления» и «оператор выбора». 2.1. Оператор условной передачи управления Оператор условной передачи управления (рис. 6) используют для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при выполнении условия реализовывать одни действия, а при нарушении – другие. Условие записывают в виде логического выражения, в зависимости от результата которого осуществляется выбор одной из ветвей: если результат «True», то выполняется оператор, следующий за служебным словом Then, иначе – оператор, следующий за служебным словом Else. В каждой ветви допускается запись одного оператора (в том числе и другого If) или составного оператора. If Логическое выражение Then Оператор Else Оператор Рис. 6. Синтаксическая диаграмма <Оператор условной передачи управления> Составным оператором называют последовательность операторов, заключенную в операторные скобки Begin … End . Операторы последовательности отделяют друг от друга точкой с запятой «;». Перед End точку с запятой можно не ставить. Перед Else точка с запятой не ставится, так как продолжается запись условного оператора. 6 Из синтаксической диаграммы (БНФ) видно, что допускается не использование ветви Else, например: If x>2 Then y:=12.45 Else y:=-123*x/454; If a>b then Writeln(‘a>b); 3. РЕАЛИЗАЦИЯ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ В MATHCAD MATHCAD – физико-математический пакет для решения прикладных задач, удобный в работе и простой по освоению [4, 5]. Графическая среда MATHCAD позволяет записывать математические формулы в привычном виде, результаты вычислений могут быть представлены как численно, так и аналитически (в виде формул). С помощью панели «Programming (программирование)» в MATHCAD можно реализовать вычисления и по разветвляющимся алгоритмам. Для создания программной строки понадобится команда «Add Line», для осуществления выбора по условию – команда «if» и команда «otherwise» в остальных случаях (рис.7). График неэлементарной функции f(x) построен с помощью панели «Graph (Графики)». Рис. 7. Программирование разветвляющихся алгоритмов в MATHCAD 7 4. ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ «Разработка алгоритмов для структурного программирования и их реализация. Часть 1: ветвление» 4.1. Пример 1. Этап 1. Постановка задачи 1. Разработать алгоритм, спецификацию, тестовый пример и программу, которая вычисляла бы значение функции: x если x 0, . y x если x 8 4, в остальных случаях Этап 2. Анализ. Программа должна начинаться с ввода значений аргумента. Затем, в зависимости от того, в какой интервал попадает введенное значение, вычисляется значение функции по одному из заданных выражений. Этап 3. Проектирование и определение спецификаций. Расчет тестовых примеров выполняем в MATHCAD (тесты должны быть определены таким образом, чтобы проверить все ветви программы, рис.8). Результаты расчетов занесены в табл. 1. Рис. 8. Расчет тестовых примеров Разветвляющийся алгоритм представлен на рис. 9. Спецификация к алгоритму – в табл. 2. 8 1. Начало 2. Ввод х Да 4. y=|x| 3. x<0 Нет Да 6. y= 5. x>8 х Нет 7.y=4 8. Вывод хиу 9. Конец Рис. 9. Алгоритм решения задачи 1. Таблица 1. Номер теста 1 2 3 Тестовые примеры для задачи 1. х Результат у -1 (x<0) 25 (x>8) 7 1 5 4 Таблица 2. Спецификация к алгоритму на рис. 8. № Наименование 1 Аргумент функции 2 Значение функции Обозначение в алгоритме х у Обозначение в программе х у 9 Ед. изм. - Статус переменной Входная Выходная Тип Веществ. Веществ. Этап 4. Реализация. Разрабатываем программу: Program Lini; {Заголовок с именем программы} Uses Crt; {Будет использована процедура из этой библиотеки процедур} Var x, y:real; {Описание переменных не целого типа} Begin {Начало программных действий} ClrScr; {Процедура очистки экрана} Writeln(‘Введите значение аргумента х= ’); Readln(х); {Ввод с клавиатура значения} If x<0 Then y:=Abs(x) Else If x>8 Then y:=Sqtr(x) Else у:=4; {Условные операторы и вычисления по формуле} Writeln(‘y(’,x:4:1,’)=’,y:6:1); {Вывод значения с комментариями} Readln; {Пустой оператор для просмотра результатов} End. {Конец действий программы} Результат тестирования программы: y(-1.0)= 1.0 y(25.0)= 5.0 y(7.0)= 4.0 Сверяем полученные результаты с тестовым примером. Вывод: результаты работы программы на алгоритмическом языке PASCAL совпадают с тестовыми (контрольными) примерами. 4.2. Пример 2 Этап 1. Постановка задачи 2. Разработать алгоритм, спецификацию, тестовый пример и программу для вычисления температуры в зоне обработки по формуле T KS n t , и проверить условие T Tmax , где K – суммарный коэффициент условий обработки; S – подача станка, мм/об; n – число оборотов шпинделя станка, об.; t – глубина резания, мм; Tmax – максимально возможная температура в зоне обработки, с точки зрения качества, C; x,y,z – значения степеней, полученные экспериментальным путем. Этап 2. Анализ. Алгоритм (программа) должен начинаться с ввода значений x, y, z, S, n, t, K, Tmax. Затем, в зависимости от вычисленного значения температуры Т, выдается сообщение пользователю о выполнении или не выполнении поставленного условия. x y z 10 Этап 3. Проектирование и определение спецификаций. Разветвляющийся алгоритм представлен на рис. 10. 1. Начало Ввод x, y, z, S, n, t, K, Tmax 2. Ввод 3. T KS x n y t z Да 4. TTmax 5. Условие выполняется Нет 6. Условие не выполняется 7. Вывод T и Tmax 8. Конец Рис. 10. Алгоритм решения задачи 2. Таблица 3. Спецификация к алгоритму на рис. 10. № Наименование Обозначение в Обозначение в алгоритме программе 1 Показатель степени х х 2 Показатель степени у у 3 Показатель степени z z 4 Cуммарный K K коэффициент условий обработки 5 Подача станка S S 11 Ед. изм. - Статус переменной Входная Входная Входная Входная Тип Веществ. Веществ. Веществ. Веществ. мм/об Входная Веществ. Окончание табл. 3 № Наименование Число оборотов шпинделя станка 7 Глубина резания 8 Максимально допустимая температура 9 Температура в зоне обработки 6 Обозначение в Обозначение в алгоритме программе n n Ед. изм. об. t Tmax t Tmax мм С T Tem С Статус Тип переменной Входная Веществ. Входная Входная Веществ. Веществ. Расчетная Веществ. Тестовые (контрольные) примеры рассчитываем в MATHCAD (рис. 11). Тесты должны быть определены таким образом, чтобы проверить все ветви алгоритма (программы). Рис. 11. Расчет тестовых примеров в MATHCAD для задачи 2 Знаки «» и « » для проверки неравенств находятся на панели MATHCAD «Boolean (булевое)». Результат проверки условия хранится в ячейке l, которая принимает значение «1», если условие выполняется (ТЕСТ1 12 на рис. 11), и принимает значение «0» при невыполнении условия (ТЕСТ2 на рис. 11). Результаты расчетов в MATHCAD занесены в табл. 4. Таблица 4. Тестовые примеры для задачи 2. Номер теста 1 x Y z K n S t Tmax Результат (T) 1,0 1,0 1,0 11,0 250 0,4 0,15 200 2 1,0 1,0 1,0 11,0 250 2,0 0,15 200 Условие выполняется (T=165) Условие не выполняется (T=825) Этап 4. Реализация. Разрабатываем программу: Program Temperatura; {Заголовок с именем программы} Uses Crt; {Будет использована процедура из этой библиотеки процедур} Var x, y, z, S, K, Tem, Tmax, n, t :real; {Описание переменных не целого типа} Begin {Начало программных действий} ClrScr; {Процедура очистки экрана} Writeln(‘Введите значения х, y, z, K= ’); Readln(х, y, z, K); {Ввод с клавиатура значения} Writeln(‘Введите значения S, n, t = ’); Readln(S, n, t); {Ввод с клавиатура значения} Writeln(‘Введите значение Tmax= ’); Readln(Tmax); {Ввод с клавиатура значения} Tem:=K*exp(x*ln(S))*exp(y*ln(n))*exp(z*ln(t)); If (Tem<=Tmax) Then Writeln(‘Условие выполняется’) Else Writeln(‘Условие не выполняется’); {Условный оператор} Writeln(‘Tem=’,Tem:6:1); {Вывод значения с комментариями} Readln; {Пустой оператор для просмотра результатов} End. {Конец действий программы} Результат тестирования программы: 1) Условие выполняется Tem=165 2) Условие не выполняется Tem=825 Сверяем полученные результаты с тестовым примером. Вывод: результаты работы программы на алгоритмическом языке PASCAL совпадают с тестовыми (контрольными) примерами. 13 5. ОПЕРАТОР ВЫБОРА Оператор выбора используется для реализации нескольких альтернативных вариантов действий, каждый из которых соответствует своим значениям некоторого параметра. Синтаксическая диаграмма этого оператора приведена на рис. 12. Case Выражение Of Константа | Диапазон Оператор : End ; Else Оператор Рис. 12. Синтаксическая диаграмма <Оператор выбора> Например, Readln(n); Case n of 1: Writeln(‘Понедельник’); 2: Writeln(‘Вторник’); 3: Writeln(‘Среда’); 4: Writeln(‘Четверг’); 5: Writeln(‘Пятница’); 6: Writeln(‘Суббота’); 7: Writeln(‘Воскресенье’); End; 6. ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ «Разработка алгоритмов для структурного программирования и их реализация. Часть 2: выбор» Этап 1. Постановка задачи 3. Разработать алгоритм, спецификацию, тестовый пример и программу, которая бы выбирала и вычисляла функцию через меню: 2 sin ( x ), при n 1 . y( n , x ) cos( x ), при n 2 e x , при n 3 0 в остальных случаях 14 Этап 2. Анализ. Программа предоставит пользователю возможность выбрать функцию через простейшую имитацию меню, в котором каждой функции соответствует некоторое число n (код). Причем для второй функции аргумент х должен быть неотрицательным. Этап 3. Проектирование и определение спецификаций. Алгоритм программы представлен на рис. 13. Спецификация к алгоритму оформлена в табл. 5. 1. Начало Для n=2 х>0 2. у=0, ввод х 3. Ввод n 4. n 1 2 6. y cos( x ) 5. y sin 2 (x) иначе 3 7. y e x 8. Конец Рис. 13. Алгоритм решения задачи 3. Таблица 5. Спецификация к алгоритму на рис. 13. № Наименование 1 Аргумент функции Код 2 3 Значение функции Обозначение в алгоритме х Обозначение в программе х Ед. изм. - n n - у у - 15 Статус Тип Входная переменная Входная переменная Выходная переменная Не целый Целый Не целый Тестовые (контрольные) примеры рассчитываем в MATHCAD (рис. 14). Тесты должны быть определены таким образом, чтобы проверить все ветви алгоритма (программы). Результаты расчетов занесены в табл. 6. Знак «=» для проверки равенств «n=1 (2, 3, …)» находится на панели MATHCAD «Boolean (булевое)». Примечание: и в PASCAL, и в MATHCAD, в тригонометрических функциях аргумент определяется в радианах. Рис. 14. Расчет тестовых примеров для задачи 3 Таблица 6. Номер теста 1 2 3 4 Тестовые примеры для задачи 3. х n 0,3 2 1 2 1 2 3 4 Результат у 0,655 -0,266 2,718 0 Этап 4. Реализация. Разрабатываем программу: Program Functia; {Заголовок с именем программы} Uses Crt; {Будет использована процедура из этой библиотеки процедур} 16 Var x, y:real; n: byte; {Описание переменных не целого и целого типа} Begin {Начало программных действий} ClrScr; {Процедура очистки экрана} y:=0; Writeln(‘Введите значение аргумента х(x>=0)= ’); Readln(х); {Ввод с клавиатура значения} Writeln(‘Введите значение кода n= ’); Readln(n); {Ввод с клавиатура значения} Case n Of {Оператор выбора} {Используются составные операторы:} 1: begin y:=Sqr(sin(Pi*x)); Writeln(‘n=’,n:1,‘; y(’,x:3:1,’)=’,y:7:4); End; 2: begin y:=Cos(Pi*Sqrt(x)); Writeln(‘n=’,n:1,‘; y(’,x:3:1,’)=’,y:7:4); End; {Вывод значения с комментариями} 3: begin y:=Exp(x); Writeln(‘n=’,n:1,‘; y(’,x:3:1,’)=’,y:7:4); End; End; {Конец оператора Case} Readln; {Пустой оператор для просмотра результатов} End. {Конец действий программы} Результаты тестирования программы: n=1; y(0.3)= 0.6545 n=2; y(2.0)= -0.2663 n=3; y(1.0)= 2.7100 Сверяем полученные результаты с тестовым примером. Вывод: результаты работы программы на алгоритмическом языке PASCAL совпадают с тестовыми (контрольными) примерами. 7 .ВОПРОСЫ ДЛЯ ПРОВЕРКИ 1. Алгоритм. Виды алгоритмов. Формы записи алгоритмов. 2. Линейные программы. Управляющие операторы. 3. Оператор условной передачи управления. 4. Составной оператор. Оператор выбора. 5. Пакет MATHCAD. Программирование ветвлений и выбора в MATHCAD. 8. ФОРМА ОТЧЕТА Отчет по лабораторной работе должен содержать: Постановку задачи. Необходимые математические формулы и прочие изыскания. Алгоритм. Спецификацию. Расчет тестового (контрольного) примера в MATHCAD. Программное обеспечение в виде текста на алгоритмическом языке PASCAL и в электронном виде. Результаты работы программы. Вывод по работе. Список использованной литературы. 17 9. ЛИТЕРАТУРА 1. Иванова Г.С. Основы программирования.- Изд-во МГТУ им. Н.Э. Баумана.-2004. 2. Иванова Г.С. Технология программирования.- Изд-во МГТУ им. Н.Э. Баумана.-2003. 3. Острейковский В.А. Информатика.- М.: Высшая школа, 2000. 4. Информатика: Учеб. пособие/ А.В. Могилев, Н. И. Пак, Е.К. Хеннер; Под ред. Е.К. Хеннера.- М.: Издательский центр «Академия», 2003. 5. Плис А.И., Сливина Н.А. MathCad: математический практикум для экономистов и инженеров.- М.: Финансы и статистика, 2000. ПРИЛОЖЕНИЕ (варианты заданий) № Постановка задачи 1 Дано уравнение y( x ) ae b ln( x ) cx d =0. Имеет ли уравнение на отрезке от А до В решение? 2 Дано уравнение a x b x c 0 . Проверить, имеет ли данное x 2 уравнение вещественные корни. 3 Дан год. Определить, является ли год високосным. 4 Дано целое число. Определить, является ли оно четным. 5 6 ln x , если 1 х 10 ,78 Вычислить y 1, если х 14 ,1 3 2 x , в остальных случаях . Температура плавления металла TPRED , град. Степенная функция температуры в зоне обработки T k v t S , где k ,a,b,c коэффициенты от –1 до +1. Определить выполняется ли условие TPRED T . a 7 8 b c Дано не целое число. Проверить, находится ли значение этого числа в интервале от А до В. Требуемое значение шероховатости после обработки Ra PRED (мкм). Степенная функция значения шероховатости после обработки, полученная экспериментальным путем выполняется ли условие Ra≤ Ra PRED . 18 а с х Ra v S t . Определить, Продолжение ПРИЛОЖЕНИЯ Постановка задачи № 9 Пересекаются ли графики функций f 1 (x) 3 2 x x и f 2 (x) x 4 2 x 3 на интервале a,b . 10 Требуемая стойкость инструмента х у с инструмента Т К А М v S t . условие Т Т МИН . 11 Вычислить коэффициенты: k P = QM Py Т МИН . Функция Определить, , kC = стойкости выполняется ли QM QA , и k= ; Py QM РАСЧ определить, который из них больше. 12 3,0 если Dn 150 , если 150 Dn 300 5,0 если Dn 300 Вычислить h 4 ,0 13 Вычислить функцию Ф( х ) k1 Rz k 2 Q АБ k 3 QРЕЗ , где k1 , k 2 , k 3 - должны удовлетворять неравенству ( k1 k 2 k 3 ) 1 . 14 15 16 17 18 19 Дано целое число в диапазоне 0…9. Преобразовать это число в словесную форму, например, 0 – «ноль»; 1 – «единица» и т.д. Дано целое число от 1 до 7. Какой день недели означает значение введенного числа? Дано целое число от 1600 до 2004. Какой век означает значение введенного числа? Дано целое число от 1 до 9. По значению числа (которое означает возраст ребенка) добавить в предложение одно из слов: "год", "года", "лет" Дано целое число от 1 до 12. По значению числа определить месяц года. 3 x 2 если D n 1, если D n 2 , ln( 5 ) если D n 3. Вычислить h 5 x 4 20 Вычислить g ln x если n 1, x 2 если n 2, sin( x ) если n 3. x a ax a если a 2, x ax Вычислить C a 2ax e если a 3, ax в остальных случаях. 19 ОГЛАВЛЕНИЕ Стр. 3 3 1. ОСНОВНЫЕ ПОНЯТИЯ ТЕОРИИ АЛГОРИТМОВ 6 2. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ ЯЗЫКА PASCAL 6 2.1. Оператор условной передачи управления 3. РЕАЛИЗАЦИЯ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ В 7 ВВЕДЕНИЕ MATHCAD 4. ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ «Разработка алгоритмов для структурного программирования и их реализация. Часть1: ветвление» 4.1. Пример 1 4.2. Пример 2 5. ОПЕРАТОР ВЫБОРА 6. ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ «Разработка алгоритмов для структурного программирования и их реализация. Часть 2: выбор» 7.ВОПРОСЫ ДЛЯ ПРОВЕРКИ 8 ФОРМА ОТЧЕТА 9 ЛИТЕРАТУРА ПРИЛОЖЕНИЕ (варианты заданий) 20 8 8 10 14 14 17 18 18 18