Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

8) ;

9) ;

10) .

7. Перечисляемый тип, тип-диапазон и оператор case.

7.1. Оператор выбора. Помимо условного оператора if, который, в зависимости от выполнения условия, позволяет выбрать ту или иную ветвь алгоритма, в языке Pascal имеется также оператор выбора case - оператор, который позволяет выполнить то или иное действие в зависимости от значения специального параметра, называемого ключом выбора.

case <ключ выбора> of

<значение ключа выбора>: <оператор 1>;

<значение ключа выбора>: <оператор 2>;

...

<значение ключа выбора>: <оператор N>;

else <оператор N+1>

end;

Ключ выбора может принимать значения любого порядкового типа. Данные любого порядкового типа имеют конечное множество возможных значений, которые можно определенным образом упорядочить. Вместе с оператором case удобно использовать перечисляемый тип данных, который задается перечислением тех значений, которые может принимать переменная этого типа.

Оператор выбора работает следующим образом: сначала вычисляется значение параметра - ключа выбора, затем выполняются операторы, соответствующие вычисленному значению. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению, будут выполнены операторы, стоящие за служебным словом else. Ветвь else можно опускать. Если ветвь else опушена, а константа, соответствующая вычисленному значению ключа выбора не найдена, оператор case не выполнит никаких действий.

7.2. Перечисляемый тип. Язык Pascal позволяет программисту определять свои собственные типы данных. Перечисляемый тип данных относится к определяемым программистом типам. Такие типы данных должны быть описаны в разделе описаний программы. Описание типов должно предшествовать описанию переменных.

НЕ нашли? Не то? Что вы ищете?

type <имя типа> = (<список значений через запятую>);

Пример: пусть нам необходима переменная, которая должна принимать значения, соответствующие названиям месяцев. Определим тип Month (месяц) и переменную m1 этого типа.

type

Month=(January, February, March, April, May, June,

July, August, September, October, November, December);

var

m1: Month;

Здесь каждое значение переменной типа Month задается идентификатором. Естественно, русские слова в качестве идентификаторов употреблять нельзя!

Альтернативно, переменную перечисляемого типа можно объявлять в программе без предварительного описания самого типа.

var <имя переменной>: (<список принимаемых

значений через запятую>);

Пример:

var m2:(January, February, March, April, May, June, July,

August, September, October, November, December);

Перечислимый тип относится к порядковым типам данных. Каждому значению порядкового типа можно сопоставить порядковый номер значения. Первое значение в списке, определяющем перечисляемый тип, получает порядковый номер 0, следующие значения - 1, 2 и т. д. Максимальное число возможных значений - 65536.

Ко всем порядковым типам применимы следующие функции:

ord(x)

возвращает порядковый номер значения выражения x;

pred(x)

возвращает предыдущее значение порядкового типа, соответствующее порядковому номеру ord(x)-1;

succ(x)

возвращает следующее значение порядкового типа, соответствующее порядковому номеру ord(x)+1.

К порядковым типам относятся также все целые типы, логический (boolean) и символьный (char), а также тип-диапазон.

7.3. Тип-диапазон - это подмножество элементов другого порядкового типа, задаваемое своим первым и последним значениями.

type <имя типа> = <минимальное значение> ..

<максимальное значение>;

Пример: определим тип MonthNumber (номер месяца) как интервал целых значений от 1 до 12.

type

MonthNumber=1..12;

var

n1:MonthNumber;

Альтернативно, переменную типа-диапазона можно объявлять в программе без предварительного описания самого типа.

var <имя переменной> : <минимальное значение> ..

<максимальное значение>;

Пример:

var

n2:1..12;

К переменным типа-диапазона применимы следующие функции:

high(x)

возвращает максимальное значение типа-диапазона, к которому принадлежит переменная x;

low(x)

возвращает минимальное значение типа-диапазона, к которому принадлежит переменная x.

Использование перечисляемых типов и типов-диапазонов повышает надежность программы благодаря возможности контролировать множество значений, которые могут принимать переменные перечисляемых типов. Для контроля возможного выхода значений переменных за границы допустимого диапазона служит опция RANGE CHECKING (меню OPTIONS - COMPILER - RUNTIME ERRORS - RANGE CHECKING). В активном состоянии она позволяет контролировать выход значений переменных за границы диапазона. Существуют также директивы компилятора, которые позволяют включать (директива {$R+}) и отключать (директива {$R-}) контроль границ диапазона.

Однако, значение переменной перечисляемого типа нельзя ввести с клавиатуры с помощью оператора read или вывести на экран с помощью оператора write, т. е. такие операторы, как

readln(m1);

write(m2);

недопустимы. Для ввода-вывода данных перечисляемого типа необходимо писать специальные процедуры (см. ниже).

7.4. Пример использования перечисляемого типа данных и оператора выбора case. Рассмотрим программу вычисления тригонометрических функций . Пользователь указывает название функции и значение аргумента, результат вычисления выводится на экран.

Введем перечисляемый тип func: Поскольку любое возможное значение переменной типа func – это идентификатор, эти значения (идентификаторы) не должны совпадать со стандартными идентификаторами языка Pascal, например, именами функций. Поэтому мы не можем использовать в качестве значений sin или cos – в противном случае эти значения "закроют" стандартные функции и , и мы не сможем обращаться к этим стандартным функциям в данной программе. В то же время, принятое в русской литературе написание функции не совпадает со стандартными функциями языка Pascal arctan(x), а функция вообще отсутствует, поэтому соответствующие имена могут употребляться без изменений.

type func=(sinus, cosin, tg, arctg);

Первое, что должен сделать пользователь – ввести название функции. Для этого нам потребуется вспомогательная строковая переменная name. Ее значение можно ввести с клавиатуры с помощью оператора readln. В зависимости от того, какое значение примет переменная name, можно присвоить соответствующее значение переменной f1 типа func. Заметим, что name не является переменной порядкового типа (строковая переменная может принимать бесконечное множество значений) и не может использоваться в качестве ключа выбора в операторе case, в данном случае приходится четыре раза использовать оператор if.

Эту часть программы, связанную с вводом названия функции, разумно выделить в отдельную процедуру. Хотя в данном учебном пособии мы не рассматриваем подробно использование процедур, нетрудно понять основные правила. Процедуры включаются в раздел описаний (см. раздел 1). Каждая процедура начинается со служебного слова Procedure, за которым следует имя процедуры (выбираемый программистом идентификатор, в данном случае – ReadFunction – чтение функции). Далее в скобках указываются формальные параметры, которые при вызове процедуры из основной программы будут заменяться фактическими. Служебное слово var перед именем параметра указывает на то, что этот параметр изменяется в ходе выполнения процедуры. Если он остается неизменным, служебное слово var опускается. Внутри процедуры могут описываться локальные переменные (в данном случае это – вспомогательная переменная name), память для локальных переменных выделяется только на время вызова процедуры, в отличие от глобальных переменных, для которых память выделяется на все время исполнения программы.

Далее пользователь вводит значение аргумента x, после чего, в зависимости от значения переменной f1, вычисляется соответствующая функция (здесь используется оператор case), и результат (значение переменной r) выводится на экран. Эти действия, представляющие вторую логическую часть программы, можно выделить в следующую процедуру – Calculation – вычисление. Здесь x и r также выступают в роли локальных переменных. Основная часть программы содержит вызовы двух процедур – ReadFunction и Calculation – с фактическим параметром – глобальной переменной f, которая подставляется на место формального параметра f1. Использование процедур делает структуру программы более ясной и отвечает современным правилам программирования на языке высокого уровня. Использование в программе перечисляемого типа дает возможность проверить правильность вводимого имени функции, его принадлежность к определенному множеству значений.

Program Case_operator;

type func=(sinus, cosin, tg, arctg);

var

f:func;

Procedure ReadFunction (var f1:func);

var

name:string[8];

begin {ReadFunction}

write ('Введите название функции: ');

readln(name);

if name='sin'

then f1:=sinus;

if name='cos'

then f1:=cosin;

if name='tg'

then f1:=tg;

if name='arctg'

then f1:=arctg;

end; {ReadFunction}

Procedure Calculation (f1:func);

var

x, r:real;

begin {Calculation}

write ('Введите значение аргумента: ');

readln(x);

case f1 of

sinus: r:=sin(x);

cosin: r:=cos(x);

tg: r:=sin(x)/cos(x);

arctg: r:=arctan(x)

else writeln('Неверный ввод!')

end;

writeln('Результат вычисления: ',r:7:4)

end; {Calculation}

begin {Program}

ReadFunction(f);

Calculation(f)

end. {Program}

7.5 Задания по теме 7: Перечисляемые типы данных и оператор case.

В следующих заданиях использовать перечисляемые типы данных и оператор выбора case.

1) Написать программу "калькулятор". Пользователь вводит с клавиатуры два действительных числа и один из символов "+", "-", "*", "/", соответствующий знаку арифметической операции. Результат выполнения операции выводится на экран.

2) Заданы названия стран: Австрия, Болгария, Греция, Италия, Норвегия, Франция и названия их столиц: Афины, Вена, Осло, Париж, Рим, София. Написать программу, которая выводит на экран название страны по заданному названию столицы.

3) Заданы названия стран: Австрия, Бразилия, Греция, Индия, Канада, Франция и названия частей света: Азия, Америка, Европа. Написать программу, которая выводит на экран название части света по заданному названию страны.

4) Заданы названия планет Солнечной Системы: Земля, Марс, Юпитер и названия некоторых спутников этих планет: Луна (спутник Земли), Фобос и Деймос (спутники Марса), Ио, Европа, Ганимед, Каллисто (спутники Юпитера). Написать программу, которая выводит на экран название планеты по заданному названию спутника.

5) В таблице приведены названия наиболее ярких звезд некоторых созвездий.

Самая яркая звезда

Созвездие

Альтаир

Орел

Бетельгейзе

Орион

Вега

Лира

Денеб

Лебедь

Сириус

Большой Пес

Написать программу, которая выводит на экран название самой яркой звезды по заданному названию созвездия.

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

Планета

Количество спутников

Меркурий

0

Венера

0

Земля

1

Марс

2

Юпитер

16

Сатурн

22

Уран

5

Нептун

2

Плутон

1

Написать программу, которая выводит на экран количество спутников по заданному названию планеты.

7) В таблице приведены английские названия времен года

Зима

winter

Весна

spring

Лето

summer

Осень

autumn

Написать программу "словарь", которая выводит на экран английское название времени года по заданному русскому названию.

8) В таблице приведены английские названия цифр от 1 до 5.

1

one

2

two

3

three

4

four

5

five

Написать программу "словарь", которая выводит на экран английское название цифры по заданной цифре.

9) В таблице приведены сведения об успеваемости некоторых учеников по математике.

Алексеев

5

Васильев

3

Ильин

5

Петров

4

Филиппов

4

Написать программу, которая выводит на экран фамилии тех учеников, которые имеют определенную оценку.

10) Написать программу, которая выводит на экран количество дней в месяце по заданному названию месяца.

8. Файлы

8.1. Общие сведения о работе с файлами. Средства языка Pascal позволяют работать с файлами, что облегчает обработку данных: например, программа может обращаться к файлам, содержащим необходимые данные, а также записывать в файлы результаты обработки данных. Напомним, что под файлом понимается именованная область памяти компьютера (жесткого диска, дискеты), либо логическое устройство - потенциальный источник или приемник информации. Длина файла ограничена только объемом памяти компьютера. Программа может обращаться к нескольким файлам одновременно.

Для обращения к файлу необходимо ввести переменную файлового типа. В процессе работы программы она будет связана с конкретным файлом или логическим устройством, с которым будет происходить обмен данными (см. ниже). Pascal позволяет работать с файлами трех видов – типизированные, текстовые и нетипизированные (вид файла определяет способ хранения информации в нем).

Необходимо прежде всего описать тип, к которому будет принадлежать файловая переменная, и саму эту переменную, например,

type RealFile = file of real;

var f:RealFile;

Здесь переменная f типа RealFile может использоваться для работы с типизированными файлами, компонентами которых являются вещественные числа.

8.1.1. Открытие файла. Файлы или логические устройства становятся доступными программе только после выполнения особой процедуры открытия файла. Исключение составляют ввод данных с клавиатуры и вывод на экран. При открытии файла ранее объявленная файловая переменная связывается с именем уже существующего или вновь создаваемого файла. Для этого служит стандартная процедура assign:

assign (<файловая переменная>,

<имя файла или логического устройства>);

Здесь <имя файла> - выражение строкового типа; может содержать прописные и строчные латинские буквы, цифры, а также символы

! @ # $ % ^ & ( ) ' ~ - _

(всего не более 8 символов).

Имя файла начинается с любого из названных символов и может сопровождаться расширением - последовательностью, состоящей не более чем из 3 допустимых символов, отделяющейся точкой от имени файла.

Перед именем файла может быть указан также путь к файлу, который может включать в себя имя диска и имя текущего каталога. Максимальная длина имени файла, включая путь и расширение - 79 символов. Пример:

assign(f,'C:\Mydocs\Progr#5.txt');

8.1.2. Стандартные имена логических устройств.

con

клавиатура или экран дисплея (монитор). Использование этого логического имени позволяет осуществлять чтение данных с клавиатуры и вывод данных на экран.

prn

принтер. При подключении к компьютеру нескольких принтеров они получают логические имена lpt1, lpt2, lpt3, ... , причем prn и lpt1 по умолчанию считаются синонимами. Использование этих логических имен позволяет осуществлять вывод данных непосредственно на принтер.

aux

коммуникационный канал, используемый для связи компьютера с другими машинами. При наличии нескольких коммуникационных каналов они получают логические имена com1, com2, com3, ... , причем aux и com1 по умолчанию считаются синонимами.

nul

логическое имя "пустого" устройства (может использоваться при отладке программы).

Перечисленные имена являются зарезервированными, т. е. нельзя, например, обратиться к файлу на жестком или гибком диске с логическим именем prn.

8.1.3. Открытие файла для чтения. После связывания файловой переменной с именем файла с помощью процедуры assign, необходимо его инициировать, указать направление передачи данных - открывается ли файл для чтения или для записи.

Файл открывается для чтения с помощью стандартной процедуры reset:

reset (<файловая переменная>);

Если делается попытка инициировать чтение из несуществующего файла или логического устройства prn, возникает ошибка ввода-вывода. Для контроля за ошибками ввода-вывода служит опция I/O CHECKING (меню OPTIONS - COMPILER - RUNTIME ERRORS - I/O CHECKING). В активном состоянии она позволяет контролировать правильность операций ввода-вывода. Существуют также директивы компилятора, которые позволяют включать (директива {$I+}) и отключать (директива {$I-}) контроль правильности операций ввода-вывода.

В случае типизированных файлов к файлу, открытому с помощью процедуры reset, можно обращаться не только для чтения, но и для записи информации (т. е. использовать процедуры write/writeln). Для текстовых файлов, открытых с помощью процедуры reset, процедуры write/writeln использовать нельзя.

8.1.4. Открытие файла для записи. Файл открывается для записи с помощью стандартной процедуры rewrite:

rewrite (<файловая переменная>);

Если файл, открытый с помощью процедуры rewrite, уже существовал ранее (т. е. файловая переменная была связана с именем уже существующего файла при выполнении процедуры assign), при выполнении процедуры rewrite старый файл с указанным именем уничтожается, и к приему информации подготавливается новый, пока еще пустой файл, указатель файла устанавливается в 0.

Для того, чтобы добавить записи в конец уже существующего файла, не уничтожая его, служит процедура append:

append (<файловая переменная>);

Процедура append применима только к текстовым файлам (т. е. файловая переменная должна иметь тип text). Процедура append инициирует запись информации в ранее существовавший текстовой файл, указатель файла устанавливается в его конец. Если текстовой файл ранее уже был открыт с помощью процедур reset или rewrite, использование процедуры append приводит к закрытию этого файла и открытию его вновь, но уже для добавления записей.

8.1.5. Стандартные процедуры для работы с файлами любого типа.

close (<файловая переменная>)

закрывает файл, обеспечивая сохранение в файле всех новых записей и регистрацию файла в каталоге. Связь файловой переменной с именем файла, установленная ранее процедурой assign, сохраняется, поэтому файл можно повторно открыть без дополнительного использования процедуры assign.

rename (<файловая переменная>, <новое имя>)

процедура переименования файла. Если файл был ранее открыт с помощью процедур reset, rewrite или append, перед выполнением процедуры rename его необходимо закрыть с помощью процедуры close.

erase (<файловая переменная>)

уничтожает файл. Если файл был ранее открыт с помощью процедур reset, rewrite или append, перед выполнением процедуры rename его необходимо закрыть с помощью процедуры close.

flush (<файловая переменная>)

очищает внутренний буфер файла. При выполнении процедуры flush все записи, временно хранящиеся в буфере (т. е. во вспомогательной памяти, предназначенной для промежуточного хранения данных), будут записаны на диск. Если файл был инициирован для чтения процедурой reset, процедура flush игнорируется.

chdir (<путь>)

изменяет текущий каталог, устанавливая путь к новому каталогу.

getdir (<устройство>, <каталог>)

определяет имя текущего каталога. В результате выполнения процедуры getdir получают определенные значения переменная типа word (<устройство>), содержащая номер устройства, и переменная типа string (<каталог>), содержащая путь к текущему каталогу на указанном устройстве, причем 0 соответствует устройству по умолчанию, 1 - диску a:, 2 - диску b: и т. д.

mkdir (<имя каталога, включая путь>)

создает каталог с указанным именем. Имя не может совпадать с именем уже существующего каталога.

rmdir (<имя каталога, включая путь>)

удаляет каталог с указанным именем. Удаляемый каталог должен быть пустым, т. е. не содержать файлов или каталогов низшего уровня.

8.1.6. Стандартные функции для работы с файлами любого типа.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4