1611678431-0e68e83522cb9d960ac896aa5d90854d (826635), страница 4
Текст из файла (страница 4)
Каждому типу сопоставляется одно имя (явное или неявное).3. При объявлении операции (процедуры, функции) явно указаны имена (неконструкторы) типов формальных параметров и тип результата для функций.4. Точно сформулированы правила, когда различающиеся типы совместимы поприсваиванию.Ошибки при такой компиляции определяются при компиляции11. Логический и литерный типы данных языка ПаскальЛекции: фото 11, 13Тип BOOLEAN (булевский, логический). Логический тип в языке Паскаль задается какперечисляемый тип, содержащий всего два значения, которые имеют идентификаторы FALSE (ложь) иTRUE (истина).Элементам этого типа поставлены в соответствие номера: 0 — значению FALSE и 1 — TRUE.Поэтому FALSE < TRUE. В памяти ЭВМ переменные этого типа занимают один байт.
Над данными этоготипа определены операции: дизъюнкция OR, конъюнкция AND, исключающее или XOR, отрицаниеNOT, а также отношения <, >, <= (совпадает с →), >=, <>, = (совпадает с ↔). Результаты выполнениялогических операций над булевыми переменными P и Q приведены в таблице 5.Следует отметить, что операции сравнения данных любых типов имеют результат типаBOOLEAN. Например, если даны переменные с именами Р, Q типа BOOLEAN и X, Y, Z типа REAL, причемX = 5.8, Y = 8, a Z = 10.3 , то справедливы утверждения:Q := (X < Y) and (Y <= Z)P:= X = Y=>TRUE;=>FALSE.Наиболее часто булевский тип данных используется для управления порядком выполненияоператоров в программе.В языке имеется функция ODD(X), где X - целое число.
Если X четно, то ODD(X) принимаетзначение FALSE, если X нечетно, то ODD(X) – TRUE.Основные соотношения алгебры логики:1. Р or Q = Q or Р.Р and Q = Q and Р.2. (Р or Q) or R = Р or (Q or R).(Р and Q) and R = Р and (Q and R).3. (Р and Q) or R = (Р or R) and (Q or R).(Р or Q) and R = (Р and R) or (Q and R).4. not (Р or Q) = not P and not Q.not (Р and Q) = not Р or not Q.При решении практических задач могут возникнуть самые разнообразные условия, которыеследует записать в виде логических выражений, использующих логические операции и отношения. Вэтом случае бывает полезно помнить о следующих булевых соотношениях и эквивалентныхпреобразованиях.Эквивалентные преобразования:X≠Ynot (X = Y)X <= Ynot (X > Y) or (X = Y)X >= Ynot (X < Y)X>Ynot (X < Y) and (X = Y)Тип CHAR (литерный, символьный). Этот тип задает конечное упорядоченное множествосимволов (литер), допускаемое в конкретной реализации языка.Первые позиции 0 – 31 заняты под коды управления устройствами (монитор, принтер и др.) имогут иметь разное воздействие на разные устройства.
Например, код 7 вызывает звуковой сигнал привыводе информации на дисплей:WRITELN ('Проверьте принтер!', CHR(7)).Коды 13 и 10 для дисплея или принтера осуществляют перевод курсора в начало текущейстроки и переход на следующую строку. Эти коды можно использовать для вывода информационногосообщения, составляющего несколько строк, с помощью одного оператора вывода:WRITELN('Bнимание!'' + CHR(13) + CHR(10) + 'Следите за экраном.').Переменная часть кодовой таблицы содержит национальный алфавит, символыпсевдографики и специальные нестандартные символы. Коды 128 — 255, приведенные в таблицевнизу, отражают модифицированную кодировку ГОСТа для подключения кириллицы.Примечание: в таблицах сокращения (пр.) и (зб.) означают пробел и забой соответственно.Значения констант и переменных типа CHAR есть один символ из допустимого набора,например: 'Z', 'j', '2', '*', 'Ц', 'д', 'г'.
Второй способ записи символа в программе состоит в использованиипрефикса # перед номером литеры. Примеры символов: #90, #106, #50, #42, #150, #164.Описываются переменные этого типа как – VAR CHI, CH2:CHAR;Использование переменных типа CHAR в арифметических выражениях запрещено. К даннымэтого типа могут применяться только операции сравнения, при этом результат зависит от порядковыхномеров литер в кодовой таблице символов.Например: 'В' > 'А' => FALSE, '1' <= '9' => TRUE.Множество цифр и букв не только упорядочено в соответствии с кодом литер от 32 до 255, нои связно, код последующей литеры больше кода предшествующей на 1.Таким образом, '0' < '1' < '2' < ... < '9'; 'А' < 'В' < 'С < 'D' < ...
< 'Z'; 'а' < 'б' < 'в' < 'г' < ... < 'я'.Для работы с литерами часто используются функции CHR, ORD, PRED, SUCC, описание которыхприведено в таблице 10.Пример 1. Вывести на экран монитора литеры, коды которых начинаются с 32 и заканчиваются— 255.PROGRAM PR1;VAR I: INTEGER;BEGINFOR I:=32 TO 255 DO WRITELN('код =', I:-3,'===>', CHR(I))END.13. Вещественный тип данных языка Паскаль, его представление на машинном уровне,нормализованная форма, переполнение и сокращениеВещественные типывс, 10/24/2010 - 20:08 — techВ языке Паскаль существует несколько типов для представлениядействительный чисел. Однако чаще всего для их представленияиспользуется тип Real.Таблица.
Вещественные типы в PascalТипДиапазонЧисло цифрПамять, байтReal2.9e-39 … 1.7e3811-126Single1.5e-45 … 3.4e387-84Double5.0e-324 ...1.7e30815-168Extended3.4e-4932 … 1.1e49319-2010Comp-9.2e63 … (9.2e63)-119-208Числоцифропределяетточность,скоторойбудетхранитьсявещественное число. Например, для Real разрядность мантиссы можетсоставлять не более восьми десятичных знаков. Тип Comp содержиттолько целые значения, которые представляются в вычислениях каквещественные.Над действительными числами выполнимы операции сложения (+),вычитания (-), умножения (*) и деления (/). Результатом этих операцийявляется также действительное число.
Даже если хотя бы один изоперандов вещественный, то результат этих операций также будетвещественным.Операция деления (/) дает вещественный результат и в случае двухцелых операндов. Например, 6 / 2 = 3.0.Для действительных чисел допустимы такие же операции отношения(сравнения), что и для целых чисел.Стандартная функция abs(x) – модуль x – от целого аргумента даетцелый результат, а от вещественного – вещественный, как и sqr(x) –квадрат x.Функцииsin(x) –синусx(xврадианах),cos(x) –косинусx(xврадианах),ln(x) –натуральныйлогарифмx,exp(x) –экспонентаx,sqrt(x) –кореньквадратныйизx,arctan(x) –арктангенсxдают вещественный результат, как для вещественного, так и для целогоаргумента.Функция int возвращает в виде действительного значения целуючасть аргумента, frac возвращает дробную часть аргумента.Функции trunc и round возвращают результат целого типа. Перваяотсекает дробную часть от аргумента, а вторая выполняет округление доближайшего целого.Функция random безаргументовраспределенное случайное число от 0 до 1.возвращаетравномерноНе имеющая аргументов функция pi возвращает число Пифагора.Нельзя использовать переменные и константы вещественного типа:в функциях pred, succ, ord;в качестве индексов массивов;в операторах передачи управления в качестве меток.Представление вещественных чисел вкомпьютере.Для представления вещественных чисел всовременных компьютерах принят способпредставления с плавающей запятой.
Этот способпредставления опирается на нормализованную(экспоненциальную) запись действительных чисел.Как и для целых чисел, при представлениидействительных чисел в компьютере чаще всегоиспользуется двоичная система, следовательно,предварительно десятичное число должно бытьпереведено двоичную систему.Нормализованная запись числа.Нормализованная запись отличного от нулядействительного числа - это запись вида a= m*Pq,где q - целое число (положительное, отрицательноеили ноль), а m - правильная P-ичная дробь, у которойпервая цифра после запятой не равна нулю, тоесть. При этом m называется мантиссойчисла,q - порядком числа.Примеры:1.
3,1415926 = 0, 31415926 * 101;2. 1000=0,1 * 104;3. 0,123456789 = 0,123456789 * 100;4. 0,00001078 = 0,1078 * 8-4; (порядок записан в 10й системе)5. 1000,00012 = 0, 100000012 * 24.Так как число ноль не может быть записано внормализованной форме в том виде, в каком онабыла определена, то считаем, что нормализованнаязапись нуля в 10-й системе будет такой:0 = 0,0 * 100.Нормализованная экспоненциальная запись числа это запись вида a= m*Pq, где q - целое число(положительное, отрицательное или ноль), а m - Pичная дробь, у которой целая часть состоит из однойцифры. При этом (m-целая часть)называется мантиссой числа, q - порядком числа.Представление чисел с плавающей запятой.При представлении чисел с плавающей запятойчасть разрядов ячейки отводится для записи порядкачисла, остальные разряды - для записи мантиссы.По одному разряду в каждой группе отводится дляизображения знака порядка и знака мантиссы.
Длятого, чтобы не хранить знак порядка, был придумантак называемый смещённый порядок, которыйрассчитывается по формуле 2a-1+ИП, где a количество разрядов, отводимых под порядок.Пример:Если истинный порядок равен -5, тогда смещённыйпорядок для 4-байтового числа будет равен 1275=122.Алгоритм представления числа с плавающейзапятой.1. Перевести число из p-ичной системы счисленияв двоичную;2.
представить двоичное число в нормализованнойэкспоненциальной форме;3. рассчитать смещённый порядок числа;4. разместить знак, порядок и мантиссу всоответствующие разряды сетки.Пример:Представить число -25,625 в машинном виде сиспользованием 4 байтового представления (где 1бит отводится под знак числа, 8 бит - подсмещённый порядок, остальные биты - подмантиссу).2510=10001120,62510=0,1012-25,62510= -100011,10122.
-100011,1012 = -1,000111012 * 243. СП=127+4=1314.Можно заметить, что представлениедействительного числа не очень удобно изображатьв двоичной системе, поэтому часто используютшестнадцатеричное представление:Окончательный ответ: C1CD0000.ПереполнениеПри сложении вещественных чисел также возникают ситуации переполнения, скоторыми компьютер справляется самостоятельно. Рассмотрим еще один пример.Пример 2.
Сложить в дополнительном коде числа -0,11002Е4 и –0,10002Е4.Разрядная сетка из девяти разрядов, из них четыре разряда – под порядок, пять разрядов –под мантиссу.1. разместим слагаемые в разрядных сетках:-0,11002 Е40 1 0 0 1 1 1 0 0-0,10002 Е40 1 0 0 1 1 0 0 02. вычитаем из порядка 4 порядок 4. Имеем: 4 – 4. Для сложениячисел в дополнительном коде выполним сначала необходимыйперевод, а затем - сложение:Прямые кодыОбратные кодыДополнительныекоды0100⇒ 0100⇒ 0100110010111100Результат 0сложения:000Поскольку результат равен нулю, порядки слагаемых равны и никакихпреобразований по выравниванию порядков (шаги 2 – 4 из приведенной вышепоследовательности действий) не требуется. Поэтому сразу складываем мантиссы.Поскольку оба слагаемых отрицательны, переведем их сначала в обратный, затем вдополнительный коды:Прямые кодыОбратные кодыДополнительныекоды1 1 1 0 0 ⇒ 1 001 1 ⇒ 1 01001 1 0 0 011 11 1000Результат 0 1сложения:1001 0Полученный результат положителен, несмотря на то, что складывалисьотрицательные слагаемые.
Это является формальным признаком переполнения разряднойсетки. В этом случае выполняются следующие действия:1. мантисса результата вместе со знаком сдвигается вправо на одинразряд. Таким образом, старший разряд мантиссы становитсяравным ее знаковому разряду. При этом, очевидно, теряетсямладший числовой разряд;2. знаковый разряд результата приравнивается знаковому разрядуслагаемых;3. порядок увеличивается на единицу.Для нашего примера имеем следующие действия:1. сдвиг мантиссы («забываем» о порядке):0 1 1 0 0 ⇒0 1 1 02. формирование знакового разряда дает результат:1 0 1 1 03.