Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Текстовый и числовой ввод-вывод
Ada 95 — это язык для разработки программ реального мира, программ, которые могут быть очень большими (включать сотни тысяч операторов). При этом желательно, чтобы отдельный программный файл имел разумно малый размер. Для обеспечения такого ограничения Ada 95 построена на идее библиотек и пакетов. В библиотеку, составленную из пакетов, помещаются программные тексты, предназначенные для многократного использования. Пакеты ввода-вывода
Пакет подключается к программе с помощью указания (спецификатора) контекста, имеющего вид with <Имя_Пакета>; Размещение в пакетах процедур ввода-вывода (для величин предопределенных типов) иллюстрирует табл. В.1. Таблица В.1.Основные пакеты ввода-вывода
Для поддержки ввода-вывода величин других типов, определяемых пользователем, используются шаблоны (заготовки) пакетов — родовые пакеты. Родовой пакет перед использованием должен быть настроен на конкретный тип. Как показано в табл. В.2, родовые пакеты ввода-вывода всегда находятся внутри пакета-библиотеки Ada.Text_IO. Таблица В.2.Внутренние пакеты из пакета-библиотеки Ada.Text_IO
Для обращения к внутренним родовым пакетам используют составные имена, например Ada.Text_IO.Modular_IO, Ada.Text_IO.Enumeration _IO. Процесс настройки родового пакета называют конкретизацией. В результате конкретизации образуется экземпляр родового пакета. Экземпляр помещается в библиотеку и может быть подключен к любой программе. Конкретизация задается предложением следующего формата: with <Полное имя родового пакета>; package <Имя пакета-экземпляра> is new <Имя родового пакета> (<Имя типа настройки>); Например, введем перечисляемый тип: Type Summer is ( may. jun, jul. aug ); Создадим экземпляр пакета для ввода-вывода величин этого типа: with Ada.Text_IO.Enumeration_IO; package Summer_IO is new Ada.Text_IO.Enumeration_IO (Summer); Теперь пакет SummerJO может использоваться в любой программе. Процедуры ввода
Формат вызова процедуры: <ИмяПакета> . Get (<ФактическиеАргументы>); Например, для ввода величины типа Character записывается оператор вызова Ada.Text_IO.Get (Var); В результате переменной Var (типа Character) присваивается значение символа, введенного с клавиатуры. Пробел считается символом, нажатие на клавишу Enter не учитывается. Еще один пример оператор вызова: Ada.Integer_Text_IO.Get (Var2); В этом случае в переменную Var2 типа Integer заносится строка числовых символов. Все ведущие пробелы и нажатия на клавишу Enter игнорируются. Первым символом, отличным от пробела, может быть знак +, - или цифра. Строка данных прекращается при вводе нечислового символа или нажатии на клавишу Enter. Процедуры вывода
В операторе вызова можно указывать не только фактические параметры, но и сопоставления формальных и фактических параметров в виде Put (<ФактическийПараметр1>, <ФормальныйПараметрЗ> => <ФактическийПараметрЗ>, ...); При такой форме порядок записи параметров безразличен. Например, по оператору вызова Ada.Text_IO.Put ( Item => Var3 ) значение переменной Var3 (типа Character) отображается на дисплее, а курсор перемещается в следующую позицию. По оператору вызова Ada.Integer_Text_IO.Put ( Var4. Width => 4 ) на экране отображается значение целой переменной Var4, используются текущие Width позиций (в примере — 4). Если значение (включая знак) занимает меньше, чем Width, позиций, ему предшествует соответствующее количество пробелов. Если значение занимает больше, чем Width, позиций, то используется реальное количество позиций. Если параметр Width пропущен, то используется ширина, заданная компилятором по умолчанию. Основные операторы
Оператор присваивания <ИмяПеременной> := <Выражение>; предписывает: вычислить значение выражения и присвоить это значение переменной, имя которой указано в левой части. Условный оператор if <условие 1> then <последовательность операторов 1> elsif <условие 2> then <последовательность операторов 2> else последовательность операторов 3> end if; обеспечивает ветвление — выполнение операторов в зависимости от значения условий. ПРИМЕЧАНИЕ Возможны сокращенные формы оператора (отсутствует ветвь elsif, ветвь else).
Оператор выбора позволяет сделать выбор из произвольного количества вариантов, имеет вид case < выражение > is when <список выбора 1> => <последовательность операторов 1> … when <список выбора n> => <последовательность операторов n> when others => <последовательность операторов n+1> end case; Порядок выполнения оператора: 1) вычисляется значение выражения; 2) каждый список выбора (от первого до последнего) проверяется на соответствие значению; 3) если найдено соответствие, то выполняется соответствующая последовательность операторов, после чего происходит выход из оператора case; 4) если не найдено соответствие, то выполняются операторы, указанные после условия when others. Элементы списка выбора отделяются друг от друга вертикальной чертой ('|') и могут иметь следующий вид: q <выражение>; q <выражение n>..<выражение m>. Примеры: case Number is when 1 | 7 => Put ("Is 1 or 7"); when 5 => Put ("Is 5"); when 25..100 => Put ("Is number between 25 and 100"); when others => Put ("Is unknown number"); end case; case Answer is when 'A'..'Z' | 'a'..'z' => Put_Line ("It's a letter!"); when others => Put_Line ("It's not a letter!") end case; Оператор блока объединяет последовательность операторов в отдельную структурную единицу, имеет вид declare <последовательность объявлений> begin <последовательность операторов> end; ПРИМЕЧАНИЕ Объявления из раздела declare действуют только внутри раздела операторов блока.
Пример: declare Ch : Character; begin Ch := 'A'; Put ( Ch ); end; Операторы цикла
Оператор цикла loop loop <последовательность операторов 1> exit when <условие выхода> <последовательность операторов 2> end loop; служит для организации циклов с заранее неизвестным количеством повторений. Порядок выполнения. 1. Выполняется последовательность операторов 1. 2. Вычисляется значение условия выхода. Если значение равно True, происходит выход из цикла. 3. Выполняется последовательность операторов 2. Осуществляется переход к пункту 1. ПРИМЕЧАНИЕ Операторы тела повторяются, пока условие равно False. В теле должен быть оператор, влияющий на значение условия, иначе цикл будет выполняться бесконечно. В теле цикла возможно использование безусловного оператора выхода exit или условного оператора выхода exit when <условие>.
Пример: Count := 1; loop Ada.Integer_Text_IO.Put ( Count ); exit when Count = 10; Count := Count + 1; end loop: При выполнении цикла на экран выводится: 12345678910 Аналогичные вычисления можно задать в следующем виде: Count := 1 loop Ada.Integer_Text_IO.Put ( Count ); if Count = 10 then exit; end if; Count := Count + 1; end loop; Оператор цикла while также позволяет определить цикл с заранее неизвестным количеством повторений, имеет вид while <условие продолжения> loop <последовательность операторов> end loop; Порядок выполнения. 1. Вычисляется значение условия. Если значение равно True, выполняется переход к пункту 2. В противном случае (при значении False) происходит выход из цикла. 2. Выполняются операторы тела цикла. Осуществляется переход к пункту 1. Таким образом, это цикл с предусловием. Перечислим характерные особенности оператора while. 1. Операторы тела могут выполняться нуль и более раз. 2. Операторы тела повторяются, пока условие равно True. 3. В теле должен быть оператор, влияющий на значение условия (для исключения бесконечного повторения). Пример: Count :=1; loop while Count <= 10 loop Put ( Count ): Count := Count + 1; end loop; При выполнении цикла на экран выводится: 12345678910 Оператор цикла for обеспечивает организацию циклов с известным количеством повторений. Используются две формы оператора. Первая форма оператора for имеет вид: for <параметр цикла> in <дискретный диапазон> loop <операторы тела цикла> end loop; Параметр цикла — это переменная, которая заранее не описывается (в программе). Данная переменная определена только внутри оператора цикла. Параметру цикла последовательно присваиваются значения из дискретного диапазона. Дискретный диапазон всегда записывается в порядке возрастания в виде min .. max; Операторы тела повторяются для каждого значения параметра цикла (от минимального до максимального). Пример: for Count in 1 .. 10 loop Put ( Count ); end loop; При выполнении цикла на экран выводится: 1 2 3 4 5 б 7 8 9 10 Вторая форма оператора for имеет вид for <параметр цикла> in reverse <дискретный диапазон> loop <операторы тела цикла> end loop; Отличие этой формы состоит в том, что значения параметру присваиваются в порядке убывания (от максимального к минимальному). Диапазон же задается по-прежнему, в порядке возрастания. Пример: for Count in reverse 1 .. 10 loop Put ( Count ); end loop; При выполнении цикла на экран выводится: 10987654321 ПРИМЕЧАНИЕ Операторы exit и exit when могут использоваться и в операторах цикла while, for. |
||||||||||
Последнее изменение этой страницы: 2018-05-10; просмотров: 198. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |