АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Иначе сообщаем, что месяц введен неверно

Читайте также:
  1. B При введенні імунних сироваток
  2. I Введение
  3. I. Введение
  4. I. Введение
  5. I. Введение
  6. I. ВВЕДЕНИЕ
  7. I. Введение
  8. I. Введение
  9. I. Введение
  10. I. ВВЕДЕНИЕ.
  11. II. ВВЕДЕНИЕ
  12. Text 1. Отрывок из рассказа И. Балбышева «Февраль – самый снежный месяц».

ПЗ-08 Ввод переменных перечисляемого и интервального типов

1 Цель занятия изучить методику описания и ввода значений перечисляемых и интервальных типов данных. Кроме этого, будет рассмотрена методика использования операторов цикла для управления процессом выполнения программы.

2 Краткие методические указания. Рассмотрим календарную дату некоторого года. Такая дата, например день рождения, может быть представлена переменной перечислимого типа (Type-declaration) месяц рождения bm и переменной интервального типа день рождения bd. Однако процедуры ввода (Readln) не поддерживают ввод переменных перечисляемого типа. Переменные этого типа надо вводить как строковые, а затем анализировать введенную строку и если ее значение совпадает с одним из значений переменной перечисляемого типа, то присваивать этой переменной соответствующее значение. Например, если ввели строку str, которая обозначает переменную месяц года, то алгоритм этого анализа может быть таким:

Если str=’янв’, то m=янв

Иначе если str=’фев’, то m=фвр

……

Иначе если str=’дек’, то m= дек

Иначе сообщаем, что месяц введен неверно.

В этом алгоритме строковая переменная (String) str представляет введенное значение месяца. Если это значение совпадает со значением переменной перечисляемого типа, то это значение присваивается этой переменной. Если не совпадает, то сравнивается со следующим значением. Если мы проверили все значения строковой переменной и не нашли совпадений, то значение месяца года введено неверно, о чем сообщается оператору. Следует заметить, что в языке Паскаль нельзя для обозначения значений переменных перечислимого типа использовать русские буквы. На этом ПЗ Вы должны будете описать дату своего дня рождения (без года рождения) и описать процесс ввода некоторой даты, состоящей из месяца года и дня в этом месяце. Пока будем считать, что все месяцы имеют одинаковое количество дней – 31. День месяца будем описывать переменной интервального типа 1…31. Процедура ввода присваивает ей целое значение не большее 255. Поэтому после ввода надо проверить, лежит ли ее значение в заданном диапазоне. Это можно выполнять специальными операторами или автоматически в процессе выполнения программы. Для этого надо установить опцию компилятора {$R+}. По умолчанию эта опция имеет значение {$R-}, при которой проверка диапазона значений переменной интервального типа не производиться. В Вашей программе надо проверить действие этой опции.

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

П1 Повторять

П1.1 Предложить оператору ввести данные.

П1.2 Ввод данных.

П1.3 Обработка данных.

П1.4 Запросить у оператора необходимость продолжения работы.

П1.5 Ввод команды оператора

пока оператор подтверждает продолжение.

Например, пусть оператор должен подтверждать продолжение нажатием кнопки, на которой обозначены буквы Д и L. Эта кнопка предназначена для ввода кодов прописных и строчных букв кириллицы (Д,д) или прописных и строчных букв латиницы (L,l) Коды для представления этих букв даны в таблице кодов ASCII или могут быть получены функцией ord(‘L’). Ниже приведен текст такой программы.

 

Uses Crt;

var ch:char; (*Переменная для ввода команды*)

begin

Repeat

writeln('Вводите и обрабатывайте данные');

(*Здесь описан ввод и обработка данных*)

writeln('Продолжить?(Д)');(*Приглашение ввести команду*)

ch:=ReadKey;(*Ввод команды*)

Until ((ord(ch)<>$4C)and(ord(ch)<>$6c)and(ord(ch)<>$84)and(ord(ch)<>ord('д')));

writeln(ord('д'));

end.

 

В этой программе для организации цикла работы программы используется оператор цикла с пост условием (Repeat - с проверкой условия после выполнения действий). Синтаксис этого оператора описывается следующей БНФ:

<Оператор цикла с пост условием>::=Repeat{<оператор>;}Until<условие>

Операторы в этом цикле выполняется до тех пор пока не станет истинным указанное условие. Мы должны повторять, пока в ответ на вопрос о продолжении мы нажимаем кнопку с кодом символа L или символа l или символа Д или символа д. Это условие описывается такой логической формулой (‘L’ ИЛИ ‘l’ ИЛИ ‘Д’ ИЛИ ‘д’). И мы должны прекратить повторение, если это условие не выполняется. Отрицание этой формулы описывается логической формулой (HE ‘L’ И НЕ ‘l’ И НЕ ‘Д’ И НЕ ‘д’). В программе эта логическая формула описывается условием:

((ord(ch)<>$4C)and(ord(ch)<>$6c)and(ord(ch)<>$84)and(ord(ch)<>ord('д')));

Это условие представляет собой дизъюнкцию (логическое произведение) логических выражений, которые сравнивают код введенного символа (ord(ch) с кодом одного из символов L, l, Д или д. Если код введенного символа не совпадает ни с одним из них, то эта дизъюнкция истина и цикл больше не выполняет операторы, записанные в теле цикла между служебным словом Repeat и Until. Коды символов задаются шестнадцатеричными константами ($4C) из таблицы кодов A SCII или определяются функцией ord('д').

Аналогичный алгоритм может быть реализован оператором цикла с пред условием (While). Условием, которое проверяется перед выполнением операторов тела цикла.

 

Uses Crt;

var ch:char;(*Символьная переменная для ввода команды*)

begin

ch:='L'; (*Начальная установка символьной переменной*)

while ((ord(ch)=$4C)or(ord(ch)=$6c)or(ord(ch)=$84)or(ord(ch)=ord('д')))do

begin

writeln('Вводите и обрабатывайте данные');

writeln('Продолжить?(Д)');

ch:=ReadKey;

end;

writeln(ord(ch));

end.

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

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


Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)