1611678431-0e68e83522cb9d960ac896aa5d90854d (826635), страница 5
Текст из файла (страница 5)
формирование порядка: к порядку +4 прибавляется 1. Обаслагаемых положительны, поэтому никаких преобразований нетребуется:0 1 0 00 0 0 10 1 0 1Таким образом, результат примера 2 имеет вид:0 1 0 1 1 0 1 1 0Поскольку мантисса результата отрицательна, она представлена вдополнительном коде и требует перевода в прямой код. Для этого выполнимсоответствующие преобразования:0 1 0 1 1 0 1 1 0⇓ в обратный код0 1 0 1 1 0 1 0 1⇓ в прямой код0 1 0 1 1 1 0 1 0Очевидно, не всегда компьютер в состоянии справиться с переполнением присложении вещественных чисел. Ограничением является размер разрядной сетки порядка.Сокращение14. Выражения языка Паскаль.
Утверждения как множества состояний памятиВыраженияВыражение задает правило вычисления некоторого значения. Выражениесостоит из констант, переменных, указателей функций, знаков операций искобок.Математические операцииВ таблице приведены основные математические операции Турбо Паскаль.Символ операции Название операцииПример*умножение2*3 (результат: 6)/деление30/2 (результат: 1.5E+01)+сложение2+3 (результат: 5)вычитание-5-3 (результат: 2)divцелочисленное деление 5 div 2 (результат: 2)modостаток от деления5 mod 2 (результат: 1)Логические операцииНад логическими аргументами в Турбо Паскаль определены следующиеоперации:NOT - логическое отрицание ("НЕ")AND - логическое умножение ("И")OR - логическое сложение ("ИЛИ")XOR - логическое "Исключающее ИЛИ"Результаты выполнения этих операций над переменными А и В логическоготипа приведены в таблице истинности.AtrueBtruetruefalsefalsetruefalse falsenot A A and B A or B A xor BfalsetruetruefalsetruefalsetruetruefalsetruetruefalsefalsefalseОперации отношенияК операциям отношения в Турбо Паскаль относятся такие операции, как:> - больше< - меньше= - равно<> - не равно>= - больше или равно<= - меньше или равноВ операциях отношения могут принимать участие не только числа, но исимволы, строки, множества и указатели.Приоритет операцийПорядок вычисления выражения определяется старшинством (приоритетом)содержащихся в нем операций.
В языке Паскаль принят следующий приоритетопераций:унарная операция not, унарный минус -, взятие адреса @операции типа умножения: * / div mod andоперации типа сложения: + - or xorоперации отношения: = <> < > <= >= inПорядок выполнения операций переопределить можно с помощью скобок.Например 2*5+10 равно 20, но 2*(5+10) равно 30.Основные математические функцииВ этом разделе приведены основные математические функции, встроенные всистемную библиотеку Турбо Паскаль.Abs(X)Возвращает абсолютное значение числа X.Cos(X), Sin(X)Возвращает косинус (синус) числа X, где X - угол в радианах.Функций тангенс и котангенс в Турбо Паскале нет.
Для их вычисленияиспользуйте выражение sin(x)/cos(x) (или cos(x)/sin(x) для котангенса).ArcTan(X)Возвращает арктангенc числа X.Exp(X)Возвращает число, равное e в степени X.Ln(x)Возвращает число, равное натуральному логарифму от числа X.PiЧисло Пи.Sqr(X)Возвращает число, равное квадрату числа X.Функции возведения в произвольную степень в Турбо Паскале нет. Используйтемногократное умножение для возведения в целочисленную степень, либофункции Exp и Ln для возведения в вещественную степень.Sqrt(X)Возвращает число, равное квадратному корню из числа X.Trunc(X)Возвращает число, равное целой части числа X.
(Происходит отбрасываниедробной части числа X. Результат выполнения имеет тип Longint).Frac(X)Возвращает число, равное дробной части числа X.Int(X)Возвращает число, равное целой части числа X. Результат выполнения функции- real.Round(X)Функция округляет число X. Возвращаемое значение имеет тип Longint.Random(X)Возвращает случайное целое число в диапазоне 0..X. Если аргумент опущен(Random), то возвращается случайное вещественное число от 0 до 1.Перед использованием random в программах рекомендуется сначалаинициализировать генератор псевдослучайных чисел процедурой Randomize.
Впротивном случае при каждом запуске программы будет генерироваться одна ита же последовательность случайных чисел.Пример. Вывод на экран 5 случайных чисел в диапазоне -10..10.var i: integer;beginrandomize;for i:=1 to 5 do writeln(random(21)-10);end.Inc(X,Y)Увеличивает значение числа X на Y.
Если число Y не указано, то увеличениепроисходит на 1.Dec(X,Y)Уменьшает значение числа X на Y. Если число Y не указано, то уменьшениепроисходит на 1.2.3.3 Утверждения как множества состоянийСпецификация программы содержит два утверждения: утверждение дано,которое описывает состояние входного файла Input до исполнения программы,и утверждение получить, которое описывает содержимое выходного файлаOutput после завершения выполнения программы, если выполнениепрограммы началось в состоянии, удовлетворяющем дано.
Заметим, что в нейничего не сказано о выполнении программы, начинающем в состоянии, неудовлетворяющем дано. Если программа должна работать со всеминачальными состояниями, например печатая сообщения об ошибках приошибочных входных данных, то эти случаи должны образовывать часть ееспецификации.Конечно же, при спецификации больших и сложных программ таким способоммогут возникнуть трудности, и чтобы справится с ними можно использоватьменее формальные, словесные утверждения дано и получить. Вместе с темпонятно, что можно рассматривать утверждения не только о начальных иконечных состояниях программы, но и утверждения, связанные с произвольнойточкой программы и описывающие те состояния ВМ, которые содержат даннуюточку программы.
Например, для ВМ с двумя переменными X и Y двасостояния {(X,2),(Y,3)} и {(X,2),(Y,4)} описывает следующее утверждение означениях переменных X и Y:(X=2)&((Y=3)or(Y=4)).Утверждение вообще и логическое выражение в частности выражает, илиописывает, множество состояний, в котором оно истинно. Так, пустоемножество, не содержащее состояний вообще, представимо логическимвыражением false, поскольку false не истинно ни в одном состоянии.
Множествовсех состояний представимо логическим выражением true, поскольку trueистинно во всех состояниях.Говорят, что утверждениеутверждение), еслислабее(а утверждениеявляется следствиемсильнее, чем(т.е. истиннаимпликация). Более сильное высказывание сильнее ограничиваеткомбинации значений переменных, описываемых им, а более слабое -- слабее. Втерминах множеств состоянийслабее, чем , если оно "менееограничительно": множество состояний, описанное , содержит по меньшеймере те состояния, которые описывает , а возможно, еще идругие. Слабейшее утверждение -- это true (или любая другая тавтология): онопредставляет множество всех состояний; сильнейшее утверждение -- это false:оно представляет пустое множество.15. Средства конструирования простых типов в языке ПаскальСредства конструирования простых типов в языке Паскаль: введениесинонимических типов, задание отрезков типов, типы, заданные перечислением значений1.
Введение синонимических типов5.1.2 Введение синонимических типовНаиболее простой способ определения нового типа -- это связывание сновым именем множества значений и набора операций уже известноготипа, например, стандартного (см. рис. 5.1). Рассмотрим следующуюпрограмму:module ПлощадьТреугольника;const МНОЖИТЕЛЬ = 0.5;type ДЛИНА = real; ПЛОЩАДЬ = real;var ВЫСОТА, ОСНОВАНИЕ : ДЛИНА; ОТВЕТ: ПЛОЩАДЬ ;beginread( ВЫСОТА,ОСНОВАНИЕ );ОТВЕТ := МНОЖИТЕЛЬ ОСНОВАНИЕ ВЫСОТА;write(ОТВЕТ)end ПлощадьТреугольника.В ней определены два новых типа ДЛИНА и ПЛОЩАДЬ, множествозначений каждого из которых -- это множество вещественных чисел снабором доступных для них операций. По существу определение типатакого вида -- это просто введение синонима уже известного типа.
Цельтакого определения понятна -- повысить наглядность программы.2. Задание отрезков типов5.1.3 Задание отрезков типовВо многих случаях, когда переменная описывается как имеющая некоторыйпростой тип, известно, что она будет хранить значения лишь из некоторогоподмножества значений данного типа. Это практически всегда имеет местодля целых переменных.Для любого простого типа (за исключением вещественного) в Паскалеможно создать новый тип (см. рис.
5.2), значения которого составляютинтервал значений исходного типа, называемого базовым. Этот новый тип,называемый отрезком базового типа, сохраняет все свойства базового типас учетом ограничения диапазона его значений.Пусть имеются определения:type ГОД = 1900..2000; БУКВА = 'A'..'Z'; ЦИФРА = '0'..'9';var Х : ГОД; Y : БУКВА; Z : ЦИФРА;тогда не разрешены присваиванияХ:=1812; Z:='A';Нетрудно видеть, что использование типов, заданных как отрезки типов,не только повышает наглядность программы, но и влияет на ееэффективность и надежность, поскольку снабжает транслятордополнительной информацией для выявления возможных ошибок впрограмме и экономии ресурсов ЭВМ.Рассмотрим небольшой пример использования отрезков типов.
Пустьтребуется подсчитать средний рост (в сантиметрах) студента в заданнойучебной группе. Эту задачу решает следующая программаprogram СреднийРост;const МинРост = 100; МаксРост = 300; N = 40;type РОСТ = МинРост .. МаксРост; НОМЕР = 1..N;var СТУД, ОТВЕТ : РОСТ; К : НОМЕР; S : Integer;beginK= 0; S := 0;repeat Read( СТУД ); К := К+1; S := S + СТУД{S - сумма элементов из Input1,until Eof {Ограничивающее выражение:ОТВЕТ := S div K;Write( ' Средний рост студента равен ', ОТВЕТ )end.;3.
Типы, заданные перечислением значений5.1.4 Типы, заданные перечислением значенийЧасто программист использует отрезок целых чисел в тех ситуациях,когда собственно числовое значение несущественно, а число -- это простономер одного из небольшого упорядоченного множества возможныхвариантов. В подобных случаях Zonnon разрешает вводить новый(простой) тип через перечисление по порядку имен всех его значений (см.рис. 5.2), например,type NumberKind = (Bin, Oct, Dec, Hex);Month = (Jan, Feb, Mar, Apr, May, Jun, July, Sep, Oct, Nov, Dec);Перечисление является типом, который состоит из именованного спискаидентификаторов, обозначающих значения, которые составляют тип. Этиидентификаторы квалифицируются именем типа при использовании вкачестве именованных констант в программе, например, Month.Jan - имяпервой константы типа Month.Значения упорядочены, и их отношение порядка определяется ихтекстуальной последовательностью в перечислении. Нет других значений,принадлежащих данному типу.
Порядковый номер первого значения равеннулю и увеличивается на единицу при переходе от любого элементаперечисления к следующему идентификатору.EnumType = "(" IdentList ")".IdentList = ident { "," ident }.Рис. 5.2. Синтаксис перечисляемого типаИмена в различных перечислениях не обязаны различаться, поскольку всегдаквалифицируются при использовании.