lekcii (522345), страница 6
Текст из файла (страница 6)
Если делитель оказывается равным нулю, то деление не производится и происходит ОТКАЗ (автоматическая остановка машины -- АВОСТ). В современных процессорах реализованы малотактпые операции деления с одновременной обработки всех разрядов числа. Паскаль-программы интерпретации изображений вводимых и выводимых вещественных чисел приведены в и. 13 пособия Н.Вирта 18~.
Лекция 21 3.2.5 Тип литерный сЬаг а - 'а', Ь = Ъ', с:, 1пв 1; маг а, Ь, с: сЬаг; ; 1ИСеиег; 169 Константы литерного типа — самоопределенные термы - заключаются в апострофы или кавычки: '3', 'а'. Множество значений определяется конкретной кодировкой: АВСП, .КОИ-8 и т.д. Эта кодировка задает порядковый номер литеры, определяемой функцией преобразования типа огс1, связывающей литерный тип с поддиапазоном целого (обычно 10..2551), и предопреде;иет упорядоченность множества значений так, что имеет смысл понятия следующей и предыдущей литеры (эпсс и ргес1 соответственно). Одновременно кодовая таблица задает и обратное соответствие литер и внутренних кодов (в Паскале это функция с1гг).
Таким образом, лля всякой литеры с имеет место соотношение с — сЬг(огс!(с)) и наоборот (для малых положительных целых, обычно в диапазоне [0..255]) 1 — огс1(с111(1) ). Кроме того, с — кпсс(ргес1(с)) ргес1(эпсс(с)), Для языка Си все условности отброшены и транслятор осуществляет неявное автоматическое преобразование 1п$ ~ сЬаг: 1 — с Или С 1. Тип литерный имеет минимальный набор операций и отношений, .включающий в себя присваивание:= и стандартный набор отношений. В языках Паскаль и Си имеется встроенный литерный тип. а: а Ьг- Ь', Ы а > Ь СЬеп с — (а>Ь)7а.: Ь; с ' а7 е1ве с; Ь; он1(с); 1 с; 1аЬе1 17, 43; Суре Сгаре -- аггау[1..МАХ11ХСТ) оС' сЬаг; маг Саре: ССаре; ис: шСеиег; Ьеиш 1'" 7' ~(17, д, ), 17)~ 17: 11'(Саре~ее~ 'и') СЬеп Ьеиш Саре~и с1: иоСо 17 епг1 ~(17, 1, >, 43Д е1ае 11'(Саре(ис) -- '1') СЬеп Ьеиш ит >- кпсс(ич ); иоСо 43 епс1; 1' "7 епс1.
Это можно рассматривать как еще одно доказательство тезиса Тьюринга- Черча. Кроме того, это прекрасная иллкн:трация опсрационный семантики состояний-переходов, свой- 170 Литерный тип используется для ввода-вывода и обработки текстовых данных (в том числе и для изображений значений других типов словами .-- цепочками знаков). По этой причине в языке Паскаль литерный тип является «более элементарнымь, чем другие типы. Основные входной и выходной файлы Паскаль-программы (1прпС и опгрпг) -- литерного типа. Имеется соответствующий предопределенный файловый тип СехС. В настоящее время ввод-вывод утрачивает свою литерную ориентацинх приобретая графический и мультимедийный характер.
Однако литерный тип весьма важен как простой и удобный стандарт. Часто используются одномерные массивы литер, называемые строками. В расигиреиият Паскаля строковый тип снабжен богатым набором операций, отношений и функций, образуя своеобразную алгебру и даже геометрию. В языке Си строкового как такового типа нет. Вместо строк используется массив литер. Признаком копна строки является элемент с кодом 0 (пиИ-Сепптаггпу агттд).
Лепта магпины Тьюринга является строкой ~84) и на любом языке программирования можно написать нечто подобное этому. ственной МТ. Сравним строковыс средства Паскаля и Си. ,',7 Строка из 80 лигпер[ сЬаг всг [81[; лаг згг: рас1сес1 аггау[1..80[ оГ сЬаг: 1' Копирование строки теолъко с расЕед,г зсг: 'Но11о, „ггог1с1! <б7 пробелов>'; ;,7 Копггрованпе строки в строку всгсру(зсг, "НсПо, гчсгг1с1"); 1' Поиск и залгена литеры 3 :-- 1; Гоппс1 >- Ка1ве; глЬ11е (1 < 80) апс1 по$ Гопггс1 с1о К агг[г[ .. 'гг'1Ьеп Ьея1п зсг [г [ =- 'Чг': 1оппс1:-= Фгпе; епс1; г': Поиск и замена литеры зсг [зсгсЬг(згг, 'гг")] — 'Чп: Въсчисление длины строки згг1егг (зсг): ,',' Конкатенация строк вггсас(зсг, "!"); 1' Перевод в нижний регистр гг Гог 1:-- 1 $о 80 с1о 11 асг [1[ >-- 'А' апс1 зсг[1[ <=- 'Х' ФЬеп зсг [г [ г- с1и(огс1(зсг [г [) + огс1('А ) — огс1 ('а')); ,О Перевод в нижний регистр всг1гкг(зсг); 3.2.6 Согласование типов Подобно многотиповой мапгинс фон Неймана, язык программирования фон Неймановского типа допускает согласованное использование различных типов данных в вычислениях.
Выражения со смешанными типами явно (с помощью функций согласования типов) или неявно (функции преобразования осуществляются компилятором или языковой средой по умолчанию) приобретают вполне определенный однозначный смысл. Помикю соответствия литерного гл целого типов, заслуживает внимания согласование целого и вещественных типов, как близких с математической точки зрения (числовых), хотя весьма различных по внутримашинному представлению значений.
Оно может осуществляться как округлением (гоггпс1()), так и отбрасыванием дробной части (ггггггс()). Обратное преобразование (из цс;лого в вещественный) производится по умолчанию в слу- 171 Из примера видно, что в Паскале представление строк примитивное. не позволяклцее работать со строками переменной длины, .в которых должен быть либо терминатор (символ завершсния строки), либо дескриптор строки с указанием ес длины и ссылкой на, се содержимое. Видимо, автор Паскаля, ограничиваясь строками фиксированной длины, заботился об эффективной статической компиляции Паскаль-программ, поскольку поддержка строк переменной длины добавляет элемент интерпретативности.
В языке Си строковый тип реализован интерпретативным образом как набор функций стандартной библиотеки языка. чае необходимости приведения сме|панного выражения к более слолсяому вещественному типу. Преобразование целый-вещественный часто реализуется интерпретативно, и, следовательно, достаточно трудоемко. В современных процессорах это преобразование возлагается на аппаратуру (математический сопроцессор). За трйхтиповым примером лложно обратиться к программе печати графиков Н. Вирта (~9~, .с, 35 — 36).
В расширениях языка Паскаль вопрос согласования типов решен более систематически, так, что имя любого типа может использоваться как функция преобразования к нему: 1пСедег(г). Крол1с того, возможна трактовка значения одного типа в любом другом типе с соответствующей сменой интерпретации внутреннего представления (низкоуровневое средство). Это возможно даже в стандартном Паскале (записи с вариантной частью).
3.2.7 Небазовые типы данных Поскольку предусмотреть в языке программирования встроенных базовых типов на все случаи жизни невозможно, обычно предоставляют возможность более или менее тривиального конструирования новых типов данных на основе базовых. 3.2.7.1 Отрезок (диапазон) Можно было бы объявить отрезок типа, например, следующим образом: Суре с11ар - (0.0 .. 2.0; геа1; геа1); Здесь в качестве множества значений берется отрезок вещественного типа, операции и отнопгения также заимствуются из вещественного типа. 3.2.7.2 Перечисление В программе управления ули шым движением удобно обьявить Суре ВСгееСВ1иЫ вЂ” ((Кес1, Уе11олг, Огееп);:=-; 1пСеиег): Лекция 22 3.2.8 Понятие о структурном типе данных До сих пор значения типов, даже и изображаемые словами, нами считались атомарными, не имеющими структуры, хотя очевидно, что во многих задачах удобно иметь дело со значениями, имеющими ту или иную структуру (векторами, матрицами, последовательностями, деревьями, графами).
Рассмотрим типы данных со структурными значениями. Структурные значения это упорядоченные систематически организованные совокупности других (быть может, тоже структурных) значений, рассматриваемое как единое целое. Компонснтьг структурных значений также называется его полями или элементами. Типичным примером структурного типа является комплексный тип, состоящих из двух вещественных полей: вещественной и мнимой частей. 172 Структурный тип характеризуется типом (или типами) своих компонент, и способом их организации (методом структурирования). Существует несколько методов структурирования, отличающихся способом доступа к компонентам и способом обозначения этих компонент: регулярный метод с индексированным или секвенциональным доступом к элементам, комбинированный метод с квалифицированным доступом к полям и др.
Регулярный структурный тип содержит компоненты одного типа, называемого базовым. Напротив, комбинированный структурный тип содержит компоненты различных типов. Различак1Т индексированный (компоненты структурного типа идентифицирук1тся т. н. индексом (некоторым атомарным значением перечислимого типа прямо адресун1щим элемент), квалифицированный (компонента идентифицируется именем) и секвенциальный (последовательный) методы доступа. Переменные и константы структурного типа называются структурными. Заметим, что структурные константы отсутствуют в стандарте языка Паскаль, так что для этой цели используются структурные переменные, компоненты которых предварительно заполняются требуемыми значениями. доступ~структура регулярная комбинированная индексированный массив секвенциона льный квалифицированный запись 3.2.9 Тип массив Тип массив - .