Учебное пособие 1601
.pdfЗадача 11.
Программная обработка символьных данных.
Выше (4.2.1.) было отмечено, что символьные данные можно сравнивать. Такое сравнение может быть осуществлено с помощью соответствующих операторов, используя в них символы сравнения,
<,<=,>,>=,=.
Для того, чтобы осуществлять сравнения данных типа Char, необходимо знать, что компьютер «знает», что
‗0‘<‘1‘<‘2‘<‘3‘….. <‘9‘
т.е. сравнение такое, как и у обычных цифр.
В то же время следует знать, что компьютер «знает» следующее соотношение:
‗a‘<‘b‘<‘<‘<…… <‘z‘.
т.е. сравнение символов осуществляет в зависимости от порядкового номера соответствующего символа в алфавите.
То же касается и заглавных букв латинского алфавита.
Заметим, что сравнивать, можно и символы из русского алфавита (как заглавных, так и прописных).
Учитывая изложенное можно привести программу, которая выводит на экран дисплея символы латинского алфавита от a до z.
Program alfavit; Var
Simv:Char;
Begin
for simv :‘a‘ to ‗z‘ do
Write(simv);
End.
ОПЕРАТОР ЦИКЛА WHILE-DO
Данный оператор называют оператором цикла с предусловием (с предпроверкой условия) и использованием тогда, когда количество циклов заранее неизвестно, а задано некоторое условие его окончания (продолжение).
В общем виде такой оператор можно представить:
WHILE <условие> do <оператор>
WHILE (пока); DO (выполнить);
Условие – логическое, выражение (равенство или неравенство: больше, меньше или равно) после слова do должен стоять только один оператор, если по алгоритму их должно быть несколько, то их необходимо заключить в операторные скобки BEGIN - END.
Выполняя данный оператор ЭВМ проверяет условие после и если условие WHILE выполняется, то и выполняется чертой оператор после do (группа операторов), если условие не выполняется (оператор после слова do) и цикл прекращается (выполняются нижерасположенные после цикла операторы).
Работу данного оператора можно проиллюстрировать структурной схемой:
.
.
.
Установка
условия
Условие не выполняется
Оператор выполняется
продолжение
программы
Рис. 4.2.3. структурная схема работы оператора цикла
Рассмотрим конкретный пример.
Пусть требуется составить программу для вычисления элементарного ряда:
S |
1 |
|
1 |
|
1 |
|
1 |
... |
1 |
|
n2 |
12 |
22 |
32 |
n2 |
||||||
n 1 |
|
с заданной погрешностью:
1*10 4 12 n
Таким образом, вычисление данного ряда можно прекратить тогда, когда последующие члены ряда (слагаемые) становятся довольно малы и слабо влияют на величину суммы S.
Вариант программы: Program_win; Var
S, eps: real; n:integer;
Begin
read (eps); S:=0; n:=1;
While_1/sqr (n)>eps_do Begin
S:=S+1/sqr (n); n:=n+1;
End;
Write (´S=´, S, ´n=´, n);
End.
ОПЕРАТОР ЦИКЛА REPEAT-UNTIL
Данный оператор называют оператором цикла с постоянным уравнением и используется так же, как и предыдущий оператор, когда количество циклов заранее неизвестно.
В общем виде данный оператор можно представить:
Repeat
Оператор 1; Оператор 2;
.
. тело (поле) цикла
.
Оператор n; Until <условие>
Здесь repeat – повторять
until – до тех пор (пока выполнится условие после слова until)
Компьютер выполняет оператор 1, 2, …, n в цикле до тех пор пока выполнится условие (неравенство) после служебного слова until. Отличие данного оператора от WHILE – DO заключается в том, что здесь можно использовать несколько операторов (1,2,…,n) в отличие от
предыдущего, где требовалось использовать BEGIN – END. Кроме того, отличие заключается ещѐ и в том, что здесь условие проверяется после выполнения каждого цикла (в предыдущем операторе – условие проверялось ещѐ до того, как произвести (выполнить оператор) первый или очередной цикл).
Таким образом, одну и туже задачу возможно решить, как с помощью предыдущего оператора, так и с помощью данного.
В тоже время, следует отметить, что предыдущий оператор while do используется чаще, чем until. Это связано с тем, что во многих практических случаях желательно осуществить проверку (условия) на окончание цикла до его выполнения и иметь возможность при необходимости пропустить лишний цикл, так как это может отразиться на точности вычислений.
Работу данного оператора можно проиллюстрировать на следующей структурной схеме:
.
.
.
Оператор
нет
Условие
Продолжение да программы после
Рис. 4.2.4. Структурная схема работы оператора цикла.
Рассмотрим конкретный пример:
Составить программу (с помощью данного оператора) для вычисления предыдущего примера:
S |
1 |
1 |
1 |
... |
1 |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
||
n2 |
12 |
22 |
n |
2 |
|
|
|
|||||
n 1 |
|
|
|
|
||||||||
|
|
|
|
|
|
|
1 |
1 10 |
4 |
|||
|
|
|
|
|
|
|
|
|
|
|
||
с заданной точностью |
|
|
n2 |
; |
||||||||
|
|
|
Вариант программы следующий.
Program_sum; Var
S, eps: real; n: integer;
Begin
read (eps); S:=0; n:=1;
Repeat
S:=S+1/sqr (n); n:=n+1;
Until 1/sqr (n) <=eps;
Write (´S=´, S, ´n=´, n);
End.
4.2.4. ПРОЦЕДУРЫ И ФУНКЦИИ
Известно, что существует множество алгоритмов, в которых одни и те же действия (операции), многократно повторяются.
В алгоритмах такого рода в различных местах встречаются фрагменты, одинаковые по выполняемым действиям и различающиеся только в числовых исходных данных.
При составлении программы по такому алгоритму приходится писать одну и туже группу операторов по несколько раз.
Для более эффективного программирования (минимум строк) подобные повторения необходимо оформить в виде подпрограмм (процедур).
При этом повторяющаяся группа операторов оформляется по соответствующим правилам в отдельную самостоятельную программу (программную единицу), которая и называется подпрограммой. Таким образом, общая программа будет состоять из головной программы и подпрограмм.
При этом из головной программы осуществляется многократное обращение (ссылка) к данной подпрограмме.
Ссылка к подпрограмме осуществляется по соответствующим правилам, изложенным ниже.
Таким образом, использование аппарата подпрограмм позволяет сократить объем и улучшить структуру программы с точки зрения наглядности и читаемости, а также уменьшить вероятность ошибок и облегчить процесс отладки программы.
При этом разложении программы на взаимосвязанные, но замкнутые и логически завершенные единицы дает возможность выполнять разработку отдельных подпрограмм разным программистам и более или менее независимо друг от друга. Кроме того, подпрограмма может рассматриваться как самостоятельный программный модуль с входными и выходными данными.
В языке PASCAL подпрограммы реализуются в виде процедур и функций, которые вводятся в головную программу с помощью соответствующих описателей.
ПРОЦЕДУРЫ
Процедурой в TURBO PASCAL называют особым образом оформленный фрагмент программы, имеющей собственное имя. Упоминание особым образом этого имени в тексте основной программы приводит к «активизации» процедуры, называют ее вызовом. Сразу после обращения к процедуре (ее вызову), начинают выполняться операторы, входящие в нее, после выполнения последнего из них управление автоматически возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно после оператора вызова процедуры.
Для наглядности это можно проиллюстрировать следующим рисунком:
ОСНОВНАЯ (ГОЛОВНАЯ) ПРОГРАММА |
ВЫЗОВ ПРОЦЕДУРЫ |
ПРОЦЕДУРА |
ПРОДОЛЖЕНИЕ ПРОГРАММ |
. |
. |
. |
END |
Рис. 4.2.5. Схема взаимосвязи головной программы и |
процедуры. |
Следует отметить, что данная схема односторонне демонстрирует структуру головной программы и процедуру. Существуют более сложные программы, состоящие из нескольких процедур, каждая из которых осуществляется многократное обращение (вызов) из головной программы. Для обмена информаций (данными) между основной программой и процедурой используется так называемые фактические и формальные параметры.