Асланян С.А. Програмирование ИК. Задача может быть реализована, более простым способом, с помощью оператора выбора case of
Скачать 23.16 Kb.
|
Оператор выбора case of. Условная конструкция if then else позволяет нам реализовать несколько ветвлений в программе. Та же задача может быть реализована, более простым способом, с помощью оператора выбора - case of. Синтаксис оператора case следующий: case (выражение) of метка1: оператор1; метка2: оператор2; ... меткаN: операторN else операторE; end; Где метка1..N - метки регистра или входные значения, которые могут быть целыми числами, символами, логическими или перечисляемыми элементами данных. Оператор1..N - оператор Паскаля, каждый из них может иметь одну или несколько меток регистра, связанных с ним. ОператорE - выполняется только в том случае, если не было совпадения метки и выражения. Оператор case в Паскале, может содержать необязательный блок else, и должен завершается ключевым словом end. При использовании оператора case of соблюдать следующие правила: Выражение, используемое в операторе case, должно иметь целочисленный, перечисляемый, логический или символьный тип данных; Операторы case могут быть составными, то есть быть блоками begin end, if then else, содержать в себе второй case of; Метка должна быть константой или литералом, и быть того же типа, что и выражение в операторе; Если оператору соответствует несколько меток, их записывают через запятую, или указывают диапазон значений: 1..4, ‘a’..‘c’. При этом нужно следить чтобы диапазоны не перекрывались, поскольку дублирование меток в Free Pascal запрещено; Если одно из значений метки регистра соответствует значению выражения, выполняется инструкция, следующая за этой меткой. После этого программа выходит из блока case; Если ни одна из меток case of не соответствует значению выражения, выполняется список операторов после ключевого слова else. Рассмотрим пример программы конвертации оценок пятибалльной шкалы в текст с помощью оператора ветвления if: {$CODEPAGE UTF8} program RatingToText; var rate : integer; begin write('Введите оценку 1-5 '); readln(rate); if (rate = 1) or (rate = 2) then writeln('Неудовлетворительно'); if rate = 3 then writeln('Удовлетворительно'); if rate = 4 then writeln('Хорошо'); if rate = 5 then writeln('Отлично'); readln; end. Более простая запись того же кода с использованием конструкции case of: {$CODEPAGE UTF8} program RateToText; var rating : integer; begin write('Введите оценку 1-5 '); readln(rating); case(rating) of 1,2: writeln('Неудовлетворительно'); 3: writeln('Удовлетворительно'); 4: writeln('Хорошо'); 5: writeln('Отлично'); end; readln; end. Рассмотрим пример программы конвертации номера дня недели в название: {$CODEPAGE UTF8} program NumDayToText; var day : integer; dayName : string; begin write('Номер дня недели '); readln(day); case(day) of 1: dayName := 'Понедельник'; 2: dayName := 'Вторник'; 3: dayName := 'Среда'; 4: dayName := 'Четверг'; 5: dayName := 'Пятница'; 6: dayName := 'Суббота'; 7: dayName := 'Воскресение' else dayName := 'Ошибка: Значение не определено'; end; write(dayName); readln; end. В данном примере блок else, оператора выбора, используется для присваивания переменной информации об ошибке. 4. Концепция подпрограммы в Турбо Паскале. Понятие подпрограммы - одно из фундаментальных понятий в программировании, возникшее фактически вместе с понятием программы. При разработке больших программ весьма важно иметь возможность разбивать программу на более мелкие составные части так, чтобы каждая такая часть имела структуру, подобную программе, а, следовательно, бы обладала некоторой степенью автономии. Такая часть программы называется подпрограммой. Одна подпрограмма может включать в себя другие подпрограммы и т.д., создавая иерархическую структуру подпрограмм любого уровня вложенности. Подпрограммы определяют декомпозицию основной программы, направленную на преодоление сложности разработки и понимания текста программы. Практически все языки программирования включают механизм подпрограмм в той или иной форме. Рассмотрим этот механизм применительно к языку Паскаль. Ключевой идеей механизма подпрограмм является следующая идея: подпрограмма должна описываться один раз и иметь возможность многократных её вызовов из разных точек основной программы. В этом случае мы экономно записываем текст программы (без многократного дублирования одних и тех же фрагментов). Таким образом, в механизме подпрограмм следует различать определение (описание) подпрограммы; вызов подпрограммы для её выполнения. Важным понятием в механизме подпрограмм является понятие параметра подпрограммы. Параметры подпрограммы позволяют получать большую гибкость при использовании одной подпрограммы, предоставляя возможность иметь вызовы подпрограммы не только в различных точках основной программы, но и с различными значениями параметров. В качестве значений параметров могут быть переменные, константы, другие процедуры или функции, объекты, а также значения выражений любых типов. Возможны, как частный случай, и подпрограммы без параметров. Механизм подпрограмм использует две категории параметров: формальные параметры и фактические параметры. Формальные параметры используются при описании подпрограмм, а фактические - указываются при вызовах подпрограмм. Фактические параметры должны соответствовать формальным параметрам по типу используемых конструкций. Формальным параметром называется имя, которое может использоваться в операторной части описания подпрограммы для выполнения действий подпрограммы и через которое осуществляется связь подпрограммы с "внешней средой", т.е. с основной программой. Формальные параметры могут быть переменными соответствующих типов, либо именами процедур, функций, объектов. Формальные параметры условно можно разделить на три вида: входные параметры, через которые подпрограмма воспринимает исходную информацию для вычислений, выходные параметры, через которые подпрограмма выдает свои результаты в основную программу, и смешанные параметры - используемые и как входные и как выходные. Различают формальные параметры-значения и формальные параметры-переменные. Различие между ними состоит в том, что параметры-значения при вызове представляют копии соответствующих значений выражений, а параметры-переменные не копируются, а непосредственно связываются с подпрограммой, т.е. в подпрограмму передаются адреса соответствующих фактических параметров. Выходные и смешанные параметры всегда являются параметрами-переменными, а входные параметры в большинстве своем являются параметрами-значениями, хотя в некоторых случаях это может быть неэкономно с точки зрения потребляемой оперативной памяти (например, для параметров-массивов). Однако заметим, что этот способ передачи входных параметров в подпрограмму позволяют избежать несанкционированного изменения значения переменных в вызывающей программе, т.е. избежать побочного эффекта. ] Замечание: Для экономной передачи данных через параметры-массивы лучше использовать формальные параметры-константы, отличающиеся от параметров-значений тем, что они не создают копий значений. Фактический параметр - это выражение соответствующего типа (в том числе, возможно, переменная или константа), значение которого должно быть вычислено в момент вызова и подставлено при вызове на место формального параметра. Формальные и фактические параметры указываются списком параметров. В списке формальных параметров параметры описываются с указанием имени параметра и типа, причём параметры-переменные описываются с ключевым словом var, а параметры-константы - с ключевым словом const. Одна группа параметров отделяется от другой точкой с запятой. В группе параметров одного типа имена параметров отделяются запятой. Замечание Поскольку описание одной подпрограммы может быть вложено в описание другой подпрограммы, следует различать вызывающую подпрограмму и вызываемую подпрограмму. Вызываемая подпрограмма вложена в вызывающую подпрограмму. Роль вызывающей подпрограммы может выполнять и основная программа. Между списком формальных параметров и списком фактических параметров должно быть взаимно однозначное соответствие (при просмотре списка), причем тип фактического параметра должен точно совпадать с типом формального параметра. Замечание В описании одной подпрограммы может содержаться вызов другой подпрограммы, а та в свою очередь может содержать вызов первой подпрограммы. Для возможности корректного описания таких подпрограмм используются опережающие описания с помощью директивы forward. Вначале записывается заголовок первой подпрограммы с директивой forward вместо тела подпрограммы. Затем дается полное описание второй подпрограммы и первой подпрограммы. |