Главная » Просмотр файлов » В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль

В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618), страница 28

Файл №1107618 В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (В.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль) 28 страницаВ.Г. Абрамов, Н.П. Трифонов, Г.Н. Трифонова - Введение в язык Паскаль (1107618) страница 282019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 28)

В этом случае вновь определяемыйтип будет идентичен тому, через который он определяется — здесь имеетместо так называемая именная идентичность типов, но тем не менее такиетипы в паскале считаются различными.Например, в разделе типовtypeНЕГДЕЛЯ= (пн , в т , ор , чтв , п т н , о б , в о ) ;ЦВЕТ=(красный,оранжевый,желтый,голубой,зеленый,синий,Фиолетовый);ФРУКТЫ»(Яблоко,Груша,Слива,Пероик,Абрикос) ;Фигура*»(пешка,конь,слон,ладья,ферзь,король);радуг а=ЦВЕ1Т;вводится в употребление пять различных перечислимых типов, которымданы имена НЕДЕЛЯ, ЦВЕТ, ФРУКТЫ, фигура и радуга, причем пятый изэтих типов (радуга) идентичен второму (ЦВЕТ).Заметим, что в паскале тип любой константы должен определятьсяпо ее записи (например, число 5 имеет тип integer, а число 5.0 —тип real).

Это относится и к перечислимым типам, поэтому одно и то жеимя не может использоваться в качестве значений в разных типах.Так что при наличии в программе приведенных выше описаний типовбыло бы недопустимо в этой же программе такое описание типа:ЯГОДА=(Малина,Слива,Клюква,Смородина,Клубника)поскольку значение Слива уже фигурировало в задании типа с именемФРУКТЫ. Более того, недопустим и такой раздел типов:typeцвет=(кр,ор,жлт,глб,злн,он,Флт)|радуга=(кр,ор,жлт,глб,злн,сн,Флт);Несмотря на то, что оба содержащиеся здесь описания определяют по сутидела один и тот же перечислимый тип, они будут трактоваться как разныетипы, а в разных типах не могут использоваться одни и те же имена,являющиеся константами этих типов.Если перечислимый тип был введен в употребление с помощью описания,то переменные этого типа вводятся в употребление точно так же, как ипеременные стандартных типов — для задания типа переменных в ихописании указывается просто имя этого типа, например (имея в видуприведенный выше раздел типов) :varДЕНЬ: НЕДЕЛЯ;UАР,КУБ: ЦВЕТ;Другой способ ввести в употребление нужный новый тип состоит в том,что задание этого типа помещается непосредственно в описании соответствующих переменных в качестве компоненты < тип > такого описания,например:varА,В,С: ( с т у л , д и в а н , с т о л , ш к а ф , т а б у р е т ) ;Поскольку в этом случае введенному в употребление типу не дано какоголибо имени (этот тип является "безымянным"), то на него уже невозможно сослаться в других местах программы.

По этой, в частности, причинепредпочтение следует отдавать первому из указанных выше способовопределения типов, т.е. вводить в употребление новый тип с помощью егоописания в разделе типов. К тому же в некоторых случаях требуемый типможет быть указан т о л ь к о с помощью его имени, что требует обязательного описания этого типа в разделе типов. Предварительное описание типаобеспечивает также значительно более высокую наглядность программы ипростоту ее понимания.Из всего сказанного выше видно, что тип boolean является стандартнымперечислимым типом, который подразумевает следующее его описаниев разделе типов:bool ean= (-f al se, true)После того, как переменные описаны, им можно присваивать значениясоответствующего типа, например:ЫАР:=жлт;КУБ:=ЫАР(в результате выполнения этих операторов присваивания каждая из переменных ШАР и КУБ получит значение жлт).Над значениями любого нестандартного перечислимого типа в паскалеопределены только операции сравнения — при этом, естественно, сравниваться могут только значения одного и того же типа.

Таким образом,после выполнения приведенных выше операторов присваивания отношения КУБ=жлт и Ш А Р > к р истинны, отношение К У Б ^ з л н ложно,а отношение ШАР=пн недопустимо (сравниваются значения разных типов).Для аргумента JC перечислимого типа применимы стандартные функции succ ( х ) , pred (JC) и ord (х). Например, если переменная х имеет108значение вт, тоsucc(x) = срpred(x) = пнord(jc) = 1(следующее за х значение) ;(предшествующее х значение);(порядковый номер значения х).Напомним, что порядковый номер первой из констант, перечисленныхв задании типа, равен нулю, что у первого значения нет предыдущего,а у последнего — нет следующего.

Так что, например, значения функцийргес1(ин) и SUCC(BC) неопределены.Переменные перечислимого типа могут использоваться и в тех случаях,где мы привыкли использовать числовые переменные, например в качестве параметра цикла. Так, если dayl и day 2 - переменные типа НЕДЕЛЯ,определенного выше, b — переменная типа boolean, а через S I , S2, S3обозначить некоторые операторы, то имеют вполне определенный смыслзаписи вида:•for daylif:= пн to сб do SI;(day2>dayl> and b then S2 else S3;if day2 > пн then day2:=pred(day2>;Теперь особенно ясно видно, что понятия "выражение" и "операторприсваивания" в паскале действительно имеют более широкий смыслпо сравнению с тем что мы рассматривали до сих пор. В самом деле,термины "арифметический", "логический" и т.д.

были связаны с типамизначений, правила вычисления которых задаются с помощью выраженияв правой части оператора присваивания. Однако типов значений", а значит итипов выражений, в паскале довольно много. При этом вид выражения,задающего правила вычисления значения того или иного типа, зависит отнабора операций, предусмотренных в языке над значениями этого типа.Например, над значениями нестандартных перечислимых типов вообще нетопераций, выполнение которых давало бы значение этого же типа.Поэтому если в левой части оператора присваивания фигурирует переменная какого-либо из таких типов, то в качестве выражения в правой егочасти может использоваться только либо константа или переменная этоготипа, либо функция, определяющая значение такого же типа (например,стандартные функции succ и pred).Следует обратить внимание на то, что стандартные процедуры ввода/вывода read и write, а также readln и writeln, не могут быть использованыдля непосредственного ввода и вывода значений перечислимых типов.Если, например, в программе записать операторыДЕНЬ:=вт;write<AEHb)то транслятор, вообще говоря, должен зафиксировать ошибку в программе.

Это ограничение связано с двумя обстоятельствами. Во-первых, имена,являющиеся значениями перечислимых типов, каждый программист можетвыбирать по своему усмотрению, так что умение стандартных процедуроперировать с такими произвольными именами существенно усложнило быих реализацию. Во-вторых, значений перечислимого типа программистможет задать в виде сокращений естественных слов, и эти сокращения109могут быть не очень удобны и наглядны при их внешнем представлении.Поэтому для ввода и вывода значений перечислимых типов приходитсяиспользовать другие возможности языка, в частности, оператор варианта,рассматриваемый в следующем разделе. Там же будут приведены ипримеры программ с использованием перечислимых типов.6.2. Оператор вариантаХарактерной чертой многих алгоритмов является широкая разветвляемость задаваемых ими вычислительных процессов.

С одним из средствпаскаля для задания таких разветвлений мы уже знакомы — это условныйоператор, предписывающий выбрать для исполнения один из двух входящих в его состав операторов в зависимости от выполнения условия,которым начинается условный оператор.На практике довольно часто встречаются случаи, когда вычислительныйпроцесс надо разветвить не по двум, а по i {к > 2) возможным путям.Вообще говоря, это можно сделать и с помощью условного оператора,учитывая рекурсивность его определения:if В1 then SI elseif B2 then S2 elseif Bk then SkОднако в этом случае запись условного оператора может оказаться весьмагромоздкой и не наглядной.Во многих случаях для программиста может быть более удобен имеющийся в паскале оператор варианта, который относится к числу производных операторов и является обобщением условного оператора.

Идеяоператора варианта состоит в следующем. Все операторы, среди которых производится выбор для исполнения, перечисляются в явном видев операторе варианта (ясно, что число таких операторов фиксировано).Выбор среди них оператора, подлежащего исполнению, производитсяс помощью заданного в операторе варианта селектора оператора —выражения любого скалярного типа, кроме вещественного. При этом каждый из выбираемых для исполнения операторов снабжается своеобразной"меткой" — меткой варианта, роль которой выполняет то значение селектора (т.е.

константа того же типа, что и тип селектора), при котором долженвыполняться этот оператор. Предусмотрен и такой случай, когда данныйоператор должен выполняться при любом из нескольких возможных значений селектора — в этом случае оператор снабжается соответствующимсписком меток варианта.Синтаксически оператор варианта определяется следующим образом:< оператор варианта >:: = case < селектор оператора > of< элемент списка варианта > {; < элемент списка варианта >}end< селектор оператора >:: = < выражение >< элемент списка варианта > :: = < список меток варианта >: < оператор >110< список меток варианта > ::= < метка варианта > { , < метка варианта >}< метка варианта > :: = < константа >где (константа) должна иметь тот же тип, что и (селектор оператора),причем ни одна из этих констант не может использоваться в качестве меткиварианта более одного раза.При выполнении оператора варианта сначала вычисляется значение селектора.

Затем выполняется тот из выбираемых операторов, одна из меток варианта которого совпадает со значением селектора, и этим выполнениеоператора варианта завершается. Если такой метки не окажется» то фиксируется ошибка в программе. Таким образом, вовсе не обязательно, чтобывсе возможные константы типа селектора фигурировали в качестве метоквариантов — важно лишь, чтобы для каждого значения селектора, фактически вычисляемого в процессе выполнения программы, такая метканашлась — об этом должен позаботиться программист, исходя из существарешаемой задачи.Подчеркнем, что "метка варианта" — это вовсе не то же самое, что"метка оператора", даже в том случае, когда меткой варианта являетсяцелое без знака как частный случай значения типа integer. Так что никакаяметка варианта не может описываться в разделе меток и использоватьсяв операторе перехода для указания своего преемника.Примеры операторов варианта:case i mod 3 ofО: m:=0;1: m: = - 1 ;2:m:=lendcase sym o-f' - ' : k : = 1;'*','+','/','-*:;' ! 'sks=2;s , ! sksendcase ДЕНЬ ofпн,вт,cp,чтв,птн!writeln('РАБОЧИЙc6,BCKP:writeln<'ВЫХОДНОЙДЕНЬ'>;ДЕНЬ')endОператоры, входящие, в состав оператора варианта и снабженные метками варианта, могут быть и помеченными операторами, т.е.

снабженнымиобычными метками (которые должны быть описаны в разделе меток).При этом метки варианта должны предшествовать обычным меткам.Поскольку каждый из операторов, входящих в состав оператора варианта,обязательно должен быть снабжен хотя бы одной меткой варианта, то пута111ницы между метками варианта и обычными метками не возникает — даже втом случае, если метками варианта являются значения типа integer. Например, в операторе вариантаcase i mod 3 ofО:xг =0;1:3:у:=0;2,3:z:=0endконстанта 3 в записи 3 : v : = 0 является обычной меткой оператора, и этаметка должна быть описана в разделе меток, а та же самая константав записи 2,3 : z : = 0 является одной из меток варианта и потому не можетиспользоваться в каком-либо операторе перехода для указания своегопреемника.Внимание: войти в оператор варианта можно только через символcase — входить внутрь оператора варианта по какому-либо оператору перехода, находящемуся вне оператора варианта, запрещается!Так что при наличии в программе приведенного выше оператора варианта в ней недопустимым было бы наличие оператора перехода goto 3.На помеченные операторы, входящие в состав оператора варианта, можноосуществлять переходы обычным образом только после входа в операторварианта.Заметим, что выполнение оператора варианта сводится к выполнениютолько одного из входящих в его состав операторов, так что перехолить изодного из них на другой с помощью оператора перехода запрещается.Очевидно, что условный оператор видаif В then SI else S2эквивалентен оператору варианта видаcase В thentrue: S I ;false: S2endа сокращенный условный оператор вида if В then Sтору варианта видаэквивалентен опера-case В oftrue: S;false:endОператор варианта оказывается весьма удобным в самых различныхслучаях.

Характеристики

Тип файла
PDF-файл
Размер
2,47 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее