Informatika_2-y_semestr
.pdfИнформатика 2012г. |
41 |
Например: Дано N>0 измерений хi , представленных в виде файла st.dat вещественных чисел. Вычислить среднее значение М и стандартное отклонение S по формулам
program statistic; var f:file of real; M, S, Fz:real;
N:integer; begin
N:=0; M:=0; S:=0; assign(f, ‘st.dat’); reset;
repeat N:=N+1; Read(f, Fz); M:=M+Fz; S:=S+SQR(Fz); Until EoF(f); M:=M/N;
S:=SQRT(S/N-SQR(M)); Writeln(‘M=’, M); Writeln(‘S=’, S); Writeln;
end.
Файлы могут быть локальными в программе или внешними. Внешние файлы выводятся как параметры программы в заголовок.
Текстовые файлы
Файлы, компонентами которого являются литеры, называются текстовыми и описываются следующим образом:
type text=file of char;
text – стандартный идентификатор, такой как integer, real или char. Специальные процедуры работы над текстовыми файлами: Writeln(x); - завершение текущей строки текстового файла х; Readln(x); - переход к началу следующей строки текстового файла х; EoLN(x) – логическая функция, показывающая достигнут ли конец
текущей строки, текстового файла х. Если достигнут то возвращает значение true, в противном случае false.
Все выше перечисленные процедуры применимы только к текстовым файлам.
При обработке текстовых файлов используются следующие общие схемы:
Информатика 2012г. |
42 |
Просмотр текстового файла: Reset(f);
While NOT EoF(f) do begin
while NOT EoLN(f) do begin
read(f, ch);
обработка ch; end; readln(f);
end;
или
Reset(f); repeat repeat read(f, ch);
обработка ch; until EoLN(f); readln(f);
until EoF(f);
Создание текстового файла f: rewrite(f);
while создание файла do begin
while формирование строки do сформировать ch;
write(f, ch); end; writeLN(f); end;
Или
rewrite(f); repeat repeat
сформировать ch; write(f, ch);
until NOT формирование строки; writeLN(f);
until NOT создание файла;
Информатика 2012г. |
43 |
При создании текстового файла f с помощью процедуры writeLN(f) в конце каждой строки записывается разделитель строк, который при просмотре текстового файла распознается процедурой readLN(f).
Дополнительно для текстовых файлов определены следующие операции: Append(f) – аналогична rewrite, однако не очищает файл, а только
устанавливает текущий указатель файла в его коней.
Для перемещения указателя по текстовому файлу применимы следующие функции:
SeekEoLN(f) – производит поиск конца текущей строки. SeekEoF(f) – осуществляет поиск конца файла.
Пример: Копирование файла Х в файл Y с заменой последовательности подряд стоящих пробелов одним.
Program cop; var ch:char; x, y:text;
begin
assign(x, ‘x.txt’); assign(y,’y.txt’); reset(x); rewrite(y);
while NOT EoF(x) do begin
while NOT EoLN(x) do begin
read(x,ch); write(y, ch); if ch=’ ‘ then begin
repeat read(x, ch); until ch <> ‘ ‘; write(y, ch); end;
end;
readLN(x)
writeLN(y);
end;
end.
Строковые типы
Являются расширением языка Pascal. Строковый тип данных обобщает символьный массив, позволяет динамически изменять длину строки.
Строковый тип – множество символьных цепочек произвольной длины. Синтаксическая диаграмма:
|
|
|
|
|
Информатика 2012г. |
44 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Line=string[80]; var Myline: Line;
Youline:string[80];
Переменные в примере в качестве своего значения могут иметь любую последовательность символов произвольной длины от 0 до 80. Значение может быть присвоено или считано из файла.
Myline:=’пример строки’; Youline:=Myline; Read(f, Myline);
Максимально допустимая длина строки – 255 символов. При описании можно не указывать длину строки тогда она будет максимальной – 255.
Line:string;
Основное отличие строки от обычных символьных массивов состоит в том, что они могут динамически изменять свою длину.
Myline:=’строка’; Myline:=Myline+’стала длинее’;
Память под строку резервируется по максимальной длине и используется только часть этой памяти реально занятой символами. В строке N байтов предназначены для хранения символов строки, а один байт – для значения текущей длины этой строки. Структура строки string:
Это используют для определения текущей длины строки
Myline:=’QPRS’; writeLN(Ord(Myline[0])); // результат 4 Myline[0]:=2;
writeLn(Myline);// будет напечатано QP Myline:=’’;
writeLN(Ord(Myline[0])); // результат 0
Стандартная функция Length – определяет текущую длину строки. Операции сравнения над строками:
< <= > >= = <>
Действуют по правилу:
Информатика 2012г. |
45 |
1.Более короткая строка всегда меньше более длиной.
2.Если длины строк равны, производится поэлементное сравнение
символов.
Если при присвоении длина строки меньше чем длина строковой константы производится обрубание строки
var str:string[5]; begin
str:=’строка была длинна’; writeLN(str);
Доступ к отдельным элементам строки производится аналогично доступу
кэлементам одномерного массива. Но всегда необходимо учитывать текущую длину строки. Например:
var str:string[26]; i:integer;
begin str:=’A’;
for i:=1 to 26 do str[i]:=Chr(Ord(‘A’)+i-1); writeLn(str);
end.
Результат выполнения программы символ А. Правильная следующая программа
var str:string[26]; i:integer;
begin str:=’A’;
for i:=1 to 26 do str:=str+Chr(Ord(‘A’)+i-1); writeLn(str);
end.
Процедуры и функции
Современный подход к программированию поощряет явное оформление в виде подпрограммы любого достаточно самостоятельного и законченного программного фрагмента. Подпрограмма – это элементарное средство повышения уровня языка.
При описании подпрограммы в общем случае необходимо задать три основных компоненты:
1. Интерфейс подпрограммы, т.е. информацию необходимую для ее вызова (активации);
Информатика 2012г. |
46 |
2.Локальный контекст подпрограммы: совокупность описаний (рабочих) объектов, с которыми осуществляются действия;
3.Собственно действия (операторы), составляющие смысл подпрограммы. Интерфейс подпрограммы сосредоточен в заголовке. Описание локальных
объектов и операторы (алгоритм) составляют внутреннюю часть подпрограммы
иимеют синтаксис блока.
Вязыке Pascal имеются два вида подпрограмм: - процедуры и функции. Процедуры – служат для задания совокупности действий, направленных на изменение внешней по отношению к ним программной обстановки. Вызов процедуры реализуется оператором процедуры. Этот оператор задает выполнение операторов, определенных в теле процедуры. После выполнения процедуры управление передается на оператор, следующий за оператором процедуры. Вызов процедуры может сопровождаться передачей значений фактических параметров, если в определении процедуры был указан список соответствующих формальных параметров.
Синтаксис
Смысл функций заключается в первую очередь в том, чтобы определить алгоритм вычисления нового значения некоторого простого или ссылочного типа. В этом отношении функции подобны выражениям. Вызов функции является одним из допустимых операндов выражения, обозначая в нем то значение, которое вычисляет функция.
Описание процедуры
Описание функции
Заголовок процедуры
Информатика 2012г. |
47 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Заголовок функции
Для функции необходимо указать тип возвращаемого функцией значения, которое задается после списка параметров и отделяется от него символом ‘:’ двоеточие. Пример:
procedure Swap(var X,Y: real); procedure Stop;
function GHJ(a, b:byte):byte;
Телом процедуры или функции, как правило, является блок. Имена объектов, описанных в блоке подпрограммы, считаются известными только в пределах данного блока. Это относится и к именам формальных параметров. Среди описаний блока могут содержатся описания процедур и/или функций. Pascal допускает наличие в подпрограмме вложенных подпрограмм, которые, в свою очередь, могут содержать свои вложенные подпрограммы.
Область действия имен в подпрограммах
Имена объектов, описанные в блоке подпрограммы, по определению считаются известными только в пределах данного блока. Это же относится к именам формальных параметров. Говорят, что формальные параметры и объекты, описанные в блоке подпрограммы, образуют собственный локальный контекст данного блока.
Схематически изобразить структуру блоков некоторой Pascal-программы можно следующим образом:
|
|
Информатика 2012г. |
48 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Буквой А – обозначим самый внешний блок программы; B и E – блоки подпрограмм, описанные во внешнем блоке А; С и D блоки, вложенные в подпрограмму В (то есть описанные в ней). Тогда доступ к объектам, описанным в различных блоках, производится по правилу:
1.Имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, включая и все вложенные блоки.
2.Имена объектов, описанных в блоке, должны быть уникальными в пределах данного блока и могут совпадать с именами объектов из других блоков.
3.Если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного в объемлющем блоке, то это последнее имя становится недоступным в данном блоке. Имя, описанное в блоке, экранирует (делается недоступным) одноименные объекты из блоков, объемлющих данный.
Объекты из А и В видимы в C и D. Имена из C,D и E видимы только в своих блоках. Имена из А известны во всех вложенных блоках. Объекты, описанные в самом внешнем блоке, называются глобальными. Локальные объекты – объекты блока вместе с объектами объемлющих блоков.
Механизм параметров
Информатика 2012г. |
49 |
В заголовке процедуры или функции может быть задан список формальных параметров. Каждый параметр, заданный в заголовке, считается локальным в данной подпрограмме. Идентификаторы формальных параметров можно считать условными обозначениями в теле подпрограммы тех реальных или ФАКТИЧЕСКИХ параметров, которые будут переданы в подпрограмму при ее вызове.
Синтаксическая диаграмма Список формальных параметров
Описание параметров
Тип параметра
Пример заголовков процедур и функций
Function MaxElem(A:Vector, n:byte):real; Procedure Sum(A, B: Matrix; var C:Matrix);
Типы формальных параметров должны обязательно обозначатся идентификаторами. Например следующая запись недопустима:
Procedure Incorrect(var A:array[1..10] of byte);
Если необходимо передать в подпрограмму параметр с типом, определяемым программистом, следует воспользоваться его идентификатором:
type MYArray= array[1..10] of byte;
……………………….
procedure correct(var A:MYArray);
Информатика 2012г. |
50 |
В языке Pascal различают четыре вида формальных параметров: параметрызначения, параметры-переменные, параметры-процедуры, параметры-функции. В последних двух случаях фактическими параметрами являются идентификаторы процедур и идентификаторы функций соответственно.
Параметры-значения
Данный параметр является обычной локальной переменной в пределах подпрограммы. Начальное значение параметра автоматически устанавливается равным значению соответствующего фактического параметра, заданного при вызове подпрограммы. Внутри подпрограммы возможны любые действия с данным формальным параметром, но любые значения никак не отражаются на значениях переменных вне программы.
Например: program fur; var A,B:real
procedure SumSq(X, Y:real); begin
X:=X*X;
Y:=Y*Y;
writeln(‘Сумма квадратов=’, X+Y); end;
begin A:=1.34; B:=8.95;
SumSq(A, B); end.
Параметры-переменные
Указываются заданием служебного слова var перед их идентификаторами в списке формальных параметров. Этот способ передачи параметров используется, когда надо передать некоторое значение в точку вызова подпрограммы. Например:
program gwer;
procedure SumS(X, Y:real; var Sum, Sub:real); begin
Sum:=X*X+Y*Y;
Sub:=X*X-Y*Y; end;
var A,B:real; SA, SB:real;
Begin
A:=45.87;