Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы / Паскаль.doc
Скачиваний:
34
Добавлен:
10.04.2015
Размер:
388.61 Кб
Скачать

4. Программирование на языке Паскаль разветвленных структур алгоритмов(оператры if и case)

IF- Условные операторы реализуют алгоритмическую конструкцию «Развилка». Условные операторы предназначены для выбора к исполнению одного или двух возможных действий (операторов) в зависимости от некоторого условия. При этом одно из действий может быть пустым , то есть отсутствовать). В качестве условия выбора используется значение логического выражения. Ниже представлена синтаксическая диаграмма для условного оператора.

Данный оператор выполняется следующим образом. Сначала вычисляется выражение , стоящее после служебного слова IF. Результат вычисления должен иметь булевский тип. Если значение выражения есть TRUE , то выполняется оператор, указанный после служебного слова THEN. Если результат вычисления выражения есть FALSE, выполняется оператор , следующий за служебным словом ELSE. Если при этом часть условного оператора, начиная со слова ELSE отсутствует, то управление немедленно передается оператору , следующему за условным .

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

case Color of

Red: X := Y+2;

Yellow : X := Y-2

Green : X := Y

end;

В данном примере Color и есть ключ выбора . Red, Yellow, Green-константы.

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

Сначала вычисляется текущее значение переменной Color. Затем это значение сопоставляется (сравнивается) с константами записанными перед операторами. При совпадении значения переменной Color с одной из констант будет выполняться оператор «помеченный» данной константой. На этом выполнение оператора будет завершено. Например: если значение переменной Color равно Red то выполнится оператор X:=Y+2. Если значение переменной Color не совпадает ни с одной константой, то данный оператор не выполняет никаких действий.

Для таких случаев предусмотрена альтернатива ELSE, например:

case (k+1)*2 of

2: Add(A,B);

4: Multiply(A,B);

0: Subtract(A,B)

else

write (`Ошибка`)

end;

Оператор, следующий за служебным словом else будет выполнен в том случае, если значение выражения(к+1)*2 не совпадает ни с одной из констант : 2,4,0.

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

case Switch of

1..2 : Proc1;

3,4,10..20 : Proc2;

5,6 : Proc3

else

Proc4

end;

В данном примере процедура Proc1 будет выполнена, если переменная Switch будет иметь одно из значений : 1,2;

Процедура Proc2-если Switch примет одно из следующих значений: 3,4,10,11,12...19,20;

ПроцедураProc3 -если Switch будет равно 5 или 6. В остальных случаях будет выполняться процедура Proc4.

5. Программирование на языке Паскаль циклических структур алгоритмов (Repeat –Until, While –Do, For –to -do)

Очень часто при разработке алгоритмов возникает ситуация, когда необходимо повторить одно или несколько действий. Такие повторения в программировании называются циклами. Различают три типа циклов:

  • с заданным числом повторений(For–to–do);

  • с предусловием (While–Do);

  • с постусловием(Repeat–Until).

Fortodo

Общий вид оператора цикла с заданным числом повторений:

For P:= Nv To Kv Do A, или

For P:= Nv Downto Kv Do A

где P-параметр цикла; Nv, Kv-выражения, задающие начальное и конечное значения параметра цикла соответственно; А-простой оператор.

Тип параметра цикла обязательно должен совпадать с типом начального и конечного значений цикла. Из рассмотренных стандартных скалярных типов в качестве параметра цикла нельзя использовать переменные вещественного типа.

Выполнение оператора цикла начинается с проверки условия P<=Kv для цикла То ( P>=Kv для цикла Downto). Если оно не справедливо, то оператор А не выполняется, а управление передаётся следующему оператору. Если же условие P<=Kv истинно, то выполняется оператор А, а затем параметру цикла присваивается следующие значение P:= Succ(P) (для цикла То), или значение P:=Pred(P) (для цикла Downto). Далее весь процесс повторяется. Если параметр цикла целого типа, то это означает его увеличение на единицу при каждом выполнении цикла.

Для оператора цикла с параметрам существуют некоторые ограничения:

  1. Текущее значение параметра цикла, его начальное и конечное значения изменять внутри цикла нельзя;

  2. Войти в цикл можно только через его начало, а выйти при выполнении оператора перехода по метке, расположенной вне данного цикла,

  3. Задать шаг, отличный от 1 или -1, нельзя.

WhileDoЭтот структурный оператор задаёт повторяющееся выполнение оператора, содержащегося в нем. Перед каждым очередным выполнением внутреннего оператора производится проверка значения булевского выражения, которое служит критерием повторения: если это выражение имеет значение true, то выполняется очередная итерация; в противном случае (значение выражения есть false) выполнение оператора цикла заканчивается. Если выражение с самого начала имеет значение false, то цикл не выполняется ни разу. Синтаксическая диаграмма для данного оператор:

RepeatUntil Этот оператор аналогичен предыдущему и отличается от него, во-первых, тем, что условие проверяется ПОСЛЕ выполнения очередной итерации, а, во-вторых тем, что критерием прекращения цикла является равенство выражения константеTrue; если есть выражение естьFalse, то цикл повторяется.

Например, цикл вида

Repeat

Proc1 ( Х, Y + i );

i:= i-1

Until i=0

будет выполняться ДО ТЕХ ПОР, ПОКА i не станет равно нулю.

Синтаксическая диаграмма для цикла с постусловием:

Организация ввода/вывода в языке Паскаль

Операции ввода-вывода (чтения из файла и записи в файл) реализуются с помощью процедур: Read, Write.

Правила записи операторов:

Read(F, A, B, C,...);

Write(F1, X, Y, Z, ...);

  • F, F1 - имена файловых переменных, к которой были применены операции открытия Reset и Rewrite соответственно,

  • A, B, C - переменные, типы которых совпадают с базовым типом файловой переменной F,

  • X, Y, Z - выражения, типы которых совпадают с базовым типом файловой переменной F1.

Выполнение процедуры Readпроисходит следующим образом. Начиная с текущей позиции указателя файла будут последовательно читаться значения, содержащиеся в файле. Каждое прочитанное значение будет присваиваться очередной переменной из тех, которые указаны в вызове процедуры. После чтения очередного значения указатель файла будет смещаться на следующую позицию. Если в процессе выполнения процедуры Read текущий указатель файла будет установлен на позицию, не содержащую информации (то есть, будет достигнут конец файла), то чтение будет прекращено, процедура Read завершится преждевременно, и возникнет ситуация «конец файла». Возникновение этой ситуации можно проверить с помощью встроенной функции EOF.

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

В программе на языке Turbo Pascal установлены следующие правила обработки ошибочных ситуаций, связанных с вводом-выводом. По умолчанию при выполнении любой такой операции автоматически производится проверка на возникновение ошибки. При обнаружении ошибки выполнение программы прекращается, а на экран дисплея выводится краткое диагностическое сообщение, содержащее условный номер ошибки.

Имеется возможность предусмотреть собственную реакцию на ошибочные ситуации в самой программе. Для этого необходимо в начале «опасного» фрагмента программы отключить автоматическую проверку на возникновение ошибки. Это делается внесением директивы компилятора {$1-}. В этом случае возникновение ошибки при выполнении программы не будет приводить к немедленному ее завершению; вместо этого код ошибки (отличный от нуля) будет сохранен системой. Посредством стандартной функции lOResult без параметров можно получить этот код и построить дальнейшие действия в зависимости от его значения, например, вывести краткое сообщение об ошибке (без указания причины ошибки):

  1. Организация ввода и вывода данных на языках ПАСКАЛЬ и С++.

9.5. Операции ввода-вывода

Операции ввода-вывода (чтения из файла и записи в файл) реали­зуются с помощью процедур: Read,Write. Правила записи операторов:

Read(F, А, В, С,.. . ) ;Write(F1,X,Y,Z, . . .) ;

• F,F1 - имена файловых переменных, к которой были применены операции открытияResetиRewriteсоответ­ственно,

• Л, В, С - переменные, типы которых совпадают с базовым типом файловой переменной F,

• X,Y,Z- выражения, типы которых совпадают с базовым типом файловой переменнойF1.

Примеры:

Read(F, А); {чтение значения одного элемента файла}

Read(F, В, С); {последовательное чтение значений двух элементов)

Read(F,M[i]); {чтение значения одного элемента и присвоение про­читанного значения элементу массива (запись в массив)}

Write(Fl,X); {запись значения одной переменной в файл}Write(Fl,X,Y); {последовательная запись значений двух перемен­ных в файл}

Write(Fl,M[i]); {запись значенияi-roэлемента массива в файл}Write(Fl,X, Х*Х,X+Y,X7(Y-Z)); {последовательная запись значе­ний указанных выражений в файл}

Выполнение процедуры Readпроисходит следующим образом. На­чиная с текущей позиции указателя файла будут последовательно чи­таться значения, содержащиеся в файле. Каждое прочитанное значение будет присваиваться очередной переменной из тех, которые указаны в вызове процедуры. После чтения очередного значения указатель файла будет смещаться на следующую позицию. Если в процессе выполнения процедурыReadтекущий указатель файла будет установлен на пози­цию, не содержащую информации (то есть, будет достигнут конец фай­ла), то чтение будет прекращено, процедураReadзавершится преждев­ременно, и возникнет ситуация 'конец файла'. Возникновение этой ситу­ации можно проверить с помощью встроенной функцииEOF.

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

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