Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Арифметические выражения и операции



В вышеописанной программе использовалась только одна арифметическая операция – сложение. Но в языке Паскаль, естественно, используются и другие арифметические операции. Вот их перечень:

+ сложение; - вычитание; * умножение; / деление;

div - целочисленное деление; mod - нахождение остатка от целочисленного деления.

Первые четыре операции выполняются так же, как в обычной арифметике. Единственное, на что следует обратить внимание: знаки умножения и деления отличаются по написанию (вместо принятых в математике знаков. Кроме того, знак умножения между сомножителями нельзя опускать, как это часто делается в математике. Запись ab, которая в математике может обозначать произведение двух чисел a и b, компилятором языка Паскаль будет воспринята как имя переменной, состоящее из двух букв, что приведет к ошибке в работе программы. Что же касается целочисленного деления, то оно выполняется как обычное, но затем отбрасывается дробная часть получившегося при делении числа. Операции div и mod выполняются только над переменными и константами целого типа.

Пример использования действий div и mod:

значение выражения 91 div 8 равно 11;

значение выражения 91 mod 8 равно 3.

При вычислении значения арифметического выражения вначале выполняются действия, обладающие более высоким приоритетом. Слово «приоритет» в переводе с латыни означает первенство и, применительно к программированию, имеется в виду первенство при выполнении математических операций. Умножение, деление, целочисленное деление и нахождение остатка как раз и относятся к действиям с высоким приоритетом. Сложение и вычитание имеют более низкий приоритет. Если в выражении имеются действия с одинаковым приоритетом, то они выполняются слева направо по ходу выражения. Если необходимо изменить порядок действий в выражении, то следует использовать круглые скобки. Действия, заключенные в скобки обладают наиболее высоким приоритетом, то есть выполняются в первую очередь.

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

5 + 3*(7+2) – 40 div 4

Прежде всего, вычисляется выражение, находящееся в скобках – его значение равно 9. Затем слева направо выполняются следующие действия: умножение выражения в скобках на 3 (получаем 27) и целочисленное деление (получаем 10). На завершающем этапе складываем 5 и 27 и вычитаем из суммы 10. В итоге получаем конечный результат – 22.

Говоря об арифметических выражениях, необходимо отметить также следующее: хорошо знакомый нам оператор Writeln может выводить не только тексты и значения переменных, но и значения арифметических выражений, в которые могут входить переменные и константы. Эти выражения в операторе Writeln записываются подобно именам переменных в скобках, но без кавычек. Компьютер вначале подсчитает значение выражения, а затем покажет получившийся результат на экране. Например, если мы в какой-либо программе присвоим переменным x и y значения 20 и 30, а затем оператором Writeln выведем на экран компьютера выражение x+y:

x:=20;

у:=30;

writeln(x+y);

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

Для лучшего понимания программы ее можно снабдить комментариями. Комментарии представляют собой пояснения к тексту программы и являются неотъемлемой частью любой достаточно большой по объему и сложной программы. Они могут располагаться в любом месте программы и занимать отдельную строку или несколько строк в программе. При запуске программы на выполнение компилятор игнорирует комментарии. Любой комментарий должен быть обязательно ограничен фигурными скобками или символами (* и *) с обеих сторон. При просмотре текста ранее составленной программы комментарии легко определить визуально, так как в отличие от основного текста программы они выделены серым цветом.

7.3.4. Использование вещественных чисел

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

Вещественные числа в Паскале можно записывать двумя способами – в виде с фиксированной точкой и в виде с плавающей точкой. Запись с фиксированной точкой похожа на обычную запись десятичной дроби в математике, только целая часть от дробной отделяется не запятой, а точкой. Например, число 10,23 в виде с фиксированной точкой записывается как 10.23.

Другим способом представления вещественных чисел является запись с плавающей точкой. В этом случае число представляется как произведение двух сомножителей - m·10n , где m – мантисса числа, а n – порядок числа. Мантисса – это целое число или вещественное число с фиксированной точкой, которое может принимать значение в диапазоне от 1 до 10. Показатель может быть только целым числом. Именно в таком виде по умолчанию выводятся на экран компьютера вещественные числа, причем запись в виде с плавающей точкой будет выглядеть следующим образом – mEn, где E заменяет собой основание степени – число 10. Перед показателем указывается его знак. Число 125.73 (далее в пособии мы будем использовать именно такую запись десятичных дробей) в виде с плавающей точкой будет записано как 1.2573000000E+02, то есть 1.2573 · 102, а число 0.00441 будет записано как 4.4100000000E-03, то есть 4.41 · 10-3. В качестве примера использования вещественных переменных рассмотрим задачу вычисления объема параллелепипеда, где его высота, длина и ширина – вещественные числа (рис.7.3.5). В программе, написанной для решения данной задачи, используются 4 переменные. Все они описаны как вещественные. Это l – длина параллелепипеда, w – его ширина, h – высота и v – искомый объем. Исходные данные вводятся с помощью операторов Readln. Затем вычисляется произведение этих трех величин и присваивается переменной w, значение которой выводится оператором Writeln. При вводе в компьютер исходных данных не забываем отделять целую часть числа от дробной части числа точкой. При длине параллелепипеда, равной 4.2, ширине – 2.5, и высоте – 1.8 получим следующий результат, показанный на рис. 7.3.5. Как и следовало ожидать, результат выведен в виде с плавающей точкой. Хотелось бы видеть результат вычислений в более привычной для нас форме. На этот случай в языке Паскаль предусмотрена возможность форматированного вывода, то есть программист может сам определять внешний вид выводимого значения вещественной переменной. Для этого в операторе вывода после имени переменной нужно поставить двоеточие. После двоеточия указывается общее количество символов, отводимое под значение данной переменной, далее ставится еще одно двоеточие, а затем указывается количество цифр в дробной части числа. Не нужно забывать при этом, что одну позицию нужно оставить для точки. Например, если мы хотим, чтобы в программе выводимое на экран значение некоторой переменной t, относящейся к вещественному типу, занимало 8 позиций, из которых 3 отводится под дробную часть, 1 – под десятичную точку, а 4 – под целую часть, то мы запишем наши пожелания в операторе вывода следующим образом: Writeln(t: 8:3);

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

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

Writeln (‘Объем параллелепипеда равен’, v: 6:2);

то есть под значение переменной будет использовано 6 символов, в том числе 3 символа для целой части, 1 – для точки и 2 для дробной части. Тогда при тех же исходных данных результат будет выведен в следующем виде: Объем параллелепипеда равен 18.90

то есть результат будет представлен в виде, удобном для восприятия человеком.


Рис. 7.3.5. Программа вычисления объема параллелепипеда

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

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

Trunc – преобразует вещественное число в целое путем отбрасывания дробной части. Например: trunc (6.72)=6.

Round - преобразует вещественное число в целое путем округления. Например: round (6.72)=7 и round (-6.72)=-6.

Chr и Ord – преобразуют символьное значение в целое и наоборот.

7.4. Использование возможностей интегрированной среды программирования

В предыдущей главе при составлении различных программ мы использовали ряд возможностей, предоставляемых нам интегрированной средой программирования Турбо Паскаля. В частности, при создании новых файлов и их сохранении мы использовали команды из раздела меню File, для запуска программы на выполнение нам нужна была команда из раздела Run, для просмотра результатов работы программ мы обращались к разделу Debug. Рассмотрим более углубленно некоторые возможности системы программирования, которые позволяют быстрее набирать и корректировать текст программы, самостоятельно осваивать материалы, которые содержатся в обширной справочной системе интегрированной среды для того, а также научится одновременно работать в среде с несколькими окнами, что поможет значительно увеличить эффективность процесса программирования.

7.4.1. Редактирование текста редактором системы Турбо Паскаль

Этот редактор, команды которого находятся в разделе меню Edit, позволяет не только набирать текст программы, но и быстро перемещаться по тексту, а также корректировать текст программы, то есть вносить в него необходимые исправления.

Для начала успешной работы в редакторе разберем основные команды, позволяющие перемещаться по тексту. Перемещение курсора на одну позицию влево или вправо, либо на одну строку вверх или вниз осуществляется нажатием соответствующих клавиш со стрелками на клавиатуре. Для того чтобы переместиться по тексту не на один символ, а сразу на целое слово влево нужно нажать сочетание клавиш Ctrl + «стрелка влево», для перемещения на одно слово вправо – Ctrl + «стрелка вправо». Если нужно перейти в начало текущей строки, нажимаем клавишу Home, переход в окончание текущей строки производится нажатием клавиши End. Нажатие клавиши Page Up позволяет переместиться по тексту на один экран вверх, клавиши Page Down – на экран вниз. Программы на языке Паскаль могут быть достаточно большими по объему и не помещаться на одном экране. В таком случае для того, чтобы попасть в начало программы нужно нажать комбинацию клавиш Ctrl + Page Up, а для того, чтобы переместиться в конец программы нажать комбинацию Ctrl + Page Down.

Кроме использования вышеперечисленных клавиш и их комбинаций для перемещения по тексту программы в ряде случаев удобно пользоваться мышью. В частности, для того чтобы установить курсор в любое место в пределах текущего экрана, достаточно поместить туда указатель мыши и сделать один щелчок левой кнопкой. Если программа имеет достаточно большой объем, то для просмотра ее содержимого с помощью мыши удобно использовать скроллеры. Скроллером или полосой прокрутки называются полосы (на экране системы Турбо Паскаль они - бирюзового цвета), находящиеся справа или снизу от основной рабочей области экрана. На каждом из скроллеров находится небольшой прямоугольник, называемый лифтом или бегунком. Ухватившись указателем мыши за лифт и перетаскивая его вдоль скроллера, можно быстро прокручивать текст программы, как в вертикальном, так и в горизонтальном направлении.

Следующая группа операций, которые мы рассмотрим – это операции редактирования. Процесс редактирования сводится к трем основным операциям. Это – удаление ошибочно набранных символов и строк, перемещение фрагментов текста из одной части программы в другую или даже из одной программы в другую и копирование фрагментов программы. Перед тем как производить ту или иную операцию следует предварительно выделить удаляемый, копируемый или перемещаемый фрагмент текста.

Выделение фрагмента во всех этих случаях производится одинаково. Курсор устанавливается на какой-либо символ, относящийся к выделяемому фрагменту, а затем при нажатой клавише Shift нажимается нужное количество раз клавиша «стрелка влево» или «стрелка вправо». При этом соответственно выделенный фрагмент расширяется влево или вправо. При этом выделенный текст будет отображаться не на синем, а на сером фоне. В случае если выделяемый фрагмент содержит не одну строку или часть строки, а несколько строк следует нажать нужное количество раз клавишу «стрелка вверх» или «стрелка вниз», в результате чего выделенный фрагмент расширится вверх или вниз. Для выделения фрагмента можно использовать и мышь. Для этого следует при нажатой левой кнопке мыши «протащить» указатель мыши по выделяемому фрагменту, а затем, когда выделение завершено, отпустить эту кнопку.

В том случае, если выделенный фрагмент текста необходимо удалить, для этого нужно раскрыть раздел меню Edit и дать команду Clear (очистить) или нажать комбинацию клавиш Ctrl + Del. Если же нужно удалить только одну строку, то для этого достаточно поместить курсор на удаляемую строку и нажать сочетание клавиш Ctrl + Y. При необходимости вставить дополнительную пустую строку перед текущей строкой, следует воспользоваться комбинацией клавиш Ctrl+N.

Если же требуется выделенный фрагмент текста переместить либо скопировать, то пользуются буфером обмена. Буфером называется специальная область оперативной памяти компьютера, используемая для временного хранения различной информации. Принцип работы с буфером заключается в следующем: сначала в него заносится какая–либо информация, в частности фрагмент текста (который должен быть перед этим предварительно выделен). При перемещении фрагмента, он сначала вырезается из того места программы, где он до этого находился. Удаление фрагмента в буфера производится командой Cut, находящейся в разделе Edit (аналогичный результат получим, нажав комбинацию клавиш Shift + Del). При копировании сам фрагмент остается на месте, а в буфер отправляется лишь его копия. Копирование фрагмента в буфер выполняется командой Copy из того же раздела меню (либо комбинацией клавиш Ctrl + Ins). Затем, по команде вставки, информация, хранящаяся в буфере, вставляется в другое место данной программы или в другую программу, причем вставка производится туда, куда в данный момент установлен курсор. Команда вставки называется Paste (ее аналогом является сочетание клавиш Shift + Ins) и выполняется только в том случае, если буфер обмена не пустой.

При работе с буфером в системе Турбо Паскаль необходимо помнить, что при копировании или перемещении в него какой-либо новой информации, она записывается в конец буфера, вслед за старой информацией, что раньше в нем хранилась. Поэтому, чтобы не запутаться при работе с буфером, перед тем, как что-либо в него записывать, полезно просмотреть его содержимое командой show clipboard (просмотр буфера). При этом на экране компьютера появится окно, с находящимся в буфере текстом. Очистить содержимое буфера можно командой Clear.

Если в процессе редактирования Вы сделали ошибку, то можно отменить последнее изменение в тексте с помощью команды Undo. Если же Вы решили повторить отмененное действие, то это можно сделать командой Redo.

Говоря о редактировании текста встроенным редактором необходимо отметить еще один момент. Ввод текста в данном редакторе может производиться в двух режимах: вставки и замены. По умолчанию используется режим вставки, в котором при вводе какого-либо текста в середину строки текст, расположенный справа от текущей позиции курсора, сдвигается, освобождая место для вставки нового текста. Если при работе в редакторе нажать клавишу Ins, то вместо режима вставки будет установлен режим замены, о чем свидетельствует изменение внешнего вида курсора. Курсор, имевший форму горизонтальной черты, теперь будет выглядеть как прямоугольник. При работе в режиме замены ввод нового текста в середину строки будет сопровождаться автоматическим удалением старого текста, поверх которого появляется новый. Такой режим удобнее использовать при корректировке текста, так как не нужно тратить время на предварительное удаление старого текста. Если необходимо снова вернуться к режиму вставки, то для этого нужно снова нажать ту же клавишу Ins.

7.4.2. Работа со справочной системой

Система программирования имеет мощную, обширную и разветвленную справочную систему и может оказать своевременную и эффективную помощь при создании программ.

Единственным недостатком справочной системы для русскоязычного пользователя является то, что она не русифицирована (вся справочная информация выдается только на английском языке)/ Помощь, предоставляемая справочной системой пользователю, может быть оказана несколькими способами. Во-первых, информацию можно получить через системное меню, в котором имеется раздел Help. В этом разделе имеется ряд пунктов, важнейшими из которых являются Contents и Index. Contents открывает окно, содержащее основное оглавление справочной системы, включающее разделы How to Use Help (Как работать со справочной системой), Menus and HotKeys (Работа с меню и использование функциональных клавиш и комбинаций клавиш), Editor Commands (Справка по работе с текстовым редактором), Functions and Procedures (Функции и процедуры Паскаля), Error messages (расшифровка сообщений об ошибках), Reserved words (список зарезервированных слов с описанием их значений и применения) и другие. При открытии каждого из этих разделов выводится подробная текстовая информация по соответствующей теме.

При активизации пункта Index пользователь получает доступ к окну с алфавитным списком терминов, используемых в системе программирования. Этот список похож на предметный указатель, расположенный в конце книги, но он имеет некоторые отличительные особенности. Во-первых, для того, чтобы найти интересующий Вас термин не обязательно прокручивать весь список. Достаточно набрать на клавиатуре начальные буквы интересующего Вас слова. Во-вторых, данный список является гипертекстовым. Гипертекстом называется текст, имеющий ссылки на другие тексты. Так, если два раза щелкнуть мышью на любом из имеющихся в списке терминов или навести на этот термин курсорную рамку и нажать клавишу Enter, то в диалоговом окне системы Help появится подробная справочная статья о нем. Кроме того, в большинстве случаев будет приведен список разделов, связанных по содержанию с данной темой, и образцы программ, в которых этот термин используется.

Например, если мы хотим получить справку по работе с оператором Read, нужно щелкнуть в разделе меню Help мышью пункт Index, затем достаточно набрать первые буквы – Re, чтобы курсорная рамка установилась на слово Read и нажать Enter. В результате появляется текстовое окно, в котором подробно описывается использование оператора Read (в частности из статьи можно узнать, что Read – это не просто оператор, а стандартная процедура Паскаля), приводится список «родственных» данной теме статей справочной системы (ReadKey, Readln, Write, Writeln) и указывается, что в справочной системе имеется пример программы (по-английски – sample code), где используется оператор Read.


Рис.7.4.1. Окно содержания справочной системы и окно контекстной помощи

Для оператора Read пример такой программы содержится в файле Eof.pas. Чтобы просмотреть его текст достаточно два раза щелкнуть мышью ее название.

Помимо вышеописанного способа получение информации через системное меню существует еще один (в ряде случаев он является более быстрым и удобным) – использование контекстной подсказки. Прилагательное «контекстная» означает - относящаяся к данному случаю, к данной ситуации.

Нажав клавишу F1, Вы можете получить справку по тому режиму работы (работа в текстовом редакторе, открытие файла, сохранение файла) который установлен в данный момент. Например, если мы сталкиваемся с какими-либо трудностями в процессе сохранения файла, то достаточно, находясь в окне сохранения файла, нажать F1, чтобы получить справку именно по данному вопросу (рис.7.4.1).

Наконец, если Вы столкнулись с проблемой при использовании какого-либо служебного слова, то нужно установить на него курсор и нажать комбинацию клавиш Ctrl+F1. В результате Вы увидите справочную статью, посвященную использованию данного слова. Например, если у пользователя в ходе составления программы возникли затруднения при использовании оператора Readln, то достаточно набрать в тексте программы слово Readln и нажать Ctrl+F1 для того, чтобы на экране появилось окно справки с соответствующей статьей. Такая статья помимо основного текста содержит также ссылку на файл Readln.pas, где содержится образец программы с использованием данного оператора.

7.4.3. Работа с окнами

Все операции, которые мы производим в системе программирования, выполняются в одном из открытых окон. Окном называется прямоугольная область, используемая для вывода информации. Окна могут быть развернуты во весь экран или занимать его часть. Размеры окон можно изменять (исключение составляют диалоговые окна, размеры которых фиксированы).

Система программирования Турбо Паскаль позволяет в течение одного сеанса работать с несколькими файлами. Если во время сеанса работы в системе Вы создаете новый файл или открываете уже существующий, то при этом открывается соответствующее данному файлу новое окно. Одно из окон является активным и находится на переднем плане. Такое окно имеет два управляющих элемента, один из которых позволяет закрыть окно (квадратик в левой верхней части окна), а другой – развернуть окно во весь экран (стрелка в правой верхней части окна). Если окно уже развернуто во весь экран, то разворачивающий элемент сменяется восстанавливающим, который позволяет вернуться к исходному размеру окна. Этот элемент тоже имеет форму стрелки, но двунаправленной. Для каждого окна с программой или результатами работы в правом верхнем углу указывается его порядковый номер.



Рис.7.4.2. Расположение окон на экране каскадом (вверху) и черепицей (внизу)

Диалоговые окна, в отличие от окон программ, имеют только закрывающий элемент и не имеют порядкового номера.

Для управления расположением окон на экране, их размерами, перехода между окнами используются команды раздела меню Window. Команды этого меню позволяют располагать окна на экране двумя различными способами: каскадом (команда Cascade) и черепицей (команда Tile). При расположении окон каскадом одно (активное) окно находится на переднем плане, а для других окон выводятся только их заголовки (рис.7.4.2). Этот способ расположения окон применяется по умолчанию. Если во время сеанса работы в системе программирования необходимо сделать активным другое окно, то следует щелкнуть мышью его заголовок, в результате чего это окно станет активным, а от предыдущего активного окна будет виден только заголовок, хотя оно и не будет закрыто.

Если нужно сделать активным предыдущее по порядковому номеру окно, то используется команда Previous, если активным должно быть следующее по порядку окно, то – команда Next (здесь имеется в виду порядок открытия окон в ходе текущего сеанса работы в системе). Если активное окно больше не нужно, то его можно закрыть командой Close.

Для того чтобы просмотреть список всех открытых окон, применяется команда List. По этой команде на передний план выводится диалоговое окно, в котором перечислены все окна, причем первым в списке идет окно, которое было открыто последним. Если какое-либо из имеющихся в списке окон нужно закрыть, то для этого его нужно выделить курсорной рамкой и щелкнуть экранную кнопку Delete, в результате чего окно будет удалено из списка и закрыто.

Для расположения нескольких окон таким образом, чтобы они не перекрывали друг друга, используется команда Tile (рис.7.4.2). В этом режиме пользователю будут видны все открытые в данный момент окна, каждое из которых при этом будет занимать только часть экрана. Одно из окон является активным. Его можно определить по наличию в нем управляющих элементов и скроллеров. Другое окно можно сделать активным щелчком по его заголовку (как и при расположении окон каскадом), но при этом предыдущее активное окно остается на экране и сохраняет свои размеры и местоположение.

Если пользователю необходимо активное окно развернуть во весь экран, то для этого он должен дать команду Zoom. Если же желательно видеть все открытые окна, но при этом пользователь хочет изменить их взаимное расположение либо размеры окон, то следует воспользоваться командой Size/Move. После выполнения этой команды система переходит в специальный режим (о чем свидетельствует изменение цвета заголовка активного окна – из белого он становится зеленым). В этом режиме можно передвигать окна по экрану клавишами «Стрелка вверх», «Стрелка вниз», «Стрелка вправо», «Стрелка влево». Если нужно увеличить или уменьшить размеры окна, то для этого следует использовать комбинации клавиш Shift + «Стрелка вверх», Shift + «Стрелка вниз», Shift + «Стрелка вправо», Shift + «Стрелка влево». Подтверждение сделанных изменений осуществляется нажатием клавиши Enter. Для выхода из режима перемещения и изменения размеров окон нажимаем клавишу Esc.

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

7.5. Условные операторы и оператор безусловного перехода

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

< - меньше, > - больше, = - равно,

< = - меньше или равно, > = - больше или равно, < > - не равно.

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

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

7.5.1. Оператор If

Общий вид оператора if следующий:

if < условие > then < вариант 1 > else < вариант 2 >.

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

Классическим примером использования оператора if является программа, определяющее большее из двух введенных чисел. Для наглядности решения данной задачи запишем предварительно алгоритм ее решения в виде графической схемы (рис. 7.5.1), а затем реализуем его в виде компьютерной программы. Первоначально вводятся два числа a и b (ввод записан в верхнем параллелограмме), затем проверяется истинность условия a>b (проверка записана в ромбе). Если данное условие истинно, то на экран компьютера выводится число a, которое является большим (выполняется операция, указанная в левом нижнем параллелограмме), если же условие ложно, то на экран выводится являющееся большим число b (осуществляется операция, записанная в правом нижнем параллелограмме).

Начало
Ввод a, b
a > b
Вывод a
Вывод b
Конец    
Да
Нет

Рис. 7.5.1. Графическая схема определения большего из двух чисел

Теперь от графической схемы перейдем к программе, изображенной на рис. 7.5.2. В этой программе вначале вводятся значения переменных a и b. Затем с помощью условного оператора if производится проверка условия a>b и выполняется либо оператор вывода writeln, записанный после служебного слова then, либо тот оператор вывода, который находится после служебного слова else. Обратите внимание на то, что хотя конструкция if.. then.. else расположена в трех строках она является единым оператором.

Этот вид условного оператора представляет собой полную форму, но такая форма его записи не является единственно возможной. Наряду с ней в языке Паскаль используется и сокращенный условный оператор. Такой оператор имеет следующий общий вид:

if < условие > then < действие >;

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



Рис. 7.5.2. Программа определения большего из двух чисел и результаты ее работы

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

Рис. 7.5.3. Программа определения наибольшего из трех чисел и результаты ее работы

В данной программе операторами readln производится ввод исходных данных – трех чисел, которые присваиваются переменным x, y и z.

В результате последовательного выполнения двух сокращенных условных операторов мы получим в переменной max искомую величину – наибольшее из трех чисел. Остается только вывести значение переменной max оператором writeln на экран компьютера – это и будет решение поставленной задачи.

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

Составной оператор представляет собой группу операторов, размещенную между служебными словами begin и end. Слова begin и end, называемые в данном случае операторными скобками, обозначают здесь не начало и конец основной части программы, а начало и конец составного оператора. Между ними могут располагаться различные операторы: Количество простых операторов, входящих в составной не ограничено.

Операторы, входящие в составной оператор, отделяются друг от друга точками с запятой. Перед словом end точка с запятой не ставится. Не ставится в данном случае точка с запятой и после слова end перед словом else, так как end обозначает здесь лишь конец одного из вариантов, входящих в состав единого условного оператора. Таким образом, в общем виде структуру условного оператора с составными операторами в его ветвях можно представить следующим образом:

if <условие> then

Begin

<оператор 1>; <оператор 2>; ……….. <оператор m>

End

Else

Begin

<оператор 1>; <оператор 2>; ……….. <оператор n >

End;

Рассмотрим использование составного оператора для решения следующей задачи. Администрация магазина ввела правило, согласно которому каждый покупатель, который приобрел товар на сумму более 1000 рублей имеет право на трехпроцентную скидку от стоимости покупок.. Эта программа должна подсчитывать величину скидки и ту сумму, которую должен оплатить покупатель с учетом скидки. В случае же если стоимость покупок меньше 1000 рублей программа должна выдавать сообщение о том, что покупка должна быть оплачена полностью.

Программа для решения этой задачи приведена на рис. 7.5.4. В этой программе используются три переменных вещественного типа: sum – сумма покупки без учета скидок, skidka – величина трехпроцентной скидки, sumsk – стоимость покупки с учетом скидки.

Для вывода значения каждой переменной результата предусмотрено два разряда в дробной части, соответствующие копейкам, следовательно, цифры перед точкой в каждой из сумм будут соответствовать рублям, а цифры расположенные после точки копейкам.

На рис. 7.5.4 под текстом программы приведены результаты ее работы для обоих возможных случаев (сумма больше 1000 и сумма меньше 1000).




Рис. 7.5.4. Программа, определяющая скидку при покупке товаров в магазине и результаты ее работы при различных исходных данных

7.5.2. Логические переменные. Логические операции

Результатом операции сравнения двух чисел может быть величина, которая принимает одно из двух возможных значений: «истинно» (если указанное соотношение действительно выполняется) и «ложно» (если соотношение не выполняется). По-английски «истинно» и «ложно» пишется соответственно True и False. Константы и переменные, значениями которых может быть только эти две величины (True или False) называются логическими или булевскими константами и переменными. Название это дано в честь английского математика XIX века Джона Буля. Для описания таких переменных в языке Паскаль существует специальный тип – boolean. Пример описания логической переменной flag:

var flag:Boolean.

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

flag:=x>=15;

то есть переменной логического типа flag мы присваиваем значение операции сравнения x>=15. В случае, если указанное неравенство выполняется, значение переменной будет равно true. В противоположном случае ее значение будет равно false. Имя логической переменной, которой присвоено значение операции сравнения, можно подставлять в условный оператор вместо самой этой операции. Такой прием позволяет сделать программу более компактной в том случае, если одна и та же операция сравнения повторяется в программе несколько раз. Значения логической переменной можно выводить на экран компьютера оператором writeln подобно значениям числовых переменных. Можно присваивать значения true и false логическим переменным и напрямую: flag:=true;

Именно такой способ присваивания значений логической переменной мы и используем в следующей программе. Эта программа проверяет, имеется ли в ряду из трех целых чисел хотя бы одно положительное. Эти числа, как обычно, мы будем вводить с клавиатуры, а сообщение о результатах проверки будет выведено на экран компьютера. В программе, текст которой приведен на рис.7.5.5 используются три переменные целого типа x, y и z для вводимых числовых значений и одна переменная логического типа flag, назначение которой в данной программе мы рассмотрим ниже. Описание переменной или переменных, относящихся к одному типу, составляет отдельную группу, которую от следующей группы отделяет точка с запятой. При этом слово var, открывающее раздел описания переменных ставится только один раз.

В основной части программы переменной flag присваивается начальное значение false. Вслед за оператором присваивания в программе идут три однотипных блока, в каждом из которых обрабатывается одно из вводимых чисел. Каждый такой блок состоит из оператора вывода, предлагающего пользователю ввести число, оператора ввода, присваивающего введенное значение одной из переменных целого типа и сокращенного условного оператора, проверяющего, является ли введенное число положительным или отрицательным. В случае, если число положительное, переменной flag присваивается значение true. В том случае, если число отрицательное, никаких действий не производится.. Если же нет положительных чисел среди введенных, то значение flag останется неизменным, то есть равным false.




Рис. 7.5.5. Программа, определяющая, имеются ли в ряду чисел положительные, и результаты ее работы при различных исходных данных

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

Над величинами логического типа можно производить логические операции. Результатом логических операций могут быть только логические величины, то есть величины, имеющие значения true и false. Всего в Паскале используется 4 логических операции: not (НЕТ) -логическое отрицание, and (И) – логическое И, or (ИЛИ) – логическое ИЛИ, xor (Исключающее ИЛИ). Эти операции подразделяются на унарные, то есть такие, которые производятся только над одной величиной, и бинарные, то есть те которые производятся сразу над двумя величинами. К первому типу операций относится not, ко второму – все остальные. При выполнении логических операций соблюдается, как и для арифметических операций, определенный приоритет. Наиболее высоким приоритетом обладает операция not, то есть она выполняется в первую очередь. Далее выполняется операция and.

Самый низкий приоритет имеют операции or и xor. Если в выражении необходимо изменить порядок выполнения логических операций, для этого используются скобки, потому что выражение, заключенное в скобки, обладает высшим приоритетом.

Для логических величин существует таблицы, в которой указаны результаты логических операций при различных исходных данных. Такая таблица называется таблицей истинности. Ниже приведена такая таблица для унарных (табл.1) и (табл.2) бинарных операций.

Таблица 1. Унарные операции.

X Not(X)
False True
True False

Из данной таблицы видно, что в результате операции not, производимой над любой величиной, ее значение изменяется на противоположное.

Если рассмотреть результаты, показанные в таблице 2, то можно сделать вывод о том, что для операции and значение будет равно true только тогда, когда обе исходных величины X и Y, над которыми производится эта операция (такие величины называются операндами) имеют значение true. Во всех остальных случаях результатом операции будет false. Для операции or значение будет true, если хотя бы один из операндов (или X или Y) имеет значение true. Результат операции or будет равен false только тогда, когда оба операнда имеют значение false. Для операции xor значение будет true, если значения операндов не совпадают. Если же значения операндов совпадают (вне зависимости от того, будут ли эти значения равны false или true) то итог операции будет равен false.

Таблица 2. Бинарные операции.

  Y X and Y X or Y X xor Y
False False False False False
False True False True True
True False False True True
True True True True False

Логические операции используют при составлении программ, в которых требуется проверить сразу несколько условий. Например, если некоторое действие должно выполняться при условии, что значение переменной a находится в диапазоне от 5 до 20, то есть a должно быть больше или равно 5 и меньше или равно 20 то это условие можно записать следующим образом:

(a>=5) and (a<=20).

При этом группируемые операции сравнения заключаются в скобки как в вышеприведенном выражении.

7.5.3. Оператор Case

При составлении программ часто возникает потребность в структуре, которая обеспечивала бы возможность рассмотреть не два, а большее количество возможных вариантов дальнейших действий. В некоторых случаях для этого используются вложенные условные операторы. В каждый из вложенных условных операторов можно вставить следующий вложенный оператор и так далее. Такой способ создания многовариантного ветвления делает структуру программы чересчур сложной. Поэтому в языке Паскаль предусмотрена другая конструкция, которая позволяет осуществлять выбор из множества возможных вариантов и в то же время является более простой и наглядной, чем вышеописанная. Эта конструкция реализуется с помощью оператора Case.

Общий вид оператора case следующий:

Case < селектор > of

< Значение 1 >: < Вариант1 >;

< Значение 2 >: < Вариант2 >;

.......................................

< Значение n >: < Вариант N >;

Else < Вариант N+1 >;

End;

где Case, of, Else – служебные слова языка Паскаль. Словосочетание Case of переводится на русский как «В случае если». Селектором называется переменная целого или символьного типа (о символьных переменных мы расскажем более подробно в разделе «Работа с символами и строками»). Переменная-селектор может принимать различные значения. После заголовка в операторе идет перечень возможных значений переменной- селектора. Каждому из этих значений соответствует определенный вариант действий, который реализуется в том случае, если в программе селектор принимает это значение. Этот вариант указывается после двоеточия, отделяющего его от значения, и представляет собой простой или составной оператор. Если переменная-селектор не принимает ни одно из перечисленных в операторе case значений, то выполняется альтернативный вариант, который указан после служебного слова else. Обратите внимание на то, что в отличие от условного оператора if в операторе case перед вариантом с else ставится точка с запятой. Эта часть оператора (else с соответствующим ему вариантом) не является обязательной. Возможен сокращенный вариант оператора без этой части. Заканчивается оператор case служебным словом end, после которого ставится точка с запятой.

Разберем следующий фрагмент программы, в которой использован оператора case:





Дата публикования: 2014-11-02; Прочитано: 2205 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.035 с)...