Представление текстовой информации в компьютере. Структура процедур и функций в Паскале. Обработка строк средствами языка Паскаль.

 

 

Представление текстовой информации в компьютере.

В настоящее время од­ним из самых массовых приложений ЭВМ является работа с тек­стами. В информатике под текстом понимается любая последовательность символов из определенно­го алфавита. Будем называть символьным алфави­том компьютера множество символов, используемых на ЭВМ для внешнего представления текстов. Алфавит компьютера включает в себя 256 символов, каждый символ занимает 1 байт памяти.

Так как один символ из алфавита мощнос­тью 256 несет 8 бит = 1 байт, информации, потому что 256 = 28. Но поскольку всякая информация представляется в памяти ЭВМ в двоичном виде, следовательно, каждый символ представляется 8-­разрядным двоичным кодом. Существует 256 всевозможных 8-раз­рядных комбинаций, составленных из двух цифр 0 и 1 (т.е. число размещений из 2 по 8, или 28): от 00000000 до 11111111. Удобство побайтового кодирования символов очевидно, поскольку байт - наименьшая адресуемая часть памяти и, следовательно, процессор может обратиться к каждому символу отдельно, выполняя обработку текста. С другой стороны, 256 символов - это вполне достаточное количество для представ­ления самой разнообразной символьной информации.

Таблица кодировки - это стандарт, ставящий в соответствие каждому сим­волу алфавита свой порядковый номер. Наименьший номер - 0, наибольший - 255. Двоичный код символа - это его порядковый номер в двоичной системе счисления. Таким образом, таблица кодировки устанавливает связь между внешним символьным алфавитом компьютера и внутренним двоичным представлением. Международным стандартом для персональных компьютеров стала таблица ASCII. На практике можно встретиться и с другой таблицей - КОИ-8 (Код Обмена Информацией), которая исполь­зуется, например, в глобальных компьютерных сетях, на ЭВМ, работающих под управлением операционной системы Unix.

Таблица кода ASCII делится на две части. Международным стандартом является лишь первая половина таблицы, т.е. символы с номерами от 0 до 127. Сюда входят строчные и прописные буквы латинского алфавита, десятичные цифры, знаки препинания, всевозможные скобки, коммерческие и другие символы. Символы с номерами от 0 до 31 принято называть управляющими. Их функция - управление процессом вывода текста на экран или печать, подача звукового сиг­нала, разметка текста и т.п. Символ номер 32 - пробел, т. е. пус­тая позиция в тексте. Все остальные отражаются определенными знаками. Буквы латинского алфавита и цифры расположены в лек­сикографическом порядке. На этом принципе основана возможность сор­тировки символьной информации.

Вторая половина кодовой таблицы может иметь различные ва­рианты. В первую очередь, она используется для размещения на­циональных алфавитов, отличных от латинского. Поскольку для кодировки русского алфавита - кириллицы, применяются раз­ные варианты таблиц, то часто возникают проблемы с переносом русского текста с одного компьютера на другой, из одной про­граммной системы в другую. Таб­лица кодировки символов 128-255 называется кодовой страницей, и каждый её вариант имеет свой номер. Так, например, в MS-­DOS используется кодовая страница номер 866, а в Windows ­номер 1251.

Проблема стандартизации символьного кодирования ре­шается введением нового международного стандарта, который называется Unicode. Это 16-разрядеая кодировка, т.е. в ней на каждый символ отводится 2 байта памяти. При этом объём занимаемой памяти увеличивается в два раза. Но зато такая кодовая таблица допускает включение до 216 = 65 536 символов. В неё можно внести всевозможные национальные алфавиты.

 

 

 

Структура процедур и функций в Паскале.

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

Процедуры и функции используются в тех случаях, когда:

Описание процедур и функций располагается в программе в разделе описаний (после описания переменных в разделе VAR). Сами описания не означают выполнения действий. Действия, предусмотренные процедурой или функцией, выполняются при вызове процедуры или функции из основного блока программы. 

Описание функции:              function <имя> (<список параметров>):<тип>; 

                                <разделы локальных описаний>; 

                                <раздел операторов (тело функции)>; 

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

Пример: function fact(n:byte):real; function mm(a,b:real;c:byte):integer;

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

Пример: F:=factorial(5); T:=factorial(2)-7; M:=factorial(n); P:=mm(d,c,4);

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

<имя функции>:=<выражение>;

 Этот оператор определяет значение, которое будет возвращено функцией в точку ее вызова. 

Пример. Найти максимальное из 4-х чисел. 

 

         Program max_4;

         uses crt;

         var a,b,c,d,m: integer;

         function max_2(x,y:integer):integer;

            var max:integer;

         begin if x>y then max:=x else max:=y; max_2:=max; end;

      Begin

         clrscr; readln(a, b, c, d);

         m:=max_2(a,b); m:=max_2(m,c); m:=max_2(m,d);

      (или m:=max_2(max_2(max_2(a,b), c), d);)

         writeln(m); End.

 

Описание процедуры:         procedure <имя> [(<список параметров>[; var <параметр>])]; 

<разделы локальных описаний>; 

<раздел операторов (тело процедуры)>; 

где <имя> - идентификатор процедуры (те же ограничения, что и для функции); <список параметров> - список аргументов процедуры с указанием их типов (список параметров-значений); var <параметр> - имя параметра-переменной, т.е. той переменной, значение которой будет возвращено в точку вызова процедуры.

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

Пример.  Найти максимальное из 4-х чисел. 

Program max_4;

         uses crt;

         var a,b,c,d,m: integer;

         procedure max_2(x,y:integer; var max:integer);

         begin if x>y then max:=x else max:=y; end;

      Begin

         clrscr; readln(a, b, c, d);

         max_2(a,b,m); max_2(m,c,m); max_2(m,d,m); writeln(m); End.

 

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

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

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

Параметры процедур и функций. Имена переменных, перечисленных в заголовке процедуры (функции), носят название формальных параметров. Они служат для обозначения тех данных, с которыми процедура (функция) будет работать после вызова. Процедура (функция) вызывается главной программой или другой процедурой (функцией). Обращение к процедуре или функции называется точкой вызова процедуры (функции). При вызове необходимо задать значения параметров, с которыми будет работать процедура (функция). Эти значения называются фактическими параметрами. Соответствующие друг другу формальные и фактические параметры должны принадлежать одному и тому же типу. При вызове процедуры необходимо знать способ подстановки фактических параметров: 1) подстановка значения или 2) подстановка переменной. 

Происходит подстановка значения, если при описании процедуры перед именем параметра нет слова VAR. Тогда в процедуру вместо формальных параметров ставятся значения фактических параметров. Это означает, что происходит присваивание значений фактических параметров формальным параметрам. Затем все действия внутри процедуры проделываются над формальными параметрами. После выполнения процедуры происходит возврат в основную программу, но входящие фактические параметры не меняют своего значения после выполнения процедуры.

Если мы хотим, чтобы процедура изменяла значение входящих фактических параметров, то мы должны описывать соответствующие им формальные параметры как параметры-переменные, а не параметры-значения (в описании процедуры перед именем параметра должно стоять слово VAR). В этом случае, в процедуру вместо формальных параметров при её вызове будут подставляться сами фактические параметры, и все действия, описанные внутри процедуры, будут проделываться над ними. Поэтому после выхода из процедуры значения фактических параметров изменятся.

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

 

Обработка строк в Паскале – см. вопрос №17

Hosted by uCoz