Программирование алгоритмов разветвляющейся структуры
Программирование алгоритмов линейной структуры Прежде чем перейти к программированию алгоритмов линейной структуры, остановимся на понятиях составного и пустого оператора. Составной оператор Составной оператор — это последовательность произвольных операторов программы, заключенная в операторные скобки — зарезервированные слова Begin... end. Составной оператор — важный инструмент Турбо Паскаля, дающий возможность писать программы по современной технологии структурированного программирования. Язык Турбо Паскаль не накладывает никаких ограничений на характер операторов, входящих в составной оператор. Среди них могут быть другие составные операторы.— Турбо Паскаль допускает произвольную глубину их вложенности: Begin … Begin … Begin … … end; … end; … End; Зарезервированное слово endявляется закрывающей операторной скобкой, оно одновременно указывает конец предыдущего оператора, поэтому ставить перед ним символ « ; » необязательно. Пустой оператор
Символ « ; » называется пустым оператором и означает окончание предшествующего ему оператора. Программирование линейных алгоритмов
Итак, мы уже знакомы с некоторыми основными (базовыми) понятиями языка Паскаль. Теперь можно приступать к непосредственному изучению программирования на этом языке тех типов алгоритмов, о которых говорилось ранее. Вспомним, что программа — это упорядоченный список команд на некотором конкретном языке программирования. Запрограммировать некоторый алгоритм означает написать программу, реализующую этот алгоритм. Попробуем для начала программировать алгоритмы линейной структуры. Напомню, что линейным называется алгоритм, в котором все этапы решения задачи выполняются строго последовательно, т.е. линейный алгоритм выполняется в естественном порядке его написания и не содержит разветвлений и повторений.
Для реализации алгоритмов линейной структуры используются операторы: - Оператор (процедура) вывода — Write ( );или WriteLn( ) - Оператор (процедура) ввода — Read ( );или ReadLn( ) - Оператор присваивания — :=
Рассмотрим эти операторы подробнее. Оператор присваивания.В результате присваивания переменная получает конкретное значение. <Имя Переменной>:=Выражение; «:=» — символ присваивания; Например: Counter: =0; Pi: =3.1415926; Процедуры вывода.Процедура WRITEпредназначена для вывода на экран монитора сообщений и значения выражений или переменных. Для того, чтобы вывести сообщение, нужно заключить его в апострофы (буква Э) в этом случае то, что заключено в апострофы, при работе вашей программы появится на экране монитора без изменений. Например: write (,Привет,) После выполнения этой строки программы на экране появится надпись: Привет Если вы хотите вывести на экран результат некоторых ваших вычислений, т.е. не сообщение, а значение, хранимое в некоторой переменной, то апострофы не ставятся. Например: пусть в некоторой переменной Dokв результате вычислений хранится целое значение = 55, которое вы хотите вывести на экран. Тогда достаточно записать в программе следующую строку: write (Dok); После выполнения этой процедуры на экране появится: Если же, например, надо вывести некоторое вещественное значение, то можно использовать форматы вывода. Например: пусть в некоторой переменной D в результате вычислений хранится значение = 12,4567, которое вы хотите вывести на экран. Тогда запишем оператор: write (D:5:2); Здесь использован формат вывода, где первая цифра означает общее количество знаков в выводимом числовом значении, а вторая цифра — количество знаков после запятой. В результате выполнения этой процедуры на экране появится: 12,45 Т.е. последние две цифры не пропечатаются, так как в формате мы указали только две цифры после запятой. Чтобы пропечатать число полностью надо видоизменить оператор: write(D:7:4); Тогда после выполнения этой процедуры на экране появится: 12,4567 Значение переменных перечисляемого типа нельзя вывести с помощью процедуры write. Рассмотрим еще один пример. Пусть в переменной kolхранится количество книг в некоторой библиотеке, например = 10675. Выведем это значение на экран, но с пояснением для пользователя вашей программы, т.е. на экране должно появиться: Всего книг — 10675 Этого можно добиться следующей последовательностью операторов: Write('Bcero книг — '); Write(kol); А можно записать все в одном, разделив параметры в скобках запятой: Write('Bcero книг— ', kol); Результат будет один и тот же. Процедура Writeln {write line}выводит информацию строкой. После того как была выведена информация, записанная в скобках после имени процедуры, курсор переместится на другую строку. Процедуры ввода.Для ввода данных используют процедуры read, readln. Процедура readсчитывает данные, вводимые с клавиатуры, а процедура readlnсчитывает данные и символ конца строки. Т.е. как и в случае с процедурой вывода, частица In (line)в конце означает, что после выполнений процедуры ввода курсор будет переведен на следующую строку. Пример. Составить программу, которая находит площадь прямоугольника произвольных размеров. Решение: Program Wip; Var Dlina,Shirina,S:real; Begin Writeln ('Введите длину прямоугольника'); Readln(Dlina); Writeln ('Введите ширину прямоугольника'); Readln(Shirina); S:=Dlina*Shirina; Writeln ('Площадь прямоугольника с шириной ',Shirina:8:2,' и длиной', Dlina:8:2,'paвнa',S:8:2); Readln End. Кстати, приведенная выше программа реализует алгоритм линейной структуры (алгоритм вычисления площади прямоугольника). Рассмотрим еще примеры реализации алгоритмов линейной структуры. Пример. Алгоритм Квадрат_числа; {заголовок алгоритма} Переменные X,Y: вещественные числа; {описательный блок} Начало Ввод(Х); Y:=X*X; Вывод(Y); Конец. Запишем программу на языке Паскаль, реализующую данный алгоритм; для вычисления квадрата числа здесь используется стандартная арифметическая функция языка Паскаль — sqr():
Обратите внимание на использование здесь операторов ввода\вывода. Во-первых, в начале программы (строки № 4,5) оператору ввода значения в переменную х (Readln (x);) предшествует оператор вывода на экран приглашающего сообщения (Write ('Введите х -> ');). В результате работы этого оператора вывода во время исполнения программы церед пользователем на экране появится сообщение: Введите х ->_
Мигающий курсор после сообщения показывает, что машина готова «узнать» ответ пользователя. В месте этого курсора пользователь сможет набрать с клавиатуры число, квадрат которого он хочет рассчитать. Например: Введите х-> 1 После того как число набрано и будет нажата клавиша Enter, управление перейдет к следующему оператору (Readln (x);),который прочитает введенное пользователем сообщение и запишет его в переменную х. Такой способ общения программы с пользователем часто называют режимом диалога, подразумевая здесь диалог машины (программы) и человека (пользователя). А операторы ввода\вывода используются в том числе для организации такого режима диалога. Во-вторых, при выводе результата расчета в операторе вывода (Writeln) через запятую перечислено два параметра: (у = ',у), первый из которых стоит в апострофах ('у ='), а второй — без них (у). В чем разница? То, что в параметрах оператора вывода стоит в апострофах, выводится на экран без каких-либо изменений. По сути, это просто строка некоторого сообщения. А второй параметр оператора вывода (без апострофов) выдаст на экран не саму букву у, а значение (в данном случае численное), хранящееся в переменной под именем у. Т.е. на экране появится строка вида: y=1 Кроме того, напомню, что частичка In в конце оператора ввода\вывода означает, что после выполнения заданного оператором действия курсор будет переведен на следующую (пока пустую) строку экрана. С учетом всего вышесказанного во время работы программы перед пользователем на экране сформируется следующая последовательность записей (например): Введите х -> 2 y=4 Эта последовательность строк называется протоколом работы программы. Рассмотрим еще один пример. Пример. Даны переменные А и В. Требуется обменять их значения, т.е. переменная А должна получить значение В, а В — значение А. Решение: 1. Исходные данные: А, В. Вспомогательная переменная DOP. Результат: А, В. 2. Метод решения задачи. В ЭВМ каждая величина Алгоритм Перемещение; {заголовок алгоритма} Переменные А,В,Dор:целые числа; {описательный блок} Начало Ввод (А,В); Dop:=A; А:=В; B:=Dop; Вывод(А,В); Конец.
Программная реализация будет иметь вид: Program OBMEN; Var a, b, dop: integer; Begin {Ввод исходных данных} Write ('Введите а -> '); Readln (a); Write ('Введите b -> '); Readln (b); {Обмен значениями} Dop:=A; A:=B; B:=Dop; {Вывод результата работы} Writeln ('a =',a); Writeln ('b = ',b); End.
В фигурных скобках здесь записаны комментарии к участкам программы, идущим ниже. Комментарии — это некоторые пояснения к программе, которые не являются исполняемыми операторами (т.е. при работе программы не отрабатывают как операторы и, более того, не компилируются компилятором языка в исполняемый код), а лишь помогают программисту разобраться в самой программе. Комментарии удобно применять при разработке больших программ или программных продуктов, а так же при работе в группе программистов.
Программирование алгоритмов разветвляющейся структуры Вспомним вначале, что алгоритмом ветвящейся структуры называется такой алгоритм, в котором выбирается один из нескольких возможных путей (вариантов) вычислительного процесса. Каждый подобный путь называется ветвью алгоритма. Признаком разветвляющегося алгоритма является наличие операций условного перехода, когда происходит проверка истинности некоторого логического выражения (проверяемое условие), и в зависимости от истинности или ложности проверяемого условия для выполнения выбирается та или иная ветвь алгоритма. Для программной реализации этого типа алгоритмов в языке программирования Pascal можно использовать три оператора: 1. Условный оператор (оператор условного перехода). 2. Оператор выбора (оператор варианта). 3. Оператор безусловного перехода.
Рассмотрим вначале оператор безусловного перехода и условный оператор подробнее.
Оператор безусловного переходаимеет вид: GOTO <метка> GOTO— зарезервированное слово (перейти на метку) <метка>— метка Метка в Турбо Паскале — это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. В качестве меток допускается использовать целые числа без знака. Метка располагается непосредственно перед помечаемым оператором и отделяется от него двоеточием. Перед тем как использовать метку в программе, она должна быть описана. Описание меток состоит из зарезервированного слова LABEL (метка), за которым следует список меток: Label loop,lb1; Begin … goto lb1; … loop: … … lb1: … … goto loop; … End. Действие оператора GOTOсостоит в передаче управления соответствующему меченному оператору. Правила использования меток: - метка, на которую ссылается оператор GOTO,должна быть описана в разделе описаний; - метки, описанные в процедуре (функции) локализуются в ней. Условный оператор.Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Структура условного оператора: IF <условие> THEN<оператор 1> ELSE<оператор 2>; IF, THEN, ELSE— зарезервированные слова (если, то, иначе) <условие> — выражение логического типа <оператор 1>,<оператор 2> — операторы языка Турбо Паскаль. Часть ELSE<оператор 2> условного оператора может быть опущена. Рис. 1. Алгоритм разветвляющейся структуры Тогда при значении true (истина) выражения, стоящего в условии, выполняется <оператор 1>, в противном случае этот оператор пропускается. Пример. Написать программу расчета функции:
Решение: Program wetw; Var yfx:real; Begin writeln('x= '); readln(x); {ввод х} if (x>0)and(x<2) then y:=Sqr(cos(x)) else y:=1-sin(sqr(x)); {вычисление значения у} writeln(‘y(’,x:8:2,’)=’,y:8:2); {вывод значения у на экран} readln; {пауза} End. Пример. Написать программу, которая в переменную max записывает наибольшее из двух чисел х и у. Решение: Program wetw2; Var max,x,y:real; Begin write(‘x= ’); readln(x); {ввод х} write(‘y= ‘); readln(y); {ввод у} max:=y; jf x>y then max:=x; {если х>у max:=x, иначе значение max не меняется} writeln(‘max=’,max:8:2); {вывод значения переменной max на экран} readln; {пауза} End. Оператор выбора (оператор варианта). Условный оператор при выполнении программы позволяет выбрать одно из двух возможных действий. Если же необходимо выполнить много взаимоисключающих проверок, то удобнее воспользоваться оператором выбора (варианта).
Общий вид оператора: CASE <селектор> OF <список меток варианта>: <оператор 1>; <список меток варианта>: <оператор 2>; <список меток варианта>: <оператор З>; ELSE <оператор N> END; Селектор представляет собой выражение скалярного типа (но не вещественного). Выполнение оператора варианта начинается с вычисления значения селектора. Затем для исполнения выбирается оператор, одна из меток которого совпадает с полученным значением. После выполнения этого оператора (он может быть простым или составным) управление передается на оператор, следующий за оператором варианта. Если же значение селектора не совпало ни с одной из меток, то выполняется оператор, стоящий после служебного слова ELSE. Вообще говоря, ветвь ELSE может и отсутствовать.
Рассмотрим пример использования оператора варианта. Заметим сразу, что оператор варианта удобно использовать для ввода и вывода значений перечисляемых скалярных типов данных. Например, в следующем фрагменте программы с внешнего носителя вводится порядковый номер объекта из списка значений перечисляемого типа COLOR (цвет). Оператор CPSE присваивает соответствующее значение переменной CLR. Аналогично осуществляется вывод значений CLR при помощи оператора варианта. Program cas; Type color = (red, blue, black); Var x: integer; Clr: color; Begin Write ('Введите порядковый номер /0-1-2/ => '); Readln (x); Case x of 0: clr:=red; 1: clr:=blue; 2: clr:=black; Else
Популярное: Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (891)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |