Министерство Образования и науки Республики Казахстан Прикаспийский Современный Колледж 3707002 «Информационные системы» Курсовая работа Тема: «Условный оператор» Предмет: «Программирование» Выполнил: Каунов Константин студент 3 курса группы «Информационные системы»34. Руководитель: Научный руководитель Старший преподватель кафедры
КИВТ АГУ Им. Х.Досмухамедова Ишутина И. Р. Атырау 2007 Введение…3 Глава 1. Условный оператор и его виды … 1.1 Блок схема и запись на алгоритмическом языке условного оператора (примеры)…. 1.2 Пример программирования с использованием условным оператора … Глава 2 Создание программы диалога с использованием условного оператора…
Введение Паскаль – язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля (1623–1662) и разработан в 1968–1971 гг. Николаусом Виртом, для обучения студентов методам разработки программ, таким как "программирование сверху вниз", "структурное программирование" и т. д. Вирту не понравился не один из существующих на тот момент языков, и в 1968 году он приступил к разработке
своего собственного. Первая версия языка была создана для компьютера CDC 6000.Благодаря своей четкости, логичности и другим особенностям Паскаль надолго занял свою нишу, являясь прекрасным языком для обучения программированию. Паскаль использовался и для разработки серьезных программ- приложений. Шутили, что Вирт разработал игрушку, но многие отнеслись к ней слишком серьезно
Впоследствии появились различные версии языка и его расширения. Наиболее известным расширением стал пакет Турбо Паскаль фирмы Borland, появившийся в 1983 году и сразу ставший событием в мире компьютерных технологий. Турбо Паскаль – это система программирования, созданная для повышения качества и скорости разработки программ (80-е гг.). Слово Турбо в названии системы программирования – это отражение торговой марки
фирмы-разработчика Borland International (США). Систему программирования Турбо Паскаль называют интегрированной (integration – объединение отдельных элементов в единое целое) средой программирования, т.к. она включает в себя редактор, компилятор, отладчик, имеет сервисные возможности. Первое упоминание о нем содержалось в рекламе опубликованной в журнале Byte, а сам пакет предназначен для операционной системы
CP/M. В начале 1984 года он был перенесен в среду MS-DOS и приобрел огромную популярность. С тех пор появилось несколько версий Турбо Паскаля, последняя- седьмая. Программы на языке Паскаль имеют блочную структуру: 1) Блок типа PROGRAM – имеет имя, состоящее только из латинских букв и цифр. Его присутствие не обязательно, но рекомендуется записывать для быстрого распознавания нужной
программы среди других листингов. 2) Программный блок, состоящий в общем случае из 7 разделов: •раздел описания модулей (uses); •раздел описания меток (label); •раздел описания констант (const); •раздел описания типов данных (type); •раздел описания переменных (var); •раздел описания процедур и функций; •раздел описания операторов. Общая структура программы на языке Паскаль следующая: Рrogram ИМЯ ; {заголовок программы}
Uses ; {раздел описания модулей} Var ; {раздел объявления переменных} Begin {начало исполнительной части программы} {последовательность операторов} End. {конец программы} Глава 1 Условный оператор полная и неполная развилка оператор выбора. На практике решение большинства задач не удается описать с помощью программ линейной структуры. При этом после проверки некоторого условия выполняется та или иная последовательность операторов, однако
происходит нарушение естественного порядка выполнения операторов. Для этих целей используют управляющие операторы. Условный оператор используется для реализации разветвлений в программе, которые происходят при выполнении некоторого условия и имеет следующую структуру IF <логическое выражение> THEN серия1 ELSE серия2; Если логическое выражение, выступающее в качестве условия, принимает значение
False, то выполняются операторы, расположенные после else (серия2), если True,— операторы, следующие за then. При записи логического выражения следует избегать знака = (равно) для действительных переменных, так как они представляются неточно, а поэтому может не произойти совпадений значений выражений, стоящих слева и справа от знака равно. Для устранения указанного недостатка следует требовать выполнения условия с заданной точностью, т.е.
вместо отношения X = Y рекомендуется, например, Abs(X - Y) < 1E-8. Поскольку развилка может быть неполной, то возможна и неполная форма записи условного оператора: IF <логическое выражение> THEN серия; Условный оператор реализует разветвление вычислительного процесса по двум направлениям, одно из которых осуществляется при выполнении условия, другое— в противном случае.
Для реализации разветвлений более чем по двум направлениям необходимо использовать несколько условных операторов. Рассмотрим примеры. Задача 1. Даны действительные числа x, y. Если x и y отрицательны, то каждое значение заменить модулем; если отрицательно только одно из них, то оба значения увеличить на 0,5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0,5; 2,0], то оба значения уменьшить в 10 раз; в остальных случаях x и y оставить без изменения.
Разработаем алгоритм решения задачи, после чего напишем программу. Алгоритм запишем словесно: 1) ввести значения x, y; 2) если x<0 и y<0, найти их модули и перейти к п. 5, иначе перейти к следующему пункту; 3) если x<0 или y<0, увеличить каждую величину на 0,5 и перейти к п. 5, иначе перейти к следующему пункту; 4) если ни x, ни y не принадлежат отрезку [0,5; 2,0],
уменьшить их в 10 раз; 5) вывести значения x и y; 6) конец. Program Usl; Var X, Y : Real; Begin Write('Введите два действительных числа '); ReadLn(X, Y); If (X < 0) AND (Y < 0) THEN Begin X = ABS(X); Y = ABS(Y) End ELSE IF (X < 0) OR (Y < 0) THEN Begin X = X + 0.5; Y = Y + 0.5 End ELSE IF
NOT (((X >= 0.5) AND (X <= 2)) OR ((Y >= 0.5) AND (Y <= 2))) THEN Begin X = X / 10; Y = Y / 10 End; WriteLn('Результат:'); WriteLn('X= X:10:6); WriteLn('Y= Y:10:6) END. Задача 2. Дано действительное число a. Вычислить f(a), если Program Usl1; Var A, F : Real;
Begin WriteLn('Введите действительное число: '); ReadLn(A); IF A <= 0 THEN F = 0 ELSE IF A <= 1 THEN F = Sqr(A) - A ELSE F = Sqr(A) - SIN(Pi * Sqr(A)); WriteLn('Значение функции F(x) при x = A:10:6, ' равно F:10:6); END. Кроме условного оператора в качестве управляющей структуры довольно часто используется оператор выбора CASE. Эта структура позволяет переходить на одну из ветвей
в зависимости от значения заданного выражения (селектора выбора). Ее особенность состоит в том, что выбор решения здесь осуществляется не в зависимости от истинности или ложности условия, а является вычислимым. Оператор выбора позволяет заменить несколько операторов развилки (в силу этого его ещё называют оператором множественного ветвления). В конструкции CASE вычисляется выражение K и выбирается ветвь, значение метки которой совпадает со
значением K. После выполнения выбранной ветви происходит выход из конструкции CASE. Если в последовательности нет метки со значением, равным K, то управление передается внешнему оператору, следующему за конструкцией CASE (в случае отсутствия альтернативы ELSE; если она есть, то выполняется следующий за ней оператор, а уже затем управление передается внешнему оператору).
Запись оператора выбора CASE K OF A1 : серия 1; A2 : серия 2; AN : серия N ELSE серия N + 1 END; Любая из указанных серий операторов может состоять как из единственного оператора, так и нескольких (в этом случае, как обычно, операторы, относящиеся к одной метке, должны быть заключены в операторные скобки begin end). Выражение K здесь может быть любого порядкового типа (напомним, что к таким типам относятся все целые типы,
Boolean, Char, перечисляемый тип, диапазонный тип, базирующийся на любом из указанных выше типов). Задача 1. В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и свиньи. Написать программу, которая позволяет ввести номер года и печатает его название по старояпонскому календарю. Справка: 1996г.— год крысы— начало очередного цикла.
Поскольку цикл является двенадцатилетним, поставим название года в соответствие остатку от деления номера этого года на 12. Program Goroskop; Var Year : Integer; Begin Write('Введите год '); ReadLn(Year); CASE Year MOD 12 OF 0 : WriteLn('Год Обезьяны'); 1 : WriteLn('Год Петуха'); 2 : WriteLn('Год Собаки'); 3 :
WriteLn('Год Свиньи'); 4 : WriteLn('Год Крысы'); 5 : WriteLn('Год Коровы'); 6 : WriteLn('Год Тигра'); 7 : WriteLn('Год Зайца'); 8 : WriteLn('Год Дракона'); 9 : WriteLn('Год Змеи'); 10 : WriteLn('Год Лошади'); 11 : WriteLn('Год Овцы') END; END. Задача 2. Найти наибольшее из двух действительных чисел, используя условный
оператор. Program Maximum; Var Max, X, Y : Real; Begin Write('Введите два неравных числа:'); ReadLn(X, Y); if X > Y then Max := X else Max := Y; End; WriteLn('Максимальное из двух есть Max : 12 : 6) End. Задача 3. Преобразовать символ, если он является строчной русской буквой, в заглавную букву. Так как в альтернативной системе кодировки ASCII строчные русские буквы идут не подряд, а с некоторым
разрывом, то в данном случае, в зависимости от того, в какую часть таблицы попадает введенная буква, используется та или иная формула. Если введённый символ не является строчной русской буквой, он выводится без изменения. Program UpCase; Var C : Char; Begin Write('Введите символ:'); ReadLn(C); Case C Of 'а п' : C := Chr(Ord(C) - 32); 'р я' : C := Chr(Ord(C) - 80)
End; WriteLn(C); End. Как видно из примера, в качестве метки может выступать не только отдельное значение, но и диапазон значений. Кроме того, в качестве метки может выступать перечень значений выражения (значения перечисляются через запятую). Контрольные вопросы и задания Когда возникает необходимость в организации развилки? Какая развилка называется полной? неполной? Выражение какого типа может выступать в качестве условия
при организации развилки? Какие значения принимают такие выражения? Могут ли в полной развилке не выполниться операторы ни по одной из ветвей? выполниться по обеим ветвям? Записать примеры 1-3 по теме "Оператор выбора" с помощью условного оператора. Сколько развилок понадобилось в каждом из случаев? В каком случае целесообразно использовать оператор выбора?
Какого типа может быть выражение, являющееся селектором выбора? Приведите примеры. Используя оператор выбора решить задачу: "Определить знак заданного целого числа". Приведите пример оператора выбора, где выражение-селектор выбора имеет перечислимый тип Условный оператор например, forex Вернемся к рассмотрению нашего первого советника и расскажу об условном операторе if-else, который я
использовал в функции init(). int init() { // if (iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0) > Close[0]) CurrentState = STATE_SHORT; else CurrentState = STATE_LONG; MyOrderTicket = 0; // return(0); } Формат условного оператора if-else: if (выражение) первый_оператор else второй_оператор Принцип работы оператора: вычисляется значение выражения в скобках; если оно равно
true, то выполняется «первый_оператор», в противном случае — «второй_оператор». В нашем первом эксперте в функции init() есть такая строчка: if (iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0) > Close[0]) CurrentState = STATE_SHORT; else CurrentState = STATE_LONG; В этой строчке вычисляется выражение iMA(NULL, 0,
MAPeriod, 0, MODE_EMA, PRICE_CLOSE, 0) > Close[0]. Забегая вперед, скажу, что в этом выражении сравнивается значение экспоненциальной скользящей средней по цене закрытия с периодом, определенным внешней переменной MAPeriod, и цена закрытия текущего бара ( Close[0] ). Если значение скользяйшей средней больше цены закрытия, то выполняется первый оператор:
CurrentState = STATE_SHORT; Если — меньше, то второй: CurrentState = STATE_LONG; Если в качестве оператора есть необходимость выполнить сразу несколько операторов, то можно использовать составной оператор, т.е. заключить в фигурные скобки необходимые нам операторы. При этом после закрывающей фигурной скобки точка с запятой уже не ставится. Пример использования составного оператора можно найти и в нашем эксперте: if (!
IsTesting()) return(MarketInfo(s, MODE_LOTSIZE)*MarketInfo(StringSubstr(s, 0, 3)+"USD", MODE_BID)/AccountLeverage()); else { p = iClose(StringSubstr(s, 0, 3)+"USD", Period(), iBarShift(StringSubstr(s, 0, 3)+"USD", Period(), CurTime(), true)); return(MarketInfo(s, MODE_LOTSIZE)*p/AccountLeverage()); } Если у нас нет необходимости в выполнении второго оператора (в
случае, если выражение в круглых скобках не равно true), то часть else можно опустить: if (выражение) первый_оператор Пример из нашего эксперта: if (s == "CHFJPY") { p = iClose("USDCHF", Period(), iBarShift("USDCHF", Period(), CurTime(), true)); return(MarketInfo(s, MODE_LOTSIZE)/(AccountLeverage()*p)); } Если несколько операторов if-else вложены друг в друга, а часть
операторов имеет пропущенную часть else, то else всегда связывается с ближайшим предыдущим оператором if в том же блоке, не имеющим части else. Обычно операторы в коде эксперта выполняются последовательно — один за другим. Однако часто требуется изменить последовательность их выполнения в зависимости от каких-то условий. В этом выпуске я рассмотрел один из способов изменения этой последовательности: условный оператор if-else.